Add route diagram page with execution overlay and group-aware APIs
All checks were successful
CI / build (push) Successful in 1m10s
CI / docker (push) Successful in 1m3s
CI / deploy (push) Successful in 31s

Backend: Add group filtering to agent list, search, stats, and timeseries
endpoints. Add diagram lookup by group+routeId. Resolve application group
to agent IDs server-side for ClickHouse IN-clause queries.

Frontend: New route detail page at /apps/{group}/routes/{routeId} with
three tabs (Diagram, Performance, Processor Tree). SVG diagram rendering
with panzoom, execution overlay (glow effects, duration/sequence badges,
flow particles, minimap), and processor detail panel. uPlot charts for
performance tab replacing old SVG sparklines. Ctrl+Click from
ExecutionExplorer navigates to route diagram with overlay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-14 21:35:42 +01:00
parent b64edaa16f
commit 7778793e7b
41 changed files with 2770 additions and 26 deletions

View File

@@ -236,6 +236,14 @@
"type": "string"
}
},
{
"name": "group",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "offset",
"in": "query",
@@ -933,6 +941,22 @@
"type": "string",
"format": "date-time"
}
},
{
"name": "routeId",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "group",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
@@ -984,6 +1008,22 @@
"format": "int32",
"default": 24
}
},
{
"name": "routeId",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "group",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
@@ -1097,6 +1137,49 @@
}
}
},
"/diagrams": {
"get": {
"tags": [
"Diagrams"
],
"summary": "Find diagram by application group and route ID",
"description": "Resolves group to agent IDs and finds the latest diagram for the route",
"operationId": "findByGroupAndRoute",
"parameters": [
{
"name": "group",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "routeId",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Diagram layout returned",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/DiagramLayout"
}
}
}
},
"404": {
"description": "No diagram found for the given group and route"
}
}
}
},
"/diagrams/{contentHash}/render": {
"get": {
"tags": [
@@ -1191,7 +1274,7 @@
"Agent Management"
],
"summary": "List all agents",
"description": "Returns all registered agents, optionally filtered by status",
"description": "Returns all registered agents, optionally filtered by status and/or group",
"operationId": "listAgents",
"parameters": [
{
@@ -1201,6 +1284,14 @@
"schema": {
"type": "string"
}
},
{
"name": "group",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
@@ -1509,6 +1600,15 @@
"processorType": {
"type": "string"
},
"group": {
"type": "string"
},
"agentIds": {
"type": "array",
"items": {
"type": "string"
}
},
"offset": {
"type": "integer",
"format": "int32"
@@ -2119,6 +2219,12 @@
"height": {
"type": "number",
"format": "double"
},
"children": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PositionedNode"
}
}
}
},