Skip to content

Commit 4ac3613

Browse files
committed
feat: extract inbound W3C trace context in HTTP server
When an inbound request carries traceparent/tracestate headers, extract them via propagation.extract() and scope the entire request processing under that context. This connects cloudserver spans to upstream callers (e.g. NGINX, Beyla) as a single distributed trace. Issue: CLDSRV-884
1 parent f5f3bda commit 4ac3613

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

lib/server.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ const arsenal = require('arsenal');
66
const { RedisClient, StatsClient } = arsenal.metrics;
77
const monitoringClient = require('./utilities/monitoringHandler');
88

9+
const enableOtel = process.env.ENABLE_OTEL === 'true';
10+
const otelApi = enableOtel ? require('@opentelemetry/api') : null;
11+
912
const logger = require('./utilities/logger');
1013
const { internalHandlers } = require('./utilities/internalHandlers');
1114
const { clientCheck, healthcheckHandler } = require('./utilities/healthcheckHandler');
@@ -203,7 +206,23 @@ class S3Server {
203206
vault,
204207
},
205208
};
206-
arsenal.s3routes.routes(req, res, params, logger, this.config);
209+
210+
// Extract inbound W3C trace context (traceparent/tracestate) and
211+
// run the entire request within it so that spans created downstream
212+
// are children of the caller's trace.
213+
if (enableOtel && req.headers.traceparent) {
214+
const traceHeaders = { traceparent: req.headers.traceparent };
215+
if (req.headers.tracestate) {
216+
traceHeaders.tracestate = req.headers.tracestate;
217+
}
218+
const remoteContext = otelApi.propagation.extract(
219+
otelApi.context.active(), traceHeaders);
220+
return otelApi.context.with(remoteContext, () => {
221+
arsenal.s3routes.routes(req, res, params, logger, this.config);
222+
});
223+
}
224+
225+
return arsenal.s3routes.routes(req, res, params, logger, this.config);
207226
}
208227

209228
/**

0 commit comments

Comments
 (0)