Skip to content

Commit e012fe9

Browse files
committed
Merge branch 'main' into metrics-ff/bind
# Conflicts: # experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts
2 parents 933b0cc + 4e311bd commit e012fe9

File tree

11 files changed

+68
-56
lines changed

11 files changed

+68
-56
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ This is the JavaScript version of [OpenTelemetry](https://opentelemetry.io/), a
4949

5050
| API Version | Core version | Experimental Packages | Contrib Version |
5151
| ----------- |--------------| --------------------- |-------------------------|
52-
| 1.0.x | 1.x | 0.26.x | ------ |
52+
| 1.0.x | 1.x | 0.26.x | 0.26.x |
5353
| 1.0.x | 0.26.x | ----- | ------ |
5454
| 1.0.x | 0.25.x | ----- | ------ |
5555
| 1.0.x | 0.24.x | ----- | 0.24.x |

experimental/packages/opentelemetry-api-metrics/src/NoopMeterProvider.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Meter } from './types/Meter';
17+
import { Meter, MeterOptions } from './types/Meter';
1818
import { MeterProvider } from './types/MeterProvider';
1919
import { NOOP_METER } from './NoopMeter';
2020

@@ -23,7 +23,7 @@ import { NOOP_METER } from './NoopMeter';
2323
* for all calls to `getMeter`
2424
*/
2525
export class NoopMeterProvider implements MeterProvider {
26-
getMeter(_name?: string, _version?: string): Meter {
26+
getMeter(_name: string, _version?: string, _options?: MeterOptions): Meter {
2727
return NOOP_METER;
2828
}
2929
}

experimental/packages/opentelemetry-api-metrics/src/api/metrics.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Meter } from '../types/Meter';
17+
import { Meter, MeterOptions } from '../types/Meter';
1818
import { MeterProvider } from '../types/MeterProvider';
1919
import { NOOP_METER_PROVIDER } from '../NoopMeterProvider';
2020
import {
@@ -73,8 +73,8 @@ export class MetricsAPI {
7373
/**
7474
* Returns a meter from the global meter provider.
7575
*/
76-
public getMeter(name: string, version?: string): Meter {
77-
return this.getMeterProvider().getMeter(name, version);
76+
public getMeter(name: string, version?: string, options?: MeterOptions): Meter {
77+
return this.getMeterProvider().getMeter(name, version, options);
7878
}
7979

8080
/** Remove the global meter provider */

experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts

+10
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ import {
2727
} from './Metric';
2828
import { ObservableResult } from './ObservableResult';
2929

30+
/**
31+
* An interface describes additional metadata of a meter.
32+
*/
33+
export interface MeterOptions {
34+
/**
35+
* The schemaUrl of the meter or instrumentation library
36+
*/
37+
schemaUrl?: string;
38+
}
39+
3040
/**
3141
* An interface to allow the recording metrics.
3242
*

experimental/packages/opentelemetry-api-metrics/src/types/MeterProvider.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,20 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Meter } from './Meter';
17+
import { Meter, MeterOptions } from './Meter';
1818

1919
/**
2020
* A registry for creating named {@link Meter}s.
2121
*/
2222
export interface MeterProvider {
2323
/**
24-
* Returns a Meter, creating one if one with the given name and version is
25-
* not already created.
24+
* Returns a Meter, creating one if one with the given name, version, and
25+
* schemaUrl pair is not already created.
2626
*
2727
* @param name The name of the meter or instrumentation library.
2828
* @param version The version of the meter or instrumentation library.
29+
* @param options The options of the meter or instrumentation library.
2930
* @returns Meter A Meter with the given name and version
3031
*/
31-
getMeter(name: string, version?: string): Meter;
32+
getMeter(name: string, version?: string, options?: MeterOptions): Meter;
3233
}

experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts

+7-18
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,9 @@ describe('PrometheusExporter', () => {
227227
exporter = new PrometheusExporter({}, () => {
228228
meterProvider = new MeterProvider({
229229
interval: Math.pow(2, 31) - 1,
230-
});
231-
meter = meterProvider.getMeter('test-prometheus', '1', {
232230
exporter,
233231
});
232+
meter = meterProvider.getMeter('test-prometheus', '1');
234233
done();
235234
});
236235
});
@@ -362,25 +361,15 @@ describe('PrometheusExporter', () => {
362361
counter.add(20, { counterKey1: 'labelValue2' });
363362
counter.add(30, { counterKey1: 'labelValue3' });
364363
meterProvider.shutdown().then(() => {
364+
// exporter has been shut down along with meter provider.
365365
http
366366
.get('http://localhost:9464/metrics', res => {
367-
res.on('data', chunk => {
368-
const body = chunk.toString();
369-
const lines = body.split('\n');
370-
371-
assert.deepStrictEqual(lines, [
372-
'# HELP counter_total a test description',
373-
'# TYPE counter_total counter',
374-
`counter_total{counterKey1="labelValue1"} 10 ${mockedHrTimeMs}`,
375-
`counter_total{counterKey1="labelValue2"} 20 ${mockedHrTimeMs}`,
376-
`counter_total{counterKey1="labelValue3"} 30 ${mockedHrTimeMs}`,
377-
'',
378-
]);
379-
380-
done();
381-
});
367+
errorHandler(done)(new Error('unreachable'));
382368
})
383-
.on('error', errorHandler(done));
369+
.on('error', err => {
370+
assert(`${err}`.match('ECONNREFUSED'));
371+
done();
372+
});
384373
});
385374
});
386375

experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,17 @@ export class MeterProvider implements api.MeterProvider {
4848
*
4949
* @returns Meter A Meter with the given name and version
5050
*/
51-
getMeter(name: string, version?: string, config?: MeterConfig): Meter {
52-
const key = `${name}@${version || ''}`;
51+
getMeter(name: string, version?: string, options?: api.MeterOptions): Meter {
52+
const key = `${name}@${version ?? ''}:${options?.schemaUrl ?? ''}`;
5353
if (!this._meters.has(key)) {
5454
this._meters.set(
5555
key,
56-
new Meter({ name, version }, config || this._config)
56+
new Meter({
57+
name,
58+
version,
59+
// @ts-expect-error ts(2345) TODO: upgrade @opentelemetry/core InstrumentationLibrary definition
60+
schemaUrl: options?.schemaUrl
61+
}, this._config)
5762
);
5863
}
5964

experimental/packages/opentelemetry-sdk-metrics-base/src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { Processor } from './export/Processor';
2020
import { MetricExporter } from './export/types';
2121

2222
/** MeterConfig provides an interface for configuring a Meter. */
23-
export interface MeterConfig {
23+
export interface MeterConfig extends api.MeterOptions {
2424
/** Metric exporter. */
2525
exporter?: MetricExporter;
2626

experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts

-23
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,13 @@ import { Resource } from '@opentelemetry/resources';
2121
import * as assert from 'assert';
2222
import * as sinon from 'sinon';
2323
import {
24-
Aggregator,
2524
CounterMetric,
2625
Histogram,
2726
LastValue,
2827
LastValueAggregator,
2928
Meter,
3029
MeterProvider,
3130
Metric,
32-
MetricDescriptor,
3331
MetricKind,
3432
MetricRecord,
3533
Sum,
@@ -40,7 +38,6 @@ import {
4038
import { BatchObserver } from '../src/BatchObserver';
4139
import { BatchObserverResult } from '../src/BatchObserverResult';
4240
import { SumAggregator } from '../src/export/aggregators';
43-
import { Processor } from '../src/export/Processor';
4441
import { ObservableCounterMetric } from '../src/ObservableCounterMetric';
4542
import { ObservableUpDownCounterMetric } from '../src/ObservableUpDownCounterMetric';
4643
import { hashLabels } from '../src/Utils';
@@ -1364,28 +1361,8 @@ describe('Meter', () => {
13641361
assert.strictEqual(value, 10);
13651362
});
13661363
});
1367-
1368-
it('should allow custom processor', () => {
1369-
const customMeter = new MeterProvider().getMeter('custom-processor', '*', {
1370-
processor: new CustomProcessor(),
1371-
});
1372-
assert.throws(() => {
1373-
const histogram = customMeter.createHistogram('myHistogram') as HistogramMetric;
1374-
histogram.bind({}).record(1);
1375-
}, /aggregatorFor method not implemented/);
1376-
});
13771364
});
13781365

1379-
class CustomProcessor extends Processor {
1380-
process(record: MetricRecord): void {
1381-
throw new Error('process method not implemented.');
1382-
}
1383-
1384-
aggregatorFor(metricKind: MetricDescriptor): Aggregator {
1385-
throw new Error('aggregatorFor method not implemented.');
1386-
}
1387-
}
1388-
13891366
function ensureMetric(metric: MetricRecord, name?: string, value?: LastValue) {
13901367
assert.ok(metric.aggregator instanceof LastValueAggregator);
13911368
const lastValue = metric.aggregator.toPoint().value;

experimental/packages/opentelemetry-sdk-metrics-base/test/MeterProvider.test.ts

+30-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,15 @@
1616

1717
import * as assert from 'assert';
1818
import * as sinon from 'sinon';
19-
import { MeterProvider, Meter, CounterMetric } from '../src';
19+
import {
20+
MeterProvider,
21+
Meter,
22+
CounterMetric,
23+
MetricRecord,
24+
MetricDescriptor,
25+
Aggregator,
26+
Processor,
27+
} from '../src';
2028

2129
describe('MeterProvider', () => {
2230
afterEach(() => {
@@ -74,6 +82,27 @@ describe('MeterProvider', () => {
7482
const meter4 = provider.getMeter('meter3', 'ver2');
7583
assert.notEqual(meter3, meter4);
7684
});
85+
86+
it('should allow custom processor', () => {
87+
class CustomProcessor extends Processor {
88+
process(record: MetricRecord): void {
89+
throw new Error('process method not implemented.');
90+
}
91+
92+
aggregatorFor(metricKind: MetricDescriptor): Aggregator {
93+
throw new Error('aggregatorFor method not implemented.');
94+
}
95+
}
96+
97+
const meter = new MeterProvider({
98+
processor: new CustomProcessor(),
99+
}).getMeter('custom-processor', '*');
100+
101+
assert.throws(() => {
102+
const histogram = meter.createHistogram('myHistogram');
103+
histogram.record(1);
104+
}, /aggregatorFor method not implemented/);
105+
});
77106
});
78107

79108
describe('shutdown()', () => {

packages/opentelemetry-core/src/common/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export interface ShimWrapped extends Function {
4747
export interface InstrumentationLibrary {
4848
readonly name: string;
4949
readonly version?: string;
50+
readonly schemaUrl?: string;
5051
}
5152

5253
/** Defines an error handler function */

0 commit comments

Comments
 (0)