github.com/letsencrypt/boulder@v0.20251208.0/test/grafana/lint.py (about)

     1  # Check dashboard JSON files for common errors, like forgetting to templatize a
     2  # datasource.
     3  import json
     4  import os
     5  with open(os.path.join(os.path.dirname(os.path.realpath(__file__)),
     6      "boulderdash.json")) as f:
     7      dashboard = json.load(f)
     8  
     9  # When exporting, the current value of templated variables is saved. We don't
    10  # want to save a specific value for datasource, since that's
    11  # deployment-specific, so we ensure that the dashboard was exported with the
    12  # datasource template variable set to "Default."
    13  for li in dashboard["templating"]["list"]:
    14      if li["type"] == "datasource":
    15          assert(li["current"]["value"] == "default")
    16  
    17  # Additionally, ensure each panel's datasource is using the template variable
    18  # rather than a hardcoded datasource. Grafana will choose a hardcoded
    19  # datasource on new panels by default, so this is an easy mistake to make.
    20  for ro in dashboard["rows"]:
    21      for pa in ro["panels"]:
    22          assert(pa["datasource"] == "$datasource")
    23  
    24  # It seems that __inputs is non-empty when template variables at the top of the
    25  # dashboard have been modified from the defaults; check for that.
    26  assert(len(dashboard["__inputs"]) == 0)