Skip to content

Commit aabc5f6

Browse files
legendecasdyladan
andauthored
feat(sdk-metrics-base): async instruments callback timeout (#2742)
Co-authored-by: Daniel Dyla <[email protected]>
1 parent 65fbb2f commit aabc5f6

File tree

26 files changed

+402
-152
lines changed

26 files changed

+402
-152
lines changed

experimental/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ All notable changes to experimental packages in this project will be documented
1313

1414
* feat(exporters): update proto version and use otlp-transformer #2929 @pichlermarc
1515
* fix(sdk-metrics-base): misbehaving aggregation temporality selector tolerance #2958 @legendecas
16+
* feat(sdk-metrics-base): async instruments callback timeout #2742 @legendecas
1617

1718
### :bug: (Bug Fix)
1819

experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,9 @@ const testOTLPMetricExporter = (params: TestParams) =>
144144
histogram.record(7);
145145
histogram.record(14);
146146

147-
metrics = await collect();
147+
const { resourceMetrics, errors } = await collect();
148+
assert.strictEqual(errors.length, 0);
149+
metrics = resourceMetrics;
148150
});
149151

150152
afterEach(async () => {

experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ describe('OTLPMetricExporter - web', () => {
6666
histogram.record(7);
6767
histogram.record(14);
6868

69-
metrics = await collect();
69+
const { resourceMetrics, errors } = await collect();
70+
assert.strictEqual(errors.length, 0);
71+
metrics = resourceMetrics;
7072

7173
// Need to stub/spy on the underlying logger as the "diag" instance is global
7274
debugStub = sinon.stub();

experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/common/CollectorMetricExporter.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ describe('OTLPMetricExporter - common', () => {
7676
);
7777
counter.add(1);
7878

79-
metrics = await collect();
79+
const { resourceMetrics, errors } = await collect();
80+
assert.strictEqual(errors.length, 0);
81+
metrics = resourceMetrics;
8082
});
8183

8284
it('should create an instance', () => {

experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ describe('OTLPMetricExporter - node with json over http', () => {
173173
histogram.record(7);
174174
histogram.record(14);
175175

176-
metrics = await collect();
176+
const { resourceMetrics, errors } = await collect();
177+
assert.strictEqual(errors.length, 0);
178+
metrics = resourceMetrics;
177179
});
178180

179181
it('should open the connection', done => {

experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ describe('OTLPMetricExporter - node with proto over http', () => {
125125
histogram.record(7);
126126
histogram.record(14);
127127

128-
metrics = await collect();
128+
const { resourceMetrics, errors } = await collect();
129+
assert.strictEqual(errors.length, 0);
130+
metrics = resourceMetrics;
129131
});
130132

131133
afterEach(async () => {

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,12 @@ export class PrometheusExporter extends MetricReader {
191191
response.setHeader('content-type', 'text/plain');
192192
this.collect()
193193
.then(
194-
resourceMetrics => {
195-
let result = NO_REGISTERED_METRICS;
196-
if (resourceMetrics != null) {
197-
result = this._serializer.serialize(resourceMetrics);
194+
collectionResult => {
195+
const { resourceMetrics, errors } = collectionResult;
196+
if (errors.length) {
197+
diag.error('PrometheusExporter: metrics collection errors', ...errors);
198198
}
199+
let result = this._serializer.serialize(resourceMetrics);
199200
if (result === '') {
200201
result = NO_REGISTERED_METRICS;
201202
}

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ describe('PrometheusSerializer', () => {
7777
const counter = meter.createCounter('test_total');
7878
counter.add(1, attributes);
7979

80-
const resourceMetrics = await reader.collect();
81-
assert(resourceMetrics != null);
80+
const { resourceMetrics, errors } = await reader.collect();
81+
assert.strictEqual(errors.length, 0);
8282
assert.strictEqual(resourceMetrics.scopeMetrics.length, 1);
8383
assert.strictEqual(resourceMetrics.scopeMetrics[0].metrics.length, 1);
8484
const metric = resourceMetrics.scopeMetrics[0].metrics[0];
@@ -120,8 +120,8 @@ describe('PrometheusSerializer', () => {
120120
const histogram = meter.createHistogram('test');
121121
histogram.record(5, attributes);
122122

123-
const resourceMetrics = await reader.collect();
124-
assert(resourceMetrics != null);
123+
const { resourceMetrics, errors } = await reader.collect();
124+
assert.strictEqual(errors.length, 0);
125125
assert.strictEqual(resourceMetrics.scopeMetrics.length, 1);
126126
assert.strictEqual(resourceMetrics.scopeMetrics[0].metrics.length, 1);
127127
const metric = resourceMetrics.scopeMetrics[0].metrics[0];
@@ -178,8 +178,8 @@ describe('PrometheusSerializer', () => {
178178
counter.add(1, { val: '1' });
179179
counter.add(1, { val: '2' });
180180

181-
const resourceMetrics = await reader.collect();
182-
assert(resourceMetrics != null);
181+
const { resourceMetrics, errors } = await reader.collect();
182+
assert.strictEqual(errors.length, 0);
183183
assert.strictEqual(resourceMetrics.scopeMetrics.length, 1);
184184
assert.strictEqual(resourceMetrics.scopeMetrics[0].metrics.length, 1);
185185
const scopeMetrics = resourceMetrics.scopeMetrics[0];
@@ -230,8 +230,8 @@ describe('PrometheusSerializer', () => {
230230

231231
histogram.record(5, { val: '2' });
232232

233-
const resourceMetrics = await reader.collect();
234-
assert(resourceMetrics != null);
233+
const { resourceMetrics, errors } = await reader.collect();
234+
assert.strictEqual(errors.length, 0);
235235
assert.strictEqual(resourceMetrics.scopeMetrics.length, 1);
236236
assert.strictEqual(resourceMetrics.scopeMetrics[0].metrics.length, 1);
237237
const scopeMetrics = resourceMetrics.scopeMetrics[0];
@@ -275,8 +275,8 @@ describe('PrometheusSerializer', () => {
275275
const counter = meter.createCounter(name);
276276
counter.add(1);
277277

278-
const resourceMetrics = await reader.collect();
279-
assert(resourceMetrics != null);
278+
const { resourceMetrics, errors } = await reader.collect();
279+
assert.strictEqual(errors.length, 0);
280280
assert.strictEqual(resourceMetrics.scopeMetrics.length, 1);
281281
assert.strictEqual(resourceMetrics.scopeMetrics[0].metrics.length, 1);
282282
const metric = resourceMetrics.scopeMetrics[0].metrics[0];
@@ -314,8 +314,8 @@ describe('PrometheusSerializer', () => {
314314
const counter = meter.createUpDownCounter(name);
315315
fn(counter);
316316

317-
const resourceMetrics = await reader.collect();
318-
assert(resourceMetrics != null);
317+
const { resourceMetrics, errors } = await reader.collect();
318+
assert.strictEqual(errors.length, 0);
319319
assert.strictEqual(resourceMetrics.scopeMetrics.length, 1);
320320
assert.strictEqual(resourceMetrics.scopeMetrics[0].metrics.length, 1);
321321
const metric = resourceMetrics.scopeMetrics[0].metrics[0];

experimental/packages/opentelemetry-sdk-metrics-base/src/export/MetricData.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ export interface ResourceMetrics {
6666
scopeMetrics: ScopeMetrics[];
6767
}
6868

69+
export interface CollectionResult {
70+
resourceMetrics: ResourceMetrics;
71+
errors: unknown[];
72+
}
73+
6974
/**
7075
* The aggregated point data type.
7176
*/

experimental/packages/opentelemetry-sdk-metrics-base/src/export/MetricProducer.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { ResourceMetrics } from './MetricData';
17+
import { CollectionResult } from './MetricData';
18+
19+
export interface MetricCollectOptions {
20+
timeoutMillis?: number;
21+
}
1822

1923
/**
2024
* This is a public interface that represent an export state of a MetricReader.
2125
*/
2226
export interface MetricProducer {
23-
collect(): Promise<ResourceMetrics>;
27+
collect(options?: MetricCollectOptions): Promise<CollectionResult>;
2428
}

0 commit comments

Comments
 (0)