From 2a2511d05ae0761aa33f9de98afa7d6158786a9d Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Thu, 19 Oct 2023 12:51:33 +0100 Subject: [PATCH 01/58] Runner script (#1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Runner script Allows image building, kurtosis ethereum-package starting and stopping using the generated image * feat: update geth builder overview dashboard Created a Go script that follows the following API and is expected to exist in ./scripts inside builder repo: Main features: - Runs on Windows and Linux using Go run - Does progressive command log printing - Allows to set ImageTag and provide ImageArgs when building starting the network Example commands: - build ../ repo into docker image go run emulate_network.go build - run network and see deployment progress go run emulate_network.go run -n=enclaveName -k="C:/Users/olegj/kurtosis.exe” - stop network go run emulate_network.go stop -n=enclaveName -k="C:/Users/olegj/kurtosis.exe” Co-authored-by: Carlos Bermudez Porto --- .gitignore | 3 +- scripts/dind/Dockerfile.kurtosis_dind | 20 + scripts/emulate_network.go | 236 ++ scripts/kurtosis/data/grafana/dashboard.json | 3643 ++++++++++++++++++ scripts/kurtosis/kurtosis.yml | 1 + scripts/kurtosis/main.star | 11 + scripts/kurtosis/network_params.json | 69 + scripts/readme.md | 85 + 8 files changed, 4067 insertions(+), 1 deletion(-) create mode 100644 scripts/dind/Dockerfile.kurtosis_dind create mode 100644 scripts/emulate_network.go create mode 100644 scripts/kurtosis/data/grafana/dashboard.json create mode 100644 scripts/kurtosis/kurtosis.yml create mode 100644 scripts/kurtosis/main.star create mode 100644 scripts/kurtosis/network_params.json create mode 100644 scripts/readme.md diff --git a/.gitignore b/.gitignore index 5a42a48854..40cda88230 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,5 @@ profile.cov **/yarn-error.log /ofac_blacklist.json -/blacklist.json \ No newline at end of file +/blacklist.json +scripts/kurtosis/network_params_tmp.json diff --git a/scripts/dind/Dockerfile.kurtosis_dind b/scripts/dind/Dockerfile.kurtosis_dind new file mode 100644 index 0000000000..87137dd36c --- /dev/null +++ b/scripts/dind/Dockerfile.kurtosis_dind @@ -0,0 +1,20 @@ +FROM mcr.microsoft.com/devcontainers/base:bullseye + +# Get Go +RUN apt install git curl tar && \ + curl https://dl.google.com/go/go1.21.3.linux-amd64.tar.gz -o go.tar.gz && \ + tar -C /usr/local -xzf go.tar.gz && \ + rm go.tar.gz + +# Set up Go environment variables +ENV GOPATH /go +ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH +RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" + +# Install Kurtosis +RUN echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | tee /etc/apt/sources.list.d/kurtosis.list +RUN sudo apt update && \ + sudo apt install kurtosis-cli + +WORKDIR /geth +COPY ../ . diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go new file mode 100644 index 0000000000..b2df390bc8 --- /dev/null +++ b/scripts/emulate_network.go @@ -0,0 +1,236 @@ +package main + +import ( + "bufio" + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "os" + "os/exec" + "runtime" + "sync" +) + +func build(imageTag string, buildDir string, buildDockerfilePath string) { + cmd := "docker build" + + " -t " + imageTag + + " -f " + buildDockerfilePath + + " " + buildDir + runCommand(cmd) +} + +func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolder string, filename ...string) { + // Determine the filename. If not provided, default to "network_params.json". + var file string + if len(filename) > 0 { + file = filename[0] + } else { + file = "network_params.json" + } + + // Read the file + fileContent, err := ioutil.ReadFile(file) + if err != nil { + fmt.Println("Error reading the file:", err) + return + } + + var data map[string]interface{} + err = json.Unmarshal(fileContent, &data) + if err != nil { + fmt.Println("Error unmarshalling the JSON:", err) + return + } + + // Navigate to the participants array + if participants, ok := data["participants"].([]interface{}); ok { + for _, participant := range participants { + p, ok := participant.(map[string]interface{}) + if !ok { + fmt.Println("Error casting participant to map") + continue + } + + // Check if the participant is the one with "el_client_type": "geth" + if p["el_client_type"] == "REPLACE_WITH_BUILDER" { + p["el_client_type"] = "geth" + // Modify the participant entry as needed + p["el_client_image"] = imageTag + + if extraParamsInterface, ok := p["el_extra_params"].([]interface{}); ok { + var extraParams []string + for _, paramInterface := range extraParamsInterface { + if param, ok := paramInterface.(string); ok { + extraParams = append(extraParams, param) + } else { + fmt.Println("Error: el_extra_params contains a non-string value") + } + } + extraParams = append(extraParams, imageArgs) + p["el_extra_params"] = extraParams + } else { + fmt.Println("Error: el_extra_params is not an array of strings") + } + + fmt.Println("Detected and updated BUILDER config: ", p) + break // Exit the loop once the participant is found and updated + } + } + } else { + fmt.Println("Participants field not found or not an array") + return + } + + // Marshal the map back to JSON + modifiedContent, err := json.MarshalIndent(data, "", " ") + if err != nil { + fmt.Println("Error marshalling the map back to JSON:", err) + return + } + + // Print out the resulting string + fmt.Println(string(modifiedContent)) + + // Save the modified content back to the file + err = ioutil.WriteFile(kurtosisNetworkScriptFolder+"/network_params_tmp.json", modifiedContent, os.ModePerm) + if err != nil { + fmt.Println("Error writing the modified content to the file:", err) + } +} + +func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, kurtosisNetworkScriptFolder string, kurtosisNetConfigPath string) { + /* params := map[string]interface{}{ + "image_tag": imageTag, + "image_args": imageArgs, + "enclave_name": enclaveName, + "max_steps": maxSteps, + "kurtosis_path": kurtosisPath, + "kurtosis_network_config": kurtosisNetworkScriptFolder, + }*/ + update_config(imageTag, imageArgs, kurtosisNetworkScriptFolder, kurtosisNetConfigPath) + + cmd := fmt.Sprintf("%s run --enclave %s %s", kurtosisPath, enclaveName, kurtosisNetworkScriptFolder) + runCommand(cmd) +} + +func stop(kurtosisPath, enclaveName string) { + if enclaveName == "" { + fmt.Println("Error: enclave name must be specified.") + cmd := fmt.Sprintf("%s enclave ls", kurtosisPath) + runCommand(cmd) + return + } + cmd := fmt.Sprintf("%s enclave rm -f %s", kurtosisPath, enclaveName) + runCommand(cmd) +} + +func runCommand(cmd string) { + var command *exec.Cmd + if runtime.GOOS == "windows" { + fmt.Println("Running on Windows:", cmd) + command = exec.Command("cmd", "/C", cmd) + } else { + fmt.Println("Running:", cmd) + command = exec.Command("sh", "-c", cmd) + } + + stdoutPipe, err := command.StdoutPipe() + if err != nil { + fmt.Printf("Error obtaining stdout: %v\n", err) + return + } + + stderrPipe, err := command.StderrPipe() + if err != nil { + fmt.Printf("Error obtaining stderr: %v\n", err) + return + } + + err = command.Start() + if err != nil { + fmt.Printf("Command start failed: %v\n", err) + return + } + + var wg sync.WaitGroup + wg.Add(2) + + go func() { + defer wg.Done() + scanner := bufio.NewScanner(stdoutPipe) + for scanner.Scan() { + fmt.Println(scanner.Text()) + } + }() + + go func() { + defer wg.Done() + scanner := bufio.NewScanner(stderrPipe) + for scanner.Scan() { + fmt.Println(scanner.Text()) + } + }() + + wg.Wait() + + err = command.Wait() + if err != nil { + fmt.Printf("Command execution failed: %v\n", err) + } +} + +func help() { + fmt.Println(`Emulate Network script +Available commands: +- build + - -t : Image tag (optional, default: "flashbots/builder:dev") + - -d : Image Build directory (optional, default: "..") + - -f : Build dockerfile path (optional, default: "../Dockerfile") +- run + - -t : Image tag (optional, default: "flashbots/builder:dev") + - -n : Enclave name (optional, default: "explorer") + - -a : Additional builder arguments (optional) + - -s : Max steps (optional, default: -1) + - -k : Kurtosis path (optional, default: "kurtosis") + - -c : Kurtosis network config (optional, default: "./kurtosis") +- stop + - -k : Kurtosis path (optional, default: "kurtosis") + - -n : Enclave name (required) +`) +} + +func main() { + flagSet := flag.NewFlagSet("", flag.ExitOnError) + imageTag := flagSet.String("t", "flashbots/builder:dev", "Image tag for build or run.") + enclaveName := flagSet.String("n", "explorer", "Enclave name for run or stop.") + kurtosisPath := flagSet.String("k", "kurtosis", "Kurtosis path for run or stop.") + + if len(os.Args) < 2 { + fmt.Println("Please provide a command. Available commands are: build, run, stop.") + return + } + + switch os.Args[1] { + case "build": + buildDir := flagSet.String("d", "..", "Build directory.") + buildDockerfilePath := flagSet.String("f", "../Dockerfile", "Build dockerfile path.") + flagSet.Parse(os.Args[2:]) + build(*imageTag, *buildDir, *buildDockerfilePath) + case "run": + imageArgs := flagSet.String("a", "", "Image arguments for run.") + maxSteps := flagSet.Int("s", -1, "Max steps for run.") + kurtosisNetworkConfigScriptFolder := flagSet.String("f", "./kurtosis", "Kurtosis network config for run.") + kurtosisNetConfigPath := flagSet.String("c", "./kurtosis/network_params.json", "Kurtosis network params "+ + "configuration path. Note that run command modifies it with provided imageTag and imageArgs.") + flagSet.Parse(os.Args[2:]) + run(*imageTag, *imageArgs, *enclaveName, *maxSteps, *kurtosisPath, *kurtosisNetworkConfigScriptFolder, *kurtosisNetConfigPath) + case "stop": + flagSet.Parse(os.Args[2:]) + stop(*kurtosisPath, *enclaveName) + case "help": + help() + default: + fmt.Println("Invalid command. Available commands are: build, run, stop.") + } +} diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json new file mode 100644 index 0000000000..fc2463f0b2 --- /dev/null +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -0,0 +1,3643 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Geth metrics overview dashboard.", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 14053, + "graphTooltip": 1, + "id": 3, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 122, + "panels": [], + "title": "Builder", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 1 + }, + "id": 124, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(miner_bundle_simulate_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "legendFormat": "success {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(miner_bundle_simulate_failed_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "legendFormat": "fail {{service}}", + "range": true, + "refId": "B" + } + ], + "title": "Bundle Simulations", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 1 + }, + "id": 125, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "legendFormat": "build {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "legendFormat": "merge {{service}}", + "range": true, + "refId": "C" + } + ], + "title": "Blocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Gwei", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 1 + }, + "id": 126, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", service=~\"$instance\"}[$rate]) / 1000000000", + "hide": false, + "legendFormat": "build {{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Profit", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 128, + "panels": [], + "title": "Simulation", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 8 + }, + "id": 130, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(rpc_duration_eth_callBundle_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "legendFormat": "success {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(rpc_duration_eth_callBundle_failure_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "hide": false, + "legendFormat": "failure {{service}}", + "range": true, + "refId": "B" + } + ], + "title": "eth_callBundle calls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "ms", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 8 + }, + "id": 132, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rpc_duration_eth_callBundle_success{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"} / 1000", + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Durations of successful eth_callBundle calls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "ms", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 8 + }, + "id": 133, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rpc_duration_eth_callBundle_failure{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"} / 1000", + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Durations of failed eth_callBundle calls", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 135, + "panels": [], + "title": "Validation", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 15 + }, + "id": 136, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "legendFormat": "success {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_failure_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "hide": false, + "legendFormat": "failure {{service}}", + "range": true, + "refId": "B" + } + ], + "title": "flashbots_validateBuilderSubmissionV2 calls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "ms", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 15 + }, + "id": 137, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}/1000", + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Durations of successful flashbots_validateBuilderSubmissionV2 calls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "ms", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 15 + }, + "id": 138, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"} / 1000", + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Durations of failed flashbots_validateBuilderSubmissionV2 calls", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 82, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "refId": "A" + } + ], + "title": "System", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 22 + }, + "hiddenSeries": false, + "id": 106, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "system_cpu_sysload{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "system {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "system_cpu_syswait{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "iowait {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "system_cpu_procload{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "geth {{service}}", + "range": true, + "refId": "C" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "CPU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 22 + }, + "hiddenSeries": false, + "id": 86, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(system_memory_allocs{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "alloc {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "system_memory_used{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "used {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "system_memory_held{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "held {{service}}", + "range": true, + "refId": "C" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 22 + }, + "hiddenSeries": false, + "id": 85, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(system_disk_readbytes{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "read {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(system_disk_writebytes{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "write {{service}}", + "range": true, + "refId": "B" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Disk", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 75, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "refId": "A" + } + ], + "title": "Network", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 29 + }, + "hiddenSeries": false, + "id": 96, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(p2p_ingress{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ingress {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(p2p_egress{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "egress {{service}}", + "range": true, + "refId": "C" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Traffic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 29 + }, + "hiddenSeries": false, + "id": 77, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "p2p_peers{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "peers {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(p2p_dials{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "dials {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(p2p_serves{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "serves {{service}}", + "range": true, + "refId": "C" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Peers", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:93", + "format": "none", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:94", + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 4, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "refId": "A" + } + ], + "title": "Blockchain", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(252, 252, 252)", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 36 + }, + "id": 108, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "10.1.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "max(chain_head_header{client_name=~\"$client_name\", service=~\"$instance\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Latest header", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "stepAfter", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 18, + "x": 6, + "y": 36 + }, + "id": 110, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.4.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_head_header{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "header {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_head_receipt{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "receipt {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_head_block{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "block {{service}}", + "range": true, + "refId": "C" + } + ], + "title": "Chain head", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 255, 255)", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 39 + }, + "id": 111, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "10.1.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "max(chain_head_receipt{client_name=~\"$client_name\", service=~\"$instance\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Latest receipt", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 255, 255)", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 42 + }, + "id": 109, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "10.1.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "max(chain_head_block{client_name=~\"$client_name\", service=~\"$instance\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Latest block", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 255, 255)", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 45 + }, + "id": 113, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "10.1.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "txpool_pending{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Executable transactions", + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 18, + "x": 6, + "y": 45 + }, + "hiddenSeries": false, + "id": 116, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "txpool_pending{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "txpool_queued{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "txpool_local{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "local {{service}}", + "range": true, + "refId": "C" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Transaction pool", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 255, 255)", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 48 + }, + "id": 114, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "10.1.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "txpool_queued{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Gapped transactions", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 255, 255)", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 51 + }, + "id": 115, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "10.1.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "txpool_local{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Local transactions", + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 54 + }, + "hiddenSeries": false, + "id": 112, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_execution{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "execution (q=$quantile) {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_validation{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "validation (q=$quantile) {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_write{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "commit (q=$quantile) {{service}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_account_reads{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account read (q=$quantile) {{service}}", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_account_updates{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account update (q=$quantile) {{service}}", + "range": true, + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_account_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account hashe (q=$quantile) {{service}}", + "range": true, + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_account_commits{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account commit (q=$quantile) {{service}}", + "range": true, + "refId": "G" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_storage_reads{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage read (q=$quantile) {{service}}", + "range": true, + "refId": "H" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_storage_updates{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage update (q=$quantile) {{service}}", + "range": true, + "refId": "I" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_storage_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage hashe (q=$quantile) {{service}}", + "range": true, + "refId": "J" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "chain_storage_commits{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage commit (q=$quantile) {{service}}", + "range": true, + "refId": "K" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Block processing", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 65 + }, + "hiddenSeries": false, + "id": 117, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_valid{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "valid {{service}}", + "range": true, + "refId": "K" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_invalid{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "invalid {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_underpriced{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "underpriced {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_pending_discard{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable discard {{service}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_pending_replace{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable replace {{service}}", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_pending_ratelimit{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable ratelimit {{service}}", + "range": true, + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_pending_nofunds{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable nofunds {{service}}", + "range": true, + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_queued_discard{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped discard {{service}}", + "range": true, + "refId": "G" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_queued_replace{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped replace {{service}}", + "range": true, + "refId": "H" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_queued_ratelimit{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped ratelimit {{service}}", + "range": true, + "refId": "I" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(txpool_queued_nofunds{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped nofunds {{service}}", + "range": true, + "refId": "J" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Transaction propagation", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 75 + }, + "id": 17, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "refId": "A" + } + ], + "title": "Database", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 76 + }, + "hiddenSeries": false, + "id": 35, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(eth_db_chaindata_disk_read{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb read {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(eth_db_chaindata_disk_write{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb write {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(eth_db_chaindata_ancient_read{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient read {{service}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(eth_db_chaindata_ancient_write{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient write {{service}}", + "range": true, + "refId": "D" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Data rate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 76 + }, + "hiddenSeries": false, + "id": 118, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "eth_db_chaindata_disk_read{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb read {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "eth_db_chaindata_disk_write{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb write {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "eth_db_chaindata_ancient_read{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient read {{service}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "eth_db_chaindata_ancient_write{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient write {{service}}", + "range": true, + "refId": "D" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Session totals", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 76 + }, + "hiddenSeries": false, + "id": 119, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "eth_db_chaindata_disk_size{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "eth_db_chaindata_ancient_size{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient {{service}}", + "range": true, + "refId": "A" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Storage size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 84 + }, + "id": 37, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "06O6Z894k" + }, + "refId": "A" + } + ], + "title": "Trie Stats", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 85 + }, + "hiddenSeries": false, + "id": 120, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(trie_memcache_clean_read{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "hit {{service}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(trie_memcache_clean_write{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "miss {{service}}", + "range": true, + "refId": "B" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Clean cache", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 85 + }, + "hiddenSeries": false, + "id": 56, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.2", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(trie_memcache_gc_size{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gc {{service}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(trie_memcache_flush_size{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "overflow {{service}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(trie_memcache_commit_size{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "commit {{service}}", + "range": true, + "refId": "A" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Dirty cache", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + } + ], + "refresh": "10s", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "PBFA97CFB590B2093" + }, + "hide": 0, + "includeAll": false, + "label": "datasource", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "definition": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", + "hide": 1, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [], + "query": { + "query": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "0.5", + "value": "0.5" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "quantile", + "options": [ + { + "selected": true, + "text": "0.5", + "value": "0.5" + }, + { + "selected": false, + "text": "0.75", + "value": "0.75" + }, + { + "selected": false, + "text": "0.95", + "value": "0.95" + }, + { + "selected": false, + "text": "0.99", + "value": "0.99" + }, + { + "selected": false, + "text": "0.999", + "value": "0.999" + }, + { + "selected": false, + "text": "0.9999", + "value": "0.9999" + } + ], + "query": "0.5, 0.75, 0.95, 0.99, 0.999, 0.9999", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": true, + "text": "5m", + "value": "5m" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "rate", + "options": [ + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "2m", + "value": "2m" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + } + ], + "query": "1m, 2m, 5m", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "geth", + "value": "geth" + }, + "hide": 2, + "includeAll": false, + "label": "Client", + "multi": false, + "name": "client_name", + "options": [ + { + "selected": true, + "text": "geth", + "value": "geth" + } + ], + "query": "geth", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "Geth Builder Overview", + "uid": "FPpjH6Hik", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/scripts/kurtosis/kurtosis.yml b/scripts/kurtosis/kurtosis.yml new file mode 100644 index 0000000000..d41b667c79 --- /dev/null +++ b/scripts/kurtosis/kurtosis.yml @@ -0,0 +1 @@ +name: "github.com/flashbots/builder-startup-script" diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star new file mode 100644 index 0000000000..ba6d0a51b9 --- /dev/null +++ b/scripts/kurtosis/main.star @@ -0,0 +1,11 @@ +#Use: kurtosis.exe run --enclave explorer ./kurtosis/ '{"file_to_read": "./network_params.json"}' +#Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined + +eth_pkg = import_module( + "github.com/kurtosis-tech/ethereum-package/main.star@0.6.1" +) + +def run(plan, file_to_read = "network_params_tmp.json"): + inputs = json.decode(read_file(src=file_to_read)) + plan.print(inputs) + eth_pkg.run(plan, inputs) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json new file mode 100644 index 0000000000..dcbf9001ed --- /dev/null +++ b/scripts/kurtosis/network_params.json @@ -0,0 +1,69 @@ +{ + "mev_type": "full", + "participants": [ + { + "el_client_type": "nethermind", + "el_client_image": "nethermind/nethermind:1.21.0", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_log_level": "", + "cl_client_image": "sigp/lighthouse:v4.5.0", + "el_extra_params": [], + "beacon_extra_params": [ + "--always-prefer-builder-payload", + "--disable-peer-scoring" + ] + }, + { + "el_client_type": "REPLACE_WITH_BUILDER", + "el_client_image": "ethpandaops/flashbots-builder:main-45e865e", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "sigp/lighthouse:v4.5.0", + "cl_client_log_level": "", + "beacon_extra_params": [ + "--always-prepare-payload", + "--prepare-payload-lookahead", + "12000", + "--disable-peer-scoring" + ], + "el_extra_params": [ + "--builder", + "--builder.remote_relay_endpoint=http://mev-relay-api:9062", + "--builder.beacon_endpoints=http://cl-2-lighthouse-geth:4000", + "--builder.bellatrix_fork_version=0x30000038", + "--builder.genesis_fork_version=0x10000038", + "--builder.genesis_validators_root=GENESIS_VALIDATORS_ROOT_PLACEHOLDER", + "--miner.extradata=The_Dev_version_of_builder", + "--builder.algotype=greedy", + "--metrics.builder=true" + ], + "validator_count": 0, + "el_extra_env_vars": { + "BUILDER_TX_SIGNING_KEY": "0xef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" + } + } + ], + "network_params": {"capella_fork_epoch": 1, "seconds_per_slot": 12}, + "mev_params": { + "mev_flood_seconds_per_bundle": 13, + "launch_custom_flood": true, + "mev_flood_extra_args": ["--txsPerBundle=100"], + "mev_flood_image": "flashbots/mev-flood:0.0.9", + "mev_relay_image": "flashbots/mev-boost-relay:0.27", + "mev_boost_image": "flashbots/mev-boost:1.6", + "mev_builder_image": "flashbots/builder:latest" + }, + "additional_services": [ + "tx_spammer", + "blob_spammer", + "beacon_metrics_gazer", + "dora", + "prometheus_grafana" + ], + "tx_spammer_params": {"tx_spammer_extra_args": ["--txcount=100"]}, + "grafana_additional_dashboards": [ + "github.com/flashbots/builder-startup-script/data/grafana/dashboard.json", + "github.com/flashbots/builder-startup-script/data/grafana" + ] +} \ No newline at end of file diff --git a/scripts/readme.md b/scripts/readme.md new file mode 100644 index 0000000000..5561a1f3f1 --- /dev/null +++ b/scripts/readme.md @@ -0,0 +1,85 @@ +# Emulate Network script + +This README accompanies the `emulate_network.go` Go script, which uses Docker, Kurtosis, and the Kurtosis Ethereum-Package enclave to test builder performance. + +## Introduction + +This script streamlines and automates the process of (re-)building the current builder Docker image and interfacing with the Kurtosis platform. It offers a set of commands to assist developers in routine tasks, such as (re-)building Docker images and managing Kurtosis enclaves. + + +## Running in dev environment + +### Prerequisites + +Before using the script, ensure you have the following installed: + +1. **Go**: Ensure you have Go installed. Download and install it from [here](https://golang.org/dl/). + +2. **Docker**: The build process needs Docker. Make sure Docker is installed and running. Check out the [Docker website](https://www.docker.com/get-started) for installation instructions. + +3. **Kurtosis**: The script interfaces with the Kurtosis platform. Ensure `kurtosis` is installed and available in your PATH. Refer to [Kurtosis's official documentation](https://docs.kurtosistech.com/installation.html) for installation details. + +4. **ethereum-package**: This script utilizes a modified ethereum-package network configuration, which will be downloaded from [repo](github.com/kurtosis-tech/ethereum-package/) main brunch automatically. + +### How to Run + +To execute the script with Go, navigate to the directory containing the script and run: + +``` +go run emulate_network.go [OPTIONS] +``` + +Replace `` with one of the available commands and provide the necessary options. + +### Commands and Options +To run script `cd` into this (`./scripts`) folder. + +1. **build**: + - Purpose: Builds a Docker image of the builder. + - Options: + - `-t`: (Optional) Image tag for the Docker build. Defaults to `flashbots/builder:dev`. + - Example: + ``` + go run emulate_network.go build -t=test-builder + ``` + +2. **run**: + - Purpose: Prepares configurations and starts a Kurtosis enclave. + - Options: + - `-t`: (Optional) Image tag. Defaults to `flashbots/builder:dev`. + - `-n`: (Optional) Enclave name. Defaults to `explorer`. + - `-a`: (Optional) Additional builder arguments. + - `-s`: (Optional) Max steps (integer). Default `-1` for "unlimited". + - `-k`: (Optional) Path to `kurtosis` executable. Defaults to `kurtosis`. + - Example: + ``` + go run emulate_network.go run -t=imageTag -a=imageArgs -n=enclaveName -k=/path/to/kurtosis + ``` + +3. **stop**: + - Purpose: Stops an active Kurtosis enclave. + - Options: + - `-k`: (Optional) Path to `kurtosis` executable. Defaults to `kurtosis`. + - `-n`: (Required) Enclave name. + - Example: + ``` + go run emulate_network.go stop -k=/path/to/kurtosis -n=enclaveName + ``` + +4. **help**: + - Purpose: Display a summary of available commands and their options. + - Example: + ``` + go run emulate_network.go help + ``` + +## Known issues +### Kurtosis errors on network start +In case of system resource related errors or on windows docker restore after sleep Kurtosis may have trouble starting a new enclave. +1. Make sure you have no valuable containers up and running in enclaves or docker +2. To clean up Kurtosis call `kurtosis clean -a` +3. To clean up docker run `docker rm -vf $(docker ps -aq)` + + +## Running in Docker in Docker +See this note for refrence here From 00ba47b03a1d1028d567d2b34c2bbc4d2c364d36 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 19 Oct 2023 09:15:36 -0400 Subject: [PATCH 02/58] Update builder metrics flags --- scripts/kurtosis/network_params.json | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index dcbf9001ed..6e3c6bb6ed 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -36,7 +36,8 @@ "--builder.genesis_validators_root=GENESIS_VALIDATORS_ROOT_PLACEHOLDER", "--miner.extradata=The_Dev_version_of_builder", "--builder.algotype=greedy", - "--metrics.builder=true" + "--metrics.builder=true", + "--metrics.expensive=true" ], "validator_count": 0, "el_extra_env_vars": { @@ -44,15 +45,23 @@ } } ], - "network_params": {"capella_fork_epoch": 1, "seconds_per_slot": 12}, + "network_params": { + "capella_fork_epoch": 1, + "seconds_per_slot": 12 + }, "mev_params": { "mev_flood_seconds_per_bundle": 13, "launch_custom_flood": true, - "mev_flood_extra_args": ["--txsPerBundle=100"], + "mev_flood_extra_args": [ + "--txsPerBundle=100" + ], "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", - "mev_builder_image": "flashbots/builder:latest" + "mev_builder_image": "flashbots/builder:latest", + "mev_builder_extra_args": [ + "--metrics.expensive" + ] }, "additional_services": [ "tx_spammer", @@ -61,9 +70,12 @@ "dora", "prometheus_grafana" ], - "tx_spammer_params": {"tx_spammer_extra_args": ["--txcount=100"]}, + "tx_spammer_params": { + "tx_spammer_extra_args": [ + "--txcount=100" + ] + }, "grafana_additional_dashboards": [ - "github.com/flashbots/builder-startup-script/data/grafana/dashboard.json", - "github.com/flashbots/builder-startup-script/data/grafana" + "github.com/flashbots/builder-startup-script/data/grafana" ] } \ No newline at end of file From d0322672b07546f016f6c252ea276271d1c728d6 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 19 Oct 2023 12:52:49 -0400 Subject: [PATCH 03/58] fix: update metrics flags --- scripts/kurtosis/network_params.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 6e3c6bb6ed..fc4533c67c 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -36,8 +36,8 @@ "--builder.genesis_validators_root=GENESIS_VALIDATORS_ROOT_PLACEHOLDER", "--miner.extradata=The_Dev_version_of_builder", "--builder.algotype=greedy", - "--metrics.builder=true", - "--metrics.expensive=true" + "--metrics.builder", + "--metrics.expensive" ], "validator_count": 0, "el_extra_env_vars": { From b5b1d205439bd44eb29b9eab09c203e6b4cdfba6 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 19 Oct 2023 18:19:20 -0400 Subject: [PATCH 04/58] feat: update dashboard tooltips --- scripts/kurtosis/data/grafana/dashboard.json | 80 ++++++++------------ 1 file changed, 32 insertions(+), 48 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index fc2463f0b2..0f00b72632 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -26,7 +26,7 @@ "fiscalYearStartMonth": 0, "gnetId": 14053, "graphTooltip": 1, - "id": 3, + "id": 1, "links": [], "liveNow": false, "panels": [ @@ -67,7 +67,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -116,8 +115,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -174,7 +173,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -223,8 +221,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -282,7 +280,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -332,8 +329,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -391,7 +388,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -440,8 +436,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -496,7 +492,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -545,8 +540,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -589,7 +584,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -638,8 +632,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -695,7 +689,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -744,8 +737,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -800,7 +793,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -849,8 +841,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -893,7 +885,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -942,8 +933,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -1026,7 +1017,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1146,7 +1137,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1266,7 +1257,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1398,7 +1389,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1504,7 +1495,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1639,8 +1630,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(252, 252, 252)", - "value": null + "color": "rgb(252, 252, 252)" } ] }, @@ -1739,8 +1729,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] }, @@ -1841,8 +1830,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1919,8 +1907,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1997,8 +1984,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -2193,8 +2179,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -2271,8 +2256,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -3456,7 +3440,7 @@ "current": { "selected": false, "text": "Prometheus", - "value": "PBFA97CFB590B2093" + "value": "Prometheus" }, "hide": 0, "includeAll": false, From 141ce8e12c20cb8939712550a0ee1ed1e5c4a9a2 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 19 Oct 2023 18:29:55 -0400 Subject: [PATCH 05/58] feat: use ethereum package main branch --- scripts/kurtosis/main.star | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index ba6d0a51b9..af732fa683 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@0.6.1" + "github.com/kurtosis-tech/ethereum-package/main.star" ) def run(plan, file_to_read = "network_params_tmp.json"): From b8d791cd019f0701f38270314a6d705dfc284433 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Fri, 20 Oct 2023 10:04:07 -0400 Subject: [PATCH 06/58] feat: use version 0.6.1 with builder fix --- scripts/kurtosis/main.star | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index af732fa683..2db0077e90 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star" + "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/builder-metrics" ) def run(plan, file_to_read = "network_params_tmp.json"): From 124cd5587c5e5881f84c444367b45788146274f6 Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Mon, 23 Oct 2023 05:11:48 +0100 Subject: [PATCH 07/58] updated build script new docker debug file --- scripts/Dockerfile.debug | 34 ++++++++++++++++++++++++++++++++++ scripts/emulate_network.go | 4 ++-- 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 scripts/Dockerfile.debug diff --git a/scripts/Dockerfile.debug b/scripts/Dockerfile.debug new file mode 100644 index 0000000000..42b8ba628d --- /dev/null +++ b/scripts/Dockerfile.debug @@ -0,0 +1,34 @@ +# Support setting various labels on the final image +ARG COMMIT="" +ARG VERSION="" +ARG BUILDNUM="" + +# Build Geth in a stock Go builder container +FROM golang:1.20-alpine as builder + +RUN apk add --no-cache gcc musl-dev linux-headers git + +# Get dependencies - will also be cached if we won't change go.mod/go.sum +COPY go.mod /go-ethereum/ +COPY go.sum /go-ethereum/ +RUN cd /go-ethereum && go mod download + +ADD . /go-ethereum + +RUN cd /go-ethereum && go build -o ./build/bin/geth -gcflags=all='-N -l' -v ./cmd/geth + +RUN go install github.com/go-delve/delve/cmd/dlv@latest +# Pull Geth into a second stage deploy alpine container +FROM alpine:latest + +RUN apk add --no-cache ca-certificates +COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ +COPY --from=builder /go/bin/dlv / +EXPOSE 8545 8546 30303 30303/udp 40000 +ENTRYPOINT ["/dlv", "--listen=:40000", "--headless=true", "--continue", "--accept-multiclient", "--api-version=2", "exec", "/usr/local/bin/geth"] +# Add some metadata labels to help programatic image consumption +ARG COMMIT="" +ARG VERSION="" +ARG BUILDNUM="" + +LABEL commit="$COMMIT" version="$VERSION" buildnum="$BUILDNUM" diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index b2df390bc8..401c1506fd 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -186,7 +186,7 @@ Available commands: - build - -t : Image tag (optional, default: "flashbots/builder:dev") - -d : Image Build directory (optional, default: "..") - - -f : Build dockerfile path (optional, default: "../Dockerfile") + - -f : Build dockerfile path (optional, default: "./Dockerfile.debug") - run - -t : Image tag (optional, default: "flashbots/builder:dev") - -n : Enclave name (optional, default: "explorer") @@ -214,7 +214,7 @@ func main() { switch os.Args[1] { case "build": buildDir := flagSet.String("d", "..", "Build directory.") - buildDockerfilePath := flagSet.String("f", "../Dockerfile", "Build dockerfile path.") + buildDockerfilePath := flagSet.String("f", "./Dockerfile.debug", "Build dockerfile path.") flagSet.Parse(os.Args[2:]) build(*imageTag, *buildDir, *buildDockerfilePath) case "run": From 4b58a8f2006da7805393bf20cbd51643014b891c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Tue, 24 Oct 2023 14:58:06 +0200 Subject: [PATCH 08/58] Increase the number of generated transactions. Update custom flood config (#2) * Increase the number of generated transactions. Update custom flood config --- scripts/kurtosis/network_params.json | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index dcbf9001ed..e120798410 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -36,7 +36,7 @@ "--builder.genesis_validators_root=GENESIS_VALIDATORS_ROOT_PLACEHOLDER", "--miner.extradata=The_Dev_version_of_builder", "--builder.algotype=greedy", - "--metrics.builder=true" + "--metrics.builder=true" ], "validator_count": 0, "el_extra_env_vars": { @@ -44,11 +44,15 @@ } } ], - "network_params": {"capella_fork_epoch": 1, "seconds_per_slot": 12}, + "network_params": { + "capella_fork_epoch": 1, + "seconds_per_slot": 12 + }, "mev_params": { "mev_flood_seconds_per_bundle": 13, - "launch_custom_flood": true, - "mev_flood_extra_args": ["--txsPerBundle=100"], + "mev_flood_extra_args": [ + "--txsPerBundle=250" + ], "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", @@ -57,13 +61,21 @@ "additional_services": [ "tx_spammer", "blob_spammer", + "custom_flood", "beacon_metrics_gazer", "dora", "prometheus_grafana" ], - "tx_spammer_params": {"tx_spammer_extra_args": ["--txcount=100"]}, + "tx_spammer_params": { + "tx_spammer_extra_args": [ + "--txcount=250" + ] + }, + "custom_flood_params": { + "interval_between_transactions": 0.05 + }, "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana/dashboard.json", - "github.com/flashbots/builder-startup-script/data/grafana" + "github.com/flashbots/builder-startup-script/data/grafana" ] } \ No newline at end of file From a110e8baca82a3bae7de9b45ea6d11296f16226b Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto <43155355+cbermudez97@users.noreply.github.com> Date: Tue, 24 Oct 2023 10:32:54 -0400 Subject: [PATCH 09/58] Fix additional builder metrics flags (#3) * Update builder metrics flags * fix: update metrics flags * feat: update dashboard tooltips * feat: use ethereum package main branch * feat: use version 0.6.1 with builder fix --- scripts/kurtosis/data/grafana/dashboard.json | 80 ++++++++------------ scripts/kurtosis/main.star | 2 +- scripts/kurtosis/network_params.json | 11 ++- 3 files changed, 40 insertions(+), 53 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index fc2463f0b2..0f00b72632 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -26,7 +26,7 @@ "fiscalYearStartMonth": 0, "gnetId": 14053, "graphTooltip": 1, - "id": 3, + "id": 1, "links": [], "liveNow": false, "panels": [ @@ -67,7 +67,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -116,8 +115,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -174,7 +173,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -223,8 +221,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -282,7 +280,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -332,8 +329,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -391,7 +388,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -440,8 +436,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -496,7 +492,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -545,8 +540,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -589,7 +584,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -638,8 +632,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -695,7 +689,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -744,8 +737,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -800,7 +793,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -849,8 +841,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -893,7 +885,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -942,8 +933,8 @@ "showLegend": true }, "tooltip": { - "mode": "single", - "sort": "none" + "mode": "multi", + "sort": "desc" } }, "targets": [ @@ -1026,7 +1017,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1146,7 +1137,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1266,7 +1257,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1398,7 +1389,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1504,7 +1495,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "pointradius": 5, "points": false, "renderer": "flot", @@ -1639,8 +1630,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(252, 252, 252)", - "value": null + "color": "rgb(252, 252, 252)" } ] }, @@ -1739,8 +1729,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] }, @@ -1841,8 +1830,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1919,8 +1907,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1997,8 +1984,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -2193,8 +2179,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -2271,8 +2256,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -3456,7 +3440,7 @@ "current": { "selected": false, "text": "Prometheus", - "value": "PBFA97CFB590B2093" + "value": "Prometheus" }, "hide": 0, "includeAll": false, diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index ba6d0a51b9..2db0077e90 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@0.6.1" + "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/builder-metrics" ) def run(plan, file_to_read = "network_params_tmp.json"): diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index e120798410..adcb0966a7 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -36,7 +36,8 @@ "--builder.genesis_validators_root=GENESIS_VALIDATORS_ROOT_PLACEHOLDER", "--miner.extradata=The_Dev_version_of_builder", "--builder.algotype=greedy", - "--metrics.builder=true" + "--metrics.builder", + "--metrics.expensive" ], "validator_count": 0, "el_extra_env_vars": { @@ -56,7 +57,10 @@ "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", - "mev_builder_image": "flashbots/builder:latest" + "mev_builder_image": "flashbots/builder:latest", + "mev_builder_extra_args": [ + "--metrics.expensive" + ] }, "additional_services": [ "tx_spammer", @@ -75,7 +79,6 @@ "interval_between_transactions": 0.05 }, "grafana_additional_dashboards": [ - "github.com/flashbots/builder-startup-script/data/grafana/dashboard.json", "github.com/flashbots/builder-startup-script/data/grafana" ] -} \ No newline at end of file +} From 6cf4f91ac5482eadb8f0ac188a2f0e1613c143de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 27 Oct 2023 08:31:28 +0200 Subject: [PATCH 10/58] Fix builders not submitting blocks. Use geth as it appear to deliver a better peering of transactions. Minor improvements: * Use flashbots/builder for participant * Hardcode tag instead of using `latest` * Use capella 0 --- scripts/kurtosis/network_params.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index adcb0966a7..03723c232e 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -2,8 +2,7 @@ "mev_type": "full", "participants": [ { - "el_client_type": "nethermind", - "el_client_image": "nethermind/nethermind:1.21.0", + "el_client_type": "geth", "el_client_log_level": "", "cl_client_type": "lighthouse", "cl_client_log_level": "", @@ -16,7 +15,7 @@ }, { "el_client_type": "REPLACE_WITH_BUILDER", - "el_client_image": "ethpandaops/flashbots-builder:main-45e865e", + "el_client_image": "flashbots/builder:1.13.2.4844.dev5-4d161de", "el_client_log_level": "", "cl_client_type": "lighthouse", "cl_client_image": "sigp/lighthouse:v4.5.0", @@ -46,7 +45,7 @@ } ], "network_params": { - "capella_fork_epoch": 1, + "capella_fork_epoch": 0, "seconds_per_slot": 12 }, "mev_params": { @@ -57,7 +56,7 @@ "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", - "mev_builder_image": "flashbots/builder:latest", + "mev_builder_image": "flashbots/builder:1.13.2.4844.dev5-4d161de", "mev_builder_extra_args": [ "--metrics.expensive" ] From 40ac12b6d033f46db0492fd70fe1bfe2e2965da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= <43241881+kamilchodola@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:44:47 +0100 Subject: [PATCH 11/58] Update issue templates --- .github/ISSUE_TEMPLATE/bug.md | 31 ---------------------------- .github/ISSUE_TEMPLATE/bug_report.md | 20 ++++++++++++++++++ .github/ISSUE_TEMPLATE/feature.md | 17 --------------- .github/ISSUE_TEMPLATE/question.md | 9 -------- 4 files changed, 20 insertions(+), 57 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/feature.md delete mode 100644 .github/ISSUE_TEMPLATE/question.md diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md deleted file mode 100644 index 45bfd986ac..0000000000 --- a/.github/ISSUE_TEMPLATE/bug.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -name: Report a bug -about: Something with go-ethereum is not working as expected -title: '' -labels: 'type:bug' -assignees: '' ---- - -#### System information - -Geth version: `geth version` -CL client & version: e.g. lighthouse/nimbus/prysm@v1.0.0 -OS & Version: Windows/Linux/OSX -Commit hash : (if `develop`) - -#### Expected behaviour - - -#### Actual behaviour - - -#### Steps to reproduce the behaviour - - -#### Backtrace - -```` -[backtrace] -```` - -When submitting logs: please submit them as text and not screenshots. diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..2611a7fd60 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,20 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' + +**Actual behavior** +What is happening which seems to be invalid. + +**Expected behavior** +A clear and concise description of what you expected to happen. diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md deleted file mode 100644 index aacd885f9e..0000000000 --- a/.github/ISSUE_TEMPLATE/feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Request a feature -about: Report a missing feature - e.g. as a step before submitting a PR -title: '' -labels: 'type:feature' -assignees: '' ---- - -# Rationale - -Why should this feature exist? -What are the use-cases? - -# Implementation - -Do you have ideas regarding the implementation of this feature? -Are you willing to implement this feature? \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md deleted file mode 100644 index 8f460ab558..0000000000 --- a/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Ask a question -about: Something is unclear -title: '' -labels: 'type:docs' -assignees: '' ---- - -This should only be used in very rare cases e.g. if you are not 100% sure if something is a bug or asking a question that leads to improving the documentation. For general questions please use [discord](https://discord.gg/nthXNEv) or the Ethereum stack exchange at https://ethereum.stackexchange.com. From 4765df92d2f5ccfe11dd01915f41b34f1cd7376d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= Date: Mon, 30 Oct 2023 13:48:00 +0100 Subject: [PATCH 12/58] Revert "Update issue templates" This reverts commit 40ac12b6d033f46db0492fd70fe1bfe2e2965da1. --- .github/ISSUE_TEMPLATE/bug.md | 31 ++++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 20 ------------------ .github/ISSUE_TEMPLATE/feature.md | 17 +++++++++++++++ .github/ISSUE_TEMPLATE/question.md | 9 ++++++++ 4 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug.md delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature.md create mode 100644 .github/ISSUE_TEMPLATE/question.md diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 0000000000..45bfd986ac --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,31 @@ +--- +name: Report a bug +about: Something with go-ethereum is not working as expected +title: '' +labels: 'type:bug' +assignees: '' +--- + +#### System information + +Geth version: `geth version` +CL client & version: e.g. lighthouse/nimbus/prysm@v1.0.0 +OS & Version: Windows/Linux/OSX +Commit hash : (if `develop`) + +#### Expected behaviour + + +#### Actual behaviour + + +#### Steps to reproduce the behaviour + + +#### Backtrace + +```` +[backtrace] +```` + +When submitting logs: please submit them as text and not screenshots. diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 2611a7fd60..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' - -**Actual behavior** -What is happening which seems to be invalid. - -**Expected behavior** -A clear and concise description of what you expected to happen. diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 0000000000..aacd885f9e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,17 @@ +--- +name: Request a feature +about: Report a missing feature - e.g. as a step before submitting a PR +title: '' +labels: 'type:feature' +assignees: '' +--- + +# Rationale + +Why should this feature exist? +What are the use-cases? + +# Implementation + +Do you have ideas regarding the implementation of this feature? +Are you willing to implement this feature? \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000000..8f460ab558 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,9 @@ +--- +name: Ask a question +about: Something is unclear +title: '' +labels: 'type:docs' +assignees: '' +--- + +This should only be used in very rare cases e.g. if you are not 100% sure if something is a bug or asking a question that leads to improving the documentation. For general questions please use [discord](https://discord.gg/nthXNEv) or the Ethereum stack exchange at https://ethereum.stackexchange.com. From 35fc869d1895711ba13464bbf94cdf6aab44f674 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Mon, 30 Oct 2023 17:12:10 -0400 Subject: [PATCH 13/58] feat: update old dashboard panels --- scripts/kurtosis/data/grafana/dashboard.json | 1702 ++++++++++-------- 1 file changed, 903 insertions(+), 799 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index 0f00b72632..3baf301515 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -26,7 +26,7 @@ "fiscalYearStartMonth": 0, "gnetId": 14053, "graphTooltip": 1, - "id": 1, + "id": 2, "links": [], "liveNow": false, "panels": [ @@ -980,51 +980,84 @@ "type": "row" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, "gridPos": { "h": 6, "w": 8, "x": 0, "y": 22 }, - "hiddenSeries": false, "id": 106, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, "pluginVersion": "9.5.12", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, "targets": [ { "datasource": { @@ -1069,82 +1102,88 @@ "refId": "C" } ], - "thresholds": [], - "timeRegions": [], "title": "CPU", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, "gridPos": { "h": 6, "w": 8, "x": 8, "y": 22 }, - "hiddenSeries": false, "id": 86, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, "pluginVersion": "9.5.12", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, "targets": [ { "datasource": { @@ -1189,82 +1228,88 @@ "refId": "C" } ], - "thresholds": [], - "timeRegions": [], "title": "Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, "gridPos": { "h": 6, "w": 8, "x": 16, "y": 22 }, - "hiddenSeries": false, "id": 85, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, "pluginVersion": "9.5.12", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, "targets": [ { "datasource": { @@ -1295,35 +1340,8 @@ "refId": "B" } ], - "thresholds": [], - "timeRegions": [], "title": "Disk", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { "collapsed": false, @@ -1352,51 +1370,86 @@ "type": "row" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 29 }, - "hiddenSeries": false, "id": 96, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, "pluginVersion": "9.5.12", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, "targets": [ { "datasource": { @@ -1427,82 +1480,90 @@ "refId": "C" } ], - "thresholds": [], - "timeRegions": [], "title": "Traffic", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 29 }, - "hiddenSeries": false, "id": 77, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, "pluginVersion": "9.5.12", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, "targets": [ { "datasource": { @@ -1547,37 +1608,8 @@ "refId": "C" } ], - "thresholds": [], - "timeRegions": [], "title": "Peers", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:93", - "format": "none", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:94", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { "collapsed": false, @@ -1630,7 +1662,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(252, 252, 252)" + "color": "rgb(252, 252, 252)", + "value": null } ] }, @@ -1662,7 +1695,7 @@ "text": {}, "textMode": "value" }, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -1707,7 +1740,6 @@ "tooltip": false, "viz": false }, - "insertNulls": false, "lineInterpolation": "stepAfter", "lineWidth": 1, "pointSize": 5, @@ -1729,7 +1761,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1830,7 +1863,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -1862,7 +1896,7 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -1907,7 +1941,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -1939,7 +1974,7 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -1984,7 +2019,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -2016,7 +2052,7 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -2037,49 +2073,84 @@ "type": "stat" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, "gridPos": { "h": 9, "w": 18, "x": 6, "y": 45 }, - "hiddenSeries": false, "id": 116, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -2124,35 +2195,8 @@ "refId": "C" } ], - "thresholds": [], - "timeRegions": [], "title": "Transaction pool", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { "datasource": { @@ -2179,7 +2223,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -2211,7 +2256,7 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -2256,7 +2301,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -2288,72 +2334,109 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "10.1.2", + "pluginVersion": "9.5.12", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "editorMode": "code", - "expr": "txpool_local{client_name=~\"$client_name\", service=~\"$instance\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{service}}", - "range": true, - "refId": "A" - } - ], - "title": "Local transactions", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" + "editorMode": "code", + "expr": "txpool_local{client_name=~\"$client_name\", service=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Local transactions", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 11, "w": 24, "x": 0, "y": 54 }, - "hiddenSeries": false, "id": 112, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -2512,82 +2595,92 @@ "refId": "K" } ], - "thresholds": [], - "timeRegions": [], "title": "Block processing", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 65 }, - "hiddenSeries": false, "id": 117, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -2750,35 +2843,8 @@ "refId": "J" } ], - "thresholds": [], - "timeRegions": [], "title": "Transaction propagation", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { "collapsed": false, @@ -2807,49 +2873,84 @@ "type": "row" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 76 }, - "hiddenSeries": false, "id": 35, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -2908,80 +3009,88 @@ "refId": "D" } ], - "thresholds": [], - "timeRegions": [], "title": "Data rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" + "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 76 }, - "hiddenSeries": false, "id": 118, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -3040,82 +3149,88 @@ "refId": "D" } ], - "thresholds": [], - "timeRegions": [], "title": "Session totals", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, "gridPos": { "h": 8, "w": 8, "x": 16, "y": 76 }, - "hiddenSeries": false, "id": 119, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -3146,35 +3261,8 @@ "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Storage size", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { "collapsed": false, @@ -3203,49 +3291,84 @@ "type": "row" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 85 }, - "hiddenSeries": false, "id": 120, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -3278,80 +3401,88 @@ "refId": "B" } ], - "thresholds": [], - "timeRegions": [], "title": "Clean cache", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fill": 1, - "fillGradient": 0, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 85 }, - "hiddenSeries": false, "id": 56, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.12", "targets": [ { "datasource": { @@ -3398,35 +3529,8 @@ "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Dirty cache", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" } ], "refresh": "10s", @@ -3591,7 +3695,7 @@ ] }, "time": { - "from": "now-5m", + "from": "now-30m", "to": "now" }, "timepicker": { @@ -3622,6 +3726,6 @@ "timezone": "", "title": "Geth Builder Overview", "uid": "FPpjH6Hik", - "version": 1, + "version": 2, "weekStart": "" } \ No newline at end of file From b6b0eae35f44a694194b9f9339483e65b46baedd Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Mon, 30 Oct 2023 18:38:36 -0400 Subject: [PATCH 14/58] feat: add smaller dashboard for builders comparisson --- .../kurtosis/data/grafana/comparisson.json | 809 ++++++++++++++++++ scripts/kurtosis/data/grafana/dashboard.json | 4 +- 2 files changed, 811 insertions(+), 2 deletions(-) create mode 100644 scripts/kurtosis/data/grafana/comparisson.json diff --git a/scripts/kurtosis/data/grafana/comparisson.json b/scripts/kurtosis/data/grafana/comparisson.json new file mode 100644 index 0000000000..3439e47a1b --- /dev/null +++ b/scripts/kurtosis/data/grafana/comparisson.json @@ -0,0 +1,809 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Geth metrics overview dashboard.", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 14053, + "graphTooltip": 1, + "id": 4, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 127, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.5.12", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "miner_block_profit_gauge{client_name=~\"$client_name\", service=~\"$instance\"}", + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Blocks Profit Total (Wei)", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Gwei", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 126, + "options": { + "legend": { + "calcs": [ + "max", + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", service=~\"$instance\"}[$rate]) / 1000000000", + "hide": false, + "legendFormat": "build {{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Blocks Profit Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 125, + "options": { + "legend": { + "calcs": [ + "max", + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "legendFormat": "build {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "format": "time_series", + "hide": false, + "legendFormat": "merge {{service}}", + "range": true, + "refId": "C" + } + ], + "title": "Blocks Build Rate", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 129, + "panels": [], + "title": "RPC", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 17 + }, + "id": 128, + "options": { + "legend": { + "calcs": [ + "max", + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(rpc_duration_engine_newPayloadV2_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "legendFormat": "success {{service}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(rpc_duration_engine_newPayloadV2_failure_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "hide": false, + "legendFormat": "failure {{service}}", + "range": true, + "refId": "B" + } + ], + "title": "engine_newPayloadV2 calls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 17 + }, + "id": 130, + "options": { + "legend": { + "calcs": [ + "max", + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rpc_duration_engine_newPayloadV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Durations of successful engine_newPayloadV2 calls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 17 + }, + "id": 131, + "options": { + "legend": { + "calcs": [ + "max", + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "legendFormat": "{{service}}", + "range": true, + "refId": "A" + } + ], + "title": "Durations of failed engine_newPayloadV2 calls", + "type": "timeseries" + } + ], + "refresh": "10s", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "Prometheus" + }, + "hide": 0, + "includeAll": false, + "label": "datasource", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "current": { + "selected": false, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "definition": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", + "hide": 1, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [], + "query": { + "query": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "el-[2|3]-geth-.*", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "0.5", + "value": "0.5" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "quantile", + "options": [ + { + "selected": true, + "text": "0.5", + "value": "0.5" + }, + { + "selected": false, + "text": "0.75", + "value": "0.75" + }, + { + "selected": false, + "text": "0.95", + "value": "0.95" + }, + { + "selected": false, + "text": "0.99", + "value": "0.99" + }, + { + "selected": false, + "text": "0.999", + "value": "0.999" + }, + { + "selected": false, + "text": "0.9999", + "value": "0.9999" + } + ], + "query": "0.5, 0.75, 0.95, 0.99, 0.999, 0.9999", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": true, + "text": "5m", + "value": "5m" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "rate", + "options": [ + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "2m", + "value": "2m" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + } + ], + "query": "1m, 2m, 5m", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "geth", + "value": "geth" + }, + "hide": 2, + "includeAll": false, + "label": "Client", + "multi": false, + "name": "client_name", + "options": [ + { + "selected": true, + "text": "geth", + "value": "geth" + } + ], + "query": "geth", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "Builders Comparison", + "uid": "builders-comparison", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index 3baf301515..1818182047 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -3725,7 +3725,7 @@ }, "timezone": "", "title": "Geth Builder Overview", - "uid": "FPpjH6Hik", - "version": 2, + "uid": "geth-builder-overview", + "version": 1, "weekStart": "" } \ No newline at end of file From 64fc940e3c007f6122739ffe9f23a8ec1824c498 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= <43241881+kamilchodola@users.noreply.github.com> Date: Tue, 31 Oct 2023 15:52:47 +0100 Subject: [PATCH 15/58] Change URL for Kurtosis install (#5) --- scripts/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/readme.md b/scripts/readme.md index 5561a1f3f1..adcc73c5d4 100644 --- a/scripts/readme.md +++ b/scripts/readme.md @@ -17,7 +17,7 @@ Before using the script, ensure you have the following installed: 2. **Docker**: The build process needs Docker. Make sure Docker is installed and running. Check out the [Docker website](https://www.docker.com/get-started) for installation instructions. -3. **Kurtosis**: The script interfaces with the Kurtosis platform. Ensure `kurtosis` is installed and available in your PATH. Refer to [Kurtosis's official documentation](https://docs.kurtosistech.com/installation.html) for installation details. +3. **Kurtosis**: The script interfaces with the Kurtosis platform. Ensure `kurtosis` is installed and available in your PATH. Refer to [Kurtosis's official documentation](https://docs.kurtosis.com/install) for installation details. 4. **ethereum-package**: This script utilizes a modified ethereum-package network configuration, which will be downloaded from [repo](github.com/kurtosis-tech/ethereum-package/) main brunch automatically. From 67bef2960a357b0e286cf6b797831ed253f0147f Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Tue, 31 Oct 2023 12:49:49 -0400 Subject: [PATCH 16/58] feat: use ethereum package version 1.0.0 --- scripts/kurtosis/main.star | 2 +- scripts/kurtosis/network_params.json | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index 2db0077e90..5569728c10 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/builder-metrics" + "github.com/kurtosis-tech/ethereum-package/main.star@1.0.0" ) def run(plan, file_to_read = "network_params_tmp.json"): diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index adcb0966a7..002311f347 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -46,7 +46,8 @@ } ], "network_params": { - "capella_fork_epoch": 1, + "capella_fork_epoch": 0, + "deneb_fork_epoch": 1, "seconds_per_slot": 12 }, "mev_params": { @@ -55,7 +56,7 @@ "--txsPerBundle=250" ], "mev_flood_image": "flashbots/mev-flood:0.0.9", - "mev_relay_image": "flashbots/mev-boost-relay:0.27", + "mev_relay_image": "flashbots/mev-boost-relay:0.28.0a5", "mev_boost_image": "flashbots/mev-boost:1.6", "mev_builder_image": "flashbots/builder:latest", "mev_builder_extra_args": [ @@ -81,4 +82,4 @@ "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" ] -} +} \ No newline at end of file From d9afb54ae22a3de184c5a52c0e5af40d6fd84327 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Tue, 31 Oct 2023 13:42:56 -0400 Subject: [PATCH 17/58] fix: revert "feat: use ethereum package version 1.0.0" This reverts commit 67bef2960a357b0e286cf6b797831ed253f0147f. --- scripts/kurtosis/main.star | 2 +- scripts/kurtosis/network_params.json | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index 5569728c10..2db0077e90 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@1.0.0" + "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/builder-metrics" ) def run(plan, file_to_read = "network_params_tmp.json"): diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 002311f347..adcb0966a7 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -46,8 +46,7 @@ } ], "network_params": { - "capella_fork_epoch": 0, - "deneb_fork_epoch": 1, + "capella_fork_epoch": 1, "seconds_per_slot": 12 }, "mev_params": { @@ -56,7 +55,7 @@ "--txsPerBundle=250" ], "mev_flood_image": "flashbots/mev-flood:0.0.9", - "mev_relay_image": "flashbots/mev-boost-relay:0.28.0a5", + "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", "mev_builder_image": "flashbots/builder:latest", "mev_builder_extra_args": [ @@ -82,4 +81,4 @@ "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" ] -} \ No newline at end of file +} From 755cce2c8915656ca33f6e0b831a400e898442cf Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Wed, 1 Nov 2023 11:19:39 -0400 Subject: [PATCH 18/58] feat: add additional prometheus labels --- scripts/kurtosis/main.star | 2 +- scripts/kurtosis/network_params.json | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index 2db0077e90..ececc31fd5 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/builder-metrics" + "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/prometheus-additional-labels" ) def run(plan, file_to_read = "network_params_tmp.json"): diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 03723c232e..3c3dd44c16 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -11,7 +11,10 @@ "beacon_extra_params": [ "--always-prefer-builder-payload", "--disable-peer-scoring" - ] + ], + "prometheus_additional_labels": { + "role": "Proposer" + } }, { "el_client_type": "REPLACE_WITH_BUILDER", @@ -41,6 +44,9 @@ "validator_count": 0, "el_extra_env_vars": { "BUILDER_TX_SIGNING_KEY": "0xef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" + }, + "prometheus_additional_labels": { + "role": "Builder Dev" } } ], @@ -59,7 +65,10 @@ "mev_builder_image": "flashbots/builder:1.13.2.4844.dev5-4d161de", "mev_builder_extra_args": [ "--metrics.expensive" - ] + ], + "mev_builder_prometheus_additional_labels": { + "role": "Builder Baseline" + } }, "additional_services": [ "tx_spammer", @@ -80,4 +89,4 @@ "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" ] -} +} \ No newline at end of file From 713bc182364345e3257381d88b92215f7e6c5eb0 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Wed, 1 Nov 2023 14:44:18 -0400 Subject: [PATCH 19/58] feat: update labels in dashboards --- .../kurtosis/data/grafana/comparisson.json | 60 ++-- scripts/kurtosis/data/grafana/dashboard.json | 310 +++++++++--------- 2 files changed, 186 insertions(+), 184 deletions(-) diff --git a/scripts/kurtosis/data/grafana/comparisson.json b/scripts/kurtosis/data/grafana/comparisson.json index 3439e47a1b..4895f812ca 100644 --- a/scripts/kurtosis/data/grafana/comparisson.json +++ b/scripts/kurtosis/data/grafana/comparisson.json @@ -26,7 +26,7 @@ "fiscalYearStartMonth": 0, "gnetId": 14053, "graphTooltip": 1, - "id": 4, + "id": 1, "links": [], "liveNow": false, "panels": [ @@ -83,8 +83,8 @@ "uid": "PBFA97CFB590B2093" }, "editorMode": "code", - "expr": "miner_block_profit_gauge{client_name=~\"$client_name\", service=~\"$instance\"}", - "legendFormat": "{{service}}", + "expr": "miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -180,9 +180,9 @@ }, "editorMode": "code", "exemplar": false, - "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", service=~\"$instance\"}[$rate]) / 1000000000", + "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"}[$rate]) / 1000000000", "hide": false, - "legendFormat": "build {{service}}", + "legendFormat": "build {{role}}", "range": true, "refId": "A" } @@ -276,10 +276,10 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "legendFormat": "build {{service}}", + "legendFormat": "build {{role}}", "range": true, "refId": "A" }, @@ -289,10 +289,10 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "legendFormat": "merge {{service}}", + "legendFormat": "merge {{role}}", "range": true, "refId": "C" } @@ -399,8 +399,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_engine_newPayloadV2_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", - "legendFormat": "success {{service}}", + "expr": "rate(rpc_duration_engine_newPayloadV2_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", + "legendFormat": "success {{role}}", "range": true, "refId": "A" }, @@ -410,9 +410,9 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_engine_newPayloadV2_failure_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(rpc_duration_engine_newPayloadV2_failure_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "hide": false, - "legendFormat": "failure {{service}}", + "legendFormat": "failure {{role}}", "range": true, "refId": "B" } @@ -433,6 +433,7 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", @@ -506,8 +507,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_engine_newPayloadV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", - "legendFormat": "{{service}}", + "expr": "rpc_duration_engine_newPayloadV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -528,6 +529,7 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", @@ -601,8 +603,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", - "legendFormat": "{{service}}", + "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -639,7 +641,7 @@ }, { "current": { - "selected": false, + "selected": true, "text": [ "All" ], @@ -651,26 +653,26 @@ "type": "prometheus", "uid": "${datasource}" }, - "definition": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", - "hide": 1, + "definition": "label_values(chain_head_block{client_name=\"$client_name\"},role)", + "hide": 0, "includeAll": true, "label": "Instance", "multi": true, "name": "instance", "options": [], "query": { - "query": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", - "refId": "StandardVariableQuery" + "query": "label_values(chain_head_block{client_name=\"$client_name\"},role)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" }, "refresh": 1, - "regex": "el-[2|3]-geth-.*", + "regex": "Builder.*", "skipUrlSync": false, "sort": 0, "type": "query" }, { "current": { - "selected": false, + "selected": true, "text": "0.5", "value": "0.5" }, @@ -718,8 +720,8 @@ { "current": { "selected": true, - "text": "5m", - "value": "5m" + "text": "1m", + "value": "1m" }, "hide": 0, "includeAll": false, @@ -727,7 +729,7 @@ "name": "rate", "options": [ { - "selected": false, + "selected": true, "text": "1m", "value": "1m" }, @@ -737,7 +739,7 @@ "value": "2m" }, { - "selected": true, + "selected": false, "text": "5m", "value": "5m" } @@ -773,7 +775,7 @@ ] }, "time": { - "from": "now-5m", + "from": "now-3h", "to": "now" }, "timepicker": { diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index 1818182047..d38b0eb68a 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -126,10 +126,10 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(miner_bundle_simulate_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(miner_bundle_simulate_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "legendFormat": "success {{service}}", + "legendFormat": "success {{role}}", "range": true, "refId": "A" }, @@ -139,9 +139,9 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(miner_bundle_simulate_failed_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(miner_bundle_simulate_failed_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "legendFormat": "fail {{service}}", + "legendFormat": "fail {{role}}", "range": true, "refId": "B" } @@ -232,10 +232,10 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "legendFormat": "build {{service}}", + "legendFormat": "build {{role}}", "range": true, "refId": "A" }, @@ -245,10 +245,10 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "legendFormat": "merge {{service}}", + "legendFormat": "merge {{role}}", "range": true, "refId": "C" } @@ -341,9 +341,9 @@ }, "editorMode": "code", "exemplar": false, - "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", service=~\"$instance\"}[$rate]) / 1000000000", + "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"}[$rate]) / 1000000000", "hide": false, - "legendFormat": "build {{service}}", + "legendFormat": "build {{role}}", "range": true, "refId": "A" } @@ -447,8 +447,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_eth_callBundle_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", - "legendFormat": "success {{service}}", + "expr": "rate(rpc_duration_eth_callBundle_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", + "legendFormat": "success {{role}}", "range": true, "refId": "A" }, @@ -458,9 +458,9 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_eth_callBundle_failure_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(rpc_duration_eth_callBundle_failure_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "hide": false, - "legendFormat": "failure {{service}}", + "legendFormat": "failure {{role}}", "range": true, "refId": "B" } @@ -551,8 +551,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_eth_callBundle_success{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"} / 1000", - "legendFormat": "{{service}}", + "expr": "rpc_duration_eth_callBundle_success{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"} / 1000", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -643,8 +643,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_eth_callBundle_failure{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"} / 1000", - "legendFormat": "{{service}}", + "expr": "rpc_duration_eth_callBundle_failure{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"} / 1000", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -748,8 +748,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_success_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", - "legendFormat": "success {{service}}", + "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", + "legendFormat": "success {{role}}", "range": true, "refId": "A" }, @@ -759,9 +759,9 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_failure_count{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_failure_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "hide": false, - "legendFormat": "failure {{service}}", + "legendFormat": "failure {{role}}", "range": true, "refId": "B" } @@ -852,8 +852,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}/1000", - "legendFormat": "{{service}}", + "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}/1000", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -944,8 +944,8 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"} / 1000", - "legendFormat": "{{service}}", + "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"} / 1000", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -1065,11 +1065,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "system_cpu_sysload{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "system_cpu_sysload{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "system {{service}}", + "legendFormat": "system {{role}}", "range": true, "refId": "A" }, @@ -1079,11 +1079,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "system_cpu_syswait{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "system_cpu_syswait{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "iowait {{service}}", + "legendFormat": "iowait {{role}}", "range": true, "refId": "B" }, @@ -1093,11 +1093,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "system_cpu_procload{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "system_cpu_procload{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "geth {{service}}", + "legendFormat": "geth {{role}}", "range": true, "refId": "C" } @@ -1191,11 +1191,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(system_memory_allocs{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(system_memory_allocs{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "alloc {{service}}", + "legendFormat": "alloc {{role}}", "range": true, "refId": "A" }, @@ -1205,11 +1205,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "system_memory_used{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "system_memory_used{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "used {{service}}", + "legendFormat": "used {{role}}", "range": true, "refId": "B" }, @@ -1219,11 +1219,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "system_memory_held{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "system_memory_held{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "held {{service}}", + "legendFormat": "held {{role}}", "range": true, "refId": "C" } @@ -1317,11 +1317,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(system_disk_readbytes{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(system_disk_readbytes{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "read {{service}}", + "legendFormat": "read {{role}}", "range": true, "refId": "A" }, @@ -1331,11 +1331,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(system_disk_writebytes{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(system_disk_writebytes{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "write {{service}}", + "legendFormat": "write {{role}}", "range": true, "refId": "B" } @@ -1457,11 +1457,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(p2p_ingress{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(p2p_ingress{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "ingress {{service}}", + "legendFormat": "ingress {{role}}", "range": true, "refId": "B" }, @@ -1471,11 +1471,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(p2p_egress{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(p2p_egress{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "egress {{service}}", + "legendFormat": "egress {{role}}", "range": true, "refId": "C" } @@ -1571,11 +1571,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "p2p_peers{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "p2p_peers{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "peers {{service}}", + "legendFormat": "peers {{role}}", "range": true, "refId": "A" }, @@ -1585,11 +1585,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(p2p_dials{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(p2p_dials{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "dials {{service}}", + "legendFormat": "dials {{role}}", "range": true, "refId": "B" }, @@ -1599,11 +1599,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(p2p_serves{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(p2p_serves{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "serves {{service}}", + "legendFormat": "serves {{role}}", "range": true, "refId": "C" } @@ -1703,11 +1703,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "max(chain_head_header{client_name=~\"$client_name\", service=~\"$instance\"})", + "expr": "max(chain_head_header{client_name=~\"$client_name\", role=~\"$instance\"})", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{service}}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -1798,11 +1798,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_head_header{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_head_header{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "header {{service}}", + "legendFormat": "header {{role}}", "range": true, "refId": "A" }, @@ -1812,11 +1812,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_head_receipt{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_head_receipt{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "receipt {{service}}", + "legendFormat": "receipt {{role}}", "range": true, "refId": "B" }, @@ -1826,11 +1826,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_head_block{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_head_block{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "block {{service}}", + "legendFormat": "block {{role}}", "range": true, "refId": "C" } @@ -1904,11 +1904,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "max(chain_head_receipt{client_name=~\"$client_name\", service=~\"$instance\"})", + "expr": "max(chain_head_receipt{client_name=~\"$client_name\", role=~\"$instance\"})", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{service}}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -1982,11 +1982,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "max(chain_head_block{client_name=~\"$client_name\", service=~\"$instance\"})", + "expr": "max(chain_head_block{client_name=~\"$client_name\", role=~\"$instance\"})", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{service}}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -2060,11 +2060,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "txpool_pending{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "txpool_pending{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{service}}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -2158,11 +2158,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "txpool_pending{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "txpool_pending{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "executable {{service}}", + "legendFormat": "executable {{role}}", "range": true, "refId": "A" }, @@ -2172,11 +2172,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "txpool_queued{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "txpool_queued{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "gapped {{service}}", + "legendFormat": "gapped {{role}}", "range": true, "refId": "B" }, @@ -2186,11 +2186,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "txpool_local{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "txpool_local{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "local {{service}}", + "legendFormat": "local {{role}}", "range": true, "refId": "C" } @@ -2264,11 +2264,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "txpool_queued{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "txpool_queued{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{service}}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -2342,11 +2342,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "txpool_local{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "txpool_local{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{service}}", + "legendFormat": "{{role}}", "range": true, "refId": "A" } @@ -2444,11 +2444,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_execution{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_execution{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "execution (q=$quantile) {{service}}", + "legendFormat": "execution (q=$quantile) {{role}}", "range": true, "refId": "A" }, @@ -2458,12 +2458,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_validation{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_validation{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "validation (q=$quantile) {{service}}", + "legendFormat": "validation (q=$quantile) {{role}}", "range": true, "refId": "B" }, @@ -2473,12 +2473,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_write{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_write{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "commit (q=$quantile) {{service}}", + "legendFormat": "commit (q=$quantile) {{role}}", "range": true, "refId": "C" }, @@ -2488,11 +2488,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_account_reads{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_account_reads{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "account read (q=$quantile) {{service}}", + "legendFormat": "account read (q=$quantile) {{role}}", "range": true, "refId": "D" }, @@ -2502,11 +2502,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_account_updates{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_account_updates{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "account update (q=$quantile) {{service}}", + "legendFormat": "account update (q=$quantile) {{role}}", "range": true, "refId": "E" }, @@ -2516,11 +2516,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_account_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_account_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "account hashe (q=$quantile) {{service}}", + "legendFormat": "account hashe (q=$quantile) {{role}}", "range": true, "refId": "F" }, @@ -2530,11 +2530,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_account_commits{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_account_commits{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "account commit (q=$quantile) {{service}}", + "legendFormat": "account commit (q=$quantile) {{role}}", "range": true, "refId": "G" }, @@ -2544,11 +2544,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_storage_reads{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_storage_reads{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "storage read (q=$quantile) {{service}}", + "legendFormat": "storage read (q=$quantile) {{role}}", "range": true, "refId": "H" }, @@ -2558,11 +2558,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_storage_updates{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_storage_updates{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "storage update (q=$quantile) {{service}}", + "legendFormat": "storage update (q=$quantile) {{role}}", "range": true, "refId": "I" }, @@ -2572,11 +2572,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_storage_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_storage_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "storage hashe (q=$quantile) {{service}}", + "legendFormat": "storage hashe (q=$quantile) {{role}}", "range": true, "refId": "J" }, @@ -2586,11 +2586,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "chain_storage_commits{quantile=\"$quantile\", client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "chain_storage_commits{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "storage commit (q=$quantile) {{service}}", + "legendFormat": "storage commit (q=$quantile) {{role}}", "range": true, "refId": "K" } @@ -2688,11 +2688,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_valid{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_valid{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "valid {{service}}", + "legendFormat": "valid {{role}}", "range": true, "refId": "K" }, @@ -2702,11 +2702,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_invalid{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_invalid{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "invalid {{service}}", + "legendFormat": "invalid {{role}}", "range": true, "refId": "A" }, @@ -2716,12 +2716,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_underpriced{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_underpriced{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "underpriced {{service}}", + "legendFormat": "underpriced {{role}}", "range": true, "refId": "B" }, @@ -2731,12 +2731,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_pending_discard{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_pending_discard{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "executable discard {{service}}", + "legendFormat": "executable discard {{role}}", "range": true, "refId": "C" }, @@ -2746,11 +2746,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_pending_replace{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_pending_replace{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "executable replace {{service}}", + "legendFormat": "executable replace {{role}}", "range": true, "refId": "D" }, @@ -2760,11 +2760,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_pending_ratelimit{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_pending_ratelimit{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "executable ratelimit {{service}}", + "legendFormat": "executable ratelimit {{role}}", "range": true, "refId": "E" }, @@ -2774,11 +2774,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_pending_nofunds{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_pending_nofunds{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "executable nofunds {{service}}", + "legendFormat": "executable nofunds {{role}}", "range": true, "refId": "F" }, @@ -2788,12 +2788,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_queued_discard{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_queued_discard{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "gapped discard {{service}}", + "legendFormat": "gapped discard {{role}}", "range": true, "refId": "G" }, @@ -2803,12 +2803,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_queued_replace{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_queued_replace{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "gapped replace {{service}}", + "legendFormat": "gapped replace {{role}}", "range": true, "refId": "H" }, @@ -2818,12 +2818,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_queued_ratelimit{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_queued_ratelimit{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "gapped ratelimit {{service}}", + "legendFormat": "gapped ratelimit {{role}}", "range": true, "refId": "I" }, @@ -2833,12 +2833,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(txpool_queued_nofunds{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(txpool_queued_nofunds{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "gapped nofunds {{service}}", + "legendFormat": "gapped nofunds {{role}}", "range": true, "refId": "J" } @@ -2958,11 +2958,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(eth_db_chaindata_disk_read{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(eth_db_chaindata_disk_read{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "leveldb read {{service}}", + "legendFormat": "leveldb read {{role}}", "range": true, "refId": "B" }, @@ -2972,11 +2972,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(eth_db_chaindata_disk_write{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(eth_db_chaindata_disk_write{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "leveldb write {{service}}", + "legendFormat": "leveldb write {{role}}", "range": true, "refId": "A" }, @@ -2986,11 +2986,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(eth_db_chaindata_ancient_read{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(eth_db_chaindata_ancient_read{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "ancient read {{service}}", + "legendFormat": "ancient read {{role}}", "range": true, "refId": "C" }, @@ -3000,11 +3000,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(eth_db_chaindata_ancient_write{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(eth_db_chaindata_ancient_write{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "ancient write {{service}}", + "legendFormat": "ancient write {{role}}", "range": true, "refId": "D" } @@ -3098,11 +3098,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "eth_db_chaindata_disk_read{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "eth_db_chaindata_disk_read{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "leveldb read {{service}}", + "legendFormat": "leveldb read {{role}}", "range": true, "refId": "B" }, @@ -3112,11 +3112,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "eth_db_chaindata_disk_write{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "eth_db_chaindata_disk_write{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "leveldb write {{service}}", + "legendFormat": "leveldb write {{role}}", "range": true, "refId": "A" }, @@ -3126,11 +3126,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "eth_db_chaindata_ancient_read{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "eth_db_chaindata_ancient_read{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "ancient read {{service}}", + "legendFormat": "ancient read {{role}}", "range": true, "refId": "C" }, @@ -3140,11 +3140,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "eth_db_chaindata_ancient_write{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "eth_db_chaindata_ancient_write{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "ancient write {{service}}", + "legendFormat": "ancient write {{role}}", "range": true, "refId": "D" } @@ -3238,11 +3238,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "eth_db_chaindata_disk_size{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "eth_db_chaindata_disk_size{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "leveldb {{service}}", + "legendFormat": "leveldb {{role}}", "range": true, "refId": "B" }, @@ -3252,11 +3252,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "eth_db_chaindata_ancient_size{client_name=~\"$client_name\", service=~\"$instance\"}", + "expr": "eth_db_chaindata_ancient_size{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "ancient {{service}}", + "legendFormat": "ancient {{role}}", "range": true, "refId": "A" } @@ -3376,12 +3376,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(trie_memcache_clean_read{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(trie_memcache_clean_read{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "hit {{service}}", + "legendFormat": "hit {{role}}", "range": true, "refId": "C" }, @@ -3391,12 +3391,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(trie_memcache_clean_write{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(trie_memcache_clean_write{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "miss {{service}}", + "legendFormat": "miss {{role}}", "range": true, "refId": "B" } @@ -3490,12 +3490,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(trie_memcache_gc_size{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(trie_memcache_gc_size{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "gc {{service}}", + "legendFormat": "gc {{role}}", "range": true, "refId": "C" }, @@ -3505,12 +3505,12 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(trie_memcache_flush_size{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(trie_memcache_flush_size{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, - "legendFormat": "overflow {{service}}", + "legendFormat": "overflow {{role}}", "range": true, "refId": "B" }, @@ -3520,11 +3520,11 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(trie_memcache_commit_size{client_name=~\"$client_name\", service=~\"$instance\"}[$rate])", + "expr": "rate(trie_memcache_commit_size{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "commit {{service}}", + "legendFormat": "commit {{role}}", "range": true, "refId": "A" } @@ -3533,7 +3533,7 @@ "type": "timeseries" } ], - "refresh": "10s", + "refresh": false, "revision": 1, "schemaVersion": 38, "style": "dark", @@ -3573,7 +3573,7 @@ "type": "prometheus", "uid": "${datasource}" }, - "definition": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", + "definition": "label_values(chain_head_block{client_name=\"$client_name\"},role)", "hide": 1, "includeAll": true, "label": "Instance", @@ -3581,11 +3581,11 @@ "name": "instance", "options": [], "query": { - "query": "label_values(chain_head_block{client_name=\"$client_name\"}, service)", - "refId": "StandardVariableQuery" + "query": "label_values(chain_head_block{client_name=\"$client_name\"},role)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" }, "refresh": 1, - "regex": "", + "regex": "Builder.*", "skipUrlSync": false, "sort": 0, "type": "query" From b91f2226b005cc5a80f92e834ec64e6d0435012b Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 2 Nov 2023 11:04:19 -0400 Subject: [PATCH 20/58] feat: centralize dashboards and apply custom prometheus config --- .../kurtosis/data/grafana/comparisson.json | 811 ----------------- scripts/kurtosis/data/grafana/dashboard.json | 834 ++---------------- scripts/kurtosis/network_params.json | 14 +- 3 files changed, 83 insertions(+), 1576 deletions(-) delete mode 100644 scripts/kurtosis/data/grafana/comparisson.json diff --git a/scripts/kurtosis/data/grafana/comparisson.json b/scripts/kurtosis/data/grafana/comparisson.json deleted file mode 100644 index 4895f812ca..0000000000 --- a/scripts/kurtosis/data/grafana/comparisson.json +++ /dev/null @@ -1,811 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "Geth metrics overview dashboard.", - "editable": true, - "fiscalYearStartMonth": 0, - "gnetId": 14053, - "graphTooltip": 1, - "id": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "locale" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 127, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "sum" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.5.12", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "editorMode": "code", - "expr": "miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"}", - "legendFormat": "{{role}}", - "range": true, - "refId": "A" - } - ], - "title": "Blocks Profit Total (Wei)", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Gwei", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "locale" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 126, - "options": { - "legend": { - "calcs": [ - "max", - "mean" - ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"}[$rate]) / 1000000000", - "hide": false, - "legendFormat": "build {{role}}", - "range": true, - "refId": "A" - } - ], - "title": "Blocks Profit Rate", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 125, - "options": { - "legend": { - "calcs": [ - "max", - "mean" - ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "format": "time_series", - "hide": false, - "legendFormat": "build {{role}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "format": "time_series", - "hide": false, - "legendFormat": "merge {{role}}", - "range": true, - "refId": "C" - } - ], - "title": "Blocks Build Rate", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 16 - }, - "id": 129, - "panels": [], - "title": "RPC", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 17 - }, - "id": 128, - "options": { - "legend": { - "calcs": [ - "max", - "mean" - ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(rpc_duration_engine_newPayloadV2_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "legendFormat": "success {{role}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(rpc_duration_engine_newPayloadV2_failure_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "hide": false, - "legendFormat": "failure {{role}}", - "range": true, - "refId": "B" - } - ], - "title": "engine_newPayloadV2 calls", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "µs" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 17 - }, - "id": 130, - "options": { - "legend": { - "calcs": [ - "max", - "mean" - ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rpc_duration_engine_newPayloadV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", - "legendFormat": "{{role}}", - "range": true, - "refId": "A" - } - ], - "title": "Durations of successful engine_newPayloadV2 calls", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "µs" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 17 - }, - "id": 131, - "options": { - "legend": { - "calcs": [ - "max", - "mean" - ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", - "legendFormat": "{{role}}", - "range": true, - "refId": "A" - } - ], - "title": "Durations of failed engine_newPayloadV2 calls", - "type": "timeseries" - } - ], - "refresh": "10s", - "revision": 1, - "schemaVersion": 38, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "hide": 0, - "includeAll": false, - "label": "datasource", - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(chain_head_block{client_name=\"$client_name\"},role)", - "hide": 0, - "includeAll": true, - "label": "Instance", - "multi": true, - "name": "instance", - "options": [], - "query": { - "query": "label_values(chain_head_block{client_name=\"$client_name\"},role)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "Builder.*", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": true, - "text": "0.5", - "value": "0.5" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "quantile", - "options": [ - { - "selected": true, - "text": "0.5", - "value": "0.5" - }, - { - "selected": false, - "text": "0.75", - "value": "0.75" - }, - { - "selected": false, - "text": "0.95", - "value": "0.95" - }, - { - "selected": false, - "text": "0.99", - "value": "0.99" - }, - { - "selected": false, - "text": "0.999", - "value": "0.999" - }, - { - "selected": false, - "text": "0.9999", - "value": "0.9999" - } - ], - "query": "0.5, 0.75, 0.95, 0.99, 0.999, 0.9999", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": { - "selected": true, - "text": "1m", - "value": "1m" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "rate", - "options": [ - { - "selected": true, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "2m", - "value": "2m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1m, 2m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": { - "selected": false, - "text": "geth", - "value": "geth" - }, - "hide": 2, - "includeAll": false, - "label": "Client", - "multi": false, - "name": "client_name", - "options": [ - { - "selected": true, - "text": "geth", - "value": "geth" - } - ], - "query": "geth", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-3h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "Builders Comparison", - "uid": "builders-comparison", - "version": 1, - "weekStart": "" -} \ No newline at end of file diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index d38b0eb68a..b79d32e29f 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -56,524 +56,7 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 0, - "y": 1 - }, - "id": 124, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(miner_bundle_simulate_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "format": "time_series", - "hide": false, - "legendFormat": "success {{role}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(miner_bundle_simulate_failed_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "format": "time_series", - "legendFormat": "fail {{role}}", - "range": true, - "refId": "B" - } - ], - "title": "Bundle Simulations", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 8, - "y": 1 - }, - "id": 125, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(miner_block_build_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "format": "time_series", - "hide": false, - "legendFormat": "build {{role}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(miner_block_merge_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "format": "time_series", - "hide": false, - "legendFormat": "merge {{role}}", - "range": true, - "refId": "C" - } - ], - "title": "Blocks", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Gwei", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "locale" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 16, - "y": 1 - }, - "id": 126, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "rate(miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"}[$rate]) / 1000000000", - "hide": false, - "legendFormat": "build {{role}}", - "range": true, - "refId": "A" - } - ], - "title": "Profit", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 7 - }, - "id": 128, - "panels": [], - "title": "Simulation", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 0, - "y": 8 - }, - "id": 130, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(rpc_duration_eth_callBundle_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "legendFormat": "success {{role}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rate(rpc_duration_eth_callBundle_failure_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "hide": false, - "legendFormat": "failure {{role}}", - "range": true, - "refId": "B" - } - ], - "title": "eth_callBundle calls", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "ms", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 8, - "y": 8 - }, - "id": 132, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rpc_duration_eth_callBundle_success{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"} / 1000", - "legendFormat": "{{role}}", - "range": true, - "refId": "A" - } - ], - "title": "Durations of successful eth_callBundle calls", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "ms", + "axisLabel": "Gwei", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", @@ -613,122 +96,18 @@ "value": 80 } ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 16, - "y": 8 - }, - "id": 133, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "rpc_duration_eth_callBundle_failure{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"} / 1000", - "legendFormat": "{{role}}", - "range": true, - "refId": "A" - } - ], - "title": "Durations of failed eth_callBundle calls", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 14 - }, - "id": 135, - "panels": [], - "title": "Validation", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + "unit": "locale" }, "overrides": [] }, "gridPos": { "h": 6, - "w": 8, + "w": 12, "x": 0, - "y": 15 + "y": 1 }, - "id": 136, + "id": 126, "options": { "legend": { "calcs": [], @@ -748,8 +127,10 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_success_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", - "legendFormat": "success {{role}}", + "exemplar": false, + "expr": "miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"} / 1000000000", + "hide": false, + "legendFormat": "build {{role}}", "range": true, "refId": "A" }, @@ -759,14 +140,16 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rate(rpc_duration_flashbots_validateBuilderSubmissionV2_failure_count{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", + "exemplar": false, + "expr": "beacon_head_slot{role=~\"Proposer\"}", + "format": "time_series", "hide": false, - "legendFormat": "failure {{role}}", + "legendFormat": "Slot", "range": true, "refId": "B" } ], - "title": "flashbots_validateBuilderSubmissionV2 calls", + "title": "Bids Created Profit", "type": "timeseries" }, { @@ -782,7 +165,7 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "ms", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", @@ -828,11 +211,11 @@ }, "gridPos": { "h": 6, - "w": 8, - "x": 8, - "y": 15 + "w": 12, + "x": 12, + "y": 1 }, - "id": 137, + "id": 125, "options": { "legend": { "calcs": [], @@ -852,105 +235,40 @@ "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_success{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}/1000", - "legendFormat": "{{role}}", + "expr": "miner_block_build{client_name=~\"$client_name\", role=~\"$instance\", quantile=\"$quantile\"}", + "format": "time_series", + "hide": false, + "legendFormat": "build {{role}}", "range": true, "refId": "A" - } - ], - "title": "Durations of successful flashbots_validateBuilderSubmissionV2 calls", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "ms", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 16, - "y": 15 - }, - "id": 138, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "miner_block_merge{client_name=~\"$client_name\", role=~\"$instance\", quantile=\"$quantile\"}", + "format": "time_series", + "hide": false, + "legendFormat": "merge {{role}}", + "range": true, + "refId": "C" }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", - "expr": "rpc_duration_flashbots_validateBuilderSubmissionV2_failure{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"} / 1000", - "legendFormat": "{{role}}", + "expr": "beacon_head_slot{role=~\"Proposer\"}", + "hide": false, + "legendFormat": "Slot", "range": true, - "refId": "A" + "refId": "B" } ], - "title": "Durations of failed flashbots_validateBuilderSubmissionV2 calls", + "title": "Bids Created", "type": "timeseries" }, { @@ -963,7 +281,7 @@ "h": 1, "w": 24, "x": 0, - "y": 21 + "y": 7 }, "id": 82, "panels": [], @@ -1041,7 +359,7 @@ "h": 6, "w": 8, "x": 0, - "y": 22 + "y": 8 }, "id": 106, "links": [], @@ -1167,7 +485,7 @@ "h": 6, "w": 8, "x": 8, - "y": 22 + "y": 8 }, "id": 86, "links": [], @@ -1293,7 +611,7 @@ "h": 6, "w": 8, "x": 16, - "y": 22 + "y": 8 }, "id": 85, "links": [], @@ -1353,7 +671,7 @@ "h": 1, "w": 24, "x": 0, - "y": 28 + "y": 14 }, "id": 75, "panels": [], @@ -1431,7 +749,7 @@ "h": 6, "w": 12, "x": 0, - "y": 29 + "y": 15 }, "id": 96, "links": [], @@ -1545,7 +863,7 @@ "h": 6, "w": 12, "x": 12, - "y": 29 + "y": 15 }, "id": 77, "links": [], @@ -1621,7 +939,7 @@ "h": 1, "w": 24, "x": 0, - "y": 35 + "y": 21 }, "id": 4, "panels": [], @@ -1675,7 +993,7 @@ "h": 3, "w": 6, "x": 0, - "y": 36 + "y": 22 }, "id": 108, "links": [], @@ -1774,7 +1092,7 @@ "h": 9, "w": 18, "x": 6, - "y": 36 + "y": 22 }, "id": 110, "links": [], @@ -1876,7 +1194,7 @@ "h": 3, "w": 6, "x": 0, - "y": 39 + "y": 25 }, "id": 111, "links": [], @@ -1954,7 +1272,7 @@ "h": 3, "w": 6, "x": 0, - "y": 42 + "y": 28 }, "id": 109, "links": [], @@ -2032,7 +1350,7 @@ "h": 3, "w": 6, "x": 0, - "y": 45 + "y": 31 }, "id": 113, "links": [], @@ -2134,7 +1452,7 @@ "h": 9, "w": 18, "x": 6, - "y": 45 + "y": 31 }, "id": 116, "links": [], @@ -2236,7 +1554,7 @@ "h": 3, "w": 6, "x": 0, - "y": 48 + "y": 34 }, "id": 114, "links": [], @@ -2314,7 +1632,7 @@ "h": 3, "w": 6, "x": 0, - "y": 51 + "y": 37 }, "id": 115, "links": [], @@ -2416,7 +1734,7 @@ "h": 11, "w": 24, "x": 0, - "y": 54 + "y": 40 }, "id": 112, "links": [], @@ -2643,8 +1961,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2660,7 +1977,7 @@ "h": 10, "w": 24, "x": 0, - "y": 65 + "y": 51 }, "id": 117, "links": [], @@ -2856,7 +2173,7 @@ "h": 1, "w": 24, "x": 0, - "y": 75 + "y": 61 }, "id": 17, "panels": [], @@ -2917,8 +2234,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2934,7 +2250,7 @@ "h": 8, "w": 8, "x": 0, - "y": 76 + "y": 62 }, "id": 35, "links": [], @@ -3057,8 +2373,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3074,7 +2389,7 @@ "h": 8, "w": 8, "x": 8, - "y": 76 + "y": 62 }, "id": 118, "links": [], @@ -3197,8 +2512,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3214,7 +2528,7 @@ "h": 8, "w": 8, "x": 16, - "y": 76 + "y": 62 }, "id": 119, "links": [], @@ -3274,7 +2588,7 @@ "h": 1, "w": 24, "x": 0, - "y": 84 + "y": 70 }, "id": 37, "panels": [], @@ -3335,8 +2649,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3352,7 +2665,7 @@ "h": 6, "w": 12, "x": 0, - "y": 85 + "y": 71 }, "id": 120, "links": [], @@ -3449,8 +2762,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3466,7 +2778,7 @@ "h": 6, "w": 12, "x": 12, - "y": 85 + "y": 71 }, "id": 56, "links": [], @@ -3695,8 +3007,8 @@ ] }, "time": { - "from": "now-30m", - "to": "now" + "from": "2023-11-01T16:40:10.382Z", + "to": "2023-11-01T16:45:47.718Z" }, "timepicker": { "refresh_intervals": [ diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 3c3dd44c16..c2f24c4956 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -45,8 +45,11 @@ "el_extra_env_vars": { "BUILDER_TX_SIGNING_KEY": "0xef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" }, - "prometheus_additional_labels": { - "role": "Builder Dev" + "prometheus_config": { + "scrape_interval": "1s", + "labels": { + "role": "Builder Baseline" + } } } ], @@ -66,8 +69,11 @@ "mev_builder_extra_args": [ "--metrics.expensive" ], - "mev_builder_prometheus_additional_labels": { - "role": "Builder Baseline" + "mev_builder_prometheus_config": { + "scrape_interval": "1s", + "labels": { + "role": "Builder Baseline" + } } }, "additional_services": [ From 0e8f4840c1da3b568b1e2b5bfca71b14ed5f503a Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 2 Nov 2023 14:58:36 -0400 Subject: [PATCH 21/58] fix: wrong prometheus config values --- scripts/kurtosis/data/grafana/dashboard.json | 403 ++++++++++++++++--- scripts/kurtosis/network_params.json | 9 +- 2 files changed, 358 insertions(+), 54 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index b79d32e29f..e047756ef4 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -56,8 +56,7 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Gwei", - "axisPlacement": "auto", + "axisPlacement": "left", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, @@ -90,16 +89,29 @@ { "color": "green", "value": null - }, - { - "color": "red", - "value": 80 } ] }, - "unit": "locale" + "unit": "none" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisLabel", + "value": "Slots" + } + ] + } + ] }, "gridPos": { "h": 6, @@ -108,13 +120,20 @@ "y": 1 }, "id": 126, + "interval": "1s", "options": { "legend": { - "calcs": [], + "calcs": [ + "max", + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true }, + "timezone": [ + "" + ], "tooltip": { "mode": "multi", "sort": "desc" @@ -128,9 +147,9 @@ }, "editorMode": "code", "exemplar": false, - "expr": "miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"} / 1000000000", + "expr": "miner_block_profit_gauge{client_name=~\"$client_name\", role=~\"$instance\"} / 1000000000000000000", "hide": false, - "legendFormat": "build {{role}}", + "legendFormat": "{{role}}", "range": true, "refId": "A" }, @@ -144,12 +163,13 @@ "expr": "beacon_head_slot{role=~\"Proposer\"}", "format": "time_series", "hide": false, + "instant": false, "legendFormat": "Slot", "range": true, "refId": "B" } ], - "title": "Bids Created Profit", + "title": "Bids Profit (Eth)", "type": "timeseries" }, { @@ -205,9 +225,27 @@ "value": 80 } ] - } + }, + "unit": "ns" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisLabel", + "value": "Slots" + } + ] + } + ] }, "gridPos": { "h": 6, @@ -216,9 +254,13 @@ "y": 1 }, "id": 125, + "interval": "1", "options": { "legend": { - "calcs": [], + "calcs": [ + "max", + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -268,7 +310,260 @@ "refId": "B" } ], - "title": "Bids Created", + "title": "Bids Creation Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisLabel", + "value": "Slots" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 127, + "interval": "1s", + "options": { + "legend": { + "calcs": [ + "max", + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "miner_block_txnum{client_name=~\"$client_name\", role=~\"$instance\"}", + "hide": false, + "legendFormat": "{{role}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "beacon_head_slot{role=~\"Proposer\"}", + "format": "time_series", + "hide": false, + "legendFormat": "Slot", + "range": true, + "refId": "B" + } + ], + "title": "Bids Txnum", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisLabel", + "value": "Slots" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 128, + "interval": "1", + "options": { + "legend": { + "calcs": [ + "max", + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "miner_block_gasused{client_name=~\"$client_name\", role=~\"$instance\"}", + "format": "time_series", + "hide": false, + "legendFormat": "{{role}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "beacon_head_slot{role=~\"Proposer\"}", + "hide": false, + "legendFormat": "Slot", + "range": true, + "refId": "B" + } + ], + "title": "Bids Gas used", "type": "timeseries" }, { @@ -281,7 +576,7 @@ "h": 1, "w": 24, "x": 0, - "y": 7 + "y": 13 }, "id": 82, "panels": [], @@ -359,7 +654,7 @@ "h": 6, "w": 8, "x": 0, - "y": 8 + "y": 14 }, "id": 106, "links": [], @@ -485,7 +780,7 @@ "h": 6, "w": 8, "x": 8, - "y": 8 + "y": 14 }, "id": 86, "links": [], @@ -611,7 +906,7 @@ "h": 6, "w": 8, "x": 16, - "y": 8 + "y": 14 }, "id": 85, "links": [], @@ -671,7 +966,7 @@ "h": 1, "w": 24, "x": 0, - "y": 14 + "y": 20 }, "id": 75, "panels": [], @@ -749,7 +1044,7 @@ "h": 6, "w": 12, "x": 0, - "y": 15 + "y": 21 }, "id": 96, "links": [], @@ -863,7 +1158,7 @@ "h": 6, "w": 12, "x": 12, - "y": 15 + "y": 21 }, "id": 77, "links": [], @@ -939,7 +1234,7 @@ "h": 1, "w": 24, "x": 0, - "y": 21 + "y": 27 }, "id": 4, "panels": [], @@ -993,7 +1288,7 @@ "h": 3, "w": 6, "x": 0, - "y": 22 + "y": 28 }, "id": 108, "links": [], @@ -1092,7 +1387,7 @@ "h": 9, "w": 18, "x": 6, - "y": 22 + "y": 28 }, "id": 110, "links": [], @@ -1194,7 +1489,7 @@ "h": 3, "w": 6, "x": 0, - "y": 25 + "y": 31 }, "id": 111, "links": [], @@ -1272,7 +1567,7 @@ "h": 3, "w": 6, "x": 0, - "y": 28 + "y": 34 }, "id": 109, "links": [], @@ -1350,7 +1645,7 @@ "h": 3, "w": 6, "x": 0, - "y": 31 + "y": 37 }, "id": 113, "links": [], @@ -1452,7 +1747,7 @@ "h": 9, "w": 18, "x": 6, - "y": 31 + "y": 37 }, "id": 116, "links": [], @@ -1554,7 +1849,7 @@ "h": 3, "w": 6, "x": 0, - "y": 34 + "y": 40 }, "id": 114, "links": [], @@ -1632,7 +1927,7 @@ "h": 3, "w": 6, "x": 0, - "y": 37 + "y": 43 }, "id": 115, "links": [], @@ -1734,7 +2029,7 @@ "h": 11, "w": 24, "x": 0, - "y": 40 + "y": 46 }, "id": 112, "links": [], @@ -1961,7 +2256,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1977,7 +2273,7 @@ "h": 10, "w": 24, "x": 0, - "y": 51 + "y": 57 }, "id": 117, "links": [], @@ -2173,7 +2469,7 @@ "h": 1, "w": 24, "x": 0, - "y": 61 + "y": 67 }, "id": 17, "panels": [], @@ -2234,7 +2530,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2250,7 +2547,7 @@ "h": 8, "w": 8, "x": 0, - "y": 62 + "y": 68 }, "id": 35, "links": [], @@ -2373,7 +2670,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2389,7 +2687,7 @@ "h": 8, "w": 8, "x": 8, - "y": 62 + "y": 68 }, "id": 118, "links": [], @@ -2512,7 +2810,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2528,7 +2827,7 @@ "h": 8, "w": 8, "x": 16, - "y": 62 + "y": 68 }, "id": 119, "links": [], @@ -2588,7 +2887,7 @@ "h": 1, "w": 24, "x": 0, - "y": 70 + "y": 76 }, "id": 37, "panels": [], @@ -2649,7 +2948,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2665,7 +2965,7 @@ "h": 6, "w": 12, "x": 0, - "y": 71 + "y": 77 }, "id": 120, "links": [], @@ -2762,7 +3062,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2778,7 +3079,7 @@ "h": 6, "w": 12, "x": 12, - "y": 71 + "y": 77 }, "id": 56, "links": [], @@ -2904,7 +3205,7 @@ }, { "current": { - "selected": true, + "selected": false, "text": "0.5", "value": "0.5" }, @@ -2951,7 +3252,7 @@ }, { "current": { - "selected": true, + "selected": false, "text": "5m", "value": "5m" }, @@ -3007,8 +3308,8 @@ ] }, "time": { - "from": "2023-11-01T16:40:10.382Z", - "to": "2023-11-01T16:45:47.718Z" + "from": "now-30m", + "to": "now" }, "timepicker": { "refresh_intervals": [ diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index c2f24c4956..098cce1d77 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -12,8 +12,11 @@ "--always-prefer-builder-payload", "--disable-peer-scoring" ], - "prometheus_additional_labels": { - "role": "Proposer" + "prometheus_config": { + "scrape_interval": "1s", + "labels": { + "role": "Proposer" + } } }, { @@ -48,7 +51,7 @@ "prometheus_config": { "scrape_interval": "1s", "labels": { - "role": "Builder Baseline" + "role": "Builder Dev" } } } From 333d014afcbc861956e3e90bca0bebfd56d5e935 Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Tue, 7 Nov 2023 20:19:33 +0000 Subject: [PATCH 22/58] tested dind no port forwarding --- scripts/dind/Dockerfile.kurtosis_dind | 30 ++++++++----- scripts/dind/readme.md | 65 +++++++++++++++++++++++++++ scripts/readme.md | 2 +- 3 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 scripts/dind/readme.md diff --git a/scripts/dind/Dockerfile.kurtosis_dind b/scripts/dind/Dockerfile.kurtosis_dind index 87137dd36c..78250bef08 100644 --- a/scripts/dind/Dockerfile.kurtosis_dind +++ b/scripts/dind/Dockerfile.kurtosis_dind @@ -1,20 +1,28 @@ -FROM mcr.microsoft.com/devcontainers/base:bullseye +FROM docker:dind -# Get Go -RUN apt install git curl tar && \ - curl https://dl.google.com/go/go1.21.3.linux-amd64.tar.gz -o go.tar.gz && \ +# Create the /etc/machine-id file +RUN apk add --no-cache dbus && \ + dbus-uuidgen > /etc/machine-id + +# Install required packages +RUN apk add --no-cache git curl tar + +# Download and install Go +RUN curl https://dl.google.com/go/go1.21.3.linux-amd64.tar.gz -o go.tar.gz && \ tar -C /usr/local -xzf go.tar.gz && \ rm go.tar.gz # Set up Go environment variables ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH -RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" +RUN mkdir -p "${GOPATH}/src" "${GOPATH}/bin" && chmod -R 777 "${GOPATH}" + +# Download and install Kurtosis CLI +RUN curl -L "https://github.com/kurtosis-tech/kurtosis-cli-release-artifacts/releases/download/0.85.3/kurtosis-cli_0.85.3_linux_amd64.tar.gz" -o kurtosis-cli.tar.gz && \ + tar -xzvf kurtosis-cli.tar.gz -C /usr/local/bin && \ + rm kurtosis-cli.tar.gz -# Install Kurtosis -RUN echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | tee /etc/apt/sources.list.d/kurtosis.list -RUN sudo apt update && \ - sudo apt install kurtosis-cli +ADD . /go-ethereum +WORKDIR /go-ethereum/scripts/ -WORKDIR /geth -COPY ../ . +ENV DOCKER_HOST=unix:///var/run/docker.sock diff --git a/scripts/dind/readme.md b/scripts/dind/readme.md new file mode 100644 index 0000000000..7cb83c694a --- /dev/null +++ b/scripts/dind/readme.md @@ -0,0 +1,65 @@ +docker build -f ./Dockerfile.kurtosis_dind -t my-dind-env ../../ + +docker stop my-running-script +docker rm my-running-script + +docker run -dit --privileged --name my-running-script my-dind-env + +docker exec my-running-script go run emulate_network.go build -t=test-builder +docker exec my-running-script go run emulate_network.go run -n=enclaveName +docker exec my-running-script go run emulate_network.go stop -n=enclaveName + +# Emulate Network Using Docker-in-Docker (DinD) + +This documentation details the use of Docker-in-Docker (DinD) to emulate network environments for testing builder performance. This method provides an isolated environment, removing the need for Go or Kurtosis installations on the host system. + +## Introduction + +Utilizing a DinD setup allows developers to create a contained environment where Docker images can be built and Kurtosis enclaves can be managed. This is particularly useful for simulating network conditions in a clean state without affecting the host's setup. + +## Running in a DinD Environment + +### Prerequisites + +- **Docker**: Ensure Docker is installed and running on your system. The DinD process will be running as a Docker container. + +### Setup and Execution + +1. **Create the DinD Environment**: + - Run a DinD container for an isolated build environment named `builder-dind-container`: + ```shell + docker run -dit --privileged --name builder-dind-container builder-dind-image + ``` + ***note:*** privileged mode that is not needed when using local hosting in your docker described [here](../) + +2. **Build the Builder Image**: + - Execute the build command within the DinD environment: + ```shell + docker exec builder-dind-container go run emulate_network.go build -t=custom-builder-tag + ``` + +3. **Start the Enclave**: + - Start an enclave with the specified builder image: + ```shell + docker exec builder-dind-container go run emulate_network.go run -n=builder-enclave -t=custom-builder-tag + ``` + +4. **Stop the Enclave**: + - To stop a running enclave, use the following command: + ```shell + docker exec builder-dind-container go run emulate_network.go stop -n=builder-enclave + ``` + +5. **Cleanup**: + - To stop and remove the DinD container, execute: + ```shell + docker stop builder-dind-container + docker rm builder-dind-container + ``` + +**Note**: Replace `builder-dind-container` with a descriptive name relevant to your project, and `builder-dind-image` with the image name you've prepared for the DinD environment. The `custom-builder-tag` should be replaced with the actual tag name you wish to assign to your builder image. + +## Known Issues and Solutions +Guess the ports + +By following these instructions, developers can leverage a Docker-in-Docker approach to emulate networks and test builder performance in a controlled and isolated manner. \ No newline at end of file diff --git a/scripts/readme.md b/scripts/readme.md index adcc73c5d4..c095e740bf 100644 --- a/scripts/readme.md +++ b/scripts/readme.md @@ -53,7 +53,7 @@ To run script `cd` into this (`./scripts`) folder. - `-k`: (Optional) Path to `kurtosis` executable. Defaults to `kurtosis`. - Example: ``` - go run emulate_network.go run -t=imageTag -a=imageArgs -n=enclaveName -k=/path/to/kurtosis + go run emulate_network.go run -t=test-builder -a=imageArgs -n=enclaveName -k=/path/to/kurtosis ``` 3. **stop**: From 591d8e37fdf68fbd686bb82b3eb9fec1cdfab1ec Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Tue, 7 Nov 2023 15:20:24 -0500 Subject: [PATCH 23/58] fix: wrong units for slots on blocks build time --- scripts/kurtosis/data/grafana/dashboard.json | 59 ++++++++------------ 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index e047756ef4..c86b89f9b1 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -26,7 +26,7 @@ "fiscalYearStartMonth": 0, "gnetId": 14053, "graphTooltip": 1, - "id": 2, + "id": 3, "links": [], "liveNow": false, "panels": [ @@ -56,6 +56,7 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", + "axisLabel": "", "axisPlacement": "left", "barAlignment": 0, "drawStyle": "line", @@ -242,6 +243,10 @@ { "id": "custom.axisLabel", "value": "Slots" + }, + { + "id": "unit", + "value": "none" } ] } @@ -326,6 +331,7 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", @@ -1027,8 +1033,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1141,8 +1146,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1275,8 +1279,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(252, 252, 252)", - "value": null + "color": "rgb(252, 252, 252)" } ] }, @@ -1374,8 +1377,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] }, @@ -1476,8 +1478,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1554,8 +1555,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1632,8 +1632,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1730,8 +1729,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1836,8 +1834,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -1914,8 +1911,7 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)", - "value": null + "color": "rgb(255, 255, 255)" } ] }, @@ -2012,8 +2008,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2256,8 +2251,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2530,8 +2524,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2670,8 +2663,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2810,8 +2802,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2948,8 +2939,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3062,8 +3052,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", From 480d3df7e28ad11eab9ede8cccb7825de6eb4d85 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Wed, 8 Nov 2023 08:59:42 -0500 Subject: [PATCH 24/58] feat: update ethereum package branch --- scripts/kurtosis/main.star | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index ececc31fd5..6836f640bb 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/prometheus-additional-labels" + "github.com/kurtosis-tech/ethereum-package/main.star@main" ) def run(plan, file_to_read = "network_params_tmp.json"): From e607941c7f2781e627fe09ff58937d86b5f94b56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Thu, 9 Nov 2023 12:31:22 +0100 Subject: [PATCH 25/58] Use broadcaster instead of peering between builders --- scripts/kurtosis/network_params.json | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 03723c232e..ad17e716b4 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -2,7 +2,8 @@ "mev_type": "full", "participants": [ { - "el_client_type": "geth", + "el_client_type": "nethermind", + "el_client_image": "nethermind/nethermind:1.21.0", "el_client_log_level": "", "cl_client_type": "lighthouse", "cl_client_log_level": "", @@ -36,7 +37,8 @@ "--miner.extradata=The_Dev_version_of_builder", "--builder.algotype=greedy", "--metrics.builder", - "--metrics.expensive" + "--metrics.expensive", + "--maxpeers 0" ], "validator_count": 0, "el_extra_env_vars": { @@ -49,19 +51,21 @@ "seconds_per_slot": 12 }, "mev_params": { - "mev_flood_seconds_per_bundle": 13, + "mev_flood_seconds_per_bundle": 11, "mev_flood_extra_args": [ - "--txsPerBundle=250" + "--txsPerBundle=130" ], "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", "mev_builder_image": "flashbots/builder:1.13.2.4844.dev5-4d161de", "mev_builder_extra_args": [ - "--metrics.expensive" + "--metrics.expensive", + "--maxpeers 0" ] }, "additional_services": [ + "broadcaster", "tx_spammer", "blob_spammer", "custom_flood", @@ -71,13 +75,13 @@ ], "tx_spammer_params": { "tx_spammer_extra_args": [ - "--txcount=250" + "--txcount=1" ] }, "custom_flood_params": { - "interval_between_transactions": 0.05 + "interval_between_transactions": 0.1 }, "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" ] -} +} \ No newline at end of file From 06a35e281c1cec2fd2cd4379f161fed090b23813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Thu, 9 Nov 2023 16:06:29 +0100 Subject: [PATCH 26/58] Use ethereum-package main branch and a newer version of nethermind client --- scripts/kurtosis/main.star | 2 +- scripts/kurtosis/network_params.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index 2db0077e90..af732fa683 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/builder-metrics" + "github.com/kurtosis-tech/ethereum-package/main.star" ) def run(plan, file_to_read = "network_params_tmp.json"): diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index ad17e716b4..2332cdd79a 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -3,7 +3,7 @@ "participants": [ { "el_client_type": "nethermind", - "el_client_image": "nethermind/nethermind:1.21.0", + "el_client_image": "nethermind/nethermind:1.21.1", "el_client_log_level": "", "cl_client_type": "lighthouse", "cl_client_log_level": "", From 51ade5b4425eee8aea683fb5f8a39f0d9eadae70 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 9 Nov 2023 14:47:07 -0500 Subject: [PATCH 27/58] feat: improve dashboard and reduce slot time --- scripts/kurtosis/data/grafana/dashboard.json | 240 +++++++++++-------- scripts/kurtosis/network_params.json | 6 +- 2 files changed, 139 insertions(+), 107 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index c86b89f9b1..f522d379d1 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -18,6 +18,20 @@ "type": "dashboard" }, "type": "dashboard" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "enable": true, + "expr": "beacon_head_slot{role=\"Proposer\"} <= 128", + "hide": true, + "iconColor": "#F2495C", + "name": "Epoch 4", + "step": "1s", + "textFormat": "Builder blocks are not being used during the first 4 epochs", + "titleFormat": "Epoch 4" } ] }, @@ -26,7 +40,7 @@ "fiscalYearStartMonth": 0, "gnetId": 14053, "graphTooltip": 1, - "id": 3, + "id": 4, "links": [], "liveNow": false, "panels": [ @@ -115,7 +129,7 @@ ] }, "gridPos": { - "h": 6, + "h": 7, "w": 12, "x": 0, "y": 1 @@ -126,9 +140,10 @@ "legend": { "calcs": [ "max", - "mean" + "mean", + "sum" ], - "displayMode": "list", + "displayMode": "table", "placement": "bottom", "showLegend": true }, @@ -253,7 +268,7 @@ ] }, "gridPos": { - "h": 6, + "h": 7, "w": 12, "x": 12, "y": 1 @@ -266,7 +281,7 @@ "max", "mean" ], - "displayMode": "list", + "displayMode": "table", "placement": "bottom", "showLegend": true }, @@ -394,10 +409,10 @@ ] }, "gridPos": { - "h": 6, + "h": 7, "w": 12, "x": 0, - "y": 7 + "y": 8 }, "id": 127, "interval": "1s", @@ -407,7 +422,7 @@ "max", "mean" ], - "displayMode": "list", + "displayMode": "table", "placement": "bottom", "showLegend": true }, @@ -520,10 +535,10 @@ ] }, "gridPos": { - "h": 6, + "h": 7, "w": 12, "x": 12, - "y": 7 + "y": 8 }, "id": 128, "interval": "1", @@ -533,7 +548,7 @@ "max", "mean" ], - "displayMode": "list", + "displayMode": "table", "placement": "bottom", "showLegend": true }, @@ -582,7 +597,7 @@ "h": 1, "w": 24, "x": 0, - "y": 13 + "y": 15 }, "id": 82, "panels": [], @@ -660,7 +675,7 @@ "h": 6, "w": 8, "x": 0, - "y": 14 + "y": 16 }, "id": 106, "links": [], @@ -686,7 +701,7 @@ "editorMode": "code", "expr": "system_cpu_sysload{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "system {{role}}", "range": true, @@ -700,7 +715,7 @@ "editorMode": "code", "expr": "system_cpu_syswait{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "iowait {{role}}", "range": true, @@ -714,7 +729,7 @@ "editorMode": "code", "expr": "system_cpu_procload{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "geth {{role}}", "range": true, @@ -786,7 +801,7 @@ "h": 6, "w": 8, "x": 8, - "y": 14 + "y": 16 }, "id": 86, "links": [], @@ -812,7 +827,7 @@ "editorMode": "code", "expr": "rate(system_memory_allocs{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "alloc {{role}}", "range": true, @@ -826,7 +841,7 @@ "editorMode": "code", "expr": "system_memory_used{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "used {{role}}", "range": true, @@ -840,7 +855,7 @@ "editorMode": "code", "expr": "system_memory_held{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "held {{role}}", "range": true, @@ -912,7 +927,7 @@ "h": 6, "w": 8, "x": 16, - "y": 14 + "y": 16 }, "id": 85, "links": [], @@ -938,7 +953,7 @@ "editorMode": "code", "expr": "rate(system_disk_readbytes{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "read {{role}}", "range": true, @@ -952,7 +967,7 @@ "editorMode": "code", "expr": "rate(system_disk_writebytes{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "write {{role}}", "range": true, @@ -972,7 +987,7 @@ "h": 1, "w": 24, "x": 0, - "y": 20 + "y": 22 }, "id": 75, "panels": [], @@ -1033,7 +1048,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1049,7 +1065,7 @@ "h": 6, "w": 12, "x": 0, - "y": 21 + "y": 23 }, "id": 96, "links": [], @@ -1077,7 +1093,7 @@ "editorMode": "code", "expr": "rate(p2p_ingress{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "ingress {{role}}", "range": true, @@ -1091,7 +1107,7 @@ "editorMode": "code", "expr": "rate(p2p_egress{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "egress {{role}}", "range": true, @@ -1146,7 +1162,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1162,7 +1179,7 @@ "h": 6, "w": 12, "x": 12, - "y": 21 + "y": 23 }, "id": 77, "links": [], @@ -1238,7 +1255,7 @@ "h": 1, "w": 24, "x": 0, - "y": 27 + "y": 29 }, "id": 4, "panels": [], @@ -1279,7 +1296,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(252, 252, 252)" + "color": "rgb(252, 252, 252)", + "value": null } ] }, @@ -1291,7 +1309,7 @@ "h": 3, "w": 6, "x": 0, - "y": 28 + "y": 30 }, "id": 108, "links": [], @@ -1377,7 +1395,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1389,7 +1408,7 @@ "h": 9, "w": 18, "x": 6, - "y": 28 + "y": 30 }, "id": 110, "links": [], @@ -1478,7 +1497,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -1490,7 +1510,7 @@ "h": 3, "w": 6, "x": 0, - "y": 31 + "y": 33 }, "id": 111, "links": [], @@ -1555,7 +1575,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -1567,7 +1588,7 @@ "h": 3, "w": 6, "x": 0, - "y": 34 + "y": 36 }, "id": 109, "links": [], @@ -1632,7 +1653,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -1644,7 +1666,7 @@ "h": 3, "w": 6, "x": 0, - "y": 37 + "y": 39 }, "id": 113, "links": [], @@ -1729,7 +1751,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1745,7 +1768,7 @@ "h": 9, "w": 18, "x": 6, - "y": 37 + "y": 39 }, "id": 116, "links": [], @@ -1771,7 +1794,7 @@ "editorMode": "code", "expr": "txpool_pending{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "executable {{role}}", "range": true, @@ -1785,7 +1808,7 @@ "editorMode": "code", "expr": "txpool_queued{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "gapped {{role}}", "range": true, @@ -1799,7 +1822,7 @@ "editorMode": "code", "expr": "txpool_local{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "local {{role}}", "range": true, @@ -1834,7 +1857,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -1846,7 +1870,7 @@ "h": 3, "w": 6, "x": 0, - "y": 40 + "y": 42 }, "id": 114, "links": [], @@ -1911,7 +1935,8 @@ "mode": "absolute", "steps": [ { - "color": "rgb(255, 255, 255)" + "color": "rgb(255, 255, 255)", + "value": null } ] }, @@ -1923,7 +1948,7 @@ "h": 3, "w": 6, "x": 0, - "y": 43 + "y": 45 }, "id": 115, "links": [], @@ -2008,7 +2033,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2024,7 +2050,7 @@ "h": 11, "w": 24, "x": 0, - "y": 46 + "y": 48 }, "id": 112, "links": [], @@ -2054,7 +2080,7 @@ "editorMode": "code", "expr": "chain_execution{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "execution (q=$quantile) {{role}}", "range": true, @@ -2069,7 +2095,7 @@ "expr": "chain_validation{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "validation (q=$quantile) {{role}}", "range": true, @@ -2084,7 +2110,7 @@ "expr": "chain_write{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "commit (q=$quantile) {{role}}", "range": true, @@ -2098,7 +2124,7 @@ "editorMode": "code", "expr": "chain_account_reads{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "account read (q=$quantile) {{role}}", "range": true, @@ -2112,7 +2138,7 @@ "editorMode": "code", "expr": "chain_account_updates{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "account update (q=$quantile) {{role}}", "range": true, @@ -2126,7 +2152,7 @@ "editorMode": "code", "expr": "chain_account_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "account hashe (q=$quantile) {{role}}", "range": true, @@ -2140,7 +2166,7 @@ "editorMode": "code", "expr": "chain_account_commits{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "account commit (q=$quantile) {{role}}", "range": true, @@ -2154,7 +2180,7 @@ "editorMode": "code", "expr": "chain_storage_reads{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "storage read (q=$quantile) {{role}}", "range": true, @@ -2168,7 +2194,7 @@ "editorMode": "code", "expr": "chain_storage_updates{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "storage update (q=$quantile) {{role}}", "range": true, @@ -2182,7 +2208,7 @@ "editorMode": "code", "expr": "chain_storage_hashes{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "storage hashe (q=$quantile) {{role}}", "range": true, @@ -2196,7 +2222,7 @@ "editorMode": "code", "expr": "chain_storage_commits{quantile=\"$quantile\", client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "storage commit (q=$quantile) {{role}}", "range": true, @@ -2251,7 +2277,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2267,7 +2294,7 @@ "h": 10, "w": 24, "x": 0, - "y": 57 + "y": 59 }, "id": 117, "links": [], @@ -2297,7 +2324,7 @@ "editorMode": "code", "expr": "rate(txpool_valid{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "valid {{role}}", "range": true, @@ -2311,7 +2338,7 @@ "editorMode": "code", "expr": "rate(txpool_invalid{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "invalid {{role}}", "range": true, @@ -2326,7 +2353,7 @@ "expr": "rate(txpool_underpriced{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "underpriced {{role}}", "range": true, @@ -2341,7 +2368,7 @@ "expr": "rate(txpool_pending_discard{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "executable discard {{role}}", "range": true, @@ -2355,7 +2382,7 @@ "editorMode": "code", "expr": "rate(txpool_pending_replace{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "executable replace {{role}}", "range": true, @@ -2369,7 +2396,7 @@ "editorMode": "code", "expr": "rate(txpool_pending_ratelimit{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "executable ratelimit {{role}}", "range": true, @@ -2383,7 +2410,7 @@ "editorMode": "code", "expr": "rate(txpool_pending_nofunds{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "executable nofunds {{role}}", "range": true, @@ -2398,7 +2425,7 @@ "expr": "rate(txpool_queued_discard{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "gapped discard {{role}}", "range": true, @@ -2413,7 +2440,7 @@ "expr": "rate(txpool_queued_replace{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "gapped replace {{role}}", "range": true, @@ -2428,7 +2455,7 @@ "expr": "rate(txpool_queued_ratelimit{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "gapped ratelimit {{role}}", "range": true, @@ -2443,7 +2470,7 @@ "expr": "rate(txpool_queued_nofunds{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "gapped nofunds {{role}}", "range": true, @@ -2463,7 +2490,7 @@ "h": 1, "w": 24, "x": 0, - "y": 67 + "y": 69 }, "id": 17, "panels": [], @@ -2524,7 +2551,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2540,7 +2568,7 @@ "h": 8, "w": 8, "x": 0, - "y": 68 + "y": 70 }, "id": 35, "links": [], @@ -2566,7 +2594,7 @@ "editorMode": "code", "expr": "rate(eth_db_chaindata_disk_read{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "leveldb read {{role}}", "range": true, @@ -2580,7 +2608,7 @@ "editorMode": "code", "expr": "rate(eth_db_chaindata_disk_write{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "leveldb write {{role}}", "range": true, @@ -2594,7 +2622,7 @@ "editorMode": "code", "expr": "rate(eth_db_chaindata_ancient_read{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "ancient read {{role}}", "range": true, @@ -2608,7 +2636,7 @@ "editorMode": "code", "expr": "rate(eth_db_chaindata_ancient_write{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "ancient write {{role}}", "range": true, @@ -2663,7 +2691,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2679,7 +2708,7 @@ "h": 8, "w": 8, "x": 8, - "y": 68 + "y": 70 }, "id": 118, "links": [], @@ -2705,7 +2734,7 @@ "editorMode": "code", "expr": "eth_db_chaindata_disk_read{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "leveldb read {{role}}", "range": true, @@ -2719,7 +2748,7 @@ "editorMode": "code", "expr": "eth_db_chaindata_disk_write{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "leveldb write {{role}}", "range": true, @@ -2733,7 +2762,7 @@ "editorMode": "code", "expr": "eth_db_chaindata_ancient_read{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "ancient read {{role}}", "range": true, @@ -2747,7 +2776,7 @@ "editorMode": "code", "expr": "eth_db_chaindata_ancient_write{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "ancient write {{role}}", "range": true, @@ -2802,7 +2831,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2818,7 +2848,7 @@ "h": 8, "w": 8, "x": 16, - "y": 68 + "y": 70 }, "id": 119, "links": [], @@ -2844,7 +2874,7 @@ "editorMode": "code", "expr": "eth_db_chaindata_disk_size{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "leveldb {{role}}", "range": true, @@ -2858,7 +2888,7 @@ "editorMode": "code", "expr": "eth_db_chaindata_ancient_size{client_name=~\"$client_name\", role=~\"$instance\"}", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "ancient {{role}}", "range": true, @@ -2878,7 +2908,7 @@ "h": 1, "w": 24, "x": 0, - "y": 76 + "y": 78 }, "id": 37, "panels": [], @@ -2939,7 +2969,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2955,7 +2986,7 @@ "h": 6, "w": 12, "x": 0, - "y": 77 + "y": 79 }, "id": 120, "links": [], @@ -2982,7 +3013,7 @@ "expr": "rate(trie_memcache_clean_read{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "hit {{role}}", "range": true, @@ -2997,7 +3028,7 @@ "expr": "rate(trie_memcache_clean_write{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "miss {{role}}", "range": true, @@ -3052,7 +3083,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3068,7 +3100,7 @@ "h": 6, "w": 12, "x": 12, - "y": 77 + "y": 79 }, "id": 56, "links": [], @@ -3095,7 +3127,7 @@ "expr": "rate(trie_memcache_gc_size{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", "hide": false, - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "gc {{role}}", "range": true, @@ -3124,7 +3156,7 @@ "editorMode": "code", "expr": "rate(trie_memcache_commit_size{client_name=~\"$client_name\", role=~\"$instance\"}[$rate])", "format": "time_series", - "interval": "", + "interval": "1s", "intervalFactor": 1, "legendFormat": "commit {{role}}", "range": true, @@ -3297,7 +3329,7 @@ ] }, "time": { - "from": "now-30m", + "from": "now-5m", "to": "now" }, "timepicker": { diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 054c24697e..e955fe5857 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -60,7 +60,7 @@ ], "network_params": { "capella_fork_epoch": 0, - "seconds_per_slot": 12 + "seconds_per_slot": 5 }, "mev_params": { "mev_flood_seconds_per_bundle": 11, @@ -70,7 +70,7 @@ "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", - "mev_builder_image": "flashbots/builder:1.13.2.4844.dev5-4d161de", + "mev_builder_image": "flashbots/builder:latest", "mev_builder_extra_args": [ "--metrics.expensive", "--maxpeers 0" @@ -102,4 +102,4 @@ "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" ] -} +} \ No newline at end of file From daeb9dd3f92ff2a888af717aec8112e8e512875f Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 9 Nov 2023 15:53:56 -0500 Subject: [PATCH 28/58] feat: allow to disable epoch 4 annotation --- scripts/kurtosis/data/grafana/dashboard.json | 158 +++++++++++++++---- 1 file changed, 125 insertions(+), 33 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index f522d379d1..bbb8c55de8 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -26,7 +26,7 @@ }, "enable": true, "expr": "beacon_head_slot{role=\"Proposer\"} <= 128", - "hide": true, + "hide": false, "iconColor": "#F2495C", "name": "Epoch 4", "step": "1s", @@ -40,17 +40,109 @@ "fiscalYearStartMonth": 0, "gnetId": 14053, "graphTooltip": 1, - "id": 4, + "id": 2, "links": [], "liveNow": false, "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "from": 128, + "result": { + "color": "green", + "index": 0, + "text": "Yes" + } + }, + "type": "range" + }, + { + "options": { + "result": { + "color": "red", + "index": 1, + "text": "No" + }, + "to": 127 + }, + "type": "range" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 7, + "x": 0, + "y": 0 + }, + "id": 129, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "text": { + "titleSize": 1 + }, + "textMode": "auto" + }, + "pluginVersion": "9.5.12", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "beacon_head_slot{role=\"Proposer\"}", + "interval": "1s", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Epoch 4 Reached", + "type": "stat" + }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 0 + "y": 4 }, "id": 122, "panels": [], @@ -132,7 +224,7 @@ "h": 7, "w": 12, "x": 0, - "y": 1 + "y": 5 }, "id": 126, "interval": "1s", @@ -271,7 +363,7 @@ "h": 7, "w": 12, "x": 12, - "y": 1 + "y": 5 }, "id": 125, "interval": "1", @@ -412,7 +504,7 @@ "h": 7, "w": 12, "x": 0, - "y": 8 + "y": 12 }, "id": 127, "interval": "1s", @@ -538,7 +630,7 @@ "h": 7, "w": 12, "x": 12, - "y": 8 + "y": 12 }, "id": 128, "interval": "1", @@ -597,7 +689,7 @@ "h": 1, "w": 24, "x": 0, - "y": 15 + "y": 19 }, "id": 82, "panels": [], @@ -675,7 +767,7 @@ "h": 6, "w": 8, "x": 0, - "y": 16 + "y": 20 }, "id": 106, "links": [], @@ -801,7 +893,7 @@ "h": 6, "w": 8, "x": 8, - "y": 16 + "y": 20 }, "id": 86, "links": [], @@ -927,7 +1019,7 @@ "h": 6, "w": 8, "x": 16, - "y": 16 + "y": 20 }, "id": 85, "links": [], @@ -987,7 +1079,7 @@ "h": 1, "w": 24, "x": 0, - "y": 22 + "y": 26 }, "id": 75, "panels": [], @@ -1065,7 +1157,7 @@ "h": 6, "w": 12, "x": 0, - "y": 23 + "y": 27 }, "id": 96, "links": [], @@ -1179,7 +1271,7 @@ "h": 6, "w": 12, "x": 12, - "y": 23 + "y": 27 }, "id": 77, "links": [], @@ -1255,7 +1347,7 @@ "h": 1, "w": 24, "x": 0, - "y": 29 + "y": 33 }, "id": 4, "panels": [], @@ -1309,7 +1401,7 @@ "h": 3, "w": 6, "x": 0, - "y": 30 + "y": 34 }, "id": 108, "links": [], @@ -1408,7 +1500,7 @@ "h": 9, "w": 18, "x": 6, - "y": 30 + "y": 34 }, "id": 110, "links": [], @@ -1510,7 +1602,7 @@ "h": 3, "w": 6, "x": 0, - "y": 33 + "y": 37 }, "id": 111, "links": [], @@ -1588,7 +1680,7 @@ "h": 3, "w": 6, "x": 0, - "y": 36 + "y": 40 }, "id": 109, "links": [], @@ -1666,7 +1758,7 @@ "h": 3, "w": 6, "x": 0, - "y": 39 + "y": 43 }, "id": 113, "links": [], @@ -1768,7 +1860,7 @@ "h": 9, "w": 18, "x": 6, - "y": 39 + "y": 43 }, "id": 116, "links": [], @@ -1870,7 +1962,7 @@ "h": 3, "w": 6, "x": 0, - "y": 42 + "y": 46 }, "id": 114, "links": [], @@ -1948,7 +2040,7 @@ "h": 3, "w": 6, "x": 0, - "y": 45 + "y": 49 }, "id": 115, "links": [], @@ -2050,7 +2142,7 @@ "h": 11, "w": 24, "x": 0, - "y": 48 + "y": 52 }, "id": 112, "links": [], @@ -2294,7 +2386,7 @@ "h": 10, "w": 24, "x": 0, - "y": 59 + "y": 63 }, "id": 117, "links": [], @@ -2490,7 +2582,7 @@ "h": 1, "w": 24, "x": 0, - "y": 69 + "y": 73 }, "id": 17, "panels": [], @@ -2568,7 +2660,7 @@ "h": 8, "w": 8, "x": 0, - "y": 70 + "y": 74 }, "id": 35, "links": [], @@ -2708,7 +2800,7 @@ "h": 8, "w": 8, "x": 8, - "y": 70 + "y": 74 }, "id": 118, "links": [], @@ -2848,7 +2940,7 @@ "h": 8, "w": 8, "x": 16, - "y": 70 + "y": 74 }, "id": 119, "links": [], @@ -2908,7 +3000,7 @@ "h": 1, "w": 24, "x": 0, - "y": 78 + "y": 82 }, "id": 37, "panels": [], @@ -2986,7 +3078,7 @@ "h": 6, "w": 12, "x": 0, - "y": 79 + "y": 83 }, "id": 120, "links": [], @@ -3100,7 +3192,7 @@ "h": 6, "w": 12, "x": 12, - "y": 79 + "y": 83 }, "id": 56, "links": [], @@ -3167,7 +3259,7 @@ "type": "timeseries" } ], - "refresh": false, + "refresh": "5s", "revision": 1, "schemaVersion": 38, "style": "dark", From 029dd546c776aeca34e58157d60ced1a86c7bc72 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 9 Nov 2023 16:10:20 -0500 Subject: [PATCH 29/58] fix: wrong value mappings --- scripts/kurtosis/data/grafana/dashboard.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index bbb8c55de8..6e51165761 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -62,12 +62,14 @@ "color": "green", "index": 0, "text": "Yes" - } + }, + "to": null }, "type": "range" }, { "options": { + "from": null, "result": { "color": "red", "index": 1, From deb051ef20d38d86f6565b412a32d62a1aebf439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= Date: Thu, 9 Nov 2023 22:43:33 +0100 Subject: [PATCH 30/58] Add slot Time --- scripts/emulate_network.go | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index 401c1506fd..ed34fa8347 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -20,7 +20,7 @@ func build(imageTag string, buildDir string, buildDockerfilePath string) { runCommand(cmd) } -func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolder string, filename ...string) { +func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolder string, slotTime int64, filename ...string) { // Determine the filename. If not provided, default to "network_params.json". var file string if len(filename) > 0 { @@ -43,6 +43,15 @@ func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolde return } + if slotTime != 0 { + if networkParams, ok := data["network_params"].(map[string]interface{}); ok { + networkParams["seconds_per_slot"] = slotTime + fmt.Printf("Seconds per slot updated to %d\n", slotTime) + } else { + fmt.Println("network_params object not found or is not a JSON object") + } + } + // Navigate to the participants array if participants, ok := data["participants"].([]interface{}); ok { for _, participant := range participants { @@ -184,19 +193,20 @@ func help() { fmt.Println(`Emulate Network script Available commands: - build - - -t : Image tag (optional, default: "flashbots/builder:dev") - - -d : Image Build directory (optional, default: "..") - - -f : Build dockerfile path (optional, default: "./Dockerfile.debug") + - -t : Image tag (optional, default: "flashbots/builder:dev") + - -d : Image Build directory (optional, default: "..") + - -f : Build dockerfile path (optional, default: "./Dockerfile.debug") - run - - -t : Image tag (optional, default: "flashbots/builder:dev") - - -n : Enclave name (optional, default: "explorer") - - -a : Additional builder arguments (optional) - - -s : Max steps (optional, default: -1) - - -k : Kurtosis path (optional, default: "kurtosis") - - -c : Kurtosis network config (optional, default: "./kurtosis") + - -t : Image tag (optional, default: "flashbots/builder:dev") + - -n : Enclave name (optional, default: "explorer") + - -a : Additional builder arguments (optional) + - -s : Max steps (optional, default: -1) + - -k : Kurtosis path (optional, default: "kurtosis") + - -c : Kurtosis network config (optional, default: "./kurtosis") + - --slotTime : Seconds per slot applied on local devnet (optional, default: 5) - stop - - -k : Kurtosis path (optional, default: "kurtosis") - - -n : Enclave name (required) + - -k : Kurtosis path (optional, default: "kurtosis") + - -n : Enclave name (required) `) } @@ -223,6 +233,7 @@ func main() { kurtosisNetworkConfigScriptFolder := flagSet.String("f", "./kurtosis", "Kurtosis network config for run.") kurtosisNetConfigPath := flagSet.String("c", "./kurtosis/network_params.json", "Kurtosis network params "+ "configuration path. Note that run command modifies it with provided imageTag and imageArgs.") + slotTime := flagSet.Int64("slotTime", 5, "Seconds per slot to update in the JSON config.") flagSet.Parse(os.Args[2:]) run(*imageTag, *imageArgs, *enclaveName, *maxSteps, *kurtosisPath, *kurtosisNetworkConfigScriptFolder, *kurtosisNetConfigPath) case "stop": From cd6bff9a7c32cb750923be6520695a977b7cfcfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= Date: Thu, 9 Nov 2023 22:52:04 +0100 Subject: [PATCH 31/58] Add missing usage --- scripts/emulate_network.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index ed34fa8347..875efc0f1f 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -108,7 +108,7 @@ func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolde } } -func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, kurtosisNetworkScriptFolder string, kurtosisNetConfigPath string) { +func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, kurtosisNetworkScriptFolder string, kurtosisNetConfigPath string, slotTime int64) { /* params := map[string]interface{}{ "image_tag": imageTag, "image_args": imageArgs, @@ -117,7 +117,7 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku "kurtosis_path": kurtosisPath, "kurtosis_network_config": kurtosisNetworkScriptFolder, }*/ - update_config(imageTag, imageArgs, kurtosisNetworkScriptFolder, kurtosisNetConfigPath) + update_config(imageTag, imageArgs, kurtosisNetworkScriptFolder, slotTime, kurtosisNetConfigPath) cmd := fmt.Sprintf("%s run --enclave %s %s", kurtosisPath, enclaveName, kurtosisNetworkScriptFolder) runCommand(cmd) @@ -235,7 +235,7 @@ func main() { "configuration path. Note that run command modifies it with provided imageTag and imageArgs.") slotTime := flagSet.Int64("slotTime", 5, "Seconds per slot to update in the JSON config.") flagSet.Parse(os.Args[2:]) - run(*imageTag, *imageArgs, *enclaveName, *maxSteps, *kurtosisPath, *kurtosisNetworkConfigScriptFolder, *kurtosisNetConfigPath) + run(*imageTag, *imageArgs, *enclaveName, *maxSteps, *kurtosisPath, *kurtosisNetworkConfigScriptFolder, *kurtosisNetConfigPath, *slotTime) case "stop": flagSet.Parse(os.Args[2:]) stop(*kurtosisPath, *enclaveName) From 27fa340217165847827e21febe79da8929a0f335 Mon Sep 17 00:00:00 2001 From: Carlos Bermudez Porto Date: Thu, 9 Nov 2023 17:28:27 -0500 Subject: [PATCH 32/58] feat: add bids built count --- scripts/kurtosis/data/grafana/dashboard.json | 170 ++++++++++++------- 1 file changed, 113 insertions(+), 57 deletions(-) diff --git a/scripts/kurtosis/data/grafana/dashboard.json b/scripts/kurtosis/data/grafana/dashboard.json index 6e51165761..b4cf2aaa68 100644 --- a/scripts/kurtosis/data/grafana/dashboard.json +++ b/scripts/kurtosis/data/grafana/dashboard.json @@ -44,10 +44,23 @@ "links": [], "liveNow": false, "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 122, + "panels": [], + "title": "Builder", + "type": "row" + }, { "datasource": { "type": "prometheus", - "uid": "PBFA97CFB590B2093" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -97,10 +110,10 @@ "overrides": [] }, "gridPos": { - "h": 4, - "w": 7, + "h": 5, + "w": 12, "x": 0, - "y": 0 + "y": 1 }, "id": 129, "options": { @@ -125,7 +138,7 @@ { "datasource": { "type": "prometheus", - "uid": "PBFA97CFB590B2093" + "uid": "${datasource}" }, "editorMode": "code", "expr": "beacon_head_slot{role=\"Proposer\"}", @@ -139,17 +152,66 @@ "type": "stat" }, { - "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 4 + "h": 5, + "w": 12, + "x": 12, + "y": 1 }, - "id": 122, - "panels": [], - "title": "Builder", - "type": "row" + "id": 131, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.5.12", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "miner_block_build_count{role=~\"$instance\"}", + "interval": "1s", + "legendFormat": "{{role}}", + "range": true, + "refId": "A" + } + ], + "title": "Bids Built Count", + "type": "stat" }, { "datasource": { @@ -226,7 +288,7 @@ "h": 7, "w": 12, "x": 0, - "y": 5 + "y": 6 }, "id": 126, "interval": "1s", @@ -365,7 +427,7 @@ "h": 7, "w": 12, "x": 12, - "y": 5 + "y": 6 }, "id": 125, "interval": "1", @@ -506,7 +568,7 @@ "h": 7, "w": 12, "x": 0, - "y": 12 + "y": 13 }, "id": 127, "interval": "1s", @@ -632,7 +694,7 @@ "h": 7, "w": 12, "x": 12, - "y": 12 + "y": 13 }, "id": 128, "interval": "1", @@ -691,7 +753,7 @@ "h": 1, "w": 24, "x": 0, - "y": 19 + "y": 20 }, "id": 82, "panels": [], @@ -769,7 +831,7 @@ "h": 6, "w": 8, "x": 0, - "y": 20 + "y": 21 }, "id": 106, "links": [], @@ -895,7 +957,7 @@ "h": 6, "w": 8, "x": 8, - "y": 20 + "y": 21 }, "id": 86, "links": [], @@ -1021,7 +1083,7 @@ "h": 6, "w": 8, "x": 16, - "y": 20 + "y": 21 }, "id": 85, "links": [], @@ -1081,7 +1143,7 @@ "h": 1, "w": 24, "x": 0, - "y": 26 + "y": 27 }, "id": 75, "panels": [], @@ -1159,7 +1221,7 @@ "h": 6, "w": 12, "x": 0, - "y": 27 + "y": 28 }, "id": 96, "links": [], @@ -1273,7 +1335,7 @@ "h": 6, "w": 12, "x": 12, - "y": 27 + "y": 28 }, "id": 77, "links": [], @@ -1349,7 +1411,7 @@ "h": 1, "w": 24, "x": 0, - "y": 33 + "y": 34 }, "id": 4, "panels": [], @@ -1403,7 +1465,7 @@ "h": 3, "w": 6, "x": 0, - "y": 34 + "y": 35 }, "id": 108, "links": [], @@ -1502,7 +1564,7 @@ "h": 9, "w": 18, "x": 6, - "y": 34 + "y": 35 }, "id": 110, "links": [], @@ -1604,7 +1666,7 @@ "h": 3, "w": 6, "x": 0, - "y": 37 + "y": 38 }, "id": 111, "links": [], @@ -1682,7 +1744,7 @@ "h": 3, "w": 6, "x": 0, - "y": 40 + "y": 41 }, "id": 109, "links": [], @@ -1760,7 +1822,7 @@ "h": 3, "w": 6, "x": 0, - "y": 43 + "y": 44 }, "id": 113, "links": [], @@ -1862,7 +1924,7 @@ "h": 9, "w": 18, "x": 6, - "y": 43 + "y": 44 }, "id": 116, "links": [], @@ -1964,7 +2026,7 @@ "h": 3, "w": 6, "x": 0, - "y": 46 + "y": 47 }, "id": 114, "links": [], @@ -2042,7 +2104,7 @@ "h": 3, "w": 6, "x": 0, - "y": 49 + "y": 50 }, "id": 115, "links": [], @@ -2144,7 +2206,7 @@ "h": 11, "w": 24, "x": 0, - "y": 52 + "y": 53 }, "id": 112, "links": [], @@ -2371,8 +2433,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2388,7 +2449,7 @@ "h": 10, "w": 24, "x": 0, - "y": 63 + "y": 64 }, "id": 117, "links": [], @@ -2584,7 +2645,7 @@ "h": 1, "w": 24, "x": 0, - "y": 73 + "y": 74 }, "id": 17, "panels": [], @@ -2645,8 +2706,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2662,7 +2722,7 @@ "h": 8, "w": 8, "x": 0, - "y": 74 + "y": 75 }, "id": 35, "links": [], @@ -2785,8 +2845,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2802,7 +2861,7 @@ "h": 8, "w": 8, "x": 8, - "y": 74 + "y": 75 }, "id": 118, "links": [], @@ -2925,8 +2984,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2942,7 +3000,7 @@ "h": 8, "w": 8, "x": 16, - "y": 74 + "y": 75 }, "id": 119, "links": [], @@ -3002,7 +3060,7 @@ "h": 1, "w": 24, "x": 0, - "y": 82 + "y": 83 }, "id": 37, "panels": [], @@ -3063,8 +3121,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3080,7 +3137,7 @@ "h": 6, "w": 12, "x": 0, - "y": 83 + "y": 84 }, "id": 120, "links": [], @@ -3177,8 +3234,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3194,7 +3250,7 @@ "h": 6, "w": 12, "x": 12, - "y": 83 + "y": 84 }, "id": 56, "links": [], @@ -3320,7 +3376,7 @@ }, { "current": { - "selected": false, + "selected": true, "text": "0.5", "value": "0.5" }, @@ -3423,7 +3479,7 @@ ] }, "time": { - "from": "now-5m", + "from": "now-3h", "to": "now" }, "timepicker": { From 8a3d7e80421252df1fb2a8bf1319cfd1078623eb Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Fri, 10 Nov 2023 03:34:23 +0000 Subject: [PATCH 33/58] Started finetuning fore public ports on eth package --- scripts/dind/readme.md | 2 +- scripts/kurtosis/main.star | 2 +- scripts/kurtosis/network_params.json | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/scripts/dind/readme.md b/scripts/dind/readme.md index 7cb83c694a..2d0cc8b98b 100644 --- a/scripts/dind/readme.md +++ b/scripts/dind/readme.md @@ -60,6 +60,6 @@ Utilizing a DinD setup allows developers to create a contained environment where **Note**: Replace `builder-dind-container` with a descriptive name relevant to your project, and `builder-dind-image` with the image name you've prepared for the DinD environment. The `custom-builder-tag` should be replaced with the actual tag name you wish to assign to your builder image. ## Known Issues and Solutions -Guess the ports +Ports control is missing in ethereum-package. By following these instructions, developers can leverage a Docker-in-Docker approach to emulate networks and test builder performance in a controlled and isolated manner. \ No newline at end of file diff --git a/scripts/kurtosis/main.star b/scripts/kurtosis/main.star index ececc31fd5..af732fa683 100644 --- a/scripts/kurtosis/main.star +++ b/scripts/kurtosis/main.star @@ -2,7 +2,7 @@ #Node: works only with config files local to ./kurtosis/ folder where kurtosis.yml is defined eth_pkg = import_module( - "github.com/kurtosis-tech/ethereum-package/main.star@cbermudez/prometheus-additional-labels" + "github.com/kurtosis-tech/ethereum-package/main.star" ) def run(plan, file_to_read = "network_params_tmp.json"): diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 098cce1d77..fa661a3727 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -95,7 +95,10 @@ "custom_flood_params": { "interval_between_transactions": 0.05 }, - "grafana_additional_dashboards": [ - "github.com/flashbots/builder-startup-script/data/grafana" - ] + "grafana_params" : { + "additional_dashboards": [ + "github.com/flashbots/builder-startup-script/data/grafana" + ], + "public_http_port": 4567 + } } \ No newline at end of file From 5cfcc17206ae2a6eb9aa37b93534c1a0e5d68812 Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Fri, 10 Nov 2023 06:57:11 +0000 Subject: [PATCH 34/58] Partial enclave stop and progress monitoring Only in case -s is provided to Run --- scripts/emulate_network.go | 301 +++++++++++++++++++++++++++++++------ 1 file changed, 252 insertions(+), 49 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index 875efc0f1f..8e33d5d4a5 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -1,17 +1,153 @@ package main import ( - "bufio" + "bytes" "encoding/json" "flag" "fmt" + "io" "io/ioutil" + "log" + "net/http" "os" "os/exec" + "regexp" "runtime" - "sync" + "strconv" + "strings" + "time" ) +type PortInfo struct { + LocalURL string + ServiceName string + ForwardedServiceAddress string +} + +type ServiceInfo struct { + UUID string + Name string + Ports []PortInfo + Status string +} + +// parseUserServices parses the given text and returns a slice of ServiceInfo. +func parseUserServices(text string) ([]ServiceInfo, error) { + var services []ServiceInfo + + // Split the text into lines for easier processing + lines := strings.Split(text, "\n") + + var currentService *ServiceInfo + + // Iterate over each line + for _, line := range lines { + // Regular expression to match the service information + serviceRe := regexp.MustCompile(`(?m)^([0-9a-f]{12})\s+(\S+)\s+(.*?)\s+(RUNNING|STOPPED)$`) + portRe := regexp.MustCompile(`^\s*(\S+):\s+(\d+)/(\S+)\s+->\s+(.+)$`) + defaultPortRe := regexp.MustCompile(`^\s*(\d+)/(\S+)\s+->\s+(.+)$`) + + if serviceRe.MatchString(line) { + // Process the previous service and start a new one + if currentService != nil { + services = append(services, *currentService) + } + matches := serviceRe.FindStringSubmatch(line) + currentService = &ServiceInfo{ + UUID: matches[1], + Name: matches[2], + Status: matches[4], + } + if matches[3] != "" { + if defaultPortRe.MatchString(matches[3]) { + defaultPortMatches := defaultPortRe.FindStringSubmatch(matches[3]) + currentService.Ports = append(currentService.Ports, PortInfo{ + ServiceName: currentService.Name, + LocalURL: defaultPortMatches[2], + ForwardedServiceAddress: defaultPortMatches[3], + }) + } else if portRe.MatchString(matches[3]) { + portMatches := portRe.FindStringSubmatch(matches[3]) + currentService.Ports = append(currentService.Ports, PortInfo{ + ServiceName: portMatches[1], + LocalURL: portMatches[3], + ForwardedServiceAddress: portMatches[4], + }) + } + } + } else if currentService != nil { + if portRe.MatchString(line) { + // If it's a named port for the current service + portMatches := portRe.FindStringSubmatch(line) + currentService.Ports = append(currentService.Ports, PortInfo{ + ServiceName: portMatches[1], + LocalURL: portMatches[3], + ForwardedServiceAddress: portMatches[4], + }) + } else if defaultPortRe.MatchString(line) { + // If it's an unnamed port for the current service + defaultPortMatches := defaultPortRe.FindStringSubmatch(line) + currentService.Ports = append(currentService.Ports, PortInfo{ + ServiceName: currentService.Name, + LocalURL: defaultPortMatches[2], + ForwardedServiceAddress: defaultPortMatches[3], + }) + } + } + } + + // Append the last service if it exists + if currentService != nil { + services = append(services, *currentService) + } + + return services, nil +} + +// getBlockNumber sends a JSON-RPC request to the specified URL and returns the current block number +func getBlockNumber(url string) (int64, error) { + jsonStr := []byte(`{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}`) + + // Create the HTTP request + req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) + if err != nil { + return 0, fmt.Errorf("error creating request: %w", err) + } + req.Header.Set("Content-Type", "application/json") + + // Send the request + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return 0, fmt.Errorf("error sending request: %w", err) + } + defer resp.Body.Close() + + // Read the response + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return 0, fmt.Errorf("error reading response body: %w", err) + } + + // Unmarshal the JSON response + var response struct { + Jsonrpc string `json:"jsonrpc"` + ID int `json:"id"` + Result string `json:"result"` + } + if err := json.Unmarshal(body, &response); err != nil { + return 0, fmt.Errorf("error unmarshaling response: %w", err) + } + + // Convert hexadecimal result to integer + blockNumber, err := strconv.ParseInt(response.Result, 0, 64) + if err != nil { + return 0, fmt.Errorf("error converting hex to int: %w", err) + } + + return blockNumber, nil +} + func build(imageTag string, buildDir string, buildDockerfilePath string) { cmd := "docker build" + " -t " + imageTag + @@ -43,14 +179,14 @@ func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolde return } - if slotTime != 0 { - if networkParams, ok := data["network_params"].(map[string]interface{}); ok { - networkParams["seconds_per_slot"] = slotTime - fmt.Printf("Seconds per slot updated to %d\n", slotTime) - } else { - fmt.Println("network_params object not found or is not a JSON object") - } - } + if slotTime != 0 { + if networkParams, ok := data["network_params"].(map[string]interface{}); ok { + networkParams["seconds_per_slot"] = slotTime + fmt.Printf("Seconds per slot updated to %d\n", slotTime) + } else { + fmt.Println("network_params object not found or is not a JSON object") + } + } // Navigate to the participants array if participants, ok := data["participants"].([]interface{}); ok { @@ -120,7 +256,99 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku update_config(imageTag, imageArgs, kurtosisNetworkScriptFolder, slotTime, kurtosisNetConfigPath) cmd := fmt.Sprintf("%s run --enclave %s %s", kurtosisPath, enclaveName, kurtosisNetworkScriptFolder) - runCommand(cmd) + out, _, errRun := runCommand(cmd) + if errRun != nil { + fmt.Println("Error executting command:", errRun) + return + } + + services, errParse := parseUserServices(out) + if errParse != nil { + log.Fatalf("Error parsing services: %v", errParse) + } + + if maxSteps <= 0 { + return + } + + web3url := "" + for _, service := range services { + //fmt.Println(service.Name) + if strings.HasPrefix(service.Name, "el-") { + for _, port := range service.Ports { + //fmt.Println(port.ServiceName) + if strings.HasPrefix(port.ServiceName, "rpc") { + //fmt.Println(port.ForwardedServiceAddress) + web3url = port.ForwardedServiceAddress + break // Break after printing the first matching LocalURL + } + } + break // Break after checking the ports of the first matching service + } + } + web3url = strings.TrimSpace(web3url) + web3url = "http://" + web3url + + targetBlock := int64(maxSteps) + fmt.Println("Network test running...") + + block, err := getBlockNumber(web3url) + + if err != nil { + fmt.Println("Error getting block number:", err) + return + } + + progressBarLength := 50 // Length of the progress bar + + for block < targetBlock { + time.Sleep(1 * time.Second) // Delay to avoid rapid requests + block, err = getBlockNumber(web3url) + if err != nil { + fmt.Println("\nError getting block number:", err) + return + } + + // Calculate progress + progress := int(float64(block) / float64(targetBlock) * float64(progressBarLength)) + if progress > progressBarLength { + progress = progressBarLength // Cap progress at 100% + } + + percentage := int(float64(block) / float64(targetBlock) * 100) + if percentage > 100 { + percentage = 100 // Cap percentage at 100% + } + + // Update progress bar with current block and percentage + fmt.Printf("\rCurrent Block: %d, Progress: [%-50s] %d%%", block, strings.Repeat("=", progress)+strings.Repeat(" ", progressBarLength-progress), percentage) + } + + fmt.Println("\nStopping all network related services") + + for _, service := range services { + if service.Name != "grafana" && service.Name != "adminer" && service.Name != "postgres" && service.Name != "redis" && service.Name != "dora" && service.Name != "prometheus" { + //fmt.Println(service.Name) + cmd := fmt.Sprintf("%s service stop %s %s", kurtosisPath, enclaveName, service.Name) + _, _, errRun := runCommand(cmd) + if errRun != nil { + fmt.Println("Error stopping service:", errRun) + continue + } + //fmt.Println("Output:", out) + } + } + fmt.Println("Stopped transaction spamming and block building services.") + fmt.Println("Please visit monitoring services:") + for _, service := range services { + if service.Name == "grafana" || service.Name == "dora" { + for _, port := range service.Ports { + web3url := port.ForwardedServiceAddress // Assuming ForwardedServiceAddress is the correct field + web3url = strings.TrimSpace(web3url) + fmt.Printf("Service: %s, URL: %s\n", service.Name, web3url) + } + } + } } func stop(kurtosisPath, enclaveName string) { @@ -134,59 +362,34 @@ func stop(kurtosisPath, enclaveName string) { runCommand(cmd) } -func runCommand(cmd string) { +func runCommand(cmd string) (string, string, error) { + var stdoutBuf, stderrBuf bytes.Buffer var command *exec.Cmd + if runtime.GOOS == "windows" { - fmt.Println("Running on Windows:", cmd) command = exec.Command("cmd", "/C", cmd) } else { - fmt.Println("Running:", cmd) command = exec.Command("sh", "-c", cmd) } - stdoutPipe, err := command.StdoutPipe() - if err != nil { - fmt.Printf("Error obtaining stdout: %v\n", err) - return - } + // Create multi-writers to write to both the buffer and the os.Stdout or os.Stderr + stdoutMultiWriter := io.MultiWriter(&stdoutBuf, os.Stdout) + stderrMultiWriter := io.MultiWriter(&stderrBuf, os.Stderr) - stderrPipe, err := command.StderrPipe() - if err != nil { - fmt.Printf("Error obtaining stderr: %v\n", err) - return - } + command.Stdout = stdoutMultiWriter + command.Stderr = stderrMultiWriter - err = command.Start() + err := command.Start() if err != nil { - fmt.Printf("Command start failed: %v\n", err) - return + return "", "", fmt.Errorf("command start failed: %v", err) } - var wg sync.WaitGroup - wg.Add(2) - - go func() { - defer wg.Done() - scanner := bufio.NewScanner(stdoutPipe) - for scanner.Scan() { - fmt.Println(scanner.Text()) - } - }() - - go func() { - defer wg.Done() - scanner := bufio.NewScanner(stderrPipe) - for scanner.Scan() { - fmt.Println(scanner.Text()) - } - }() - - wg.Wait() - err = command.Wait() if err != nil { - fmt.Printf("Command execution failed: %v\n", err) + return stdoutBuf.String(), stderrBuf.String(), fmt.Errorf("command execution failed: %v", err) } + + return stdoutBuf.String(), stderrBuf.String(), nil } func help() { From 78c61e019dc1bfa8fb0ace5a0ea97c5289e8251a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 10 Nov 2023 12:30:00 +0100 Subject: [PATCH 35/58] Set dev builder image tag as `dev` To avoid confusion change the tag to the same as default in go script --- scripts/kurtosis/network_params.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index e955fe5857..4c24fa3e1d 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -22,7 +22,7 @@ }, { "el_client_type": "REPLACE_WITH_BUILDER", - "el_client_image": "flashbots/builder:1.13.2.4844.dev5-4d161de", + "el_client_image": "flashbots/builder:dev", "el_client_log_level": "", "cl_client_type": "lighthouse", "cl_client_image": "sigp/lighthouse:v4.5.0", @@ -102,4 +102,4 @@ "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" ] -} \ No newline at end of file +} From 69ffbe0b4cc512d05b3541d425543c0aa198a7b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= Date: Sun, 12 Nov 2023 10:24:22 +0100 Subject: [PATCH 36/58] Fix linting --- scripts/emulate_network.go | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index 8e33d5d4a5..b1bc4eb736 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -6,7 +6,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "net/http" "os" @@ -393,24 +392,23 @@ func runCommand(cmd string) (string, string, error) { } func help() { - fmt.Println(`Emulate Network script + fmt.Println(`Emulate Network script Available commands: - build - - -t : Image tag (optional, default: "flashbots/builder:dev") - - -d : Image Build directory (optional, default: "..") - - -f : Build dockerfile path (optional, default: "./Dockerfile.debug") + - -t : Image tag (optional, default: "flashbots/builder:dev") + - -d : Image Build directory (optional, default: "..") + - -f : Build dockerfile path (optional, default: "./Dockerfile.debug") - run - - -t : Image tag (optional, default: "flashbots/builder:dev") - - -n : Enclave name (optional, default: "explorer") - - -a : Additional builder arguments (optional) - - -s : Max steps (optional, default: -1) - - -k : Kurtosis path (optional, default: "kurtosis") - - -c : Kurtosis network config (optional, default: "./kurtosis") - - --slotTime : Seconds per slot applied on local devnet (optional, default: 5) + - -t : Image tag (optional, default: "flashbots/builder:dev") + - -n : Enclave name (optional, default: "explorer") + - -a : Additional builder arguments (optional) + - -s : Max steps (optional, default: -1) + - -k : Kurtosis path (optional, default: "kurtosis") + - -c : Kurtosis network config (optional, default: "./kurtosis") + - --slotTime : Seconds per slot applied on local devnet (optional, default: 5) - stop - - -k : Kurtosis path (optional, default: "kurtosis") - - -n : Enclave name (required) -`) + - -k : Kurtosis path (optional, default: "kurtosis") + - -n : Enclave name (required)`) } func main() { From cd2c2f441dc0c00e36f2f04689a6f4e11dc0bfc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= Date: Sun, 12 Nov 2023 10:41:27 +0100 Subject: [PATCH 37/58] Adjust references --- scripts/emulate_network.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index b1bc4eb736..b02acf44bb 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -123,7 +123,7 @@ func getBlockNumber(url string) (int64, error) { defer resp.Body.Close() // Read the response - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { return 0, fmt.Errorf("error reading response body: %w", err) } @@ -165,7 +165,7 @@ func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolde } // Read the file - fileContent, err := ioutil.ReadFile(file) + fileContent, err := os.ReadFile(file) if err != nil { fmt.Println("Error reading the file:", err) return @@ -237,7 +237,7 @@ func update_config(imageTag string, imageArgs string, kurtosisNetworkScriptFolde fmt.Println(string(modifiedContent)) // Save the modified content back to the file - err = ioutil.WriteFile(kurtosisNetworkScriptFolder+"/network_params_tmp.json", modifiedContent, os.ModePerm) + err = os.WriteFile(kurtosisNetworkScriptFolder+"/network_params_tmp.json", modifiedContent, os.ModePerm) if err != nil { fmt.Println("Error writing the modified content to the file:", err) } From ded84f998e80041275fc4513dcbe10176a9ca486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= Date: Sun, 12 Nov 2023 11:46:44 +0100 Subject: [PATCH 38/58] Fix readme, change -s to 1000 and improve summary --- scripts/emulate_network.go | 9 +++++++-- scripts/readme.md | 17 +++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index b02acf44bb..d95a086abf 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -267,6 +267,7 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku } if maxSteps <= 0 { + printSummary(services) return } @@ -338,6 +339,10 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku } } fmt.Println("Stopped transaction spamming and block building services.") + printSummary(services) +} + +func printSummary(services) { fmt.Println("Please visit monitoring services:") for _, service := range services { if service.Name == "grafana" || service.Name == "dora" { @@ -402,7 +407,7 @@ Available commands: - -t : Image tag (optional, default: "flashbots/builder:dev") - -n : Enclave name (optional, default: "explorer") - -a : Additional builder arguments (optional) - - -s : Max steps (optional, default: -1) + - -s : Max steps (optional, default: 1000) - -k : Kurtosis path (optional, default: "kurtosis") - -c : Kurtosis network config (optional, default: "./kurtosis") - --slotTime : Seconds per slot applied on local devnet (optional, default: 5) @@ -430,7 +435,7 @@ func main() { build(*imageTag, *buildDir, *buildDockerfilePath) case "run": imageArgs := flagSet.String("a", "", "Image arguments for run.") - maxSteps := flagSet.Int("s", -1, "Max steps for run.") + maxSteps := flagSet.Int("s", 1000, "Max steps for run.") kurtosisNetworkConfigScriptFolder := flagSet.String("f", "./kurtosis", "Kurtosis network config for run.") kurtosisNetConfigPath := flagSet.String("c", "./kurtosis/network_params.json", "Kurtosis network params "+ "configuration path. Note that run command modifies it with provided imageTag and imageArgs.") diff --git a/scripts/readme.md b/scripts/readme.md index adcc73c5d4..1f10b1eae8 100644 --- a/scripts/readme.md +++ b/scripts/readme.md @@ -37,7 +37,7 @@ To run script `cd` into this (`./scripts`) folder. 1. **build**: - Purpose: Builds a Docker image of the builder. - Options: - - `-t`: (Optional) Image tag for the Docker build. Defaults to `flashbots/builder:dev`. + - `-t`: (Optional) Image tag for the Docker build. Defaults to `flashbots/builder:dev`. - Example: ``` go run emulate_network.go build -t=test-builder @@ -46,11 +46,12 @@ To run script `cd` into this (`./scripts`) folder. 2. **run**: - Purpose: Prepares configurations and starts a Kurtosis enclave. - Options: - - `-t`: (Optional) Image tag. Defaults to `flashbots/builder:dev`. - - `-n`: (Optional) Enclave name. Defaults to `explorer`. - - `-a`: (Optional) Additional builder arguments. - - `-s`: (Optional) Max steps (integer). Default `-1` for "unlimited". - - `-k`: (Optional) Path to `kurtosis` executable. Defaults to `kurtosis`. + - `-t`: (Optional) Image tag. Defaults to `flashbots/builder:dev`. + - `-n`: (Optional) Enclave name. Defaults to `explorer`. + - `-a`: (Optional) Additional builder arguments. + - `-s`: (Optional) Max steps (integer). Defaults to `1000`. Set for `-1` for "unlimited". + - `-k`: (Optional) Path to `kurtosis` executable. Defaults to `kurtosis`. + - `--slotTime`: (Optional) Seconds per slot applied on local devnet. Defaults to 5. - Example: ``` go run emulate_network.go run -t=imageTag -a=imageArgs -n=enclaveName -k=/path/to/kurtosis @@ -59,8 +60,8 @@ To run script `cd` into this (`./scripts`) folder. 3. **stop**: - Purpose: Stops an active Kurtosis enclave. - Options: - - `-k`: (Optional) Path to `kurtosis` executable. Defaults to `kurtosis`. - - `-n`: (Required) Enclave name. + - `-k`: (Optional) Path to `kurtosis` executable. Defaults to `kurtosis`. + - `-n`: (Required) Enclave name. - Example: ``` go run emulate_network.go stop -k=/path/to/kurtosis -n=enclaveName From c3f227477ead02827cefc47b4e662212794b0e9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= Date: Sun, 12 Nov 2023 11:52:12 +0100 Subject: [PATCH 39/58] Fix method def --- scripts/emulate_network.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index d95a086abf..2536b21532 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -342,7 +342,7 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku printSummary(services) } -func printSummary(services) { +func printSummary(services []ServiceInfo) { fmt.Println("Please visit monitoring services:") for _, service := range services { if service.Name == "grafana" || service.Name == "dora" { @@ -397,7 +397,7 @@ func runCommand(cmd string) (string, string, error) { } func help() { - fmt.Println(`Emulate Network script + fmt.Println(`Emulate Network script Available commands: - build - -t : Image tag (optional, default: "flashbots/builder:dev") From 8f905f352d1facad0968d938913320752658325f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Mon, 13 Nov 2023 14:03:40 +0100 Subject: [PATCH 40/58] Pretty print service urls --- scripts/emulate_network.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index 2536b21532..7445955504 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -266,8 +266,8 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku log.Fatalf("Error parsing services: %v", errParse) } + printSummary(services) if maxSteps <= 0 { - printSummary(services) return } @@ -343,16 +343,18 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku } func printSummary(services []ServiceInfo) { - fmt.Println("Please visit monitoring services:") + fmt.Printf("\033[1m") + fmt.Println("Please visit monitoring services for results:") for _, service := range services { if service.Name == "grafana" || service.Name == "dora" { for _, port := range service.Ports { web3url := port.ForwardedServiceAddress // Assuming ForwardedServiceAddress is the correct field web3url = strings.TrimSpace(web3url) - fmt.Printf("Service: %s, URL: %s\n", service.Name, web3url) + fmt.Printf("%s: %s ", service.Name, web3url) } } } + fmt.Printf("\033[0m\n") } func stop(kurtosisPath, enclaveName string) { @@ -407,7 +409,7 @@ Available commands: - -t : Image tag (optional, default: "flashbots/builder:dev") - -n : Enclave name (optional, default: "explorer") - -a : Additional builder arguments (optional) - - -s : Max steps (optional, default: 1000) + - -s : Max steps. Use -1 to run permanently (optional, default: 1000) - -k : Kurtosis path (optional, default: "kurtosis") - -c : Kurtosis network config (optional, default: "./kurtosis") - --slotTime : Seconds per slot applied on local devnet (optional, default: 5) From a3498e099d8571c9c30b8aa43a8e0ae9cf98b1e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Tue, 14 Nov 2023 14:15:30 +0100 Subject: [PATCH 41/58] Add third builder - relay validator --- scripts/kurtosis/network_params.json | 49 ++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 4c24fa3e1d..35c2dc0bd2 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -56,6 +56,43 @@ "role": "Builder Dev" } } + }, + { + "el_client_type": "geth", + "el_client_image": "flashbots/builder:latest", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "sigp/lighthouse:v4.5.0", + "cl_client_log_level": "", + "beacon_extra_params": [ + "--always-prepare-payload", + "--prepare-payload-lookahead", + "12000", + "--disable-peer-scoring" + ], + "el_extra_params": [ + "--builder", + "--builder.remote_relay_endpoint=http://mev-relay-api:9062", + "--builder.beacon_endpoints=http://cl-3-lighthouse-geth:4000", + "--builder.bellatrix_fork_version=0x30000038", + "--builder.genesis_fork_version=0x10000038", + "--builder.genesis_validators_root=GENESIS_VALIDATORS_ROOT_PLACEHOLDER", + "--miner.extradata=The_Dev_version_of_builder", + "--builder.algotype=greedy", + "--metrics.builder", + "--metrics.expensive", + "--maxpeers 0" + ], + "validator_count": 0, + "el_extra_env_vars": { + "BUILDER_TX_SIGNING_KEY": "0xef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" + }, + "prometheus_config": { + "scrape_interval": "1s", + "labels": { + "role": "Builder Baseline" + } + } } ], "network_params": { @@ -63,22 +100,22 @@ "seconds_per_slot": 5 }, "mev_params": { - "mev_flood_seconds_per_bundle": 11, + "mev_flood_seconds_per_bundle": 1, "mev_flood_extra_args": [ - "--txsPerBundle=130" + "--txsPerBundle=130", + "--sendTo=flashbots" ], "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", "mev_boost_image": "flashbots/mev-boost:1.6", "mev_builder_image": "flashbots/builder:latest", "mev_builder_extra_args": [ - "--metrics.expensive", - "--maxpeers 0" + "--metrics.expensive" ], "mev_builder_prometheus_config": { "scrape_interval": "1s", "labels": { - "role": "Builder Baseline" + "role": "Builder Validator" } } }, @@ -97,7 +134,7 @@ ] }, "custom_flood_params": { - "interval_between_transactions": 0.1 + "interval_between_transactions": 0 }, "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" From 1260c63ae170c32b7fac7f10276888ac5c39d621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Wed, 15 Nov 2023 18:07:41 +0100 Subject: [PATCH 42/58] Print exact url of the dashboard, not the grafana service root --- scripts/emulate_network.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index 7445955504..c17d6d3c8c 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -290,7 +290,6 @@ func run(imageTag, imageArgs, enclaveName string, maxSteps int, kurtosisPath, ku web3url = "http://" + web3url targetBlock := int64(maxSteps) - fmt.Println("Network test running...") block, err := getBlockNumber(web3url) @@ -350,6 +349,10 @@ func printSummary(services []ServiceInfo) { for _, port := range service.Ports { web3url := port.ForwardedServiceAddress // Assuming ForwardedServiceAddress is the correct field web3url = strings.TrimSpace(web3url) + // TODO: make the dashboard accessible at root + if service.Name == "grafana" { + web3url += "/d/geth-builder-overview/geth-builder-overview" + } fmt.Printf("%s: %s ", service.Name, web3url) } } From 487bae4df00285da70ddec19207beb2ef5289455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Wed, 15 Nov 2023 18:18:08 +0100 Subject: [PATCH 43/58] Use latest versions of lighthouse and nethermind & fix baseline extradata --- scripts/kurtosis/network_params.json | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 35c2dc0bd2..61221e6e34 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -3,11 +3,11 @@ "participants": [ { "el_client_type": "nethermind", - "el_client_image": "nethermind/nethermind:1.21.1", + "el_client_image": "nethermind/nethermind:latest", "el_client_log_level": "", "cl_client_type": "lighthouse", "cl_client_log_level": "", - "cl_client_image": "sigp/lighthouse:v4.5.0", + "cl_client_image": "sigp/lighthouse:latest", "el_extra_params": [], "beacon_extra_params": [ "--always-prefer-builder-payload", @@ -25,7 +25,7 @@ "el_client_image": "flashbots/builder:dev", "el_client_log_level": "", "cl_client_type": "lighthouse", - "cl_client_image": "sigp/lighthouse:v4.5.0", + "cl_client_image": "sigp/lighthouse:latest", "cl_client_log_level": "", "beacon_extra_params": [ "--always-prepare-payload", @@ -62,7 +62,7 @@ "el_client_image": "flashbots/builder:latest", "el_client_log_level": "", "cl_client_type": "lighthouse", - "cl_client_image": "sigp/lighthouse:v4.5.0", + "cl_client_image": "sigp/lighthouse:latest", "cl_client_log_level": "", "beacon_extra_params": [ "--always-prepare-payload", @@ -77,7 +77,7 @@ "--builder.bellatrix_fork_version=0x30000038", "--builder.genesis_fork_version=0x10000038", "--builder.genesis_validators_root=GENESIS_VALIDATORS_ROOT_PLACEHOLDER", - "--miner.extradata=The_Dev_version_of_builder", + "--miner.extradata=Baseline_version_of_builder", "--builder.algotype=greedy", "--metrics.builder", "--metrics.expensive", @@ -100,10 +100,9 @@ "seconds_per_slot": 5 }, "mev_params": { - "mev_flood_seconds_per_bundle": 1, + "mev_flood_seconds_per_bundle": 11, "mev_flood_extra_args": [ - "--txsPerBundle=130", - "--sendTo=flashbots" + "--txsPerBundle=130" ], "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", @@ -134,7 +133,7 @@ ] }, "custom_flood_params": { - "interval_between_transactions": 0 + "interval_between_transactions": 0.1 }, "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" From 58af2723a461d7daa6e9f2d9532eda9e75ff57a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Wed, 15 Nov 2023 18:27:12 +0100 Subject: [PATCH 44/58] Change the prometheus label so validator is not visible on the dashboard --- scripts/kurtosis/network_params.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 61221e6e34..fa7548b7e1 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -114,7 +114,7 @@ "mev_builder_prometheus_config": { "scrape_interval": "1s", "labels": { - "role": "Builder Validator" + "role": "Validator" } } }, From bdeb0003bda8a74a65d1c5ebcbea9c90b4d961ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Thu, 16 Nov 2023 09:18:55 +0100 Subject: [PATCH 45/58] Use default lighthouse image --- scripts/kurtosis/network_params.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index fa7548b7e1..97895050e4 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -7,7 +7,6 @@ "el_client_log_level": "", "cl_client_type": "lighthouse", "cl_client_log_level": "", - "cl_client_image": "sigp/lighthouse:latest", "el_extra_params": [], "beacon_extra_params": [ "--always-prefer-builder-payload", @@ -25,7 +24,6 @@ "el_client_image": "flashbots/builder:dev", "el_client_log_level": "", "cl_client_type": "lighthouse", - "cl_client_image": "sigp/lighthouse:latest", "cl_client_log_level": "", "beacon_extra_params": [ "--always-prepare-payload", @@ -62,7 +60,6 @@ "el_client_image": "flashbots/builder:latest", "el_client_log_level": "", "cl_client_type": "lighthouse", - "cl_client_image": "sigp/lighthouse:latest", "cl_client_log_level": "", "beacon_extra_params": [ "--always-prepare-payload", From c440fa59d249a1d945d8e37131d2378b71efa460 Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Fri, 17 Nov 2023 13:23:50 +0000 Subject: [PATCH 46/58] Using default Dockerfile for build (#16) * Using default Dockerfile for build Also updated readme --- scripts/emulate_network.go | 4 ++-- scripts/readme.md | 13 +++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/scripts/emulate_network.go b/scripts/emulate_network.go index c17d6d3c8c..069e59987e 100644 --- a/scripts/emulate_network.go +++ b/scripts/emulate_network.go @@ -407,7 +407,7 @@ Available commands: - build - -t : Image tag (optional, default: "flashbots/builder:dev") - -d : Image Build directory (optional, default: "..") - - -f : Build dockerfile path (optional, default: "./Dockerfile.debug") + - -f : Build dockerfile path (optional, default: ../Dockerfile"), use "./Dockerfile.debug" for debug capabilities) - run - -t : Image tag (optional, default: "flashbots/builder:dev") - -n : Enclave name (optional, default: "explorer") @@ -435,7 +435,7 @@ func main() { switch os.Args[1] { case "build": buildDir := flagSet.String("d", "..", "Build directory.") - buildDockerfilePath := flagSet.String("f", "./Dockerfile.debug", "Build dockerfile path.") + buildDockerfilePath := flagSet.String("f", "../Dockerfile", "Build dockerfile path. Use \"./Dockerfile.debug\" for debug capabilities") flagSet.Parse(os.Args[2:]) build(*imageTag, *buildDir, *buildDockerfilePath) case "run": diff --git a/scripts/readme.md b/scripts/readme.md index 1f10b1eae8..9ae5412612 100644 --- a/scripts/readme.md +++ b/scripts/readme.md @@ -37,11 +37,16 @@ To run script `cd` into this (`./scripts`) folder. 1. **build**: - Purpose: Builds a Docker image of the builder. - Options: - - `-t`: (Optional) Image tag for the Docker build. Defaults to `flashbots/builder:dev`. + - `-t`: (Optional) Image tag for the Docker build. Defaults to `flashbots/builder:dev`. + - `-d` (Optional) Image Build directory. Defaults to `".."` + - `-f` (Optional) Build dockerfile path. Defaults to `"../Dockerfile"`. Use `"./Dockerfile.debug"` for debug capabilities. + - Example: - ``` - go run emulate_network.go build -t=test-builder - ``` + ``` + go run emulate_network.go build -t=test-builder -f="../Dockerfile" -d=".." + ``` + + 2. **run**: - Purpose: Prepares configurations and starts a Kurtosis enclave. From c2cf45df706661421fcda0ea539298d2ef602795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 17 Nov 2023 15:29:08 +0100 Subject: [PATCH 47/58] Add architecture diagram --- scripts/readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/readme.md b/scripts/readme.md index 9ae5412612..e0dab9b102 100644 --- a/scripts/readme.md +++ b/scripts/readme.md @@ -78,6 +78,10 @@ To run script `cd` into this (`./scripts`) folder. ``` go run emulate_network.go help ``` +## Architecture +Test network consists of 3 builders and a regular client. Dev and baseline are builders being compared. Dev builder is a candidate to be merged to main while baseline is the current version of builder. The 2 remaining clients are validator which is a builder connected to the relay as validator and a regular el client which submits blocks in epochs 0-3. +![image](https://github.com/NethermindEth/fb-builder/assets/11379770/54d4a8cf-f64c-4f69-9e32-b35bf43dba0c) + ## Known issues ### Kurtosis errors on network start From b783bfa67294043d152ba35e577876212e8c386c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Sat, 18 Nov 2023 15:49:20 +0100 Subject: [PATCH 48/58] Increase fuzzing rate --- scripts/kurtosis/network_params.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 97895050e4..f8899aa098 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -97,9 +97,9 @@ "seconds_per_slot": 5 }, "mev_params": { - "mev_flood_seconds_per_bundle": 11, + "mev_flood_seconds_per_bundle": 4, "mev_flood_extra_args": [ - "--txsPerBundle=130" + "--txsPerBundle=500" ], "mev_flood_image": "flashbots/mev-flood:0.0.9", "mev_relay_image": "flashbots/mev-boost-relay:0.27", @@ -118,7 +118,6 @@ "additional_services": [ "broadcaster", "tx_spammer", - "blob_spammer", "custom_flood", "beacon_metrics_gazer", "dora", @@ -126,11 +125,11 @@ ], "tx_spammer_params": { "tx_spammer_extra_args": [ - "--txcount=1" + "--txcount=20" ] }, "custom_flood_params": { - "interval_between_transactions": 0.1 + "interval_between_transactions": 0 }, "grafana_additional_dashboards": [ "github.com/flashbots/builder-startup-script/data/grafana" From db9578c149b8906977c623c5096aa820c0ce4aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= <43241881+kamilchodola@users.noreply.github.com> Date: Tue, 21 Nov 2023 19:13:53 +0100 Subject: [PATCH 49/58] Uppercase readme --- scripts/{readme.md => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/{readme.md => README.md} (100%) diff --git a/scripts/readme.md b/scripts/README.md similarity index 100% rename from scripts/readme.md rename to scripts/README.md From 475e6c743f92cf7498e0d8e2e0670ffb46f34f39 Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Fri, 24 Nov 2023 12:56:44 +0000 Subject: [PATCH 50/58] clean up dind docs --- scripts/README.md | 2 +- scripts/dind/readme.md | 14 ++------------ 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/scripts/README.md b/scripts/README.md index 66f4ad5839..6fcb243555 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -92,4 +92,4 @@ In case of system resource related errors or on windows docker restore after sle ## Running in Docker in Docker -See this note for refrence here +See this note for refrence [here](./dind/) diff --git a/scripts/dind/readme.md b/scripts/dind/readme.md index 2d0cc8b98b..9ddb07aed1 100644 --- a/scripts/dind/readme.md +++ b/scripts/dind/readme.md @@ -1,14 +1,3 @@ -docker build -f ./Dockerfile.kurtosis_dind -t my-dind-env ../../ - -docker stop my-running-script -docker rm my-running-script - -docker run -dit --privileged --name my-running-script my-dind-env - -docker exec my-running-script go run emulate_network.go build -t=test-builder -docker exec my-running-script go run emulate_network.go run -n=enclaveName -docker exec my-running-script go run emulate_network.go stop -n=enclaveName - # Emulate Network Using Docker-in-Docker (DinD) This documentation details the use of Docker-in-Docker (DinD) to emulate network environments for testing builder performance. This method provides an isolated environment, removing the need for Go or Kurtosis installations on the host system. @@ -26,8 +15,9 @@ Utilizing a DinD setup allows developers to create a contained environment where ### Setup and Execution 1. **Create the DinD Environment**: - - Run a DinD container for an isolated build environment named `builder-dind-container`: + - Run a DinD container for an isolated build environment named `builder-dind-container` assuming you are currently in this folder: ```shell + docker build -f ./Dockerfile.kurtosis_dind -t builder-dind-image ../../ docker run -dit --privileged --name builder-dind-container builder-dind-image ``` ***note:*** privileged mode that is not needed when using local hosting in your docker described [here](../) From b3cb7c0ff0d2fb0eb43e8ad7d27a313e6d6fe713 Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Fri, 24 Nov 2023 12:57:43 +0000 Subject: [PATCH 51/58] added wip disclamer --- scripts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/README.md b/scripts/README.md index 6fcb243555..e96df05dbb 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -92,4 +92,4 @@ In case of system resource related errors or on windows docker restore after sle ## Running in Docker in Docker -See this note for refrence [here](./dind/) +See this note for refrence [here, work is in progress.](./dind/) From 02fea336021030b86db6ee305a126b69a8dd8f8d Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Fri, 24 Nov 2023 13:02:11 +0000 Subject: [PATCH 52/58] fix diff with main --- scripts/kurtosis/network_params.json | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/scripts/kurtosis/network_params.json b/scripts/kurtosis/network_params.json index 7e47153958..f8899aa098 100644 --- a/scripts/kurtosis/network_params.json +++ b/scripts/kurtosis/network_params.json @@ -131,10 +131,7 @@ "custom_flood_params": { "interval_between_transactions": 0 }, - "grafana_params" : { - "additional_dashboards": [ - "github.com/flashbots/builder-startup-script/data/grafana" - ], - "public_http_port": 4567 - } + "grafana_additional_dashboards": [ + "github.com/flashbots/builder-startup-script/data/grafana" + ] } From cc3f7bba3fdda97247a265e34f19abfb2f83c441 Mon Sep 17 00:00:00 2001 From: Oleg Jakushkin Date: Fri, 24 Nov 2023 13:03:34 +0000 Subject: [PATCH 53/58] fix distance to main minimal edited files --- scripts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/README.md b/scripts/README.md index e96df05dbb..78bb26b319 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -59,7 +59,7 @@ To run script `cd` into this (`./scripts`) folder. - `--slotTime`: (Optional) Seconds per slot applied on local devnet. Defaults to 5. - Example: ``` - go run emulate_network.go run -t=test-builder -a=imageArgs -n=enclaveName -k=/path/to/kurtosis + go run emulate_network.go run -t=imageTag -a=imageArgs -n=enclaveName -k=/path/to/kurtosis ``` 3. **stop**: From d32645fa66a085f5691885382fdee7aef77423e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 24 Nov 2023 16:20:15 +0100 Subject: [PATCH 54/58] Update scripts/README.md --- scripts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/README.md b/scripts/README.md index 78bb26b319..b4121cee37 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -91,5 +91,5 @@ In case of system resource related errors or on windows docker restore after sle 3. To clean up docker run `docker rm -vf $(docker ps -aq)` -## Running in Docker in Docker +## Running in Docker in Docker (WIP) See this note for refrence [here, work is in progress.](./dind/) From c82417795ba9a13e4b31f84c67b2ccc94f575726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 24 Nov 2023 16:21:01 +0100 Subject: [PATCH 55/58] Update scripts/README.md --- scripts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/README.md b/scripts/README.md index b4121cee37..8291ff6703 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -92,4 +92,4 @@ In case of system resource related errors or on windows docker restore after sle ## Running in Docker in Docker (WIP) -See this note for refrence [here, work is in progress.](./dind/) +See [README](./dind#readme). From 8fc222aa4bbaec880c4f5d60583c812e902a29d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 24 Nov 2023 19:15:29 +0100 Subject: [PATCH 56/58] Add dashboard and architecture description to the readme --- scripts/README.md | 34 ++++++++++++++++++++++++++++++++-- scripts/architecture.png | Bin 0 -> 35592 bytes 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 scripts/architecture.png diff --git a/scripts/README.md b/scripts/README.md index 8291ff6703..2800681a4d 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -78,10 +78,40 @@ To run script `cd` into this (`./scripts`) folder. ``` go run emulate_network.go help ``` +## Dashboard +Grafana dashboard contains three sections: quality comparison, usage of system resources and a section to inspect network behaviour. Each section contain graphs designed to show different properties of the network. + +Quality comparison allows to compare builder implementations by analysing bids produced by each of them. It contains four graphs: +* Bids profit - Profit of bids generated by each builder in time. The most important metric to compare effectiveness of builders. +* Bids creation time - Measures the time spent on creating a single bid. The metric allows to compare performance of builders. +* Bids Txnum - Number of bids submitted per second +* Bids Gas used - Summarized gas of all produced bids per second + +The dashboard also provides graphs showing usage of system resources: CPU, memory, disk and network. It allows to monitor resources and quickly identify regressions in resource utilization of a particular implementation. + +Network inspection gives an overview of the network. It provides information such as the transaction pool, block processing time, transaction propagation and database access. The section may be useful in certain circumstances to get the detailed information and for debugging. + ## Architecture -Test network consists of 3 builders and a regular client. Dev and baseline are builders being compared. Dev builder is a candidate to be merged to main while baseline is the current version of builder. The 2 remaining clients are validator which is a builder connected to the relay as validator and a regular el client which submits blocks in epochs 0-3. -![image](https://github.com/NethermindEth/fb-builder/assets/11379770/54d4a8cf-f64c-4f69-9e32-b35bf43dba0c) +![Test network architecture](architecture.png) + +The architecture consists of fuzzer layer, broadcaster, network, MEV services and data collection layer. + +Fuzzer layer: +* [mev-flood](https://github.com/flashbots/mev-flood) - Spams the network with uniswap swaps +* (tx-fuzz)[https://github.com/MariusVanDerWijden/tx-fuzz/tree/master] - generates random transactions and deploys by utilizing (FuzzyVM)[https://github.com/MariusVanDerWijden/FuzzyVM] +* [Custom flood(https://github.com/kurtosis-tech/ethereum-package/blob/c558cb2eab25cc8c3718b1fda6759a0819e6f942/src/mev_custom_flood/sender.py)] - Simple fuzzer sending tokens between two accounts + +Fuzzer layer sends transactions to the broadcaster which replicate those and broadcast them to all nodes in parallel. + +Test network consists of 4 nodes: +* Dev builder - candidate to be merged. +* Baseline builder - current version of builder. +* Validator builder - connected to the relay as validator. Being relay validator affects performance of the builder therefore the third builder is used to keep the competition between dev and baseline fair. +* Proposer - regular execution layer client. The node contains validators that propose and vote for new blocks. It also builds blocks in epochs 0-3. + +Among those nodes there are three builders that send their bids to the relay. Then the best bid is chosen and passed to the proposer node which proposes it as the new block. +Data collection layer consists of prometheus and grafana. Prometheus gathers the data from all nodes, while grafana displays the data for chosen nodes in form of graphs. ## Known issues ### Kurtosis errors on network start diff --git a/scripts/architecture.png b/scripts/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..ac01160cd743907818134c32f114e7a79b9805d7 GIT binary patch literal 35592 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 W6IsR__rx;b-+rw_do!pu{{IQIAj7Z# literal 0 HcmV?d00001 From 6e617c26af109fc9a6855c9d3a7f005a479f35e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 24 Nov 2023 19:19:19 +0100 Subject: [PATCH 57/58] Fix links to fuzzeers --- scripts/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/README.md b/scripts/README.md index 2800681a4d..fc1eae6608 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -98,8 +98,8 @@ The architecture consists of fuzzer layer, broadcaster, network, MEV services an Fuzzer layer: * [mev-flood](https://github.com/flashbots/mev-flood) - Spams the network with uniswap swaps -* (tx-fuzz)[https://github.com/MariusVanDerWijden/tx-fuzz/tree/master] - generates random transactions and deploys by utilizing (FuzzyVM)[https://github.com/MariusVanDerWijden/FuzzyVM] -* [Custom flood(https://github.com/kurtosis-tech/ethereum-package/blob/c558cb2eab25cc8c3718b1fda6759a0819e6f942/src/mev_custom_flood/sender.py)] - Simple fuzzer sending tokens between two accounts +* [tx-fuzz](https://github.com/MariusVanDerWijden/tx-fuzz/tree/master) - generates random transactions and deploys by utilizing [FuzzyVM](https://github.com/MariusVanDerWijden/FuzzyVM) +* [Custom flood](https://github.com/kurtosis-tech/ethereum-package/blob/c558cb2eab25cc8c3718b1fda6759a0819e6f942/src/mev_custom_flood/sender.py)] - Simple fuzzer sending tokens between two accounts Fuzzer layer sends transactions to the broadcaster which replicate those and broadcast them to all nodes in parallel. From 3cee741a3f6f751adb3dbf72398bbb7f9a6d2284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Sun, 3 Dec 2023 20:32:48 +0100 Subject: [PATCH 58/58] Rename readme -> README --- scripts/dind/{readme.md => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/dind/{readme.md => README.md} (100%) diff --git a/scripts/dind/readme.md b/scripts/dind/README.md similarity index 100% rename from scripts/dind/readme.md rename to scripts/dind/README.md