11import { BasePlugin } from '@opentelemetry/core' ;
2- import {
3- SpanKind ,
4- Span ,
5- StatusCode ,
6- Context ,
7- propagation ,
8- Link ,
9- defaultTextMapGetter ,
10- getActiveSpan ,
11- } from '@opentelemetry/api' ;
2+ import { SpanKind , Span , StatusCode , Context , propagation , Link , getActiveSpan } from '@opentelemetry/api' ;
123import { ROOT_CONTEXT } from '@opentelemetry/context-base' ;
4+ import { MessagingAttribute , MessagingOperationName } from '@opentelemetry/semantic-conventions' ;
135import * as shimmer from 'shimmer' ;
146import * as kafkaJs from 'kafkajs' ;
157import {
@@ -22,12 +14,11 @@ import {
2214 EachMessagePayload ,
2315 KafkaMessage ,
2416 EachBatchPayload ,
25- IHeaders ,
2617 Consumer ,
2718} from 'kafkajs' ;
2819import { KafkaJsPluginConfig } from './types' ;
29- import { AttributeNames } from './enums' ;
3020import { VERSION } from './version' ;
21+ import { bufferTextMapGetter } from './propagtor' ;
3122
3223export class KafkaJsPlugin extends BasePlugin < typeof kafkaJs > {
3324 protected _config ! : KafkaJsPluginConfig ;
@@ -88,10 +79,15 @@ export class KafkaJsPlugin extends BasePlugin<typeof kafkaJs> {
8879 return function ( payload : EachMessagePayload ) : Promise < void > {
8980 const propagatedContext : Context = propagation . extract (
9081 payload . message . headers ,
91- defaultTextMapGetter ,
82+ bufferTextMapGetter ,
9283 ROOT_CONTEXT
9384 ) ;
94- const span = thisPlugin . _startConsumerSpan ( payload . topic , payload . message , propagatedContext ) ;
85+ const span = thisPlugin . _startConsumerSpan (
86+ payload . topic ,
87+ payload . message ,
88+ MessagingOperationName . PROCESS ,
89+ propagatedContext
90+ ) ;
9591
9692 const eachMessagePromise = thisPlugin . _tracer . withSpan ( span , ( ) => {
9793 return original . apply ( this , arguments ) ;
@@ -104,12 +100,17 @@ export class KafkaJsPlugin extends BasePlugin<typeof kafkaJs> {
104100 const thisPlugin = this ;
105101 return function ( payload : EachBatchPayload ) : Promise < void > {
106102 // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#topic-with-multiple-consumers
107- const receivingSpan = thisPlugin . _startConsumerSpan ( payload . batch . topic , undefined , ROOT_CONTEXT ) ;
103+ const receivingSpan = thisPlugin . _startConsumerSpan (
104+ payload . batch . topic ,
105+ undefined ,
106+ MessagingOperationName . RECEIVE ,
107+ ROOT_CONTEXT
108+ ) ;
108109 return thisPlugin . _tracer . withSpan ( receivingSpan , ( ) => {
109110 const spans = payload . batch . messages . map ( ( message : KafkaMessage ) => {
110111 const propagatedContext : Context = propagation . extract (
111112 message . headers ,
112- defaultTextMapGetter ,
113+ bufferTextMapGetter ,
113114 ROOT_CONTEXT
114115 ) ;
115116 const spanContext = getActiveSpan ( propagatedContext ) ?. context ( ) ;
@@ -119,7 +120,13 @@ export class KafkaJsPlugin extends BasePlugin<typeof kafkaJs> {
119120 context : spanContext ,
120121 } ;
121122 }
122- return thisPlugin . _startConsumerSpan ( payload . batch . topic , message , undefined , origSpanLink ) ;
123+ return thisPlugin . _startConsumerSpan (
124+ payload . batch . topic ,
125+ message ,
126+ MessagingOperationName . PROCESS ,
127+ undefined ,
128+ origSpanLink
129+ ) ;
123130 } ) ;
124131 const batchMessagePromise : Promise < void > = original . apply ( this , arguments ) ;
125132 spans . unshift ( receivingSpan ) ;
@@ -173,15 +180,22 @@ export class KafkaJsPlugin extends BasePlugin<typeof kafkaJs> {
173180 } ) ;
174181 }
175182
176- private _startConsumerSpan ( topic : string , message : KafkaMessage , context : Context , link ?: Link ) {
183+ private _startConsumerSpan (
184+ topic : string ,
185+ message : KafkaMessage ,
186+ operation : string ,
187+ context : Context ,
188+ link ?: Link
189+ ) {
177190 const span = this . _tracer . startSpan (
178191 topic ,
179192 {
180193 kind : SpanKind . CONSUMER ,
181194 attributes : {
182- [ AttributeNames . MESSAGING_SYSTEM ] : 'kafka' ,
183- [ AttributeNames . MESSAGING_DESTINATION ] : topic ,
184- [ AttributeNames . MESSAGING_DESTINATIONKIND ] : 'topic' ,
195+ [ MessagingAttribute . MESSAGING_SYSTEM ] : 'kafka' ,
196+ [ MessagingAttribute . MESSAGING_DESTINATION ] : topic ,
197+ [ MessagingAttribute . MESSAGING_DESTINATION_KIND ] : 'topic' ,
198+ [ MessagingAttribute . MESSAGING_OPERATION ] : operation ,
185199 } ,
186200 links : link ? [ link ] : [ ] ,
187201 } ,
@@ -199,9 +213,9 @@ export class KafkaJsPlugin extends BasePlugin<typeof kafkaJs> {
199213 const span = this . _tracer . startSpan ( topic , {
200214 kind : SpanKind . PRODUCER ,
201215 attributes : {
202- [ AttributeNames . MESSAGING_SYSTEM ] : 'kafka' ,
203- [ AttributeNames . MESSAGING_DESTINATION ] : topic ,
204- [ AttributeNames . MESSAGING_DESTINATIONKIND ] : 'topic' ,
216+ [ MessagingAttribute . MESSAGING_SYSTEM ] : 'kafka' ,
217+ [ MessagingAttribute . MESSAGING_DESTINATION ] : topic ,
218+ [ MessagingAttribute . MESSAGING_DESTINATION_KIND ] : 'topic' ,
205219 } ,
206220 } ) ;
207221
0 commit comments