@@ -36,24 +36,68 @@ jobs:
3636        working-directory : validation_app 
3737        run : | 
3838          cat > test_exporter.py << 'EOF' 
39+           import socket 
40+           import threading 
41+           import time 
3942          from opentelemetry import trace 
4043          from opentelemetry.sdk.trace import TracerProvider 
41-           from amazon.opentelemetry.exporters.otlp.udp import OTLPSpanExporter 
44+           from opentelemetry.sdk.trace.export import BatchSpanProcessor 
45+           from amazon.opentelemetry.exporters.otlp.udp import OTLPUdpSpanExporter 
4246           
43-           # Set up tracer 
47+           # Set up a UDP server to verify data is sent 
48+           def udp_server(): 
49+               sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
50+               sock.bind(('127.0.0.1', 2000)) 
51+               sock.settimeout(5) 
52+               print("UDP server listening on 127.0.0.1:2000") 
53+               try: 
54+                   data, addr = sock.recvfrom(4096) 
55+                   print(f"Received data from {addr}") 
56+                   if data: 
57+                       print("✅ Successfully received exported span data") 
58+                       return True  
59+               except socket.timeout: 
60+                   print("❌ No data received within timeout period") 
61+                   return False  
62+               finally: 
63+                   sock.close() 
64+            
65+           # Start UDP server in a separate thread 
66+           server_thread = threading.Thread(target=udp_server) 
67+           server_thread.daemon = True  
68+           server_thread.start() 
69+            
70+           # Set up tracer provider 
4471          tracer_provider = TracerProvider() 
4572          trace.set_tracer_provider(tracer_provider) 
4673           
47-           # Set up UDP exporter 
48-           exporter = OTLPSpanExporter() 
74+           # Set up UDP exporter with batch processor (more realistic usage) 
75+           exporter = OTLPUdpSpanExporter(endpoint="127.0.0.1:2000") 
76+           span_processor = BatchSpanProcessor(exporter) 
77+           tracer_provider.add_span_processor(span_processor) 
4978           
50-           # Create a span for testing 
79+           # Create a span for testing with various attributes  
5180          tracer = trace.get_tracer(__name__) 
52-           with tracer.start_as_current_span("test_span") as span: 
53-               span.set_attribute("test.attribute", "test_value") 
54-               print("Span created and exported via UDP") 
81+           with tracer.start_as_current_span("test_parent_span") as parent: 
82+               parent.set_attribute("service.name", "validation-app") 
83+               parent.set_attribute("test.attribute", "test_value") 
84+               parent.add_event("test-event", {"event.data": "some data"}) 
85+                
86+               # Add a child span 
87+               with tracer.start_as_current_span("test_child_span") as child: 
88+                   child.set_attribute("child.attribute", "child_value") 
89+                   print("Created spans with attributes and events") 
90+            
91+           # Force flush to ensure spans are exported immediately 
92+           success = tracer_provider.force_flush() 
93+           print(f"Force flush {'succeeded' if success else 'failed'}") 
94+            
95+           # Give some time for the UDP packet to be processed 
96+           time.sleep(2) 
5597           
56-           print("Validation successful!") 
98+           # Shutdown 
99+           tracer_provider.shutdown() 
100+           print("Test completed") 
57101          EOF 
58102
59103       - name : Run validation test 
0 commit comments