feat: add is_replay flag to execution pipeline and UI
Detect replayed exchanges via X-Cameleer-Replay header during ingestion, persist the flag through PostgreSQL and OpenSearch, and surface it in the dashboard (amber replay icon) and exchange detail chain view. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { useState, useMemo, useCallback } from 'react'
|
||||
import { useParams, useNavigate, useSearchParams } from 'react-router'
|
||||
import { AlertTriangle, X, Search, Footprints } from 'lucide-react'
|
||||
import { AlertTriangle, X, Search, Footprints, RotateCcw } from 'lucide-react'
|
||||
import {
|
||||
DataTable,
|
||||
StatusDot,
|
||||
@@ -79,6 +79,7 @@ function buildBaseColumns(): Column<Row>[] {
|
||||
<StatusDot variant={statusToVariant(row.status)} />
|
||||
<MonoText size="xs">{statusLabel(row.status)}</MonoText>
|
||||
{row.hasTraceData && <Footprints size={11} color="#3D7C47" style={{ marginLeft: 2, flexShrink: 0 }} />}
|
||||
{row.isReplay && <RotateCcw size={11} color="var(--amber)" style={{ marginLeft: 2, flexShrink: 0 }} />}
|
||||
</span>
|
||||
),
|
||||
},
|
||||
|
||||
@@ -122,7 +122,7 @@ export function ExchangeHeader({ detail, onCorrelatedSelect, onClearSelection }:
|
||||
{showChain ? chain.map((ce: any, i: number) => {
|
||||
const isCurrent = ce.executionId === detail.executionId;
|
||||
const variant = statusVariant(ce.status);
|
||||
const isReplay = ce.attributes?._replay != null;
|
||||
const isReplay = !!ce.isReplay;
|
||||
const statusCls =
|
||||
variant === 'success' ? styles.chainNodeSuccess
|
||||
: variant === 'error' ? styles.chainNodeError
|
||||
|
||||
Reference in New Issue
Block a user