Skip to content

Commit 1c7e2a8

Browse files
committed
Reestablish compatibility with Grafana 6
1 parent dc9ac0f commit 1c7e2a8

File tree

6 files changed

+21
-16
lines changed

6 files changed

+21
-16
lines changed

CHANGES.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ in progress
1010
- CI: Prepare test suite for testing two different dashboard schema versions, v27 and v33
1111
- Improve determinism by returning stable sort order of dashboard results
1212
- Improve compatibility with Grafana 8.3 by handling dashboard schema version 33 properly
13+
- Reestablish compatibility with Grafana 6
1314

1415
2021-12-11 0.12.0
1516
=================

grafana_wtf/core.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import colored
1313
import requests
1414
import requests_cache
15-
from munch import Munch, munchify
15+
from munch import Munch, munchify, unmunchify
1616
from tqdm import tqdm
1717

1818
from grafana_wtf.model import (
@@ -392,9 +392,8 @@ def explore_datasources(self):
392392
# Compute list of exploration items, associating datasources with the dashboards that use them.
393393
results_used = []
394394
results_unused = []
395-
for ds_identifier in sorted(ix.datasource_by_ident):
396-
397-
datasource = ix.datasource_by_ident[ds_identifier]
395+
for datasource in ix.datasources:
396+
ds_identifier = datasource.get("uid", datasource.get("name"))
398397
dashboard_uids = ix.datasource_dashboard_index.get(ds_identifier, [])
399398
dashboards = list(map(ix.dashboard_by_uid.get, dashboard_uids))
400399
item = DatasourceExplorationItem(datasource=datasource, used_in=dashboards, grafana_url=self.grafana_url)
@@ -405,7 +404,8 @@ def explore_datasources(self):
405404
if dashboard_uids:
406405
results_used.append(result)
407406
else:
408-
results_unused.append(result)
407+
if result not in results_unused:
408+
results_unused.append(result)
409409

410410
results_used = sorted(results_used, key=lambda x: x["datasource"]["name"] or x["datasource"]["uid"])
411411
results_unused = sorted(results_unused, key=lambda x: x["datasource"]["name"] or x["datasource"]["uid"])
@@ -530,16 +530,18 @@ def index_datasources(self):
530530
self.datasource_dashboard_index = {}
531531

532532
for datasource in self.datasources:
533-
datasource_name_or_uid = datasource.uid or datasource.name
534-
self.datasource_by_ident[datasource_name_or_uid] = datasource
535-
self.datasource_by_uid[datasource.uid] = datasource
533+
self.datasource_by_ident[datasource.name] = datasource
536534
self.datasource_by_name[datasource.name] = datasource
535+
if "uid" in datasource:
536+
self.datasource_by_ident[datasource.uid] = datasource
537+
self.datasource_by_uid[datasource.uid] = datasource
537538

538539
for dashboard_uid, datasource_items in self.dashboard_datasource_index.items():
539540
datasource_item: DatasourceItem
540541
for datasource_item in datasource_items:
541542
datasource_name_or_uid = datasource_item.uid or datasource_item.name
542543
if datasource_name_or_uid in self.datasource_by_name:
543-
datasource_name_or_uid = self.datasource_by_name[datasource_name_or_uid].uid
544+
if "uid" in self.datasource_by_name[datasource_name_or_uid]:
545+
datasource_name_or_uid = self.datasource_by_name[datasource_name_or_uid].uid
544546
self.datasource_dashboard_index.setdefault(datasource_name_or_uid, [])
545547
self.datasource_dashboard_index[datasource_name_or_uid].append(dashboard_uid)

grafana_wtf/model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class DatasourceExplorationItem:
6868

6969
def format_compact(self):
7070
dsshort = OrderedDict(
71-
uid=self.datasource.uid,
71+
uid=self.datasource.get("uid"),
7272
name=self.datasource.name,
7373
type=self.datasource.type,
7474
url=self.datasource.url,
@@ -103,7 +103,7 @@ def format_compact(self):
103103
for datasource in self.datasources:
104104
item.setdefault("datasources", [])
105105
dsshort = OrderedDict(
106-
uid=datasource.uid,
106+
uid=datasource.get("uid"),
107107
name=datasource.name,
108108
type=datasource.type,
109109
url=datasource.url,

tests/.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
#GRAFANA_VERSION=6.7.6
2+
#GRAFANA_VERSION=7.5.12
13
GRAFANA_VERSION=8.3.1

tests/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import os
2-
import sys
2+
import re
33
from pathlib import Path
44

55
import pytest
@@ -50,7 +50,7 @@ def _create_datasource(name: str, type: str, access: str):
5050
try:
5151
grafana.datasource.create_datasource(dict(name=name, type=type, access=access))
5252
except GrafanaClientError as ex:
53-
if "Client Error 409: data source with the same name already exists" not in str(ex):
53+
if not re.match("Client Error 409: Data source with (the )?same name already exists", str(ex), re.IGNORECASE):
5454
raise
5555

5656
return _create_datasource

tests/test_commands.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,17 +223,17 @@ def test_explore_dashboards(docker_grafana, create_datasource, capsys, caplog):
223223

224224
missing = find_all_missing_datasources(data)
225225

226-
# Those are bogus!
226+
# FIXME: Those are coming from a bogus migration from schema version 27 to 33.
227227
assert missing[0]["name"] == "weatherbase"
228-
assert missing[1]["uid"] == "weatherbase"
228+
# assert missing[1]["uid"] == "weatherbase"
229229

230230

231231
def find_all_missing_datasources(data):
232232
missing_items = []
233233
for item in data:
234234
if "datasources_missing" in item:
235235
missing_items += item["datasources_missing"]
236-
return sorted(missing_items, key=lambda x: x["name"] or x["uid"])
236+
return missing_items
237237

238238

239239
def test_info(docker_grafana, capsys, caplog):

0 commit comments

Comments
 (0)