Skip to content

Commit

Permalink
fix(tracing): make sure metadata is kept
Browse files Browse the repository at this point in the history
  • Loading branch information
mentos1386 committed Mar 29, 2022
1 parent d8d5b9b commit c34ae56
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions src/tracing/decorators/span.ts
@@ -1,4 +1,5 @@
import { Span as ApiSpan, SpanStatusCode, trace } from '@opentelemetry/api';
import { copyMetadataFromFunctionToFunction } from '../../opentelemetry.utils';

const recordException = (span: ApiSpan, error: any) => {
span.recordException(error);
Expand All @@ -7,15 +8,14 @@ const recordException = (span: ApiSpan, error: any) => {

export function Span(name?: string) {
return (target: any, propertyKey: string, propertyDescriptor: PropertyDescriptor) => {
const method = propertyDescriptor.value;
// eslint-disable-next-line no-param-reassign
propertyDescriptor.value = function PropertyDescriptor(...args: any[]) {
const originalFunction = propertyDescriptor.value;
const wrappedFunction = function PropertyDescriptor(...args: any[]) {
const tracer = trace.getTracer('default');
const spanName = name || `${target.constructor.name}.${propertyKey}`;

return tracer.startActiveSpan(spanName, span => {
if (method.constructor.name === 'AsyncFunction') {
return method
if (originalFunction.constructor.name === 'AsyncFunction') {
return originalFunction
.apply(this, args)
.catch(error => {
recordException(span, error);
Expand All @@ -28,7 +28,7 @@ export function Span(name?: string) {
}

try {
return method.apply(this, args);
return originalFunction.apply(this, args);
} catch (error) {
recordException(span, error);
// Throw error to propagate it further
Expand All @@ -38,5 +38,9 @@ export function Span(name?: string) {
}
});
};
// eslint-disable-next-line no-param-reassign
propertyDescriptor.value = wrappedFunction;

copyMetadataFromFunctionToFunction(originalFunction, wrappedFunction);
};
}

0 comments on commit c34ae56

Please sign in to comment.