diff --git a/deploy/grafana-dashboard/panels/availability_row.py b/deploy/grafana-dashboard/panels/availability_row.py index c1eb69f..7145049 100644 --- a/deploy/grafana-dashboard/panels/availability_row.py +++ b/deploy/grafana-dashboard/panels/availability_row.py @@ -2,6 +2,7 @@ from grafanalib.core import RowPanel, BarGauge, GridPos, TimeSeries, ORIENTATION GAUGE_DISPLAY_MODE_BASIC from grafanalib.influxdb import InfluxDBTarget +from utils.color_mapping import color_mapping_environments from utils.utils import read_query prewarming_pool_size = BarGauge( @@ -13,6 +14,7 @@ prewarming_pool_size = BarGauge( orientation=ORIENTATION_VERTICAL, displayMode=GAUGE_DISPLAY_MODE_BASIC, max=None, + extraJson=color_mapping_environments, ) idle_runner = TimeSeries( @@ -22,6 +24,7 @@ idle_runner = TimeSeries( gridPos=GridPos(h=10, w=13, x=11, y=1), lineInterpolation="stepAfter", maxDataPoints=None, + extraJson=color_mapping_environments, ) runner_startup_duration = TimeSeries( @@ -32,6 +35,7 @@ runner_startup_duration = TimeSeries( unit="ns", maxDataPoints=None, lineInterpolation="smooth", + extraJson=color_mapping_environments, ) used_runner = TimeSeries( diff --git a/deploy/grafana-dashboard/panels/general_row.py b/deploy/grafana-dashboard/panels/general_row.py index e52fada..2179d5f 100644 --- a/deploy/grafana-dashboard/panels/general_row.py +++ b/deploy/grafana-dashboard/panels/general_row.py @@ -2,7 +2,7 @@ from grafanalib.core import RowPanel, GridPos, Stat, TimeSeries, Heatmap, BarGau ORIENTATION_VERTICAL, GAUGE_DISPLAY_MODE_BASIC from grafanalib.influxdb import InfluxDBTarget -from utils.color_mapping import grey_all_mapping +from utils.color_mapping import grey_all_mapping, color_mapping_environments from utils.utils import read_query requests_per_minute = TimeSeries( @@ -67,6 +67,7 @@ number_of_executions = BarGauge( orientation=ORIENTATION_VERTICAL, displayMode=GAUGE_DISPLAY_MODE_BASIC, max=None, + extraJson=color_mapping_environments, ) execution_duration = BarGauge( @@ -79,6 +80,7 @@ execution_duration = BarGauge( format="ns", max=None, decimals=2, + extraJson=color_mapping_environments, ) executions_per_runner = BarGauge( @@ -90,6 +92,7 @@ executions_per_runner = BarGauge( displayMode=GAUGE_DISPLAY_MODE_GRADIENT, max=None, decimals=2, + extraJson=color_mapping_environments, ) executions_per_minute = BarGauge( @@ -101,6 +104,7 @@ executions_per_minute = BarGauge( displayMode=GAUGE_DISPLAY_MODE_GRADIENT, max=None, decimals=2, + extraJson=color_mapping_environments, ) general_row = RowPanel( diff --git a/deploy/grafana-dashboard/panels/runner_insights_row.py b/deploy/grafana-dashboard/panels/runner_insights_row.py index acf52e7..1a7785f 100644 --- a/deploy/grafana-dashboard/panels/runner_insights_row.py +++ b/deploy/grafana-dashboard/panels/runner_insights_row.py @@ -1,7 +1,8 @@ from grafanalib.core import RowPanel, GridPos, Histogram, TimeSeries from grafanalib.influxdb import InfluxDBTarget -from utils.utils import read_query +from utils.color_mapping import color_mapping_environments +from utils.utils import read_query, deep_update_dict execution_duration_extra_json = { "fieldConfig": { @@ -10,6 +11,7 @@ execution_duration_extra_json = { } } } +deep_update_dict(execution_duration_extra_json, color_mapping_environments) execution_duration = Histogram( title="Execution duration", dataSource="Poseidon", @@ -33,6 +35,7 @@ executions_per_runner = Histogram( fillOpacity=50, lineWidth=1, maxDataPoints=None, + extraJson=color_mapping_environments, ) executions_per_minute = TimeSeries( @@ -42,6 +45,7 @@ executions_per_minute = TimeSeries( gridPos=GridPos(h=10, w=13, x=11, y=57), maxDataPoints=None, lineInterpolation="smooth", + extraJson=color_mapping_environments, ) request_body_size = TimeSeries( @@ -53,6 +57,7 @@ request_body_size = TimeSeries( unit="bytes", maxDataPoints=None, lineInterpolation="smooth", + extraJson=color_mapping_environments, ) runner_per_minute = TimeSeries( @@ -62,6 +67,7 @@ runner_per_minute = TimeSeries( gridPos=GridPos(h=10, w=13, x=11, y=67), maxDataPoints=None, lineInterpolation="smooth", + extraJson=color_mapping_environments, ) runner_insights_row = RowPanel( diff --git a/deploy/grafana-dashboard/queries/executions-per-minute-time.flux b/deploy/grafana-dashboard/queries/executions-per-minute-time.flux index 059f454..af29833 100644 --- a/deploy/grafana-dashboard/queries/executions-per-minute-time.flux +++ b/deploy/grafana-dashboard/queries/executions-per-minute-time.flux @@ -9,4 +9,4 @@ result = from(bucket: "poseidon/autogen") |> filter(fn: (r) => r["event_type"] == "creation") |> group(columns: ["environment_id", "stage"], mode:"by") |> aggregateWindow(every: 1m, fn: count, createEmpty: true) - |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 5), fn: mean, createEmpty: true) + |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 8), fn: mean, createEmpty: true) diff --git a/deploy/grafana-dashboard/utils/color_mapping.py b/deploy/grafana-dashboard/utils/color_mapping.py index a9a8e8e..02f29f5 100644 --- a/deploy/grafana-dashboard/utils/color_mapping.py +++ b/deploy/grafana-dashboard/utils/color_mapping.py @@ -1,3 +1,7 @@ +from utils.utils import deep_update_dict +from functools import reduce + + def color_mapping(name, color): return { "fieldConfig": { @@ -19,3 +23,23 @@ def color_mapping(name, color): grey_all_mapping = color_mapping("all", "#4c4b5a") + + +def add_color_mapping(mapping_dict, new_item): + deep_update_dict(mapping_dict, color_mapping(new_item[0], new_item[1])) + return mapping_dict + + +color_mapping_environments = reduce(add_color_mapping, [ + ("p10/java:8-antlr", "yellow"), + ("p28/r:4", "blue"), + ("p29/python:3.8", "orange"), + ("p31/java:17", "red"), + ("p33/openhpi/docker_exec_phusion", "purple"), + ("p11/java:8-antlr", "pink"), + ("p14/python:3.4", "brown"), + ("p18/node:0.12", "black"), + ("p22/python:3.4-rpi-web", "white"), + ("p25/ruby:2.5", "gray"), + ("p30/python:3.7-ml", "gold"), +], {}) diff --git a/deploy/grafana-dashboard/utils/utils.py b/deploy/grafana-dashboard/utils/utils.py index 9101051..fd55deb 100644 --- a/deploy/grafana-dashboard/utils/utils.py +++ b/deploy/grafana-dashboard/utils/utils.py @@ -4,3 +4,22 @@ def read_query(*names): with open("queries/" + name + ".flux", "r") as file: result += file.read() return result + + +def deep_update_dict(base_dict, extra_dict): + if extra_dict is None: + return base_dict + + for k, v in extra_dict.items(): + update_dict_entry(base_dict, k, v) + + +def update_dict_entry(base_dict, k, v): + if k in base_dict and hasattr(base_dict[k], "to_json_data"): + base_dict[k] = base_dict[k].to_json_data() + if k in base_dict and isinstance(base_dict[k], dict): + deep_update_dict(base_dict[k], v) + elif k in base_dict and isinstance(base_dict[k], list): + base_dict[k].extend(v) + else: + base_dict[k] = v