Skip to content

Commit 413edb5

Browse files
authored
feat: Add types for Collector Metric Exporter (#1271)
1 parent 46ce535 commit 413edb5

File tree

6 files changed

+140
-25
lines changed

6 files changed

+140
-25
lines changed

packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import { CollectorTraceExporterBase } from '../../CollectorTraceExporterBase';
1818
import { ReadableSpan } from '@opentelemetry/tracing';
1919
import { toCollectorExportTraceServiceRequest } from '../../transform';
20-
import { CollectorExporterConfigBrowser } from '../../types';
20+
import { CollectorExporterConfigBrowser } from './types';
2121
import * as collectorTypes from '../../types';
2222

2323
const DEFAULT_COLLECTOR_URL = 'http://localhost:55680/v1/trace';
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+
import { CollectorExporterConfigBase } from '../../types';
18+
19+
/**
20+
* Collector Exporter Config for Web
21+
*/
22+
export interface CollectorExporterConfigBrowser
23+
extends CollectorExporterConfigBase {
24+
headers?: { [key: string]: string };
25+
}

packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ import * as collectorTypes from '../../types';
2121

2222
import { ReadableSpan } from '@opentelemetry/tracing';
2323
import { CollectorTraceExporterBase } from '../../CollectorTraceExporterBase';
24+
import { CollectorExporterError } from '../../types';
25+
import { toCollectorExportTraceServiceRequest } from '../../transform';
2426
import {
25-
CollectorExporterError,
27+
GRPCSpanQueueItem,
28+
ServiceClient,
2629
CollectorExporterConfigNode,
27-
} from '../../types';
28-
import { toCollectorExportTraceServiceRequest } from '../../transform';
29-
import { GRPCSpanQueueItem, ServiceClient } from './types';
30+
} from './types';
3031
import { removeProtocol } from './util';
3132

3233
const DEFAULT_COLLECTOR_URL = 'localhost:55680';

packages/opentelemetry-exporter-collector/src/platform/node/types.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
import * as grpc from 'grpc';
1818
import { ReadableSpan } from '@opentelemetry/tracing';
19-
import { CollectorExporterError } from '../../types';
19+
import {
20+
CollectorExporterError,
21+
CollectorExporterConfigBase,
22+
} from '../../types';
2023

2124
/**
2225
* Queue item to be used to save temporary spans in case the GRPC service
@@ -38,3 +41,12 @@ export interface ServiceClient extends grpc.Client {
3841
callback: Function
3942
) => {};
4043
}
44+
45+
/**
46+
* Collector Exporter Config for Node
47+
*/
48+
export interface CollectorExporterConfigNode
49+
extends CollectorExporterConfigBase {
50+
credentials?: grpc.ChannelCredentials;
51+
metadata?: grpc.Metadata;
52+
}

packages/opentelemetry-exporter-collector/src/types.ts

+94-18
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import { SpanKind, Logger, Attributes } from '@opentelemetry/api';
1818
import * as api from '@opentelemetry/api';
19-
import * as grpc from 'grpc';
2019

2120
// header to prevent instrumentation on request
2221
export const OT_REQUEST_HEADER = 'x-opentelemetry-outgoing-request';
@@ -42,6 +41,100 @@ export namespace opentelemetryProto {
4241
}
4342
}
4443

44+
export namespace metrics.v1 {
45+
export interface Metric {
46+
metricDescriptor: opentelemetryProto.metrics.v1.MetricDescriptor;
47+
int64DataPoints?: opentelemetryProto.metrics.v1.Int64DataPoint[];
48+
doubleDataPoints?: opentelemetryProto.metrics.v1.DoubleDataPoint[];
49+
histogramDataPoints?: opentelemetryProto.metrics.v1.HistogramDataPoint[];
50+
summaryDataPoints?: opentelemetryProto.metrics.v1.SummaryDataPoint[];
51+
}
52+
53+
export interface Int64DataPoint {
54+
labels: opentelemetryProto.common.v1.StringKeyValue[];
55+
startTimeUnixNano: number;
56+
timeUnixNano: number;
57+
value: number;
58+
}
59+
60+
export interface DoubleDataPoint {
61+
labels: opentelemetryProto.common.v1.StringKeyValue[];
62+
startTimeUnixNano: number;
63+
timeUnixNano: number;
64+
value: number;
65+
}
66+
67+
export interface HistogramDataPoint {
68+
labels: opentelemetryProto.common.v1.StringKeyValue[];
69+
startTimeUnixNano: number;
70+
timeUnixNano: number;
71+
count: number;
72+
sum: number;
73+
buckets?: opentelemetryProto.metrics.v1.HistogramDataPointBucket[];
74+
explicitBounds?: number[];
75+
}
76+
77+
export interface HistogramDataPointBucket {
78+
count: number;
79+
exemplar?: opentelemetryProto.metrics.v1.HistogramExemplar;
80+
}
81+
82+
export interface HistogramExemplar {
83+
value: number;
84+
timeUnixNano: number;
85+
attachments: opentelemetryProto.common.v1.StringKeyValue[];
86+
}
87+
88+
export interface SummaryDataPoint {
89+
labels: opentelemetryProto.common.v1.StringKeyValue[];
90+
startTimeUnixNano: number;
91+
timeUnixNano: number;
92+
count?: number;
93+
sum?: number;
94+
percentileValues: opentelemetryProto.metrics.v1.SummaryDataPointValueAtPercentile[];
95+
}
96+
97+
export interface SummaryDataPointValueAtPercentile {
98+
percentile: number;
99+
value: number;
100+
}
101+
102+
export interface MetricDescriptor {
103+
name: string;
104+
description: string;
105+
unit: string;
106+
type: opentelemetryProto.metrics.v1.MetricDescriptorType;
107+
temporality: opentelemetryProto.metrics.v1.MetricDescriptorTemporality;
108+
}
109+
110+
export interface InstrumentationLibraryMetrics {
111+
instrumentationLibrary?: opentelemetryProto.common.v1.InstrumentationLibrary;
112+
metrics: opentelemetryProto.metrics.v1.Metric[];
113+
}
114+
115+
export interface ResourceMetrics {
116+
resource?: opentelemetryProto.resource.v1.Resource;
117+
instrumentationLibraryMetrics: opentelemetryProto.metrics.v1.InstrumentationLibraryMetrics[];
118+
}
119+
120+
export enum MetricDescriptorType {
121+
INVALID_TYPE,
122+
INT64,
123+
MONOTONIC_INT64,
124+
DOUBLE,
125+
MONOTONIC_DOUBLE,
126+
HISTOGRAM,
127+
SUMMARY,
128+
}
129+
130+
export enum MetricDescriptorTemporality {
131+
INVALID_TEMPORALITY,
132+
INSTANTANEOUS,
133+
DELTA,
134+
CUMULATIVE,
135+
}
136+
}
137+
45138
export namespace trace.v1 {
46139
export namespace ConstantSampler {
47140
export enum ConstantDecision {
@@ -185,23 +278,6 @@ export interface CollectorExporterConfigBase {
185278
url?: string;
186279
}
187280

188-
/**
189-
* Collector Exporter Config for Web
190-
*/
191-
export interface CollectorExporterConfigBrowser
192-
extends CollectorExporterConfigBase {
193-
headers?: { [key: string]: string };
194-
}
195-
196-
/**
197-
* Collector Exporter Config for Node
198-
*/
199-
export interface CollectorExporterConfigNode
200-
extends CollectorExporterConfigBase {
201-
credentials?: grpc.ChannelCredentials;
202-
metadata?: grpc.Metadata;
203-
}
204-
205281
/**
206282
* Mapping between api SpanKind and proto SpanKind
207283
*/

packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import * as assert from 'assert';
2020
import * as sinon from 'sinon';
2121
import { CollectorTraceExporter } from '../../src/platform/browser/index';
2222
import * as collectorTypes from '../../src/types';
23+
import { CollectorExporterConfigBrowser } from '../../src/platform/browser/types';
2324

2425
import {
2526
ensureSpanIsCorrect,
@@ -32,7 +33,7 @@ const sendBeacon = navigator.sendBeacon;
3233

3334
describe('CollectorTraceExporter - web', () => {
3435
let collectorTraceExporter: CollectorTraceExporter;
35-
let collectorExporterConfig: collectorTypes.CollectorExporterConfigBrowser;
36+
let collectorExporterConfig: CollectorExporterConfigBrowser;
3637
let spyOpen: any;
3738
let spySend: any;
3839
let spyBeacon: any;

0 commit comments

Comments
 (0)