Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
d.Row(title="etcd", panels=ETCD_PANELS, collapse=True),
d.Row(title="kube-apiserver", panels=APISERVER_PANELS, collapse=True),
d.Row(
title="kube-controller-manager",
panels=[
d.simple_graph(
"Workqueue depths",
'workqueue_depth{endpoint="kube-controller-manager"}',
legend="{{name}}",
)
],
collapse=True,
),
d.Row(title="Master VM", panels=VM_PANELS, collapse=True),
],
templating=g.Templating(
list=[
d.SOURCE_TEMPLATE,
g.Template(
name="etcd_type",
type="query",
dataSource="$source",
regex=r"\*\[+\]+(.*)",
query="label_values(etcd_request_duration_seconds_count, type)",
multi=True,
includeAll=True,
refresh=g.REFRESH_ON_TIME_RANGE_CHANGE,
),
g.Template(
name="etcd_operation",
type="query",
dataSource="$source",
"expr": sum(service_metric(m, "rate", resolution)),
"legendFormat": m,
}
for m in task_metrics
],
span=3,
steppedLine=True,
),
],
)
dashboard = G.Dashboard(
title="Generated SDK dashboard",
rows=[resource_row(), resource_row(POD_TYPE_VARIABLE), scheduler_row(), task_row()],
templating=G.Templating(
list=[
{
"datasource": PROMETHEUS_DATA_SOURCE,
"hide": 0,
"name": FRAMEWORK_VARIABLE.lstrip("$"),
"options": [],
"query": "label_values(offers_received, dcos_service_name)",
"refresh": REFRESH_ON_TIMERANGE_CHANGE,
"regex": "",
"sort": 0,
"tagValuesQuery": "",
"tags": [],
"tagsQuery": "",
"type": "query",
},
{
import re
import attr
from grafanalib import core as g
DECREASING_ORDER_TOOLTIP = g.Tooltip(sort=g.SORT_DESC)
PANEL_HEIGHT = g.Pixels(300)
QUANTILES = [0.99, 0.9, 0.5]
SOURCE_TEMPLATE = g.Template(name="source", type="datasource", query="prometheus")
@attr.s
class Dashboard(g.Dashboard):
time = attr.ib(default=g.Time("now-30d", "now"))
# Make it possible to use $source as a source.
templating = attr.ib(default=g.Templating(list=[SOURCE_TEMPLATE]))
# Graph is a g.Graph with reasonable defaults applied.
@attr.s
class Graph(g.Graph):
dataSource = attr.ib(default="$source")
span = attr.ib(default=g.TOTAL_SPAN)
tooltip = attr.ib(default=DECREASING_ORDER_TOOLTIP)
nullPointMode = attr.ib(default=None)
@attr.s
class Row(g.Row):
height = attr.ib(default=PANEL_HEIGHT)
default=False,
validator=instance_of(bool),
)
id = attr.ib(default=None)
inputs = attr.ib(default=attr.Factory(list))
links = attr.ib(default=attr.Factory(list))
refresh = attr.ib(default=DEFAULT_REFRESH)
schemaVersion = attr.ib(default=SCHEMA_VERSION)
sharedCrosshair = attr.ib(
default=False,
validator=instance_of(bool),
)
style = attr.ib(default=DARK_STYLE)
tags = attr.ib(default=attr.Factory(list))
templating = attr.ib(
default=attr.Factory(Templating),
validator=instance_of(Templating),
)
time = attr.ib(
default=attr.Factory(lambda: DEFAULT_TIME),
validator=instance_of(Time),
)
timePicker = attr.ib(
default=attr.Factory(lambda: DEFAULT_TIME_PICKER),
validator=instance_of(TimePicker),
)
timezone = attr.ib(default=UTC)
version = attr.ib(default=0)
uid = attr.ib(default=None)
def _iter_panels(self):
for row in self.rows:
validator=instance_of(bool),
)
id = attr.ib(default=None)
inputs = attr.ib(default=attr.Factory(list))
links = attr.ib(default=attr.Factory(list))
refresh = attr.ib(default=DEFAULT_REFRESH)
schemaVersion = attr.ib(default=SCHEMA_VERSION)
sharedCrosshair = attr.ib(
default=False,
validator=instance_of(bool),
)
style = attr.ib(default=DARK_STYLE)
tags = attr.ib(default=attr.Factory(list))
templating = attr.ib(
default=attr.Factory(Templating),
validator=instance_of(Templating),
)
time = attr.ib(
default=attr.Factory(lambda: DEFAULT_TIME),
validator=instance_of(Time),
)
timePicker = attr.ib(
default=attr.Factory(lambda: DEFAULT_TIME_PICKER),
validator=instance_of(TimePicker),
)
timezone = attr.ib(default=UTC)
version = attr.ib(default=0)
uid = attr.ib(default=None)
def _iter_panels(self):
for row in self.rows:
for panel in row._iter_panels():