Commit 3a6ccab9 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

WebUI component:

- Added parametrization for maximum number of workers
- Added preliminar dashboard for load generator's status
parent d041e8d6
Loading
Loading
Loading
Loading
+414 −0
Original line number Diff line number Diff line
{
    "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"
        }
      ]
    },
    "editable": true,
    "fiscalYearStartMonth": 0,
    "graphTooltip": 0,
    "id": 7,
    "iteration": 1682521708178,
    "links": [],
    "liveNow": false,
    "panels": [
      {
        "aliasColors": {},
        "bars": false,
        "dashLength": 10,
        "dashes": false,
        "datasource": {
          "type": "prometheus",
          "uid": "uq1HQksVk"
        },
        "fill": 1,
        "fillGradient": 0,
        "gridPos": {
          "h": 6,
          "w": 24,
          "x": 0,
          "y": 0
        },
        "hiddenSeries": false,
        "id": 4,
        "legend": {
          "alignAsTable": false,
          "avg": false,
          "current": false,
          "max": false,
          "min": false,
          "rightSide": false,
          "show": false,
          "total": false,
          "values": false
        },
        "lines": true,
        "linewidth": 1,
        "nullPointMode": "null",
        "options": {
          "alertThreshold": true
        },
        "percentage": false,
        "pluginVersion": "8.5.22",
        "pointradius": 2,
        "points": false,
        "renderer": "flot",
        "seriesOverrides": [],
        "spaceLength": 10,
        "stack": false,
        "steppedLine": false,
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "uq1HQksVk"
            },
            "exemplar": true,
            "expr": "sum(tfs_loadgen_rpc_[[method]]_counter_requests_started_total{pod=~\"[[pod]]\"})",
            "hide": false,
            "interval": "",
            "legendFormat": "started",
            "refId": "A"
          },
          {
            "datasource": {
              "type": "prometheus",
              "uid": "uq1HQksVk"
            },
            "exemplar": true,
            "expr": "sum(tfs_loadgen_rpc_[[method]]_counter_requests_completed_total{pod=~\"[[pod]]\"})",
            "hide": false,
            "interval": "",
            "legendFormat": "completed",
            "refId": "B"
          },
          {
            "datasource": {
              "type": "prometheus",
              "uid": "uq1HQksVk"
            },
            "exemplar": true,
            "expr": "sum(tfs_loadgen_rpc_[[method]]_counter_requests_failed_total{pod=~\"[[pod]]\"})",
            "hide": false,
            "interval": "",
            "legendFormat": "failed",
            "refId": "C"
          }
        ],
        "thresholds": [],
        "timeRegions": [],
        "title": "Requests",
        "tooltip": {
          "shared": true,
          "sort": 0,
          "value_type": "individual"
        },
        "transformations": [],
        "type": "graph",
        "xaxis": {
          "mode": "time",
          "show": true,
          "values": []
        },
        "yaxes": [
          {
            "$$hashKey": "object:935",
            "format": "short",
            "logBase": 1,
            "min": "0",
            "show": true
          },
          {
            "$$hashKey": "object:936",
            "format": "short",
            "logBase": 1,
            "show": true
          }
        ],
        "yaxis": {
          "align": false
        }
      },
      {
        "cards": {},
        "color": {
          "cardColor": "#b4ff00",
          "colorScale": "linear",
          "colorScheme": "interpolateRdYlGn",
          "exponent": 0.5,
          "min": 0,
          "mode": "opacity"
        },
        "dataFormat": "tsbuckets",
        "datasource": {
          "type": "prometheus",
          "uid": "uq1HQksVk"
        },
        "gridPos": {
          "h": 8,
          "w": 24,
          "x": 0,
          "y": 6
        },
        "heatmap": {},
        "hideZeroBuckets": true,
        "highlightCards": true,
        "id": 2,
        "interval": "60s",
        "legend": {
          "show": true
        },
        "pluginVersion": "7.5.4",
        "reverseYBuckets": false,
        "targets": [
          {
            "exemplar": true,
            "expr": "sum(\r\n    max_over_time(tfs_[[component]]_rpc_[[method]]_histogram_duration_bucket{pod=~\"[[pod]]\"}[1m]) -\r\n    min_over_time(tfs_[[component]]_rpc_[[method]]_histogram_duration_bucket{pod=~\"[[pod]]\"}[1m])\r\n) by (le)",
            "format": "heatmap",
            "instant": false,
            "interval": "1m",
            "intervalFactor": 1,
            "legendFormat": "{{le}}",
            "refId": "A"
          }
        ],
        "title": "Histogram",
        "tooltip": {
          "show": true,
          "showHistogram": true
        },
        "type": "heatmap",
        "xAxis": {
          "show": true
        },
        "yAxis": {
          "format": "s",
          "logBase": 1,
          "show": true
        },
        "yBucketBound": "auto"
      },
      {
        "aliasColors": {},
        "bars": false,
        "dashLength": 10,
        "dashes": false,
        "datasource": {
          "type": "prometheus",
          "uid": "uq1HQksVk"
        },
        "fill": 1,
        "fillGradient": 0,
        "gridPos": {
          "h": 6,
          "w": 24,
          "x": 0,
          "y": 14
        },
        "hiddenSeries": false,
        "id": 5,
        "legend": {
          "alignAsTable": false,
          "avg": false,
          "current": false,
          "max": false,
          "min": false,
          "rightSide": false,
          "show": false,
          "total": false,
          "values": false
        },
        "lines": true,
        "linewidth": 1,
        "nullPointMode": "null",
        "options": {
          "alertThreshold": true
        },
        "percentage": false,
        "pluginVersion": "8.5.22",
        "pointradius": 2,
        "points": false,
        "renderer": "flot",
        "seriesOverrides": [],
        "spaceLength": 10,
        "stack": false,
        "steppedLine": false,
        "targets": [
          {
            "exemplar": true,
            "expr": "sum(tfs_[[component]]_rpc_[[method]]_histogram_duration_sum{pod=~\"[[pod]]\"})",
            "hide": false,
            "interval": "",
            "legendFormat": "total time",
            "refId": "B"
          }
        ],
        "thresholds": [],
        "timeRegions": [],
        "title": "Total Exec Time",
        "tooltip": {
          "shared": true,
          "sort": 0,
          "value_type": "individual"
        },
        "transformations": [],
        "type": "graph",
        "xaxis": {
          "mode": "time",
          "show": true,
          "values": []
        },
        "yaxes": [
          {
            "$$hashKey": "object:407",
            "format": "s",
            "logBase": 1,
            "min": "0",
            "show": true
          },
          {
            "$$hashKey": "object:408",
            "format": "short",
            "logBase": 1,
            "show": true
          }
        ],
        "yaxis": {
          "align": false
        }
      }
    ],
    "refresh": "5s",
    "schemaVersion": 36,
    "style": "dark",
    "tags": [],
    "templating": {
      "list": [
        {
          "allValue": ".*",
          "current": {
            "selected": true,
            "text": [
              "setup",
              "teardown"
            ],
            "value": [
              "setup",
              "teardown"
            ]
          },
          "datasource": {
            "type": "prometheus",
            "uid": "uq1HQksVk"
          },
          "definition": "metrics(tfs_loadgen_requests_)",
          "hide": 0,
          "includeAll": true,
          "label": "Method",
          "multi": true,
          "name": "method",
          "options": [],
          "query": {
            "query": "metrics(tfs_loadgen_requests_)",
            "refId": "StandardVariableQuery"
          },
          "refresh": 2,
          "regex": "/tfs_loadgen_requests_(.+)_histogram_duration_bucket/",
          "skipUrlSync": false,
          "sort": 0,
          "tagValuesQuery": "",
          "tagsQuery": "",
          "type": "query",
          "useTags": false
        },
        {
          "allValue": ".*",
          "current": {
            "selected": true,
            "text": [
              "All"
            ],
            "value": [
              "$__all"
            ]
          },
          "datasource": {
            "type": "prometheus",
            "uid": "uq1HQksVk"
          },
          "definition": "label_values(tfs_loadgen_requests_[[method]]_histogram_duration_bucket, pod)",
          "error": {
            "config": {
              "data": {
                "end": "1682522070",
                "match[]": "tfs_loadgen_requests_(setup|teardown)_histogram_duration_bucket",
                "start": "1682349270"
              },
              "headers": {
                "Content-Type": "application/x-www-form-urlencoded",
                "X-Grafana-Org-Id": 1
              },
              "hideFromInspector": true,
              "method": "POST",
              "retry": 0,
              "url": "api/datasources/proxy/3/api/v1/series"
            },
            "data": {
              "error": "invalid parameter \"match[]\": 1:22: parse error: unexpected \"(\"",
              "errorType": "bad_data",
              "message": "invalid parameter \"match[]\": 1:22: parse error: unexpected \"(\"",
              "status": "error"
            },
            "message": "invalid parameter \"match[]\": 1:22: parse error: unexpected \"(\"",
            "status": 400,
            "statusText": "Bad Request"
          },
          "hide": 0,
          "includeAll": true,
          "label": "Pod",
          "multi": true,
          "name": "pod",
          "options": [],
          "query": {
            "query": "label_values(tfs_loadgen_requests_[[method]]_histogram_duration_bucket, pod)",
            "refId": "StandardVariableQuery"
          },
          "refresh": 2,
          "regex": "",
          "skipUrlSync": false,
          "sort": 0,
          "tagValuesQuery": "",
          "tagsQuery": "",
          "type": "query",
          "useTags": false
        }
      ]
    },
    "time": {
      "from": "now-2d",
      "to": "now"
    },
    "timepicker": {},
    "timezone": "",
    "title": "TFS / Load Generator",
    "uid": "SDgbwzsVk",
    "version": 5,
    "weekStart": ""
  }
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ class LoadGenForm(FlaskForm):
    capacity_gbps  = StringField('Capacity [Gbps]',  default=DEFAULT_CAPACITY_GBPS,  validators=[Regexp(RE_SCALAR_RANGE_LIST)])
    e2e_latency_ms = StringField('E2E Latency [ms]', default=DEFAULT_E2E_LATENCY_MS, validators=[Regexp(RE_SCALAR_RANGE_LIST)])

    max_workers = IntegerField('Max Workers', default=10, validators=[DataRequired(), NumberRange(min=1)])

    do_teardown = BooleanField('Do Teardown', default=True)

    record_to_dlt = BooleanField('Record to DLT', default=False)
+2 −0
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ def home():
    set_properties(form.availability             , _availability                  , readonly=status.running)
    set_properties(form.capacity_gbps            , _capacity_gbps                 , readonly=status.running)
    set_properties(form.e2e_latency_ms           , _e2e_latency_ms                , readonly=status.running)
    set_properties(form.max_workers              , status.parameters.max_workers  , readonly=status.running)
    set_properties(form.do_teardown              , status.parameters.do_teardown  , disabled=status.running)
    set_properties(form.record_to_dlt            , status.parameters.record_to_dlt, disabled=status.running)
    set_properties(form.dlt_domain_id            , status.parameters.dlt_domain_id, readonly=status.running)
@@ -100,6 +101,7 @@ def start():
            load_gen_params.offered_load       = form.offered_load.data
            load_gen_params.holding_time       = form.holding_time.data
            load_gen_params.inter_arrival_time = form.inter_arrival_time.data
            load_gen_params.max_workers        = form.max_workers.data
            load_gen_params.do_teardown        = form.do_teardown.data
            load_gen_params.dry_mode           = False
            load_gen_params.record_to_dlt      = form.record_to_dlt.data
+15 −0
Original line number Diff line number Diff line
@@ -158,6 +158,21 @@
            </div>
            <br />

            <div class="row mb-3">
                {{ form.max_workers.label(class="col-sm-2 col-form-label") }}
                <div class="col-sm-10">
                    {% if form.max_workers.errors %}
                        {{ form.max_workers(class="form-control is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.max_workers.errors %}<span>{{ error }}</span>{% endfor %}
                        </div>
                    {% else %}
                        {{ form.max_workers(class="form-control") }}
                    {% endif %}
                </div>
            </div>
            <br />

            <div class="row mb-3">
                <div class="col-sm-10">
                    {{ form.do_teardown }} {{ form.do_teardown.label(class="col-sm-3 col-form-label") }}<br/>