Add color mapping to Grafana dashboard.

This commit is contained in:
Maximilian Paß
2022-10-26 16:56:52 +01:00
parent 0b7f71f3dc
commit 8f495f524c
6 changed files with 60 additions and 3 deletions

View File

@ -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(

View File

@ -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(

View File

@ -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(

View File

@ -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)

View File

@ -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"),
], {})

View File

@ -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