Skip to content
This repository was archived by the owner on Nov 17, 2025. It is now read-only.

Commit aa65fc6

Browse files
feat(trace): add optional schema url to TracerProvider.getTracer (#129)
Co-authored-by: Valentin Marchaud <contact@vmarchaud.fr>
1 parent ae9bead commit aa65fc6

File tree

7 files changed

+99
-11
lines changed

7 files changed

+99
-11
lines changed

src/trace/NoopTracerProvider.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import { NoopTracer } from './NoopTracer';
1818
import { Tracer } from './tracer';
19+
import { TracerOptions } from './tracer_options';
1920
import { TracerProvider } from './tracer_provider';
2021

2122
/**
@@ -25,7 +26,11 @@ import { TracerProvider } from './tracer_provider';
2526
* All operations are no-op.
2627
*/
2728
export class NoopTracerProvider implements TracerProvider {
28-
getTracer(_name?: string, _version?: string): Tracer {
29+
getTracer(
30+
_name?: string,
31+
_version?: string,
32+
_options?: TracerOptions
33+
): Tracer {
2934
return new NoopTracer();
3035
}
3136
}

src/trace/ProxyTracer.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { NoopTracer } from './NoopTracer';
1919
import { Span } from './span';
2020
import { SpanOptions } from './SpanOptions';
2121
import { Tracer } from './tracer';
22+
import { TracerOptions } from './tracer_options';
2223

2324
const NOOP_TRACER = new NoopTracer();
2425

@@ -32,7 +33,8 @@ export class ProxyTracer implements Tracer {
3233
constructor(
3334
private _provider: TracerDelegator,
3435
public readonly name: string,
35-
public readonly version?: string
36+
public readonly version?: string,
37+
public readonly options?: TracerOptions
3638
) {}
3739

3840
startSpan(name: string, options?: SpanOptions, context?: Context): Span {
@@ -58,7 +60,7 @@ export class ProxyTracer implements Tracer {
5860
return this._delegate;
5961
}
6062

61-
const tracer = this._provider.getDelegateTracer(this.name, this.version);
63+
const tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);
6264

6365
if (!tracer) {
6466
return NOOP_TRACER;
@@ -70,5 +72,5 @@ export class ProxyTracer implements Tracer {
7072
}
7173

7274
export interface TracerDelegator {
73-
getDelegateTracer(name: string, version?: string): Tracer | undefined;
75+
getDelegateTracer(name: string, version?: string, options?: TracerOptions): Tracer | undefined;
7476
}

src/trace/ProxyTracerProvider.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { Tracer } from './tracer';
1818
import { TracerProvider } from './tracer_provider';
1919
import { ProxyTracer } from './ProxyTracer';
2020
import { NoopTracerProvider } from './NoopTracerProvider';
21+
import { TracerOptions } from './tracer_options';
2122

2223
const NOOP_TRACER_PROVIDER = new NoopTracerProvider();
2324

@@ -35,10 +36,10 @@ export class ProxyTracerProvider implements TracerProvider {
3536
/**
3637
* Get a {@link ProxyTracer}
3738
*/
38-
getTracer(name: string, version?: string): Tracer {
39+
getTracer(name: string, version?: string, options?: TracerOptions): Tracer {
3940
return (
40-
this.getDelegateTracer(name, version) ??
41-
new ProxyTracer(this, name, version)
41+
this.getDelegateTracer(name, version, options) ??
42+
new ProxyTracer(this, name, version, options)
4243
);
4344
}
4445

@@ -53,7 +54,11 @@ export class ProxyTracerProvider implements TracerProvider {
5354
this._delegate = delegate;
5455
}
5556

56-
getDelegateTracer(name: string, version?: string): Tracer | undefined {
57-
return this._delegate?.getTracer(name, version);
57+
getDelegateTracer(
58+
name: string,
59+
version?: string,
60+
options?: TracerOptions
61+
): Tracer | undefined {
62+
return this._delegate?.getTracer(name, version, options);
5863
}
5964
}

src/trace/tracer_options.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
/**
18+
* An interface describes additional metadata of a tracer.
19+
*/
20+
export interface TracerOptions {
21+
/**
22+
* The schemaUrl of the tracer or instrumentation library
23+
*/
24+
schemaUrl?: string;
25+
}

src/trace/tracer_provider.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
import { Tracer } from './tracer';
18+
import { TracerOptions } from './tracer_options';
1819

1920
/**
2021
* A registry for creating named {@link Tracer}s.
@@ -29,7 +30,8 @@ export interface TracerProvider {
2930
*
3031
* @param name The name of the tracer or instrumentation library.
3132
* @param version The version of the tracer or instrumentation library.
33+
* @param options The options of the tracer or instrumentation library.
3234
* @returns Tracer A Tracer with the given name and version
3335
*/
34-
getTracer(name: string, version?: string): Tracer;
36+
getTracer(name: string, version?: string, options?: TracerOptions): Tracer;
3537
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
import * as assert from 'assert';
18+
import { NoopTracer } from '../../src/trace/NoopTracer';
19+
import { NoopTracerProvider } from '../../src/trace/NoopTracerProvider';
20+
21+
describe('NoopTracerProvider', () => {
22+
it('should not crash', () => {
23+
const tracerProvider = new NoopTracerProvider();
24+
25+
assert.ok(tracerProvider.getTracer('tracer-name') instanceof NoopTracer);
26+
assert.ok(tracerProvider.getTracer('tracer-name', 'v1') instanceof NoopTracer);
27+
assert.ok(tracerProvider.getTracer('tracer-name', 'v1', {
28+
schemaUrl: 'https://opentelemetry.io/schemas/1.7.0'
29+
}) instanceof NoopTracer);
30+
});
31+
});

test/proxy-implementations/proxy-tracer.test.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,25 @@ describe('ProxyTracer', () => {
8181

8282
sandbox.assert.calledOnce(getTracerStub);
8383
assert.strictEqual(getTracerStub.firstCall.returnValue, tracer);
84-
assert.deepEqual(getTracerStub.firstCall.args, ['test', 'v0']);
84+
assert.deepStrictEqual(getTracerStub.firstCall.args, [
85+
'test',
86+
'v0',
87+
undefined,
88+
]);
89+
});
90+
91+
it('should return tracers directly from the delegate with schema url', () => {
92+
const tracer = provider.getTracer('test', 'v0', {
93+
schemaUrl: 'https://opentelemetry.io/schemas/1.7.0',
94+
});
95+
96+
sandbox.assert.calledOnce(getTracerStub);
97+
assert.strictEqual(getTracerStub.firstCall.returnValue, tracer);
98+
assert.deepStrictEqual(getTracerStub.firstCall.args, [
99+
'test',
100+
'v0',
101+
{ schemaUrl: 'https://opentelemetry.io/schemas/1.7.0' },
102+
]);
85103
});
86104
});
87105

0 commit comments

Comments
 (0)