@sentry/node 10.59.0 → 10.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/build/cjs/index.js +1 -0
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/cjs/integrations/node-fetch/index.js +7 -8
  4. package/build/cjs/integrations/node-fetch/index.js.map +1 -1
  5. package/build/cjs/integrations/node-fetch/vendored/semconv.js +28 -0
  6. package/build/cjs/integrations/node-fetch/vendored/semconv.js.map +1 -0
  7. package/build/cjs/integrations/node-fetch/vendored/undici.js +91 -127
  8. package/build/cjs/integrations/node-fetch/vendored/undici.js.map +1 -1
  9. package/build/cjs/integrations/tracing/kafka/index.js +1 -11
  10. package/build/cjs/integrations/tracing/kafka/index.js.map +1 -1
  11. package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js +45 -247
  12. package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
  13. package/build/cjs/integrations/tracing/kafka/vendored/semconv.js +4 -8
  14. package/build/cjs/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
  15. package/build/cjs/integrations/tracing/kafka/vendored/utils.js +113 -0
  16. package/build/cjs/integrations/tracing/kafka/vendored/utils.js.map +1 -0
  17. package/build/cjs/sdk/initOtel.js +2 -1
  18. package/build/cjs/sdk/initOtel.js.map +1 -1
  19. package/build/esm/index.js +1 -1
  20. package/build/esm/integrations/node-fetch/index.js +8 -9
  21. package/build/esm/integrations/node-fetch/index.js.map +1 -1
  22. package/build/esm/integrations/node-fetch/vendored/semconv.js +15 -0
  23. package/build/esm/integrations/node-fetch/vendored/semconv.js.map +1 -0
  24. package/build/esm/integrations/node-fetch/vendored/undici.js +80 -116
  25. package/build/esm/integrations/node-fetch/vendored/undici.js.map +1 -1
  26. package/build/esm/integrations/tracing/kafka/index.js +2 -12
  27. package/build/esm/integrations/tracing/kafka/index.js.map +1 -1
  28. package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js +47 -249
  29. package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
  30. package/build/esm/integrations/tracing/kafka/vendored/semconv.js +3 -5
  31. package/build/esm/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
  32. package/build/esm/integrations/tracing/kafka/vendored/utils.js +107 -0
  33. package/build/esm/integrations/tracing/kafka/vendored/utils.js.map +1 -0
  34. package/build/esm/package.json +1 -1
  35. package/build/esm/sdk/initOtel.js +2 -1
  36. package/build/esm/sdk/initOtel.js.map +1 -1
  37. package/build/types/index.d.ts +1 -1
  38. package/build/types/index.d.ts.map +1 -1
  39. package/build/types/integrations/node-fetch/index.d.ts.map +1 -1
  40. package/build/types/integrations/node-fetch/vendored/internal-types.d.ts.map +1 -1
  41. package/build/types/integrations/node-fetch/vendored/semconv.d.ts +13 -0
  42. package/build/types/integrations/node-fetch/vendored/semconv.d.ts.map +1 -0
  43. package/build/types/integrations/node-fetch/vendored/types.d.ts +2 -4
  44. package/build/types/integrations/node-fetch/vendored/types.d.ts.map +1 -1
  45. package/build/types/integrations/node-fetch/vendored/undici.d.ts +6 -7
  46. package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +1 -1
  47. package/build/types/integrations/tracing/kafka/index.d.ts.map +1 -1
  48. package/build/types/integrations/tracing/kafka/vendored/instrumentation.d.ts +3 -13
  49. package/build/types/integrations/tracing/kafka/vendored/instrumentation.d.ts.map +1 -1
  50. package/build/types/integrations/tracing/kafka/vendored/kafkajs-types.d.ts +0 -32
  51. package/build/types/integrations/tracing/kafka/vendored/kafkajs-types.d.ts.map +1 -1
  52. package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts +9 -28
  53. package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts.map +1 -1
  54. package/build/types/integrations/tracing/kafka/vendored/utils.d.ts +29 -0
  55. package/build/types/integrations/tracing/kafka/vendored/utils.d.ts.map +1 -0
  56. package/build/types/sdk/initOtel.d.ts.map +1 -1
  57. package/build/types-ts3.8/index.d.ts +1 -1
  58. package/build/types-ts3.8/integrations/node-fetch/vendored/semconv.d.ts +13 -0
  59. package/build/types-ts3.8/integrations/node-fetch/vendored/types.d.ts +2 -4
  60. package/build/types-ts3.8/integrations/node-fetch/vendored/undici.d.ts +6 -7
  61. package/build/types-ts3.8/integrations/tracing/kafka/vendored/instrumentation.d.ts +3 -13
  62. package/build/types-ts3.8/integrations/tracing/kafka/vendored/kafkajs-types.d.ts +0 -32
  63. package/build/types-ts3.8/integrations/tracing/kafka/vendored/semconv.d.ts +9 -28
  64. package/build/types-ts3.8/integrations/tracing/kafka/vendored/utils.d.ts +29 -0
  65. package/package.json +5 -6
  66. package/build/cjs/integrations/tracing/kafka/vendored/internal-types.js +0 -6
  67. package/build/cjs/integrations/tracing/kafka/vendored/internal-types.js.map +0 -1
  68. package/build/cjs/integrations/tracing/kafka/vendored/propagator.js +0 -22
  69. package/build/cjs/integrations/tracing/kafka/vendored/propagator.js.map +0 -1
  70. package/build/esm/integrations/tracing/kafka/vendored/internal-types.js +0 -4
  71. package/build/esm/integrations/tracing/kafka/vendored/internal-types.js.map +0 -1
  72. package/build/esm/integrations/tracing/kafka/vendored/propagator.js +0 -20
  73. package/build/esm/integrations/tracing/kafka/vendored/propagator.js.map +0 -1
  74. package/build/types/integrations/tracing/kafka/vendored/internal-types.d.ts +0 -9
  75. package/build/types/integrations/tracing/kafka/vendored/internal-types.d.ts.map +0 -1
  76. package/build/types/integrations/tracing/kafka/vendored/propagator.d.ts +0 -3
  77. package/build/types/integrations/tracing/kafka/vendored/propagator.d.ts.map +0 -1
  78. package/build/types/integrations/tracing/kafka/vendored/types.d.ts +0 -26
  79. package/build/types/integrations/tracing/kafka/vendored/types.d.ts.map +0 -1
  80. package/build/types/integrations/tracing/utils/sql-common.d.ts +0 -3
  81. package/build/types/integrations/tracing/utils/sql-common.d.ts.map +0 -1
  82. package/build/types-ts3.8/integrations/tracing/kafka/vendored/internal-types.d.ts +0 -9
  83. package/build/types-ts3.8/integrations/tracing/kafka/vendored/propagator.d.ts +0 -3
  84. package/build/types-ts3.8/integrations/tracing/kafka/vendored/types.d.ts +0 -26
  85. package/build/types-ts3.8/integrations/tracing/utils/sql-common.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/kafka/index.ts"],"sourcesContent":["import { KafkaJsInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { addOriginToSpan, generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Kafka';\n\nexport const instrumentKafka = generateInstrumentOnce(\n INTEGRATION_NAME,\n () =>\n new KafkaJsInstrumentation({\n consumerHook(span) {\n addOriginToSpan(span, 'auto.kafkajs.otel.consumer');\n },\n producerHook(span) {\n addOriginToSpan(span, 'auto.kafkajs.otel.producer');\n },\n }),\n);\n\nconst _kafkaIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKafka();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [kafkajs](https://www.npmjs.com/package/kafkajs) library.\n *\n * For more information, see the [`kafkaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/kafka/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.kafkaIntegration()],\n * });\n */\nexport const kafkaIntegration = defineIntegration(_kafkaIntegration);\n"],"names":["generateInstrumentOnce","KafkaJsInstrumentation","addOriginToSpan","defineIntegration"],"mappings":";;;;;;AAKA,MAAM,gBAAA,GAAmB,OAAA;AAElB,MAAM,eAAA,GAAkBA,+BAAA;AAAA,EAC7B,gBAAA;AAAA,EACA,MACE,IAAIC,sCAAA,CAAuB;AAAA,IACzB,aAAa,IAAA,EAAM;AACjB,MAAAC,wBAAA,CAAgB,MAAM,4BAA4B,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,aAAa,IAAA,EAAM;AACjB,MAAAA,wBAAA,CAAgB,MAAM,4BAA4B,CAAA;AAAA,IACpD;AAAA,GACD;AACL;AAEA,MAAM,qBAAqB,MAAM;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,GACF;AACF,CAAA,CAAA;AAeO,MAAM,gBAAA,GAAmBC,uBAAkB,iBAAiB;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/kafka/index.ts"],"sourcesContent":["import { KafkaJsInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Kafka';\n\nexport const instrumentKafka = generateInstrumentOnce(INTEGRATION_NAME, () => new KafkaJsInstrumentation());\n\nconst _kafkaIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKafka();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [kafkajs](https://www.npmjs.com/package/kafkajs) library.\n *\n * For more information, see the [`kafkaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/kafka/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.kafkaIntegration()],\n * });\n */\nexport const kafkaIntegration = defineIntegration(_kafkaIntegration);\n"],"names":["generateInstrumentOnce","KafkaJsInstrumentation","defineIntegration"],"mappings":";;;;;;AAKA,MAAM,gBAAA,GAAmB,OAAA;AAElB,MAAM,kBAAkBA,+BAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAIC,wCAAwB;AAE1G,MAAM,qBAAqB,MAAM;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,GACF;AACF,CAAA,CAAA;AAeO,MAAM,gBAAA,GAAmBC,uBAAkB,iBAAiB;;;;;"}
@@ -1,45 +1,15 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
- const api = require('@opentelemetry/api');
4
3
  const instrumentation = require('@opentelemetry/instrumentation');
5
- const semanticConventions = require('@opentelemetry/semantic-conventions');
6
- const internalTypes = require('./internal-types.js');
7
- const propagator = require('./propagator.js');
8
- const semconv = require('./semconv.js');
9
4
  const core = require('@sentry/core');
5
+ const semconv = require('./semconv.js');
6
+ const utils = require('./utils.js');
10
7
 
11
8
  const PACKAGE_NAME = "@sentry/instrumentation-kafkajs";
12
- function prepareCounter(meter, value, attributes) {
13
- return (errorType) => {
14
- meter.add(value, {
15
- ...attributes,
16
- ...errorType ? { [semanticConventions.ATTR_ERROR_TYPE]: errorType } : {}
17
- });
18
- };
19
- }
20
- function prepareDurationHistogram(meter, value, attributes) {
21
- return (errorType) => {
22
- meter.record((Date.now() - value) / 1e3, {
23
- ...attributes,
24
- ...errorType ? { [semanticConventions.ATTR_ERROR_TYPE]: errorType } : {}
25
- });
26
- };
27
- }
28
- const HISTOGRAM_BUCKET_BOUNDARIES = [5e-3, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10];
29
9
  class KafkaJsInstrumentation extends instrumentation.InstrumentationBase {
30
10
  constructor(config = {}) {
31
11
  super(PACKAGE_NAME, core.SDK_VERSION, config);
32
12
  }
33
- _updateMetricInstruments() {
34
- this._clientDuration = this.meter.createHistogram(semconv.METRIC_MESSAGING_CLIENT_OPERATION_DURATION, {
35
- advice: { explicitBucketBoundaries: HISTOGRAM_BUCKET_BOUNDARIES }
36
- });
37
- this._sentMessages = this.meter.createCounter(semconv.METRIC_MESSAGING_CLIENT_SENT_MESSAGES);
38
- this._consumedMessages = this.meter.createCounter(semconv.METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES);
39
- this._processDuration = this.meter.createHistogram(semconv.METRIC_MESSAGING_PROCESS_DURATION, {
40
- advice: { explicitBucketBoundaries: HISTOGRAM_BUCKET_BOUNDARIES }
41
- });
42
- }
43
13
  init() {
44
14
  const unpatch = (moduleExports) => {
45
15
  if (instrumentation.isWrapped(moduleExports?.Kafka?.prototype.producer)) {
@@ -71,27 +41,10 @@ class KafkaJsInstrumentation extends instrumentation.InstrumentationBase {
71
41
  instrumentation$1._unwrap(newConsumer, "run");
72
42
  }
73
43
  instrumentation$1._wrap(newConsumer, "run", instrumentation$1._getConsumerRunPatch());
74
- instrumentation$1._setKafkaEventListeners(newConsumer);
75
44
  return newConsumer;
76
45
  };
77
46
  };
78
47
  }
79
- _setKafkaEventListeners(kafkaObj) {
80
- if (kafkaObj[internalTypes.EVENT_LISTENERS_SET]) return;
81
- if (kafkaObj.events?.REQUEST) {
82
- kafkaObj.on(kafkaObj.events.REQUEST, this._recordClientDurationMetric.bind(this));
83
- }
84
- kafkaObj[internalTypes.EVENT_LISTENERS_SET] = true;
85
- }
86
- _recordClientDurationMetric(event) {
87
- const [address = "", port = "0"] = event.payload.broker.split(":");
88
- this._clientDuration.record(event.payload.duration / 1e3, {
89
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
90
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: `${event.payload.apiName}`,
91
- [semanticConventions.ATTR_SERVER_ADDRESS]: address,
92
- [semanticConventions.ATTR_SERVER_PORT]: Number.parseInt(port, 10)
93
- });
94
- }
95
48
  _getProducerPatch() {
96
49
  const instrumentation$1 = this;
97
50
  return (original) => {
@@ -109,7 +62,6 @@ class KafkaJsInstrumentation extends instrumentation.InstrumentationBase {
109
62
  instrumentation$1._unwrap(newProducer, "transaction");
110
63
  }
111
64
  instrumentation$1._wrap(newProducer, "transaction", instrumentation$1._getProducerTransactionPatch());
112
- instrumentation$1._setKafkaEventListeners(newProducer);
113
65
  return newProducer;
114
66
  };
115
67
  };
@@ -136,103 +88,60 @@ class KafkaJsInstrumentation extends instrumentation.InstrumentationBase {
136
88
  };
137
89
  }
138
90
  _getConsumerEachMessagePatch() {
139
- const instrumentation = this;
140
91
  return (original) => {
141
92
  return function eachMessage(...args) {
142
93
  const payload = args[0];
143
- const propagatedContext = api.propagation.extract(
144
- api.ROOT_CONTEXT,
145
- payload.message.headers,
146
- propagator.bufferTextMapGetter
147
- );
148
- const span = instrumentation._startConsumerSpan({
149
- topic: payload.topic,
150
- message: payload.message,
151
- operationType: semconv.MESSAGING_OPERATION_TYPE_VALUE_PROCESS,
152
- ctx: propagatedContext,
153
- attributes: {
154
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition)
155
- }
156
- });
157
- const pendingMetrics = [
158
- prepareDurationHistogram(instrumentation._processDuration, Date.now(), {
159
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
160
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: "process",
161
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: payload.topic,
162
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition)
163
- }),
164
- prepareCounter(instrumentation._consumedMessages, 1, {
165
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
166
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: "process",
167
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: payload.topic,
168
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition)
169
- })
170
- ];
171
- const eachMessagePromise = api.context.with(api.trace.setSpan(propagatedContext, span), () => {
172
- return original.apply(this, args);
94
+ const sentryTrace = utils.getHeaderAsString(payload.message.headers, "sentry-trace");
95
+ const baggage = utils.getHeaderAsString(payload.message.headers, "baggage");
96
+ return core.continueTrace({ sentryTrace, baggage }, () => {
97
+ const span = utils.startConsumerSpan({
98
+ topic: payload.topic,
99
+ message: payload.message,
100
+ operationType: semconv.MESSAGING_OPERATION_TYPE_VALUE_PROCESS,
101
+ attributes: {
102
+ [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition)
103
+ }
104
+ });
105
+ const eachMessagePromise = core.withActiveSpan(span, () => {
106
+ return original.apply(this, args);
107
+ });
108
+ return utils.endSpansOnPromise([span], eachMessagePromise);
173
109
  });
174
- return instrumentation._endSpansOnPromise([span], pendingMetrics, eachMessagePromise);
175
110
  };
176
111
  };
177
112
  }
178
113
  _getConsumerEachBatchPatch() {
179
114
  return (original) => {
180
- const instrumentation = this;
181
115
  return function eachBatch(...args) {
182
116
  const payload = args[0];
183
- const receivingSpan = instrumentation._startConsumerSpan({
184
- topic: payload.batch.topic,
185
- message: void 0,
186
- operationType: semconv.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,
187
- ctx: api.ROOT_CONTEXT,
188
- attributes: {
189
- [semconv.ATTR_MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,
190
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition)
191
- }
192
- });
193
- return api.context.with(api.trace.setSpan(api.context.active(), receivingSpan), () => {
194
- const startTime = Date.now();
195
- const spans = [];
196
- const pendingMetrics = [
197
- prepareCounter(instrumentation._consumedMessages, payload.batch.messages.length, {
198
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
199
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: "process",
200
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: payload.batch.topic,
117
+ const receivingSpan = core.startNewTrace(
118
+ () => utils.startConsumerSpan({
119
+ topic: payload.batch.topic,
120
+ message: void 0,
121
+ operationType: semconv.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,
122
+ attributes: {
123
+ [semconv.ATTR_MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,
201
124
  [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition)
202
- })
203
- ];
204
- payload.batch.messages.forEach((message) => {
205
- const propagatedContext = api.propagation.extract(api.ROOT_CONTEXT, message.headers, propagator.bufferTextMapGetter);
206
- const spanContext = api.trace.getSpan(propagatedContext)?.spanContext();
207
- let origSpanLink;
208
- if (spanContext) {
209
- origSpanLink = {
210
- context: spanContext
211
- };
212
125
  }
126
+ })
127
+ );
128
+ return core.withActiveSpan(receivingSpan, () => {
129
+ const spans = [receivingSpan];
130
+ payload.batch.messages.forEach((message) => {
213
131
  spans.push(
214
- instrumentation._startConsumerSpan({
132
+ utils.startConsumerSpan({
215
133
  topic: payload.batch.topic,
216
134
  message,
217
135
  operationType: semconv.MESSAGING_OPERATION_TYPE_VALUE_PROCESS,
218
- link: origSpanLink,
136
+ links: utils.getLinksFromHeaders(message.headers),
219
137
  attributes: {
220
138
  [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition)
221
139
  }
222
140
  })
223
141
  );
224
- pendingMetrics.push(
225
- prepareDurationHistogram(instrumentation._processDuration, startTime, {
226
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
227
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: "process",
228
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: payload.batch.topic,
229
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition)
230
- })
231
- );
232
142
  });
233
143
  const batchMessagePromise = original.apply(this, args);
234
- spans.unshift(receivingSpan);
235
- return instrumentation._endSpansOnPromise(spans, pendingMetrics, batchMessagePromise);
144
+ return utils.endSpansOnPromise(spans, batchMessagePromise);
236
145
  });
237
146
  };
238
147
  };
@@ -241,33 +150,31 @@ class KafkaJsInstrumentation extends instrumentation.InstrumentationBase {
241
150
  const instrumentation = this;
242
151
  return (original) => {
243
152
  return function transaction(...args) {
244
- const transactionSpan = instrumentation.tracer.startSpan("transaction");
153
+ const transactionSpan = core.startInactiveSpan({ name: "transaction" });
245
154
  const transactionPromise = original.apply(this, args);
246
155
  transactionPromise.then((transaction2) => {
247
156
  const originalSend = transaction2.send;
248
157
  transaction2.send = function send(...args2) {
249
- return api.context.with(api.trace.setSpan(api.context.active(), transactionSpan), () => {
158
+ return core.withActiveSpan(transactionSpan, () => {
250
159
  const patched = instrumentation._getSendPatch()(originalSend);
251
160
  return patched.apply(this, args2).catch((err) => {
252
161
  transactionSpan.setStatus({
253
- code: api.SpanStatusCode.ERROR,
162
+ code: core.SPAN_STATUS_ERROR,
254
163
  message: err?.message
255
164
  });
256
- transactionSpan.recordException(err);
257
165
  throw err;
258
166
  });
259
167
  });
260
168
  };
261
169
  const originalSendBatch = transaction2.sendBatch;
262
170
  transaction2.sendBatch = function sendBatch(...args2) {
263
- return api.context.with(api.trace.setSpan(api.context.active(), transactionSpan), () => {
171
+ return core.withActiveSpan(transactionSpan, () => {
264
172
  const patched = instrumentation._getSendBatchPatch()(originalSendBatch);
265
173
  return patched.apply(this, args2).catch((err) => {
266
174
  transactionSpan.setStatus({
267
- code: api.SpanStatusCode.ERROR,
175
+ code: core.SPAN_STATUS_ERROR,
268
176
  message: err?.message
269
177
  });
270
- transactionSpan.recordException(err);
271
178
  throw err;
272
179
  });
273
180
  });
@@ -275,21 +182,20 @@ class KafkaJsInstrumentation extends instrumentation.InstrumentationBase {
275
182
  const originalCommit = transaction2.commit;
276
183
  transaction2.commit = function commit(...args2) {
277
184
  const originCommitPromise = originalCommit.apply(this, args2).then(() => {
278
- transactionSpan.setStatus({ code: api.SpanStatusCode.OK });
185
+ transactionSpan.setStatus({ code: core.SPAN_STATUS_OK });
279
186
  });
280
- return instrumentation._endSpansOnPromise([transactionSpan], [], originCommitPromise);
187
+ return utils.endSpansOnPromise([transactionSpan], originCommitPromise);
281
188
  };
282
189
  const originalAbort = transaction2.abort;
283
190
  transaction2.abort = function abort(...args2) {
284
191
  const originAbortPromise = originalAbort.apply(this, args2);
285
- return instrumentation._endSpansOnPromise([transactionSpan], [], originAbortPromise);
192
+ return utils.endSpansOnPromise([transactionSpan], originAbortPromise);
286
193
  };
287
194
  }).catch((err) => {
288
195
  transactionSpan.setStatus({
289
- code: api.SpanStatusCode.ERROR,
196
+ code: core.SPAN_STATUS_ERROR,
290
197
  message: err?.message
291
198
  });
292
- transactionSpan.recordException(err);
293
199
  transactionSpan.end();
294
200
  });
295
201
  return transactionPromise;
@@ -297,141 +203,33 @@ class KafkaJsInstrumentation extends instrumentation.InstrumentationBase {
297
203
  };
298
204
  }
299
205
  _getSendBatchPatch() {
300
- const instrumentation = this;
301
206
  return (original) => {
302
207
  return function sendBatch(...args) {
303
208
  const batch = args[0];
304
209
  const messages = batch.topicMessages || [];
305
210
  const spans = [];
306
- const pendingMetrics = [];
307
211
  messages.forEach((topicMessage) => {
308
212
  topicMessage.messages.forEach((message) => {
309
- spans.push(instrumentation._startProducerSpan(topicMessage.topic, message));
310
- pendingMetrics.push(
311
- prepareCounter(instrumentation._sentMessages, 1, {
312
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
313
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: "send",
314
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: topicMessage.topic,
315
- ...message.partition !== void 0 ? {
316
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(message.partition)
317
- } : {}
318
- })
319
- );
213
+ spans.push(utils.startProducerSpan(topicMessage.topic, message));
320
214
  });
321
215
  });
322
216
  const origSendResult = original.apply(this, args);
323
- return instrumentation._endSpansOnPromise(spans, pendingMetrics, origSendResult);
217
+ return utils.endSpansOnPromise(spans, origSendResult);
324
218
  };
325
219
  };
326
220
  }
327
221
  _getSendPatch() {
328
- const instrumentation = this;
329
222
  return (original) => {
330
223
  return function send(...args) {
331
224
  const record = args[0];
332
225
  const spans = record.messages.map((message) => {
333
- return instrumentation._startProducerSpan(record.topic, message);
226
+ return utils.startProducerSpan(record.topic, message);
334
227
  });
335
- const pendingMetrics = record.messages.map(
336
- (m) => prepareCounter(instrumentation._sentMessages, 1, {
337
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
338
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: "send",
339
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: record.topic,
340
- ...m.partition !== void 0 ? {
341
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(m.partition)
342
- } : {}
343
- })
344
- );
345
228
  const origSendResult = original.apply(this, args);
346
- return instrumentation._endSpansOnPromise(spans, pendingMetrics, origSendResult);
229
+ return utils.endSpansOnPromise(spans, origSendResult);
347
230
  };
348
231
  };
349
232
  }
350
- _endSpansOnPromise(spans, pendingMetrics, sendPromise) {
351
- return Promise.resolve(sendPromise).then((result) => {
352
- pendingMetrics.forEach((m) => m());
353
- return result;
354
- }).catch((reason) => {
355
- let errorMessage;
356
- let errorType = semanticConventions.ERROR_TYPE_VALUE_OTHER;
357
- if (typeof reason === "string" || reason === void 0) {
358
- errorMessage = reason;
359
- } else if (typeof reason === "object" && Object.prototype.hasOwnProperty.call(reason, "message")) {
360
- errorMessage = reason.message;
361
- errorType = reason.constructor.name;
362
- }
363
- pendingMetrics.forEach((m) => m(errorType));
364
- spans.forEach((span) => {
365
- span.setAttribute(semanticConventions.ATTR_ERROR_TYPE, errorType);
366
- span.setStatus({
367
- code: api.SpanStatusCode.ERROR,
368
- message: errorMessage
369
- });
370
- });
371
- throw reason;
372
- }).finally(() => {
373
- spans.forEach((span) => span.end());
374
- });
375
- }
376
- _startConsumerSpan({ topic, message, operationType, ctx, link, attributes }) {
377
- const operationName = operationType === semconv.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? "poll" : operationType;
378
- const span = this.tracer.startSpan(
379
- `${operationName} ${topic}`,
380
- {
381
- kind: operationType === semconv.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? api.SpanKind.CLIENT : api.SpanKind.CONSUMER,
382
- attributes: {
383
- ...attributes,
384
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
385
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: topic,
386
- [semconv.ATTR_MESSAGING_OPERATION_TYPE]: operationType,
387
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: operationName,
388
- [semconv.ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message?.key ? String(message.key) : void 0,
389
- [semconv.ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message?.key && message.value === null ? true : void 0,
390
- [semconv.ATTR_MESSAGING_KAFKA_OFFSET]: message?.offset
391
- },
392
- links: link ? [link] : []
393
- },
394
- ctx
395
- );
396
- const { consumerHook } = this.getConfig();
397
- if (consumerHook && message) {
398
- instrumentation.safeExecuteInTheMiddle(
399
- () => consumerHook(span, { topic, message }),
400
- (e) => {
401
- if (e) this._diag.error("consumerHook error", e);
402
- },
403
- true
404
- );
405
- }
406
- return span;
407
- }
408
- _startProducerSpan(topic, message) {
409
- const span = this.tracer.startSpan(`send ${topic}`, {
410
- kind: api.SpanKind.PRODUCER,
411
- attributes: {
412
- [semconv.ATTR_MESSAGING_SYSTEM]: semconv.MESSAGING_SYSTEM_VALUE_KAFKA,
413
- [semconv.ATTR_MESSAGING_DESTINATION_NAME]: topic,
414
- [semconv.ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message.key ? String(message.key) : void 0,
415
- [semconv.ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message.key && message.value === null ? true : void 0,
416
- [semconv.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: message.partition !== void 0 ? String(message.partition) : void 0,
417
- [semconv.ATTR_MESSAGING_OPERATION_NAME]: "send",
418
- [semconv.ATTR_MESSAGING_OPERATION_TYPE]: semconv.MESSAGING_OPERATION_TYPE_VALUE_SEND
419
- }
420
- });
421
- message.headers = message.headers ?? {};
422
- api.propagation.inject(api.trace.setSpan(api.context.active(), span), message.headers);
423
- const { producerHook } = this.getConfig();
424
- if (producerHook) {
425
- instrumentation.safeExecuteInTheMiddle(
426
- () => producerHook(span, { topic, message }),
427
- (e) => {
428
- if (e) this._diag.error("producerHook error", e);
429
- },
430
- true
431
- );
432
- }
433
- return span;
434
- }
435
233
  }
436
234
 
437
235
  exports.KafkaJsInstrumentation = KafkaJsInstrumentation;
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Some types vendored from kafkajs with simplifications\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n/* eslint-disable */\n\nimport {\n Attributes,\n Context,\n context,\n Counter,\n Histogram,\n Link,\n propagation,\n ROOT_CONTEXT,\n Span,\n SpanKind,\n SpanStatusCode,\n trace,\n} from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_ERROR_TYPE,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n ERROR_TYPE_VALUE_OTHER,\n} from '@opentelemetry/semantic-conventions';\nimport type { Kafka, Transaction, Producer, ConsumerEvents, ProducerEvents, RequestEvent } from './kafkajs-types';\nimport type {\n Consumer,\n ConsumerRunConfig,\n EachBatchHandler,\n EachMessageHandler,\n KafkaMessage,\n Message,\n RecordMetadata,\n} from './kafkajs-types';\nimport { EVENT_LISTENERS_SET } from './internal-types';\nimport { bufferTextMapGetter } from './propagator';\nimport {\n ATTR_MESSAGING_BATCH_MESSAGE_COUNT,\n ATTR_MESSAGING_DESTINATION_NAME,\n ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n ATTR_MESSAGING_KAFKA_MESSAGE_KEY,\n ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE,\n ATTR_MESSAGING_KAFKA_OFFSET,\n ATTR_MESSAGING_OPERATION_NAME,\n ATTR_MESSAGING_OPERATION_TYPE,\n ATTR_MESSAGING_SYSTEM,\n MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n MESSAGING_OPERATION_TYPE_VALUE_SEND,\n MESSAGING_SYSTEM_VALUE_KAFKA,\n METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES,\n METRIC_MESSAGING_CLIENT_OPERATION_DURATION,\n METRIC_MESSAGING_CLIENT_SENT_MESSAGES,\n METRIC_MESSAGING_PROCESS_DURATION,\n} from './semconv';\nimport { KafkaJsInstrumentationConfig } from './types';\n\ninterface ConsumerSpanOptions {\n topic: string;\n message: KafkaMessage | undefined;\n operationType: string;\n attributes: Attributes;\n ctx?: Context | undefined;\n link?: Link;\n}\nimport { SDK_VERSION } from '@sentry/core';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-kafkajs';\n\n// This interface acts as a strict subset of the KafkaJS Consumer and\n// Producer interfaces (just for the event we're needing)\ninterface KafkaEventEmitter {\n on(eventName: ConsumerEvents['REQUEST'] | ProducerEvents['REQUEST'], listener: (event: RequestEvent) => void): void;\n events: {\n REQUEST: ConsumerEvents['REQUEST'] | ProducerEvents['REQUEST'];\n };\n [EVENT_LISTENERS_SET]?: boolean;\n}\n\ninterface StandardAttributes<OP extends string = string> extends Attributes {\n [ATTR_MESSAGING_SYSTEM]: string;\n [ATTR_MESSAGING_OPERATION_NAME]: OP;\n [ATTR_ERROR_TYPE]?: string;\n}\ninterface TopicAttributes {\n [ATTR_MESSAGING_DESTINATION_NAME]: string;\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]?: string;\n}\n\ninterface ClientDurationAttributes extends StandardAttributes, Partial<TopicAttributes> {\n [ATTR_SERVER_ADDRESS]: string;\n [ATTR_SERVER_PORT]: number;\n [ATTR_MESSAGING_OPERATION_TYPE]?: string;\n}\ninterface SentMessagesAttributes extends StandardAttributes<'send'>, TopicAttributes {\n [ATTR_ERROR_TYPE]?: string;\n}\ntype ConsumedMessagesAttributes = StandardAttributes<'receive' | 'process'>;\ninterface MessageProcessDurationAttributes extends StandardAttributes<'process'>, TopicAttributes {\n [ATTR_MESSAGING_SYSTEM]: string;\n [ATTR_MESSAGING_OPERATION_NAME]: 'process';\n [ATTR_ERROR_TYPE]?: string;\n}\ntype RecordPendingMetric = (errorType?: string | undefined) => void;\n\nfunction prepareCounter<T extends Attributes>(meter: Counter<T>, value: number, attributes: T): RecordPendingMetric {\n return (errorType?: string | undefined) => {\n meter.add(value, {\n ...attributes,\n ...(errorType ? { [ATTR_ERROR_TYPE]: errorType } : {}),\n });\n };\n}\n\nfunction prepareDurationHistogram<T extends Attributes>(\n meter: Histogram<T>,\n value: number,\n attributes: T,\n): RecordPendingMetric {\n return (errorType?: string | undefined) => {\n meter.record((Date.now() - value) / 1000, {\n ...attributes,\n ...(errorType ? { [ATTR_ERROR_TYPE]: errorType } : {}),\n });\n };\n}\n\nconst HISTOGRAM_BUCKET_BOUNDARIES = [0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10];\nexport class KafkaJsInstrumentation extends InstrumentationBase<KafkaJsInstrumentationConfig> {\n declare private _clientDuration: Histogram<ClientDurationAttributes>;\n declare private _sentMessages: Counter<SentMessagesAttributes>;\n declare private _consumedMessages: Counter<ConsumedMessagesAttributes>;\n declare private _processDuration: Histogram<MessageProcessDurationAttributes>;\n\n constructor(config: KafkaJsInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n override _updateMetricInstruments() {\n this._clientDuration = this.meter.createHistogram(METRIC_MESSAGING_CLIENT_OPERATION_DURATION, {\n advice: { explicitBucketBoundaries: HISTOGRAM_BUCKET_BOUNDARIES },\n });\n this._sentMessages = this.meter.createCounter(METRIC_MESSAGING_CLIENT_SENT_MESSAGES);\n this._consumedMessages = this.meter.createCounter(METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES);\n this._processDuration = this.meter.createHistogram(METRIC_MESSAGING_PROCESS_DURATION, {\n advice: { explicitBucketBoundaries: HISTOGRAM_BUCKET_BOUNDARIES },\n });\n }\n\n protected init() {\n const unpatch = (moduleExports: any) => {\n if (isWrapped(moduleExports?.Kafka?.prototype.producer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'producer');\n }\n if (isWrapped(moduleExports?.Kafka?.prototype.consumer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'consumer');\n }\n };\n\n const module = new InstrumentationNodeModuleDefinition(\n 'kafkajs',\n ['>=0.3.0 <3'],\n (moduleExports: any) => {\n unpatch(moduleExports);\n this._wrap(moduleExports?.Kafka?.prototype, 'producer', this._getProducerPatch());\n this._wrap(moduleExports?.Kafka?.prototype, 'consumer', this._getConsumerPatch());\n\n return moduleExports;\n },\n unpatch,\n );\n return module;\n }\n\n private _getConsumerPatch() {\n const instrumentation = this;\n return (original: Kafka['consumer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['consumer']>) {\n const newConsumer: Consumer = original.apply(this, args);\n\n if (isWrapped(newConsumer.run)) {\n instrumentation._unwrap(newConsumer, 'run');\n }\n\n instrumentation._wrap(newConsumer, 'run', instrumentation._getConsumerRunPatch());\n\n instrumentation._setKafkaEventListeners(newConsumer);\n\n return newConsumer;\n };\n };\n }\n\n private _setKafkaEventListeners(kafkaObj: KafkaEventEmitter) {\n if (kafkaObj[EVENT_LISTENERS_SET]) return;\n\n // The REQUEST Consumer event was added in kafkajs@1.5.0.\n if (kafkaObj.events?.REQUEST) {\n kafkaObj.on(kafkaObj.events.REQUEST, this._recordClientDurationMetric.bind(this));\n }\n\n kafkaObj[EVENT_LISTENERS_SET] = true;\n }\n\n private _recordClientDurationMetric(event: Pick<RequestEvent, 'payload'>) {\n const [address = '', port = '0'] = event.payload.broker.split(':');\n this._clientDuration.record(event.payload.duration / 1000, {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_OPERATION_NAME]: `${event.payload.apiName}`,\n [ATTR_SERVER_ADDRESS]: address,\n [ATTR_SERVER_PORT]: Number.parseInt(port, 10),\n });\n }\n\n private _getProducerPatch() {\n const instrumentation = this;\n return (original: Kafka['producer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['producer']>) {\n const newProducer: Producer = original.apply(this, args);\n\n if (isWrapped(newProducer.sendBatch)) {\n instrumentation._unwrap(newProducer, 'sendBatch');\n }\n instrumentation._wrap(newProducer, 'sendBatch', instrumentation._getSendBatchPatch());\n\n if (isWrapped(newProducer.send)) {\n instrumentation._unwrap(newProducer, 'send');\n }\n instrumentation._wrap(newProducer, 'send', instrumentation._getSendPatch());\n\n if (isWrapped(newProducer.transaction)) {\n instrumentation._unwrap(newProducer, 'transaction');\n }\n instrumentation._wrap(newProducer, 'transaction', instrumentation._getProducerTransactionPatch());\n\n instrumentation._setKafkaEventListeners(newProducer);\n\n return newProducer;\n };\n };\n }\n\n private _getConsumerRunPatch() {\n const instrumentation = this;\n return (original: Consumer['run']) => {\n return function run(this: Consumer, ...args: Parameters<Consumer['run']>): ReturnType<Consumer['run']> {\n const config = args[0];\n if (config?.eachMessage) {\n if (isWrapped(config.eachMessage)) {\n instrumentation._unwrap(config, 'eachMessage');\n }\n instrumentation._wrap(config, 'eachMessage', instrumentation._getConsumerEachMessagePatch());\n }\n if (config?.eachBatch) {\n if (isWrapped(config.eachBatch)) {\n instrumentation._unwrap(config, 'eachBatch');\n }\n instrumentation._wrap(config, 'eachBatch', instrumentation._getConsumerEachBatchPatch());\n }\n return original.call(this, config);\n };\n };\n }\n\n private _getConsumerEachMessagePatch() {\n const instrumentation = this;\n return (original: ConsumerRunConfig['eachMessage']) => {\n return function eachMessage(this: unknown, ...args: Parameters<EachMessageHandler>): Promise<void> {\n const payload = args[0];\n const propagatedContext: Context = propagation.extract(\n ROOT_CONTEXT,\n payload.message.headers,\n bufferTextMapGetter,\n );\n const span = instrumentation._startConsumerSpan({\n topic: payload.topic,\n message: payload.message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n ctx: propagatedContext,\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition),\n },\n });\n\n const pendingMetrics: RecordPendingMetric[] = [\n prepareDurationHistogram(instrumentation._processDuration, Date.now(), {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_OPERATION_NAME]: 'process',\n [ATTR_MESSAGING_DESTINATION_NAME]: payload.topic,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition),\n }),\n prepareCounter(instrumentation._consumedMessages, 1, {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_OPERATION_NAME]: 'process',\n [ATTR_MESSAGING_DESTINATION_NAME]: payload.topic,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition),\n }),\n ];\n\n const eachMessagePromise = context.with(trace.setSpan(propagatedContext, span), () => {\n return original!.apply(this, args);\n });\n return instrumentation._endSpansOnPromise([span], pendingMetrics, eachMessagePromise);\n };\n };\n }\n\n private _getConsumerEachBatchPatch() {\n return (original: ConsumerRunConfig['eachBatch']) => {\n const instrumentation = this;\n return function eachBatch(this: unknown, ...args: Parameters<EachBatchHandler>): Promise<void> {\n const payload = args[0];\n // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#topic-with-multiple-consumers\n const receivingSpan = instrumentation._startConsumerSpan({\n topic: payload.batch.topic,\n message: undefined,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n ctx: ROOT_CONTEXT,\n attributes: {\n [ATTR_MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n });\n return context.with(trace.setSpan(context.active(), receivingSpan), () => {\n const startTime = Date.now();\n const spans: Span[] = [];\n const pendingMetrics: RecordPendingMetric[] = [\n prepareCounter(instrumentation._consumedMessages, payload.batch.messages.length, {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_OPERATION_NAME]: 'process',\n [ATTR_MESSAGING_DESTINATION_NAME]: payload.batch.topic,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n }),\n ];\n payload.batch.messages.forEach((message: any) => {\n const propagatedContext: Context = propagation.extract(ROOT_CONTEXT, message.headers, bufferTextMapGetter);\n const spanContext = trace.getSpan(propagatedContext)?.spanContext();\n let origSpanLink: Link | undefined;\n if (spanContext) {\n origSpanLink = {\n context: spanContext,\n };\n }\n spans.push(\n instrumentation._startConsumerSpan({\n topic: payload.batch.topic,\n message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n link: origSpanLink,\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n }),\n );\n pendingMetrics.push(\n prepareDurationHistogram(instrumentation._processDuration, startTime, {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_OPERATION_NAME]: 'process',\n [ATTR_MESSAGING_DESTINATION_NAME]: payload.batch.topic,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n }),\n );\n });\n const batchMessagePromise: Promise<void> = original!.apply(this, args);\n spans.unshift(receivingSpan);\n return instrumentation._endSpansOnPromise(spans, pendingMetrics, batchMessagePromise);\n });\n };\n };\n }\n\n private _getProducerTransactionPatch() {\n const instrumentation = this;\n return (original: Producer['transaction']) => {\n return function transaction(\n this: Producer,\n ...args: Parameters<Producer['transaction']>\n ): ReturnType<Producer['transaction']> {\n const transactionSpan = instrumentation.tracer.startSpan('transaction');\n\n const transactionPromise = original.apply(this, args);\n\n transactionPromise\n .then((transaction: Transaction) => {\n const originalSend = transaction.send;\n transaction.send = function send(this: Transaction, ...args) {\n return context.with(trace.setSpan(context.active(), transactionSpan), () => {\n const patched = instrumentation._getSendPatch()(originalSend);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SpanStatusCode.ERROR,\n message: err?.message,\n });\n transactionSpan.recordException(err);\n throw err;\n });\n });\n };\n\n const originalSendBatch = transaction.sendBatch;\n transaction.sendBatch = function sendBatch(this: Transaction, ...args) {\n return context.with(trace.setSpan(context.active(), transactionSpan), () => {\n const patched = instrumentation._getSendBatchPatch()(originalSendBatch);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SpanStatusCode.ERROR,\n message: err?.message,\n });\n transactionSpan.recordException(err);\n throw err;\n });\n });\n };\n\n const originalCommit = transaction.commit;\n transaction.commit = function commit(this: Transaction, ...args) {\n const originCommitPromise = originalCommit.apply(this, args).then(() => {\n transactionSpan.setStatus({ code: SpanStatusCode.OK });\n });\n return instrumentation._endSpansOnPromise([transactionSpan], [], originCommitPromise);\n };\n\n const originalAbort = transaction.abort;\n transaction.abort = function abort(this: Transaction, ...args) {\n const originAbortPromise = originalAbort.apply(this, args);\n return instrumentation._endSpansOnPromise([transactionSpan], [], originAbortPromise);\n };\n })\n .catch((err: any) => {\n transactionSpan.setStatus({\n code: SpanStatusCode.ERROR,\n message: err?.message,\n });\n transactionSpan.recordException(err);\n transactionSpan.end();\n });\n\n return transactionPromise;\n };\n };\n }\n\n private _getSendBatchPatch() {\n const instrumentation = this;\n return (original: Producer['sendBatch'] | Transaction['sendBatch']) => {\n return function sendBatch(\n this: Producer | Transaction,\n ...args: Parameters<Producer['sendBatch']>\n ): ReturnType<Producer['sendBatch']> {\n const batch = args[0];\n const messages = batch.topicMessages || [];\n\n const spans: Span[] = [];\n const pendingMetrics: RecordPendingMetric[] = [];\n\n messages.forEach((topicMessage: any) => {\n topicMessage.messages.forEach((message: any) => {\n spans.push(instrumentation._startProducerSpan(topicMessage.topic, message));\n pendingMetrics.push(\n prepareCounter(instrumentation._sentMessages, 1, {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_OPERATION_NAME]: 'send',\n [ATTR_MESSAGING_DESTINATION_NAME]: topicMessage.topic,\n ...(message.partition !== undefined\n ? {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(message.partition),\n }\n : {}),\n }),\n );\n });\n });\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return instrumentation._endSpansOnPromise(spans, pendingMetrics, origSendResult);\n };\n };\n }\n\n private _getSendPatch() {\n const instrumentation = this;\n return (original: Producer['send'] | Transaction['send']) => {\n return function send(\n this: Producer | Transaction,\n ...args: Parameters<Producer['send']>\n ): ReturnType<Producer['send']> {\n const record = args[0];\n const spans: Span[] = record.messages.map((message: any) => {\n return instrumentation._startProducerSpan(record.topic, message);\n });\n\n const pendingMetrics: RecordPendingMetric[] = record.messages.map((m: any) =>\n prepareCounter(instrumentation._sentMessages, 1, {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_OPERATION_NAME]: 'send',\n [ATTR_MESSAGING_DESTINATION_NAME]: record.topic,\n ...(m.partition !== undefined\n ? {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(m.partition),\n }\n : {}),\n }),\n );\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return instrumentation._endSpansOnPromise(spans, pendingMetrics, origSendResult);\n };\n };\n }\n\n private _endSpansOnPromise<T>(\n spans: Span[],\n pendingMetrics: RecordPendingMetric[],\n sendPromise: Promise<T>,\n ): Promise<T> {\n return Promise.resolve(sendPromise)\n .then(result => {\n pendingMetrics.forEach(m => m());\n return result;\n })\n .catch(reason => {\n let errorMessage: string | undefined;\n let errorType: string = ERROR_TYPE_VALUE_OTHER;\n if (typeof reason === 'string' || reason === undefined) {\n errorMessage = reason;\n } else if (typeof reason === 'object' && Object.prototype.hasOwnProperty.call(reason, 'message')) {\n errorMessage = reason.message;\n errorType = reason.constructor.name;\n }\n pendingMetrics.forEach(m => m(errorType));\n\n spans.forEach(span => {\n span.setAttribute(ATTR_ERROR_TYPE, errorType);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errorMessage,\n });\n });\n\n throw reason;\n })\n .finally(() => {\n spans.forEach(span => span.end());\n });\n }\n\n private _startConsumerSpan({ topic, message, operationType, ctx, link, attributes }: ConsumerSpanOptions) {\n const operationName =\n operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE\n ? 'poll' // for batch processing spans\n : operationType; // for individual message processing spans\n\n const span = this.tracer.startSpan(\n `${operationName} ${topic}`,\n {\n kind: operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? SpanKind.CLIENT : SpanKind.CONSUMER,\n attributes: {\n ...attributes,\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_DESTINATION_NAME]: topic,\n [ATTR_MESSAGING_OPERATION_TYPE]: operationType,\n [ATTR_MESSAGING_OPERATION_NAME]: operationName,\n [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message?.key ? String(message.key) : undefined,\n [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message?.key && message.value === null ? true : undefined,\n [ATTR_MESSAGING_KAFKA_OFFSET]: message?.offset,\n },\n links: link ? [link] : [],\n },\n ctx,\n );\n\n const { consumerHook } = this.getConfig();\n if (consumerHook && message) {\n safeExecuteInTheMiddle(\n () => consumerHook(span, { topic, message }),\n e => {\n if (e) this._diag.error('consumerHook error', e);\n },\n true,\n );\n }\n\n return span;\n }\n\n private _startProducerSpan(topic: string, message: Message) {\n const span = this.tracer.startSpan(`send ${topic}`, {\n kind: SpanKind.PRODUCER,\n attributes: {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_DESTINATION_NAME]: topic,\n [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message.key ? String(message.key) : undefined,\n [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message.key && message.value === null ? true : undefined,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]:\n message.partition !== undefined ? String(message.partition) : undefined,\n [ATTR_MESSAGING_OPERATION_NAME]: 'send',\n [ATTR_MESSAGING_OPERATION_TYPE]: MESSAGING_OPERATION_TYPE_VALUE_SEND,\n },\n });\n\n message.headers = message.headers ?? {};\n propagation.inject(trace.setSpan(context.active(), span), message.headers);\n\n const { producerHook } = this.getConfig();\n if (producerHook) {\n safeExecuteInTheMiddle(\n () => producerHook(span, { topic, message }),\n e => {\n if (e) this._diag.error('producerHook error', e);\n },\n true,\n );\n }\n\n return span;\n }\n}\n"],"names":["ATTR_ERROR_TYPE","InstrumentationBase","SDK_VERSION","METRIC_MESSAGING_CLIENT_OPERATION_DURATION","METRIC_MESSAGING_CLIENT_SENT_MESSAGES","METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES","METRIC_MESSAGING_PROCESS_DURATION","isWrapped","InstrumentationNodeModuleDefinition","instrumentation","EVENT_LISTENERS_SET","ATTR_MESSAGING_SYSTEM","MESSAGING_SYSTEM_VALUE_KAFKA","ATTR_MESSAGING_OPERATION_NAME","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT","propagation","ROOT_CONTEXT","bufferTextMapGetter","MESSAGING_OPERATION_TYPE_VALUE_PROCESS","ATTR_MESSAGING_DESTINATION_PARTITION_ID","ATTR_MESSAGING_DESTINATION_NAME","context","trace","MESSAGING_OPERATION_TYPE_VALUE_RECEIVE","ATTR_MESSAGING_BATCH_MESSAGE_COUNT","transaction","args","SpanStatusCode","ERROR_TYPE_VALUE_OTHER","SpanKind","ATTR_MESSAGING_OPERATION_TYPE","ATTR_MESSAGING_KAFKA_MESSAGE_KEY","ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE","ATTR_MESSAGING_KAFKA_OFFSET","safeExecuteInTheMiddle","MESSAGING_OPERATION_TYPE_VALUE_SEND"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Some types vendored from kafkajs with simplifications\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - Cross-broker trace propagation uses Sentry's `getTraceData`/`continueTrace` instead of the OTel\n * propagator, so the vendored `bufferTextMapGetter` propagator is gone\n * - Dropped the OTel metrics (no MeterProvider is wired up) and, with them, the `network.request`\n * event listeners they relied on; origin is folded into span creation instead of `index.ts` hooks\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span } from '@sentry/core';\nimport {\n continueTrace,\n SDK_VERSION,\n SPAN_STATUS_ERROR,\n SPAN_STATUS_OK,\n startInactiveSpan,\n startNewTrace,\n withActiveSpan,\n} from '@sentry/core';\nimport type {\n Consumer,\n ConsumerRunConfig,\n EachBatchHandler,\n EachMessageHandler,\n Kafka,\n KafkaMessage,\n Producer,\n RecordMetadata,\n Transaction,\n} from './kafkajs-types';\nimport {\n ATTR_MESSAGING_BATCH_MESSAGE_COUNT,\n ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n} from './semconv';\nimport {\n endSpansOnPromise,\n getHeaderAsString,\n getLinksFromHeaders,\n startConsumerSpan,\n startProducerSpan,\n} from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-kafkajs';\n\nexport class KafkaJsInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init(): InstrumentationNodeModuleDefinition {\n const unpatch = (moduleExports: any): void => {\n if (isWrapped(moduleExports?.Kafka?.prototype.producer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'producer');\n }\n if (isWrapped(moduleExports?.Kafka?.prototype.consumer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'consumer');\n }\n };\n\n const module = new InstrumentationNodeModuleDefinition(\n 'kafkajs',\n ['>=0.3.0 <3'],\n (moduleExports: any) => {\n unpatch(moduleExports);\n this._wrap(moduleExports?.Kafka?.prototype, 'producer', this._getProducerPatch());\n this._wrap(moduleExports?.Kafka?.prototype, 'consumer', this._getConsumerPatch());\n\n return moduleExports;\n },\n unpatch,\n );\n return module;\n }\n\n private _getConsumerPatch() {\n const instrumentation = this;\n return (original: Kafka['consumer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['consumer']>) {\n const newConsumer: Consumer = original.apply(this, args);\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newConsumer.run)) {\n instrumentation._unwrap(newConsumer, 'run');\n }\n\n instrumentation._wrap(newConsumer, 'run', instrumentation._getConsumerRunPatch());\n\n return newConsumer;\n };\n };\n }\n\n private _getProducerPatch() {\n const instrumentation = this;\n return (original: Kafka['producer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['producer']>) {\n const newProducer: Producer = original.apply(this, args);\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.sendBatch)) {\n instrumentation._unwrap(newProducer, 'sendBatch');\n }\n instrumentation._wrap(newProducer, 'sendBatch', instrumentation._getSendBatchPatch());\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.send)) {\n instrumentation._unwrap(newProducer, 'send');\n }\n instrumentation._wrap(newProducer, 'send', instrumentation._getSendPatch());\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.transaction)) {\n instrumentation._unwrap(newProducer, 'transaction');\n }\n instrumentation._wrap(newProducer, 'transaction', instrumentation._getProducerTransactionPatch());\n\n return newProducer;\n };\n };\n }\n\n private _getConsumerRunPatch() {\n const instrumentation = this;\n return (original: Consumer['run']) => {\n return function run(this: Consumer, ...args: Parameters<Consumer['run']>): ReturnType<Consumer['run']> {\n const config = args[0];\n if (config?.eachMessage) {\n if (isWrapped(config.eachMessage)) {\n instrumentation._unwrap(config, 'eachMessage');\n }\n instrumentation._wrap(config, 'eachMessage', instrumentation._getConsumerEachMessagePatch());\n }\n if (config?.eachBatch) {\n if (isWrapped(config.eachBatch)) {\n instrumentation._unwrap(config, 'eachBatch');\n }\n instrumentation._wrap(config, 'eachBatch', instrumentation._getConsumerEachBatchPatch());\n }\n return original.call(this, config);\n };\n };\n }\n\n private _getConsumerEachMessagePatch() {\n return (original: ConsumerRunConfig['eachMessage']) => {\n return function eachMessage(this: unknown, ...args: Parameters<EachMessageHandler>): Promise<void> {\n const payload = args[0];\n const sentryTrace = getHeaderAsString(payload.message.headers, 'sentry-trace');\n const baggage = getHeaderAsString(payload.message.headers, 'baggage');\n\n // Continue the producer's trace so the consumer span is parented to the message's producer.\n return continueTrace({ sentryTrace, baggage }, () => {\n const span = startConsumerSpan({\n topic: payload.topic,\n message: payload.message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition),\n },\n });\n\n const eachMessagePromise = withActiveSpan(span, () => {\n return original!.apply(this, args);\n });\n return endSpansOnPromise([span], eachMessagePromise);\n });\n };\n };\n }\n\n private _getConsumerEachBatchPatch() {\n return (original: ConsumerRunConfig['eachBatch']) => {\n return function eachBatch(this: unknown, ...args: Parameters<EachBatchHandler>): Promise<void> {\n const payload = args[0];\n // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#topic-with-multiple-consumers\n // A batch pull aggregates messages from many producers, so the receiving span is a fresh root\n // trace and each processed message links back to its own producer span.\n const receivingSpan = startNewTrace(() =>\n startConsumerSpan({\n topic: payload.batch.topic,\n message: undefined,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n attributes: {\n [ATTR_MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n }),\n );\n\n return withActiveSpan(receivingSpan, () => {\n const spans: Span[] = [receivingSpan];\n payload.batch.messages.forEach((message: KafkaMessage) => {\n spans.push(\n startConsumerSpan({\n topic: payload.batch.topic,\n message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n links: getLinksFromHeaders(message.headers),\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n }),\n );\n });\n const batchMessagePromise: Promise<void> = original!.apply(this, args);\n return endSpansOnPromise(spans, batchMessagePromise);\n });\n };\n };\n }\n\n private _getProducerTransactionPatch() {\n const instrumentation = this;\n return (original: Producer['transaction']) => {\n return function transaction(\n this: Producer,\n ...args: Parameters<Producer['transaction']>\n ): ReturnType<Producer['transaction']> {\n const transactionSpan = startInactiveSpan({ name: 'transaction' });\n\n const transactionPromise = original.apply(this, args);\n\n transactionPromise\n .then((transaction: Transaction) => {\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalSend = transaction.send;\n transaction.send = function send(this: Transaction, ...args) {\n return withActiveSpan(transactionSpan, () => {\n const patched = instrumentation._getSendPatch()(originalSend);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n throw err;\n });\n });\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalSendBatch = transaction.sendBatch;\n transaction.sendBatch = function sendBatch(this: Transaction, ...args) {\n return withActiveSpan(transactionSpan, () => {\n const patched = instrumentation._getSendBatchPatch()(originalSendBatch);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n throw err;\n });\n });\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalCommit = transaction.commit;\n transaction.commit = function commit(this: Transaction, ...args) {\n const originCommitPromise = originalCommit.apply(this, args).then(() => {\n transactionSpan.setStatus({ code: SPAN_STATUS_OK });\n });\n return endSpansOnPromise([transactionSpan], originCommitPromise);\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalAbort = transaction.abort;\n transaction.abort = function abort(this: Transaction, ...args) {\n const originAbortPromise = originalAbort.apply(this, args);\n return endSpansOnPromise([transactionSpan], originAbortPromise);\n };\n })\n .catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n transactionSpan.end();\n });\n\n return transactionPromise;\n };\n };\n }\n\n private _getSendBatchPatch() {\n return (original: Producer['sendBatch'] | Transaction['sendBatch']) => {\n return function sendBatch(\n this: Producer | Transaction,\n ...args: Parameters<Producer['sendBatch']>\n ): ReturnType<Producer['sendBatch']> {\n const batch = args[0];\n const messages = batch.topicMessages || [];\n\n const spans: Span[] = [];\n\n messages.forEach((topicMessage: any) => {\n topicMessage.messages.forEach((message: any) => {\n spans.push(startProducerSpan(topicMessage.topic, message));\n });\n });\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return endSpansOnPromise(spans, origSendResult);\n };\n };\n }\n\n private _getSendPatch() {\n return (original: Producer['send'] | Transaction['send']) => {\n return function send(\n this: Producer | Transaction,\n ...args: Parameters<Producer['send']>\n ): ReturnType<Producer['send']> {\n const record = args[0];\n const spans: Span[] = record.messages.map((message: any) => {\n return startProducerSpan(record.topic, message);\n });\n\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return endSpansOnPromise(spans, origSendResult);\n };\n };\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","isWrapped","InstrumentationNodeModuleDefinition","instrumentation","getHeaderAsString","continueTrace","startConsumerSpan","MESSAGING_OPERATION_TYPE_VALUE_PROCESS","ATTR_MESSAGING_DESTINATION_PARTITION_ID","withActiveSpan","endSpansOnPromise","startNewTrace","MESSAGING_OPERATION_TYPE_VALUE_RECEIVE","ATTR_MESSAGING_BATCH_MESSAGE_COUNT","getLinksFromHeaders","startInactiveSpan","transaction","args","SPAN_STATUS_ERROR","SPAN_STATUS_OK","startProducerSpan"],"mappings":"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"}
@@ -13,11 +13,10 @@ const MESSAGING_OPERATION_TYPE_VALUE_PROCESS = "process";
13
13
  const MESSAGING_OPERATION_TYPE_VALUE_RECEIVE = "receive";
14
14
  const MESSAGING_OPERATION_TYPE_VALUE_SEND = "send";
15
15
  const MESSAGING_SYSTEM_VALUE_KAFKA = "kafka";
16
- const METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES = "messaging.client.consumed.messages";
17
- const METRIC_MESSAGING_CLIENT_OPERATION_DURATION = "messaging.client.operation.duration";
18
- const METRIC_MESSAGING_CLIENT_SENT_MESSAGES = "messaging.client.sent.messages";
19
- const METRIC_MESSAGING_PROCESS_DURATION = "messaging.process.duration";
16
+ const ATTR_ERROR_TYPE = "error.type";
17
+ const ERROR_TYPE_VALUE_OTHER = "_OTHER";
20
18
 
19
+ exports.ATTR_ERROR_TYPE = ATTR_ERROR_TYPE;
21
20
  exports.ATTR_MESSAGING_BATCH_MESSAGE_COUNT = ATTR_MESSAGING_BATCH_MESSAGE_COUNT;
22
21
  exports.ATTR_MESSAGING_DESTINATION_NAME = ATTR_MESSAGING_DESTINATION_NAME;
23
22
  exports.ATTR_MESSAGING_DESTINATION_PARTITION_ID = ATTR_MESSAGING_DESTINATION_PARTITION_ID;
@@ -27,12 +26,9 @@ exports.ATTR_MESSAGING_KAFKA_OFFSET = ATTR_MESSAGING_KAFKA_OFFSET;
27
26
  exports.ATTR_MESSAGING_OPERATION_NAME = ATTR_MESSAGING_OPERATION_NAME;
28
27
  exports.ATTR_MESSAGING_OPERATION_TYPE = ATTR_MESSAGING_OPERATION_TYPE;
29
28
  exports.ATTR_MESSAGING_SYSTEM = ATTR_MESSAGING_SYSTEM;
29
+ exports.ERROR_TYPE_VALUE_OTHER = ERROR_TYPE_VALUE_OTHER;
30
30
  exports.MESSAGING_OPERATION_TYPE_VALUE_PROCESS = MESSAGING_OPERATION_TYPE_VALUE_PROCESS;
31
31
  exports.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE = MESSAGING_OPERATION_TYPE_VALUE_RECEIVE;
32
32
  exports.MESSAGING_OPERATION_TYPE_VALUE_SEND = MESSAGING_OPERATION_TYPE_VALUE_SEND;
33
33
  exports.MESSAGING_SYSTEM_VALUE_KAFKA = MESSAGING_SYSTEM_VALUE_KAFKA;
34
- exports.METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES = METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES;
35
- exports.METRIC_MESSAGING_CLIENT_OPERATION_DURATION = METRIC_MESSAGING_CLIENT_OPERATION_DURATION;
36
- exports.METRIC_MESSAGING_CLIENT_SENT_MESSAGES = METRIC_MESSAGING_CLIENT_SENT_MESSAGES;
37
- exports.METRIC_MESSAGING_PROCESS_DURATION = METRIC_MESSAGING_PROCESS_DURATION;
38
34
  //# sourceMappingURL=semconv.js.map