2026-03-18 10:06:38 +01:00
export interface ProcessorData {
name : string
type : string
durationMs : number
status : 'ok' | 'slow' | 'fail'
startMs : number
}
2026-03-18 15:54:27 +01:00
export interface Exchange {
2026-03-18 10:06:38 +01:00
id : string
orderId : string
customer : string
route : string
routeGroup : string
status : 'completed' | 'failed' | 'running' | 'warning'
durationMs : number
timestamp : Date
correlationId : string
agent : string
errorMessage? : string
errorClass? : string
processors : ProcessorData [ ]
2026-03-19 14:15:28 +01:00
correlationGroup? : string
2026-03-18 10:06:38 +01:00
}
2026-03-18 15:54:27 +01:00
export const exchanges : Exchange [ ] = [
2026-03-18 10:06:38 +01:00
{
id : 'E-2026-03-18-00201' ,
orderId : 'OP-92184' ,
customer : 'CUST-44210' ,
route : 'order-intake' ,
routeGroup : 'order-flow' ,
status : 'completed' ,
durationMs : 87 ,
timestamp : new Date ( '2026-03-18T09:12:04' ) ,
correlationId : 'cmr-f4a1c82b-9d3e' ,
agent : 'prod-1' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'order-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:orders)' , type : 'consumer' , durationMs : 4 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 6 , status : 'ok' , startMs : 4 } ,
{ name : 'validate(schema)' , type : 'process' , durationMs : 10 , status : 'ok' , startMs : 10 } ,
{ name : 'enrich(customer-db)' , type : 'enrich' , durationMs : 52 , status : 'ok' , startMs : 20 } ,
{ name : 'to(order-enrichment)' , type : 'to' , durationMs : 15 , status : 'ok' , startMs : 72 } ,
] ,
} ,
{
id : 'E-2026-03-18-00200' ,
orderId : 'OP-92183' ,
customer : 'CUST-18773' ,
route : 'payment-validate' ,
routeGroup : 'payment-flow' ,
status : 'completed' ,
durationMs : 164 ,
timestamp : new Date ( '2026-03-18T09:11:22' ) ,
correlationId : 'cmr-7b2d9f14-c5a8' ,
agent : 'prod-2' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'payment-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:payments)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 8 , status : 'ok' , startMs : 5 } ,
{ name : 'validate(payment-schema)' , type : 'process' , durationMs : 15 , status : 'ok' , startMs : 13 } ,
{ name : 'check(fraud-service)' , type : 'enrich' , durationMs : 112 , status : 'ok' , startMs : 28 } ,
{ name : 'to(payment-process)' , type : 'to' , durationMs : 24 , status : 'ok' , startMs : 140 } ,
] ,
} ,
{
id : 'E-2026-03-18-00202' ,
orderId : 'OP-92185' ,
customer : 'CUST-67501' ,
route : 'order-enrichment' ,
routeGroup : 'order-flow' ,
status : 'running' ,
durationMs : 30000 ,
timestamp : new Date ( '2026-03-18T09:13:44' ) ,
correlationId : 'cmr-3c8e1a7f-d2b6' ,
agent : 'prod-1' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'order-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:orders)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'enrich(inventory-api)' , type : 'enrich' , durationMs : 29990 , status : 'slow' , startMs : 5 } ,
] ,
} ,
{
id : 'E-2026-03-18-00198' ,
orderId : 'OP-92180' ,
customer : 'CUST-55019' ,
route : 'shipment-dispatch' ,
routeGroup : 'shipment-flow' ,
status : 'warning' ,
durationMs : 248 ,
timestamp : new Date ( '2026-03-18T09:09:47' ) ,
correlationId : 'cmr-a9f3b2c1-e4d7' ,
agent : 'prod-3' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'shipment-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:shipments)' , type : 'consumer' , durationMs : 6 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 8 , status : 'ok' , startMs : 6 } ,
{ name : 'enrich(carrier-api)' , type : 'enrich' , durationMs : 198 , status : 'slow' , startMs : 14 } ,
{ name : 'to(carrier-gateway)' , type : 'to' , durationMs : 36 , status : 'ok' , startMs : 212 } ,
] ,
} ,
{
id : 'E-2026-03-18-00191' ,
orderId : 'OP-88421' ,
customer : 'CUST-31094' ,
route : 'payment-process' ,
routeGroup : 'payment-flow' ,
status : 'failed' ,
durationMs : 412 ,
timestamp : new Date ( '2026-03-18T09:06:11' ) ,
correlationId : 'cmr-9a4f2b71-e8c3' ,
agent : 'prod-2' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'payment-flow-002' ,
2026-03-18 10:06:38 +01:00
errorMessage : 'org.apache.camel.CamelExecutionException: Payment gateway timeout after 5000ms — POST https://pay.provider.com/v2/charge returned HTTP 504. Retry exhausted (3/3).' ,
errorClass : 'org.apache.camel.CamelExecutionException' ,
processors : [
{ name : 'from(jms:payments)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 8 , status : 'ok' , startMs : 5 } ,
{ name : 'validate(payment-schema)' , type : 'process' , durationMs : 12 , status : 'ok' , startMs : 13 } ,
{ name : 'to(payment-gateway)' , type : 'to' , durationMs : 387 , status : 'fail' , startMs : 25 } ,
] ,
} ,
{
id : 'E-2026-03-18-00189' ,
orderId : 'OP-88419' ,
customer : 'CUST-72841' ,
route : 'order-enrichment' ,
routeGroup : 'order-flow' ,
status : 'failed' ,
durationMs : 1247 ,
timestamp : new Date ( '2026-03-18T09:02:38' ) ,
correlationId : 'cmr-b6d7c3a2-f1e9' ,
agent : 'prod-1' ,
errorMessage : 'java.sql.SQLTransientConnectionException: HikariPool-1 - Connection not available, request timed out after 1000ms. (pool: 10, active: 10, idle: 0, waiting: 3)' ,
errorClass : 'java.sql.SQLTransientConnectionException' ,
processors : [
{ name : 'from(jms:orders)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 9 , status : 'ok' , startMs : 5 } ,
{ name : 'enrich(customer-db)' , type : 'enrich' , durationMs : 1233 , status : 'fail' , startMs : 14 } ,
] ,
} ,
{
id : 'E-2026-03-18-00186' ,
orderId : 'OP-92179' ,
customer : 'CUST-90123' ,
route : 'order-intake' ,
routeGroup : 'order-flow' ,
status : 'completed' ,
durationMs : 62 ,
timestamp : new Date ( '2026-03-18T09:00:15' ) ,
correlationId : 'cmr-2e5f8d9a-b4c1' ,
agent : 'prod-3' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'order-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:orders)' , type : 'consumer' , durationMs : 3 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 5 , status : 'ok' , startMs : 3 } ,
{ name : 'validate(schema)' , type : 'process' , durationMs : 8 , status : 'ok' , startMs : 8 } ,
{ name : 'enrich(customer-db)' , type : 'enrich' , durationMs : 34 , status : 'ok' , startMs : 16 } ,
{ name : 'to(order-enrichment)' , type : 'to' , durationMs : 12 , status : 'ok' , startMs : 50 } ,
] ,
} ,
{
id : 'E-2026-03-18-00184' ,
orderId : 'OP-92178' ,
customer : 'CUST-44210' ,
route : 'payment-validate' ,
routeGroup : 'payment-flow' ,
status : 'completed' ,
durationMs : 131 ,
timestamp : new Date ( '2026-03-18T08:58:33' ) ,
correlationId : 'cmr-d1a3e7f4-c2b8' ,
agent : 'prod-1' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'payment-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:payments)' , type : 'consumer' , durationMs : 4 , status : 'ok' , startMs : 0 } ,
{ name : 'validate(payment-schema)' , type : 'process' , durationMs : 14 , status : 'ok' , startMs : 4 } ,
{ name : 'check(fraud-service)' , type : 'enrich' , durationMs : 88 , status : 'ok' , startMs : 18 } ,
{ name : 'to(payment-process)' , type : 'to' , durationMs : 25 , status : 'ok' , startMs : 106 } ,
] ,
} ,
{
id : 'E-2026-03-18-00179' ,
orderId : 'OP-92175' ,
customer : 'CUST-67892' ,
route : 'shipment-track' ,
routeGroup : 'shipment-flow' ,
status : 'completed' ,
durationMs : 94 ,
timestamp : new Date ( '2026-03-18T08:53:07' ) ,
correlationId : 'cmr-e8b2c9d4-a7f3' ,
agent : 'prod-4' ,
processors : [
{ name : 'from(jms:tracking)' , type : 'consumer' , durationMs : 4 , status : 'ok' , startMs : 0 } ,
{ name : 'enrich(carrier-api)' , type : 'enrich' , durationMs : 72 , status : 'ok' , startMs : 4 } ,
{ name : 'to(notification-hub)' , type : 'to' , durationMs : 18 , status : 'ok' , startMs : 76 } ,
] ,
} ,
{
id : 'E-2026-03-18-00177' ,
orderId : 'OP-92174' ,
customer : 'CUST-15293' ,
route : 'order-intake' ,
routeGroup : 'order-flow' ,
status : 'completed' ,
durationMs : 73 ,
timestamp : new Date ( '2026-03-18T08:50:41' ) ,
correlationId : 'cmr-f3c7a1b9-d5e2' ,
agent : 'prod-1' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'order-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:orders)' , type : 'consumer' , durationMs : 3 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 6 , status : 'ok' , startMs : 3 } ,
{ name : 'validate(schema)' , type : 'process' , durationMs : 9 , status : 'ok' , startMs : 9 } ,
{ name : 'enrich(customer-db)' , type : 'enrich' , durationMs : 40 , status : 'ok' , startMs : 18 } ,
{ name : 'to(order-enrichment)' , type : 'to' , durationMs : 15 , status : 'ok' , startMs : 58 } ,
] ,
} ,
{
id : 'E-2026-03-18-00173' ,
orderId : 'OP-92173' ,
customer : 'CUST-88104' ,
route : 'payment-process' ,
routeGroup : 'payment-flow' ,
status : 'completed' ,
durationMs : 198 ,
timestamp : new Date ( '2026-03-18T08:46:19' ) ,
correlationId : 'cmr-a2d8f5c3-b9e1' ,
agent : 'prod-2' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'payment-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:payments)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'validate(payment-schema)' , type : 'process' , durationMs : 12 , status : 'ok' , startMs : 5 } ,
{ name : 'to(payment-gateway)' , type : 'to' , durationMs : 156 , status : 'ok' , startMs : 17 } ,
{ name : 'to(order-service)' , type : 'to' , durationMs : 25 , status : 'ok' , startMs : 173 } ,
] ,
} ,
{
id : 'E-2026-03-18-00164' ,
orderId : 'OP-92170' ,
customer : 'CUST-50321' ,
route : 'order-enrichment' ,
routeGroup : 'order-flow' ,
status : 'warning' ,
durationMs : 267 ,
timestamp : new Date ( '2026-03-18T08:39:52' ) ,
correlationId : 'cmr-c4f1b7a8-e3d6' ,
agent : 'prod-1' ,
processors : [
{ name : 'from(jms:orders)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 8 , status : 'ok' , startMs : 5 } ,
{ name : 'enrich(inventory-api)' , type : 'enrich' , durationMs : 224 , status : 'slow' , startMs : 13 } ,
{ name : 'to(payment-process)' , type : 'to' , durationMs : 30 , status : 'ok' , startMs : 237 } ,
] ,
} ,
{
id : 'E-2026-03-18-00158' ,
orderId : 'OP-88412' ,
customer : 'CUST-23781' ,
route : 'payment-process' ,
routeGroup : 'payment-flow' ,
status : 'failed' ,
durationMs : 5234 ,
timestamp : new Date ( '2026-03-18T08:31:05' ) ,
correlationId : 'cmr-7e9a2c5f-d1b4' ,
agent : 'prod-2' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'payment-flow-002' ,
2026-03-18 10:06:38 +01:00
errorMessage : 'org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking https://pay.provider.com/v2/charge with statusCode: 422 — Unprocessable Entity: card declined (insufficient funds)' ,
errorClass : 'org.apache.camel.component.http.HttpOperationFailedException' ,
processors : [
{ name : 'from(jms:payments)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'validate(payment-schema)' , type : 'process' , durationMs : 11 , status : 'ok' , startMs : 5 } ,
{ name : 'to(payment-gateway)' , type : 'to' , durationMs : 5218 , status : 'fail' , startMs : 16 } ,
] ,
} ,
{
id : 'E-2026-03-18-00151' ,
orderId : 'OP-92166' ,
customer : 'CUST-61042' ,
route : 'shipment-dispatch' ,
routeGroup : 'shipment-flow' ,
status : 'completed' ,
durationMs : 112 ,
timestamp : new Date ( '2026-03-18T08:22:44' ) ,
correlationId : 'cmr-b5c8d2a7-f4e3' ,
agent : 'prod-3' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'shipment-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:shipments)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 7 , status : 'ok' , startMs : 5 } ,
{ name : 'enrich(carrier-api)' , type : 'enrich' , durationMs : 80 , status : 'ok' , startMs : 12 } ,
{ name : 'to(carrier-gateway)' , type : 'to' , durationMs : 20 , status : 'ok' , startMs : 92 } ,
] ,
} ,
{
id : 'E-2026-03-18-00144' ,
orderId : 'OP-92161' ,
customer : 'CUST-77215' ,
route : 'order-intake' ,
routeGroup : 'order-flow' ,
status : 'completed' ,
durationMs : 91 ,
timestamp : new Date ( '2026-03-18T08:15:19' ) ,
correlationId : 'cmr-d9e3f7b1-a6c5' ,
agent : 'prod-4' ,
2026-03-19 14:15:28 +01:00
correlationGroup : 'order-flow-001' ,
2026-03-18 10:06:38 +01:00
processors : [
{ name : 'from(jms:orders)' , type : 'consumer' , durationMs : 4 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 7 , status : 'ok' , startMs : 4 } ,
{ name : 'validate(schema)' , type : 'process' , durationMs : 10 , status : 'ok' , startMs : 11 } ,
{ name : 'enrich(customer-db)' , type : 'enrich' , durationMs : 54 , status : 'ok' , startMs : 21 } ,
{ name : 'to(order-enrichment)' , type : 'to' , durationMs : 16 , status : 'ok' , startMs : 75 } ,
] ,
} ,
]
2026-03-29 10:43:03 +02:00
// ── Generate additional exchanges to reach ~200 total ────────────────────────
const GEN_ROUTES = [
'order-intake' , 'payment-validate' , 'order-enrichment' , 'shipment-dispatch' ,
'payment-process' , 'shipment-track' , 'inventory-sync' , 'notification-send' ,
'audit-log' , 'customer-update' , 'refund-process' , 'invoice-generate' ,
]
const GEN_ROUTE_GROUPS = [
'order-flow' , 'payment-flow' , 'shipment-flow' , 'inventory-flow' ,
'notification-flow' , 'audit-flow' , 'customer-flow' , 'billing-flow' ,
]
const GEN_AGENTS = [ 'prod-1' , 'prod-2' , 'prod-3' , 'prod-4' ]
const GEN_STATUSES : Exchange [ 'status' ] [ ] = [
'completed' , 'completed' , 'completed' , 'completed' , 'completed' ,
'completed' , 'failed' , 'warning' , 'running' ,
]
const GEN_PROCESSORS : ProcessorData [ ] [ ] = [
[
{ name : 'from(jms:queue)' , type : 'consumer' , durationMs : 4 , status : 'ok' , startMs : 0 } ,
{ name : 'unmarshal(json)' , type : 'transform' , durationMs : 6 , status : 'ok' , startMs : 4 } ,
{ name : 'validate(schema)' , type : 'process' , durationMs : 10 , status : 'ok' , startMs : 10 } ,
{ name : 'to(target)' , type : 'to' , durationMs : 15 , status : 'ok' , startMs : 20 } ,
] ,
[
{ name : 'from(jms:queue)' , type : 'consumer' , durationMs : 5 , status : 'ok' , startMs : 0 } ,
{ name : 'enrich(external-api)' , type : 'enrich' , durationMs : 120 , status : 'slow' , startMs : 5 } ,
{ name : 'to(target)' , type : 'to' , durationMs : 20 , status : 'ok' , startMs : 125 } ,
] ,
[
{ name : 'from(jms:queue)' , type : 'consumer' , durationMs : 3 , status : 'ok' , startMs : 0 } ,
{ name : 'to(external-gateway)' , type : 'to' , durationMs : 400 , status : 'fail' , startMs : 3 } ,
] ,
]
const GEN_ERRORS = [
{ msg : 'org.apache.camel.CamelExecutionException: Timeout after 5000ms' , cls : 'org.apache.camel.CamelExecutionException' } ,
{ msg : 'java.sql.SQLTransientConnectionException: Connection pool exhausted' , cls : 'java.sql.SQLTransientConnectionException' } ,
{ msg : 'org.apache.camel.component.http.HttpOperationFailedException: HTTP 502 Bad Gateway' , cls : 'org.apache.camel.component.http.HttpOperationFailedException' } ,
]
const BASE_TIME = new Date ( '2026-03-18T08:00:00' ) . getTime ( )
for ( let i = 0 ; i < 185 ; i ++ ) {
const idx = exchanges . length
const status = GEN_STATUSES [ i % GEN_STATUSES . length ]
const route = GEN_ROUTES [ i % GEN_ROUTES . length ]
const routeGroup = GEN_ROUTE_GROUPS [ i % GEN_ROUTE_GROUPS . length ]
const isFailed = status === 'failed'
const durationMs = isFailed
? 1000 + ( ( i * 37 ) % 4000 )
: status === 'running'
? 10000 + ( ( i * 53 ) % 20000 )
: 30 + ( ( i * 73 ) % 400 )
const err = isFailed ? GEN_ERRORS [ i % GEN_ERRORS . length ] : undefined
exchanges . push ( {
id : ` E-2026-03-18- ${ String ( idx + 200 ) . padStart ( 5 , '0' ) } ` ,
orderId : ` OP- ${ 80000 + idx } ` ,
customer : ` CUST- ${ 10000 + ( ( i * 131 ) % 90000 ) } ` ,
route ,
routeGroup ,
status ,
durationMs ,
timestamp : new Date ( BASE_TIME - i * 2 * 60 * 1000 ) ,
correlationId : ` cmr- ${ i . toString ( 16 ) . padStart ( 8 , '0' ) } -gen ` ,
agent : GEN_AGENTS [ i % GEN_AGENTS . length ] ,
. . . ( err ? { errorMessage : err.msg , errorClass : err.cls } : { } ) ,
processors : GEN_PROCESSORS [ i % GEN_PROCESSORS . length ] . map ( ( p ) = > ( { . . . p } ) ) ,
. . . ( i % 3 === 0 ? { correlationGroup : ` ${ routeGroup } - ${ String ( Math . floor ( i / 3 ) ) . padStart ( 3 , '0' ) } ` } : { } ) ,
} )
}