in karavan-app/src/main/webui/src/project/trace/TraceTable.tsx [46:128]
export function TraceTable (props: Props) {
const [refreshTrace, camelTraces] = useProjectStore((state) =>
[state.refreshTrace, state.camelTraces], shallow);
const [nodes, setNodes] = useState([{}]);
const [isOpen, setIsOpen] = useState<boolean>(false);
const [exchangeId, setExchangeId] = useState<string>('');
function closeModal() {
setIsOpen(false);
}
function getNodes(exchangeId: string): any[] {
const traces: any[] = trace?.trace?.traces || [];
return traces
.filter(t => t.message?.exchangeId === exchangeId)
.sort((a, b) => a.uid > b.uid ? 1 : -1);
}
function getNode(exchangeId: string): any {
const traces: any[] = trace?.trace?.traces || [];
return traces
.filter(t => t.message?.exchangeId === exchangeId)
.sort((a, b) => a.uid > b.uid ? 1 : -1)
.at(0);
}
const camelStatus = camelTraces.filter(s => s.containerName === props.containerName).at(0);
const traceValue = camelStatus?.statuses?.filter(x => x.name === 'trace').at(0);
const trace: any = traceValue ? JSON.parse(traceValue?.status || '') : {};
const traces: any[] = (trace?.trace?.traces || []).sort((a: any, b: any) => b.uid > a.uid ? 1 : -1);
const exchanges: any[] = Array.from(new Set((traces).map((item: any) => item?.message?.exchangeId)));
return (
<>
{isOpen && <RunnerInfoTraceModal isOpen={isOpen} exchangeId={exchangeId} nodes={nodes} onClose={closeModal}/>}
<Table aria-label="Files" variant={"compact"} className={"table"}>
<Thead>
<Tr>
<Th key='uid' width={30}>UID</Th>
<Th key='exchangeId' width={40}>ExchangeId</Th>
<Th key='timestamp' width={30}>Updated</Th>
</Tr>
</Thead>
<Tbody>
{exchanges.map(exchangeId => {
const node = getNode(exchangeId);
return <Tr key={node?.uid}>
<Td>
{node?.uid}
</Td>
<Td>
<Button className="dev-action-button" style={{padding: '0'}} variant={"link"}
onClick={e => {
setExchangeId(exchangeId);
setNodes(getNodes(exchangeId));
setIsOpen(true);
}}>
{exchangeId}
</Button>
</Td>
<Td>
{node ? new Date(node?.timestamp).toISOString() : ""}
</Td>
</Tr>
})}
{exchanges.length === 0 &&
<Tr>
<Td colSpan={8}>
<Bullseye>
<EmptyState variant={EmptyStateVariant.sm}>
<EmptyStateHeader titleText="No results found" icon={<EmptyStateIcon icon={SearchIcon}/>} headingLevel="h2" />
</EmptyState>
</Bullseye>
</Td>
</Tr>
}
</Tbody>
</Table>
</>
);
}