Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix: handle multiple values in env var
  • Loading branch information
david-luna committed Mar 26, 2025
commit cb2ad742e6667788bd8e6cc7eaa165ec633b3d63
9 changes: 6 additions & 3 deletions packages/opentelemetry-node/lib/instrumentations.js
Original file line number Diff line number Diff line change
Expand Up @@ -260,10 +260,13 @@ function getInstrumentations(opts = {}) {
);

// `@opentelemetry/instrumentation-http` defaults to emit old semconv attributes.
// Set the default to stable semconv if not defined by the user
if (!('OTEL_SEMCONV_STABILITY_OPT_IN' in process.env)) {
process.env.OTEL_SEMCONV_STABILITY_OPT_IN = 'http';
// Set the default to stable HTTP semconv if not defined by the user (http, http/dup)
const semconvOptIn =
getStringListFromEnv('OTEL_SEMCONV_STABILITY_OPT_IN') || [];
if (!semconvOptIn.some((v) => v.startsWith('http'))) {
semconvOptIn.push('http');
}
process.env.OTEL_SEMCONV_STABILITY_OPT_IN = semconvOptIn.join(',');

Object.keys(instrumentationsMap).forEach((name) => {
// Skip if env has an `enabled` list and does not include this one
Expand Down
28 changes: 24 additions & 4 deletions packages/opentelemetry-node/test/instr-http.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const {runTestFixtures, filterOutGcpDetectorSpans} = require('./testutils');
/** @type {import('./testutils').TestFixture[]} */
const testFixtures = [
{
name: 'http.get (stable semconv as default)',
name: 'http.get (stable HTTP semconv if env not set)',
args: ['./fixtures/use-http-get.js'],
cwd: __dirname,
env: {
Expand All @@ -30,7 +30,27 @@ const testFixtures = [
},
},
{
name: 'https.get (stable semconv as default)',
name: 'http.get (stable HTTP semconv if env set with other values)',
args: ['./fixtures/use-http-get.js'],
cwd: __dirname,
env: {
NODE_OPTIONS: '--require=@elastic/opentelemetry-node',
OTEL_SEMCONV_STABILITY_OPT_IN: 'db/dup,foo',
},
// verbose: true,
checkTelemetry: (t, col) => {
const spans = filterOutGcpDetectorSpans(col.sortedSpans);
t.equal(spans.length, 1);
const span = spans[0];
t.equal(span.scope.name, '@opentelemetry/instrumentation-http');
t.equal(span.name, 'GET');
t.equal(span.kind, 'SPAN_KIND_CLIENT');
t.equal(span.attributes['http.url'], undefined);
t.equal(span.attributes['url.full'], 'http://www.google.com/');
},
},
{
name: 'https.get (stable HTTP semconv if env not set)',
args: ['./fixtures/use-https-get.js'],
cwd: __dirname,
env: {
Expand All @@ -49,7 +69,7 @@ const testFixtures = [
},
},
{
name: 'http.get (dual mode semconv)',
name: 'http.get (dual HTTP semconv if user set in env)',
args: ['./fixtures/use-http-get.js'],
cwd: __dirname,
env: {
Expand All @@ -69,7 +89,7 @@ const testFixtures = [
},
},
{
name: 'https.get (dual mode semconv)',
name: 'https.get (dual HTTP semconv if user set in env)',
args: ['./fixtures/use-https-get.js'],
cwd: __dirname,
env: {
Expand Down
Loading