Fix status filter OR logic and add P99/active stats endpoint
All checks were successful
CI / build (push) Successful in 1m1s
CI / docker (push) Successful in 47s
CI / deploy (push) Successful in 29s

Status filter now parses comma-separated values into SQL IN clause
instead of exact match, so filtering by multiple statuses works.

Added GET /api/v1/search/stats returning P99 latency (last hour) and
active execution count, wired into the UI stat cards with 10s polling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-13 17:34:11 +01:00
parent c1f2ddb3f5
commit 3f98467ba5
8 changed files with 88 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
import { useSearchExecutions } from '../../api/queries/executions';
import { useSearchExecutions, useExecutionStats } from '../../api/queries/executions';
import { useExecutionSearch } from './use-execution-search';
import { StatCard } from '../../components/shared/StatCard';
import { Pagination } from '../../components/shared/Pagination';
@@ -10,6 +10,7 @@ export function ExecutionExplorer() {
const { toSearchRequest, offset, limit, setOffset } = useExecutionSearch();
const searchRequest = toSearchRequest();
const { data, isLoading, isFetching } = useSearchExecutions(searchRequest);
const { data: stats } = useExecutionStats();
const total = data?.total ?? 0;
const results = data?.data ?? [];
@@ -42,8 +43,8 @@ export function ExecutionExplorer() {
<StatCard label="Total Matches" value={total.toLocaleString()} accent="amber" change={`from current search`} />
<StatCard label="Avg Duration" value={`${avgDuration}ms`} accent="cyan" />
<StatCard label="Failed (page)" value={failedCount.toString()} accent="rose" />
<StatCard label="P99 Latency" value="--" accent="green" change="stats endpoint coming soon" />
<StatCard label="Active Now" value="--" accent="blue" change="stats endpoint coming soon" />
<StatCard label="P99 Latency" value={stats ? `${stats.p99LatencyMs}ms` : '--'} accent="green" change="last hour" />
<StatCard label="Active Now" value={stats ? stats.activeCount.toString() : '--'} accent="blue" change="running executions" />
</div>
{/* Filters */}