Grafana Panels¶
Extract the list of panel titles from a Grafana dashboard JSON. Each panel title is located at spec.elements.panel-N.spec.title, where “panel-N” uses a numeric suffix (for example, “panel-1” or “panel-3”).
import json
import re
from typing import Dict, List, Optional
import sys
Command-line argument: path to Grafana dashboard JSON file
if len(sys.argv) != 2:
print("Usage: python grafana_panels.py <dashboard_json_file>")
sys.exit(1)
grafana_json_path = sys.argv[1]
Extracts panel titles located at spec -> elements -> “panel-N” -> spec -> title. Returns a list of titles (in no particular order). Skips panels without titles.
def extract_panel_titles(dashboard: Dict) -> List[str]:
titles: List[str] = []
elements = dashboard.get("spec", {}).get("elements", {})
if not isinstance(elements, dict):
return titles
for key, panel_obj in elements.items():
if re.match(r"^panel-\d+$", key) and isinstance(panel_obj, dict):
title: Optional[str] = panel_obj.get("spec", {}).get("title")
if isinstance(title, str):
titles.append(title)
return titles
Load a dashboard JSON file and print the titles
if __name__ == "__main__":
with open(grafana_json_path, "r", encoding="utf-8") as f:
dashboard_json = json.load(f)
titles = extract_panel_titles(dashboard_json)
print("=== Panel titles")
for t in titles:
print("1. ", t)
print("----------------------------")