Skip to content

Commit d6bf541

Browse files
committed
feat(opentelemetry): Add new @sentry/opentelemetry package
1 parent e507110 commit d6bf541

File tree

84 files changed

+3584
-945
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+3584
-945
lines changed

.craft.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ targets:
2424
- name: npm
2525
id: '@sentry/replay'
2626
includeNames: /^sentry-replay-\d.*\.tgz$/
27+
## 1.6. OpenTelemetry package
28+
- name: npm
29+
id: '@sentry/opentelemetry'
30+
includeNames: /^sentry-opentelemetry-\d.*\.tgz$/
2731

2832
## 2. Browser & Node SDKs
2933
- name: npm

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"packages/node-integration-tests",
6161
"packages/node-experimental",
6262
"packages/opentelemetry-node",
63+
"packages/opentelemetry",
6364
"packages/react",
6465
"packages/remix",
6566
"packages/replay",

packages/node-experimental/package.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,26 @@
2424
},
2525
"dependencies": {
2626
"@opentelemetry/api": "~1.6.0",
27-
"@opentelemetry/core": "~1.17.0",
28-
"@opentelemetry/context-async-hooks": "~1.17.0",
29-
"@opentelemetry/instrumentation": "~0.43.0",
30-
"@opentelemetry/instrumentation-express": "~0.33.1",
31-
"@opentelemetry/instrumentation-fastify": "~0.32.3",
32-
"@opentelemetry/instrumentation-graphql": "~0.35.1",
33-
"@opentelemetry/instrumentation-http": "~0.43.0",
34-
"@opentelemetry/instrumentation-mongodb": "~0.37.0",
35-
"@opentelemetry/instrumentation-mongoose": "~0.33.1",
36-
"@opentelemetry/instrumentation-mysql": "~0.34.1",
37-
"@opentelemetry/instrumentation-mysql2": "~0.34.1",
38-
"@opentelemetry/instrumentation-nestjs-core": "~0.33.1",
39-
"@opentelemetry/instrumentation-pg": "~0.36.1",
40-
"@opentelemetry/resources": "~1.17.0",
41-
"@opentelemetry/sdk-trace-base": "~1.17.0",
42-
"@opentelemetry/semantic-conventions": "~1.17.0",
43-
"@prisma/instrumentation": "~5.3.1",
27+
"@opentelemetry/core": "~1.17.1",
28+
"@opentelemetry/context-async-hooks": "~1.17.1",
29+
"@opentelemetry/instrumentation": "0.44.0",
30+
"@opentelemetry/instrumentation-express": "0.33.2",
31+
"@opentelemetry/instrumentation-fastify": "0.32.3",
32+
"@opentelemetry/instrumentation-graphql": "0.35.2",
33+
"@opentelemetry/instrumentation-http": "0.44.0",
34+
"@opentelemetry/instrumentation-mongodb": "0.37.1",
35+
"@opentelemetry/instrumentation-mongoose": "0.33.2",
36+
"@opentelemetry/instrumentation-mysql": "0.34.2",
37+
"@opentelemetry/instrumentation-mysql2": "0.34.2",
38+
"@opentelemetry/instrumentation-nestjs-core": "0.33.2",
39+
"@opentelemetry/instrumentation-pg": "0.36.2",
40+
"@opentelemetry/resources": "~1.17.1",
41+
"@opentelemetry/sdk-trace-base": "~1.17.1",
42+
"@opentelemetry/semantic-conventions": "~1.17.1",
43+
"@prisma/instrumentation": "5.4.2",
4444
"@sentry/core": "7.73.0",
4545
"@sentry/node": "7.73.0",
46-
"@sentry/opentelemetry-node": "7.73.0",
46+
"@sentry/opentelemetry": "7.73.0",
4747
"@sentry/types": "7.73.0",
4848
"@sentry/utils": "7.73.0",
4949
"opentelemetry-instrumentation-fetch-node": "1.1.0"

packages/node-experimental/src/constants.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

packages/node-experimental/src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ export { init } from './sdk/init';
1111
export { INTEGRATIONS as Integrations };
1212
export { getAutoPerformanceIntegrations } from './integrations/getAutoPerformanceIntegrations';
1313
export * as Handlers from './sdk/handlers';
14-
export * from './sdk/trace';
15-
export { getActiveSpan } from './utils/getActiveSpan';
16-
export { getCurrentHub, getHubFromCarrier } from './sdk/hub';
1714
export type { Span } from './types';
1815

16+
export { startSpan, startInactiveSpan, getCurrentHub, getActiveSpan } from '@sentry/opentelemetry';
17+
1918
export {
2019
makeNodeTransport,
2120
defaultStackParser,

packages/node-experimental/src/integrations/http.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,14 @@ import { SpanKind } from '@opentelemetry/api';
33
import { registerInstrumentations } from '@opentelemetry/instrumentation';
44
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
55
import { hasTracingEnabled, isSentryRequestUrl } from '@sentry/core';
6+
import { _INTERNAL, getCurrentHub, getSpanKind, setSpanMetadata } from '@sentry/opentelemetry';
67
import type { EventProcessor, Hub, Integration } from '@sentry/types';
78
import { stringMatchesSomePattern } from '@sentry/utils';
89
import type { ClientRequest, IncomingMessage, ServerResponse } from 'http';
910

10-
import { OTEL_ATTR_ORIGIN } from '../constants';
11-
import { setSpanMetadata } from '../opentelemetry/spanData';
12-
import type { NodeExperimentalClient } from '../sdk/client';
13-
import { getCurrentHub } from '../sdk/hub';
14-
import { getRequestSpanData } from '../utils/getRequestSpanData';
11+
import type { NodeExperimentalClient } from '../types';
12+
import { addOriginToSpan } from '../utils/addOriginToSpan';
1513
import { getRequestUrl } from '../utils/getRequestUrl';
16-
import { getSpanKind } from '../utils/getSpanKind';
1714

1815
interface HttpOptions {
1916
/**
@@ -148,7 +145,7 @@ export class Http implements Integration {
148145

149146
/** Update the span with data we need. */
150147
private _updateSpan(span: Span, request: ClientRequest | IncomingMessage): void {
151-
span.setAttribute(OTEL_ATTR_ORIGIN, 'auto.http.otel.http');
148+
addOriginToSpan(span, 'auto.http.otel.http');
152149

153150
if (getSpanKind(span) === SpanKind.SERVER) {
154151
setSpanMetadata(span, { request });
@@ -161,7 +158,7 @@ export class Http implements Integration {
161158
return;
162159
}
163160

164-
const data = getRequestSpanData(span);
161+
const data = _INTERNAL.getRequestSpanData(span);
165162
getCurrentHub().addBreadcrumb(
166163
{
167164
category: 'http',

packages/node-experimental/src/integrations/node-fetch.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ import type { Span } from '@opentelemetry/api';
22
import { SpanKind } from '@opentelemetry/api';
33
import { registerInstrumentations } from '@opentelemetry/instrumentation';
44
import { hasTracingEnabled } from '@sentry/core';
5+
import { _INTERNAL, getCurrentHub, getSpanKind } from '@sentry/opentelemetry';
56
import type { EventProcessor, Hub, Integration } from '@sentry/types';
67
import { FetchInstrumentation } from 'opentelemetry-instrumentation-fetch-node';
78

8-
import { OTEL_ATTR_ORIGIN } from '../constants';
9-
import type { NodeExperimentalClient } from '../sdk/client';
10-
import { getCurrentHub } from '../sdk/hub';
11-
import { getRequestSpanData } from '../utils/getRequestSpanData';
12-
import { getSpanKind } from '../utils/getSpanKind';
9+
import type { NodeExperimentalClient } from '../types';
10+
import { addOriginToSpan } from '../utils/addOriginToSpan';
1311

1412
interface NodeFetchOptions {
1513
/**
@@ -102,7 +100,7 @@ export class NodeFetch implements Integration {
102100

103101
/** Update the span with data we need. */
104102
private _updateSpan(span: Span): void {
105-
span.setAttribute(OTEL_ATTR_ORIGIN, 'auto.http.otel.node_fetch');
103+
addOriginToSpan(span, 'auto.http.otel.node_fetch');
106104
}
107105

108106
/** Add a breadcrumb for outgoing requests. */
@@ -111,7 +109,7 @@ export class NodeFetch implements Integration {
111109
return;
112110
}
113111

114-
const data = getRequestSpanData(span);
112+
const data = _INTERNAL.getRequestSpanData(span);
115113
getCurrentHub().addBreadcrumb({
116114
category: 'http',
117115
data: {

packages/node-experimental/src/opentelemetry/contextManager.ts

Lines changed: 0 additions & 37 deletions
This file was deleted.

packages/node-experimental/src/opentelemetry/spanProcessor.ts

Lines changed: 0 additions & 99 deletions
This file was deleted.
Lines changed: 4 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,7 @@
1-
import type { Tracer } from '@opentelemetry/api';
2-
import { trace } from '@opentelemetry/api';
3-
import type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
4-
import type { EventHint, Scope } from '@sentry/node';
51
import { NodeClient, SDK_VERSION } from '@sentry/node';
6-
import type { Event } from '@sentry/types';
7-
8-
import type {
9-
NodeExperimentalClient as NodeExperimentalClientInterface,
10-
NodeExperimentalClientOptions,
11-
} from '../types';
12-
import { NodeExperimentalScope } from './scope';
13-
14-
/**
15-
* A client built on top of the NodeClient, which provides some otel-specific things on top.
16-
*/
17-
export class NodeExperimentalClient extends NodeClient implements NodeExperimentalClientInterface {
18-
public traceProvider: BasicTracerProvider | undefined;
19-
private _tracer: Tracer | undefined;
2+
import { wrapClientClass } from '@sentry/opentelemetry';
203

4+
class NodeExperimentalBaseClient extends NodeClient {
215
public constructor(options: ConstructorParameters<typeof NodeClient>[0]) {
226
options._metadata = options._metadata || {};
237
options._metadata.sdk = options._metadata.sdk || {
@@ -33,56 +17,6 @@ export class NodeExperimentalClient extends NodeClient implements NodeExperiment
3317

3418
super(options);
3519
}
36-
37-
/** Get the OTEL tracer. */
38-
public get tracer(): Tracer {
39-
if (this._tracer) {
40-
return this._tracer;
41-
}
42-
43-
const name = '@sentry/node-experimental';
44-
const version = SDK_VERSION;
45-
const tracer = trace.getTracer(name, version);
46-
this._tracer = tracer;
47-
48-
return tracer;
49-
}
50-
51-
/**
52-
* Get the options for the node preview client.
53-
*/
54-
public getOptions(): NodeExperimentalClientOptions {
55-
// Just a type-cast, basically
56-
return super.getOptions();
57-
}
58-
59-
/**
60-
* @inheritDoc
61-
*/
62-
public async flush(timeout?: number): Promise<boolean> {
63-
const provider = this.traceProvider;
64-
const spanProcessor = provider?.activeSpanProcessor;
65-
66-
if (spanProcessor) {
67-
await spanProcessor.forceFlush();
68-
}
69-
70-
return super.flush(timeout);
71-
}
72-
73-
/**
74-
* Extends the base `_prepareEvent` so that we can properly handle `captureContext`.
75-
* This uses `Scope.clone()`, which we need to replace with `NodeExperimentalScope.clone()` for this client.
76-
*/
77-
protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {
78-
let actualScope = scope;
79-
80-
// Remove `captureContext` hint and instead clone already here
81-
if (hint && hint.captureContext) {
82-
actualScope = NodeExperimentalScope.clone(scope);
83-
delete hint.captureContext;
84-
}
85-
86-
return super._prepareEvent(event, hint, actualScope);
87-
}
8820
}
21+
22+
export const NodeExperimentalClient = wrapClientClass(NodeExperimentalBaseClient);

0 commit comments

Comments
 (0)