diff --git a/bundles/grafana/items.py b/bundles/grafana/items.py index 2c3717c..743dca4 100644 --- a/bundles/grafana/items.py +++ b/bundles/grafana/items.py @@ -151,6 +151,7 @@ for dashboard_id, monitored_node in enumerate(monitored_nodes, start=1): 'host': monitored_node.name, **query_config['filters'], }, + exists=query_config.get('exists', []), function=query_config.get('function', None), ).strip() }) diff --git a/bundles/telegraf/metadata.py b/bundles/telegraf/metadata.py index 1a25d11..0d0f887 100644 --- a/bundles/telegraf/metadata.py +++ b/bundles/telegraf/metadata.py @@ -45,7 +45,9 @@ defaults = { 'memory_rss', ], })}, - 'diskio': {h({})}, + 'diskio': {h({ + 'device_tags': ["ID_PART_ENTRY_NUMBER"], + })}, 'kernel': {h({})}, 'mem': {h({})}, 'processes': {h({})}, diff --git a/data/grafana/flux.mako b/data/grafana/flux.mako index 0bf1c17..83ec9e2 100644 --- a/data/grafana/flux.mako +++ b/data/grafana/flux.mako @@ -3,6 +3,9 @@ from(bucket: "${bucket}") % for key, values in filters.items(): <% values = values if isinstance(values, list) else [values] %>\ |> filter(fn: (r) => ${' or '.join(f'r["{key}"] == "{value}"' for value in values)}) +% endfor +% for exist in exists: + |> filter(fn: (r) => exists r["${exist}"]) // WTF % endfor |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) // aggregate early for best performance % if minimum: diff --git a/data/grafana/rows/disk_io.py b/data/grafana/rows/disk_io.py index 6cecfd9..f1053ce 100644 --- a/data/grafana/rows/disk_io.py +++ b/data/grafana/rows/disk_io.py @@ -9,6 +9,9 @@ 'read_bytes', ], }, + 'exists': [ + 'ID_PART_ENTRY_NUMBER', + ], 'function': 'derivative', }, }, @@ -26,6 +29,9 @@ 'write_bytes', ], }, + 'exists': [ + 'ID_PART_ENTRY_NUMBER', + ], 'function': 'derivative', }, },