import json
grafana_dashboard = {
"dashboard": {
"title": "Real-Time Analytics",
"tags": ["clickhouse", "realtime"],
"timezone": "browser",
"refresh": "5s", # Auto-refresh toutes les 5 secondes
"panels": [
{
"id": 1,
"title": "Events per Minute",
"type": "timeseries",
"gridPos": {"x": 0, "y": 0, "w": 12, "h": 8},
"datasource": "ClickHouse",
"targets": [{
"rawSql": "SELECT $__timeInterval(event_minute) AS time, sum(event_count) AS events FROM events_minute WHERE $__timeFilter(event_minute) GROUP BY time ORDER BY time",
"format": "time_series"
}]
},
{
"id": 2,
"title": "Total Events (1h)",
"type": "stat",
"gridPos": {"x": 12, "y": 0, "w": 4, "h": 4},
"datasource": "ClickHouse",
"targets": [{
"rawSql": "SELECT sum(event_count) AS total FROM events_minute WHERE event_minute >= now() - INTERVAL 1 HOUR",
"format": "table"
}],
"options": {
"colorMode": "value",
"graphMode": "none"
}
},
{
"id": 3,
"title": "Revenue (1h)",
"type": "stat",
"gridPos": {"x": 16, "y": 0, "w": 4, "h": 4},
"datasource": "ClickHouse",
"targets": [{
"rawSql": "SELECT sum(total_amount) AS revenue FROM events_minute WHERE event_minute >= now() - INTERVAL 1 HOUR",
"format": "table"
}],
"options": {
"colorMode": "value"
},
"fieldConfig": {
"defaults": {
"unit": "currencyEUR"
}
}
},
{
"id": 4,
"title": "Events by Type",
"type": "piechart",
"gridPos": {"x": 12, "y": 4, "w": 8, "h": 8},
"datasource": "ClickHouse",
"targets": [{
"rawSql": "SELECT event_type, sum(event_count) AS count FROM events_minute WHERE event_minute >= now() - INTERVAL 1 HOUR GROUP BY event_type",
"format": "table"
}]
},
{
"id": 5,
"title": "Top Countries by Revenue",
"type": "barchart",
"gridPos": {"x": 0, "y": 8, "w": 12, "h": 8},
"datasource": "ClickHouse",
"targets": [{
"rawSql": "SELECT country, sum(total_amount) AS revenue FROM events_hourly WHERE event_hour >= today() AND event_type = 'purchase' GROUP BY country ORDER BY revenue DESC LIMIT 10",
"format": "table"
}]
},
{
"id": 6,
"title": "Live Events",
"type": "table",
"gridPos": {"x": 12, "y": 12, "w": 12, "h": 8},
"datasource": "ClickHouse",
"targets": [{
"rawSql": "SELECT event_time, user_id, event_type, country, amount FROM events_final WHERE event_time >= now() - INTERVAL 5 MINUTE ORDER BY event_time DESC LIMIT 50",
"format": "table"
}]
}
]
},
"overwrite": True
}
print("📊 Grafana Dashboard JSON:")
print(json.dumps(grafana_dashboard, indent=2)[:2000] + "...")