Skip to content

Instantly share code, notes, and snippets.

@JaySon-Huang
Last active September 13, 2023 06:55
Show Gist options
  • Save JaySon-Huang/740e8900cd4db66052f8f6cd66a32489 to your computer and use it in GitHub Desktop.
Save JaySon-Huang/740e8900cd4db66052f8f6cd66a32489 to your computer and use it in GitHub Desktop.
Validate the correctness of the Grafana JSON model
#!/usr/bin/env python3
import sys
import json
import logging
def main():
logging.basicConfig(format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%Y/%m/%d %H:%M:%S', level=logging.INFO)
if len(sys.argv) < 2:
logging.error("Usage: {} path/to/grafana.json".format(sys.argv[0]))
return 1
infile = sys.argv[1]
j = json.load(open(infile))
panels = j['panels']
existing_ids = {}
ok = True
if j["title"] != "Test-Cluster-TiFlash-Summary":
ok = False
logging.error("key={} actual={}".format("title", j["title"]))
if j["uid"] != "SVbh2xUWk":
ok = False
logging.error("key={} actual={}".format("uid", j["uid"]))
if j["__inputs"][0]["name"] != "DS_TEST-CLUSTER" or j["__inputs"][0]["label"] != "Test-Cluster":
ok = False
logging.error("key={} actual={}".format("__inputs", j["__inputs"]))
for panel in panels:
ok &= handle_panel(panel, j["title"], existing_ids)
if not ok:
logging.error("!!!Error detected!!!")
return 2
else:
logging.info("All checks passed")
return 0
def handle_panel(panel, parent_title, existing_ids):
logging.debug('title: {} type: {}'.format(parent_title, panel["type"]))
if panel["type"] == "row":
# Check sub panels recursively
logging.info("Checking panels under row '{}'".format(panel["title"]))
sub_panels = panel["panels"]
ok = True
for p in sub_panels:
ok &= handle_panel(p, panel["title"], existing_ids)
logging.info("Check done for panels under row '{}'".format(panel["title"]))
return ok
# Check whether there exist duplicate id
if panel["id"] not in existing_ids:
existing_ids[panel["id"]] = {
"panel": panel,
"parent_title": parent_title,
}
return True
else:
current_title = panel["title"]
existing_panel = existing_ids[panel["id"]]
logging.error("Found duplicated id {}".format(panel["id"]))
logging.error("Original panel title: '{}' under row '{}'".format(existing_panel["panel"]["title"], existing_panel["parent_title"]))
logging.error("Duplicate panel title: '{}' under row '{}'".format(current_title, parent_title))
return False
if __name__ == '__main__':
sys.exit(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment