From 06ea1feabff235e9383d0979fc1ae5aeece5fb1e Mon Sep 17 00:00:00 2001 From: Julien Gautier Date: Sat, 16 May 2026 03:34:58 +0200 Subject: [PATCH] feat(portal-admin): jaeger deep link on trace_id + actor-pivot on actor_id_hash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The audit-log table carries `trace_id` + `actor_id_hash` columns already populated by the BFF (ADR-0013) but they were plain text — an investigator could see the values but had to copy them out of the table to do anything with them. This PR turns both into interactive affordances: * **`trace_id` becomes a Jaeger deep link.** Each non-null `traceId` renders as `` pointing at `${jaegerBaseUrl}/trace/`. The base URL is per-env in `apps/portal-admin/src/environments/ environment.ts` (dev: `localhost:16686` matching the compose observability profile; prod: the future infra ADR will swap to whatever trace backend is settled on — Tempo, Grafana Cloud, on-prem Jaeger…). Anonymous events (no traceId) keep the dash placeholder. Closes the "join audit + traces by trace_id" promise of ADR-0012 / ADR-0013 with the lowest-coupling option available today (no new BFF endpoint, no log aggregator required). * **`actor_id_hash` becomes a click-to-filter button.** Each non-null hash renders as a ` + } @else { +
(anonymous)
+ } @if (event.subject; as subject) {
{{ subject }}
} - {{ event.traceId ?? '—' }} + + @if (event.traceId; as traceId) { +
{{ traceId }} + } @else { — } + @if (event.payload) {
diff --git a/apps/portal-admin/src/app/pages/audit/audit.scss b/apps/portal-admin/src/app/pages/audit/audit.scss index 8b9d8ff..f3fcd65 100644 --- a/apps/portal-admin/src/app/pages/audit/audit.scss +++ b/apps/portal-admin/src/app/pages/audit/audit.scss @@ -273,6 +273,65 @@ color: #9ca3af; } +// The clickable variant of `.actor-hash` (rendered as a