v.1.17.0
@opentelemetry/instrumentation-express version is 0.33.1
What version of Node are you using?
v16.18.1
What did you do?
I applied middlewares to express.Router via variadic arguments and array, and instrumentation only seems to record spans for the latter of registered middlewares.
I will provide as much details as I possibly can in the "Additional context" section.
What did you expect to see?
span for MiddlewareA, ...B, ...C, ...D.
What did you see instead?
span for MiddlewareD
Additional context
Case # 1
const apiRouter = express.Router()
const middlewareA0 = async (req, res, next) => {
await wait(35)
next()
}
const middlewareA = async (req, res, next) => {
await wait(50)
next()
}
const middlewareB = async (req, res, next) => {
await wait(25)
next()
}
const middlewareC = async (req, res, next) => {
await wait(100)
next()
}
const middlewareD = async (req, res, next) => {
await wait(70)
next()
}
/* any of the following ways of registering middlewares yields
same result - span is recorded only for "middlewareD" */
apiRouter.use(middlewareA0, [middlewareA, middlewareB, middlewareC, middlewareD])
// or
apiRouter.use([middlewareA, middlewareB, middlewareC, middlewareD])
// or
apiRouter.use(...[middlewareA, middlewareB, middlewareC, middlewareD])
// replace
apiRouter.use([middlewareA, middlewareB, middlewareC, middlewareD])
apiOrdersRouter.use(middlewareE1, middlewareE2, middlewareE3)
// with
for (const m of [middlewareE1, middlewareE2, middlewareE3]) {
apiOrdersRouter.use(m)
}
for (const m of [middlewareA, middlewareB, middlewareC, middlewareD]) {
apiRouter.use(m)
}
The result is behavior, expected to be with other ways of registering middleware too:
What version of OpenTelemetry are you using?
v.1.17.0
@opentelemetry/instrumentation-express
version is 0.33.1What version of Node are you using?
v16.18.1
What did you do?
I applied middlewares to
express.Router
via variadic arguments and array, and instrumentation only seems to record spans for the latter of registered middlewares.I will provide as much details as I possibly can in the "Additional context" section.
What did you expect to see?
span for
MiddlewareA
,...B
,...C
,...D
.What did you see instead?
span for
MiddlewareD
Additional context
Case # 1
Result:
Case # 2
Potential workaround
The result is behavior, expected to be with other ways of registering middleware too: