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

@@ -394,6 +394,26 @@ export interface paths {
patch?: never;
trace?: never;
};
"/diagrams": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Find diagram by application group and route ID
* @description Resolves group to agent IDs and finds the latest diagram for the route
*/
get: operations["findByGroupAndRoute"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/diagrams/{contentHash}/render": {
parameters: {
query?: never;
@@ -440,7 +460,7 @@ export interface paths {
};
/**
* List all agents
* @description Returns all registered agents, optionally filtered by status
* @description Returns all registered agents, optionally filtered by status and/or group
*/
get: operations["listAgents"];
put?: never;
@@ -558,6 +578,8 @@ export interface components {
routeId?: string;
agentId?: string;
processorType?: string;
group?: string;
agentIds?: string[];
/** Format: int32 */
offset?: number;
/** Format: int32 */
@@ -759,6 +781,7 @@ export interface components {
width?: number;
/** Format: double */
height?: number;
children?: components["schemas"]["PositionedNode"][];
};
/** @description OIDC configuration for SPA login flow */
OidcPublicConfigResponse: {
@@ -915,6 +938,7 @@ export interface operations {
routeId?: string;
agentId?: string;
processorType?: string;
group?: string;
offset?: number;
limit?: number;
sortField?: string;
@@ -1452,6 +1476,8 @@ export interface operations {
query: {
from: string;
to?: string;
routeId?: string;
group?: string;
};
header?: never;
path?: never;
@@ -1476,6 +1502,8 @@ export interface operations {
from: string;
to?: string;
buckets?: number;
routeId?: string;
group?: string;
};
header?: never;
path?: never;
@@ -1561,6 +1589,36 @@ export interface operations {
};
};
};
findByGroupAndRoute: {
parameters: {
query: {
group: string;
routeId: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Diagram layout returned */
200: {
headers: {
[name: string]: unknown;
};
content: {
"*/*": components["schemas"]["DiagramLayout"];
};
};
/** @description No diagram found for the given group and route */
404: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
renderDiagram: {
parameters: {
query?: never;
@@ -1635,6 +1693,7 @@ export interface operations {
parameters: {
query?: {
status?: string;
group?: string;
};
header?: never;
path?: never;