industry40_tracing/
industry40_tracing.rs1use avx_async::{Runtime, TraceContext};
2use std::time::Duration;
3
4async fn process_order(ctx: &TraceContext, order_id: u64) {
5 let mut span = ctx.child_span("process_order");
6 span.set_attribute("order_id", order_id.to_string());
7 span.add_event("order_received");
8
9 avx_async::sleep(Duration::from_millis(50)).await;
11 span.add_event("order_validated");
12
13 avx_async::sleep(Duration::from_millis(100)).await;
15 span.add_event("payment_processed");
16
17 avx_async::sleep(Duration::from_millis(75)).await;
19 span.add_event("order_fulfilled");
20
21 println!("✅ Order {} processed", order_id);
22
23 let completed_span = span.end();
24 println!(" {}", completed_span);
25}
26
27async fn process_batch(ctx: &TraceContext, batch_id: u64, orders: Vec<u64>) {
28 let mut span = ctx.child_span(format!("process_batch_{}", batch_id));
29 span.set_attribute("batch_id", batch_id.to_string());
30 span.set_attribute("order_count", orders.len().to_string());
31
32 for order_id in orders {
33 process_order(ctx, order_id).await;
34 }
35
36 let completed_span = span.end();
37 println!("📦 Batch {} completed: {}", batch_id, completed_span);
38}
39
40fn main() {
41 let rt = Runtime::new();
42
43 println!("🔍 Distributed Tracing Demo - Industry 4.0");
44 println!("=========================================\n");
45
46 rt.block_on(async move {
47 let ctx = TraceContext::new("order-processing-service");
48
49 println!("Trace ID: {:016x}", ctx.trace_id);
50 println!("Starting order processing...\n");
51
52 let batch1 = vec![1001, 1002, 1003];
54 let batch2 = vec![2001, 2002];
55
56 process_batch(&ctx, 1, batch1).await;
57 println!();
58 process_batch(&ctx, 2, batch2).await;
59 println!();
60
61 println!("📤 Jaeger Trace Export");
63 println!("=====================");
64 println!("{}", rt.tracer().to_jaeger_json());
65 });
66}
67
68
69
70
71