@@ -20,12 +20,13 @@ const {
20
20
ATTR_GRPC_STATUS_CODE ,
21
21
ATTR_HTTP_HOST ,
22
22
ATTR_HTTP_METHOD ,
23
- ATTR_HTTP_URL ,
24
23
ATTR_HTTP_ROUTE ,
25
24
ATTR_HTTP_STATUS_CODE ,
26
25
ATTR_HTTP_STATUS_TEXT ,
26
+ ATTR_HTTP_URL ,
27
27
ATTR_MESSAGING_DESTINATION ,
28
28
ATTR_MESSAGING_DESTINATION_KIND ,
29
+ ATTR_MESSAGING_OPERATION ,
29
30
ATTR_MESSAGING_SYSTEM ,
30
31
ATTR_NET_PEER_NAME ,
31
32
ATTR_NET_PEER_PORT ,
@@ -394,3 +395,39 @@ test('Otel producer span test', (t, end) => {
394
395
} )
395
396
} )
396
397
} )
398
+
399
+ test ( 'messaging consumer metrics are bridged correctly' , ( t , end ) => {
400
+ const { agent, tracer } = t . nr
401
+ const attributes = {
402
+ [ ATTR_MESSAGING_SYSTEM ] : 'kafka' ,
403
+ [ ATTR_MESSAGING_OPERATION ] : 'getMessage' ,
404
+ [ ATTR_SERVER_ADDRESS ] : '127.0.0.1' ,
405
+ [ ATTR_MESSAGING_DESTINATION ] : 'work-queue' ,
406
+ [ ATTR_MESSAGING_DESTINATION_KIND ] : 'queue'
407
+ }
408
+
409
+ tracer . startActiveSpan ( 'consumer-test' , { kind : otel . SpanKind . CONSUMER , attributes } , ( span ) => {
410
+ const tx = agent . getTransaction ( )
411
+ const segment = agent . tracer . getSegment ( )
412
+ span . end ( )
413
+ const duration = hrTimeToMilliseconds ( span . duration )
414
+ assert . equal ( duration , segment . getDurationInMillis ( ) )
415
+ tx . end ( )
416
+
417
+ assert . equal ( segment . name , 'OtherTransaction/Message/kafka/queue/Named/work-queue' )
418
+ assert . equal ( tx . type , 'message' )
419
+
420
+ const unscopedMetrics = tx . metrics . unscoped
421
+ const expectedMetrics = [
422
+ 'OtherTransaction/all' ,
423
+ 'OtherTransaction/Message/all' ,
424
+ 'OtherTransaction/Message/kafka/queue/Named/work-queue' ,
425
+ 'OtherTransactionTotalTime'
426
+ ]
427
+ for ( const expectedMetric of expectedMetrics ) {
428
+ assert . equal ( unscopedMetrics [ expectedMetric ] . callCount , 1 , `${ expectedMetric } .callCount` )
429
+ }
430
+
431
+ end ( )
432
+ } )
433
+ } )
0 commit comments