feat: add lab SQLite migrate, LiteLLM env, and OTEL/Grafana stack
sonar / sonar (push) Skipped
sonar / sonar (pull_request) Failing after 40s

Enable local workshop readiness with executable SQLite migrations, OpenTelemetry hello signals, and a provisioned Grafana demo dashboard over Tempo/Loki/Prometheus.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-11 14:58:33 -03:00
co-authored by Cursor
parent 5307e2a9fa
commit 3b5c3fb86f
19 changed files with 1487 additions and 6 deletions
@@ -0,0 +1,155 @@
{
"annotations": { "list": [] },
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 1,
"id": null,
"links": [],
"panels": [
{
"type": "row",
"title": "Metrics",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
"id": 10,
"collapsed": false
},
{
"id": 1,
"title": "Hello runs (total)",
"type": "stat",
"gridPos": { "h": 6, "w": 6, "x": 0, "y": 1 },
"datasource": { "type": "prometheus", "uid": "prometheus" },
"targets": [
{
"refId": "A",
"expr": "otelcol_ticketlab_hello_runs_total{exported_job=\"ticketlab\"}",
"legendFormat": "runs"
}
],
"options": {
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false },
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"textMode": "auto"
},
"fieldConfig": {
"defaults": {
"color": { "mode": "thresholds" },
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "blue", "value": null },
{ "color": "green", "value": 1 }
]
},
"unit": "short"
},
"overrides": []
}
},
{
"id": 2,
"title": "Hello runs over time",
"type": "timeseries",
"gridPos": { "h": 6, "w": 18, "x": 6, "y": 1 },
"datasource": { "type": "prometheus", "uid": "prometheus" },
"targets": [
{
"refId": "A",
"expr": "otelcol_ticketlab_hello_runs_total{exported_job=\"ticketlab\"}",
"legendFormat": "{{component}}"
}
],
"fieldConfig": {
"defaults": {
"color": { "mode": "palette-classic" },
"custom": {
"drawStyle": "line",
"lineInterpolation": "smooth",
"fillOpacity": 15,
"showPoints": "auto",
"spanNulls": true
},
"unit": "short"
},
"overrides": []
},
"options": {
"legend": { "displayMode": "list", "placement": "bottom", "showLegend": true },
"tooltip": { "mode": "single", "sort": "none" }
}
},
{
"type": "row",
"title": "Logs",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 7 },
"id": 11,
"collapsed": false
},
{
"id": 3,
"title": "TicketLab logs (Loki)",
"type": "logs",
"gridPos": { "h": 10, "w": 24, "x": 0, "y": 8 },
"datasource": { "type": "loki", "uid": "loki" },
"targets": [
{
"refId": "A",
"expr": "{service_name=\"ticketlab\"}",
"queryType": "range"
}
],
"options": {
"showTime": true,
"showLabels": true,
"showCommonLabels": false,
"wrapLogMessage": true,
"prettifyLogMessage": true,
"enableLogDetails": true,
"dedupStrategy": "none",
"sortOrder": "Descending"
}
},
{
"type": "row",
"title": "Tracing",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 },
"id": 12,
"collapsed": false
},
{
"id": 4,
"title": "Recent traces (Tempo)",
"type": "table",
"gridPos": { "h": 10, "w": 24, "x": 0, "y": 19 },
"datasource": { "type": "tempo", "uid": "tempo" },
"targets": [
{
"refId": "A",
"datasource": { "type": "tempo", "uid": "tempo" },
"queryType": "traceql",
"query": "{ resource.service.name = \"ticketlab\" }",
"limit": 20,
"tableType": "traces"
}
],
"options": {
"showHeader": true,
"cellHeight": "sm",
"footer": { "show": false }
}
}
],
"refresh": "5s",
"schemaVersion": 39,
"tags": ["ticketlab", "otel", "demo"],
"templating": { "list": [] },
"time": { "from": "now-1h", "to": "now" },
"timepicker": {},
"timezone": "browser",
"title": "TicketLab Demo - Metrics / Logs / Traces",
"uid": "ticketlab-demo",
"version": 1
}