From 413edb5369536b9be960049edac3b2be96953649 Mon Sep 17 00:00:00 2001 From: David W Date: Mon, 6 Jul 2020 14:33:09 -0400 Subject: [PATCH] feat: Add types for Collector Metric Exporter (#1271) --- .../browser/CollectorTraceExporter.ts | 2 +- .../src/platform/browser/types.ts | 25 ++++ .../platform/node/CollectorTraceExporter.ts | 9 +- .../src/platform/node/types.ts | 14 ++- .../src/types.ts | 112 +++++++++++++++--- .../browser/CollectorTraceExporter.test.ts | 3 +- 6 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 packages/opentelemetry-exporter-collector/src/platform/browser/types.ts diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts index b6d0e66f84..39da94d1d0 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts @@ -17,7 +17,7 @@ import { CollectorTraceExporterBase } from '../../CollectorTraceExporterBase'; import { ReadableSpan } from '@opentelemetry/tracing'; import { toCollectorExportTraceServiceRequest } from '../../transform'; -import { CollectorExporterConfigBrowser } from '../../types'; +import { CollectorExporterConfigBrowser } from './types'; import * as collectorTypes from '../../types'; const DEFAULT_COLLECTOR_URL = 'http://localhost:55680/v1/trace'; diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/types.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/types.ts new file mode 100644 index 0000000000..dffdf01c26 --- /dev/null +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/types.ts @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CollectorExporterConfigBase } from '../../types'; + +/** + * Collector Exporter Config for Web + */ +export interface CollectorExporterConfigBrowser + extends CollectorExporterConfigBase { + headers?: { [key: string]: string }; +} diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts index c5d88ad9b5..8750315de5 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts @@ -21,12 +21,13 @@ import * as collectorTypes from '../../types'; import { ReadableSpan } from '@opentelemetry/tracing'; import { CollectorTraceExporterBase } from '../../CollectorTraceExporterBase'; +import { CollectorExporterError } from '../../types'; +import { toCollectorExportTraceServiceRequest } from '../../transform'; import { - CollectorExporterError, + GRPCSpanQueueItem, + ServiceClient, CollectorExporterConfigNode, -} from '../../types'; -import { toCollectorExportTraceServiceRequest } from '../../transform'; -import { GRPCSpanQueueItem, ServiceClient } from './types'; +} from './types'; import { removeProtocol } from './util'; const DEFAULT_COLLECTOR_URL = 'localhost:55680'; diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/types.ts b/packages/opentelemetry-exporter-collector/src/platform/node/types.ts index 01b1a9a33f..507f478f44 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/types.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/types.ts @@ -16,7 +16,10 @@ import * as grpc from 'grpc'; import { ReadableSpan } from '@opentelemetry/tracing'; -import { CollectorExporterError } from '../../types'; +import { + CollectorExporterError, + CollectorExporterConfigBase, +} from '../../types'; /** * Queue item to be used to save temporary spans in case the GRPC service @@ -38,3 +41,12 @@ export interface ServiceClient extends grpc.Client { callback: Function ) => {}; } + +/** + * Collector Exporter Config for Node + */ +export interface CollectorExporterConfigNode + extends CollectorExporterConfigBase { + credentials?: grpc.ChannelCredentials; + metadata?: grpc.Metadata; +} diff --git a/packages/opentelemetry-exporter-collector/src/types.ts b/packages/opentelemetry-exporter-collector/src/types.ts index 627cb736a8..68aa4fbf57 100644 --- a/packages/opentelemetry-exporter-collector/src/types.ts +++ b/packages/opentelemetry-exporter-collector/src/types.ts @@ -16,7 +16,6 @@ import { SpanKind, Logger, Attributes } from '@opentelemetry/api'; import * as api from '@opentelemetry/api'; -import * as grpc from 'grpc'; // header to prevent instrumentation on request export const OT_REQUEST_HEADER = 'x-opentelemetry-outgoing-request'; @@ -42,6 +41,100 @@ export namespace opentelemetryProto { } } + export namespace metrics.v1 { + export interface Metric { + metricDescriptor: opentelemetryProto.metrics.v1.MetricDescriptor; + int64DataPoints?: opentelemetryProto.metrics.v1.Int64DataPoint[]; + doubleDataPoints?: opentelemetryProto.metrics.v1.DoubleDataPoint[]; + histogramDataPoints?: opentelemetryProto.metrics.v1.HistogramDataPoint[]; + summaryDataPoints?: opentelemetryProto.metrics.v1.SummaryDataPoint[]; + } + + export interface Int64DataPoint { + labels: opentelemetryProto.common.v1.StringKeyValue[]; + startTimeUnixNano: number; + timeUnixNano: number; + value: number; + } + + export interface DoubleDataPoint { + labels: opentelemetryProto.common.v1.StringKeyValue[]; + startTimeUnixNano: number; + timeUnixNano: number; + value: number; + } + + export interface HistogramDataPoint { + labels: opentelemetryProto.common.v1.StringKeyValue[]; + startTimeUnixNano: number; + timeUnixNano: number; + count: number; + sum: number; + buckets?: opentelemetryProto.metrics.v1.HistogramDataPointBucket[]; + explicitBounds?: number[]; + } + + export interface HistogramDataPointBucket { + count: number; + exemplar?: opentelemetryProto.metrics.v1.HistogramExemplar; + } + + export interface HistogramExemplar { + value: number; + timeUnixNano: number; + attachments: opentelemetryProto.common.v1.StringKeyValue[]; + } + + export interface SummaryDataPoint { + labels: opentelemetryProto.common.v1.StringKeyValue[]; + startTimeUnixNano: number; + timeUnixNano: number; + count?: number; + sum?: number; + percentileValues: opentelemetryProto.metrics.v1.SummaryDataPointValueAtPercentile[]; + } + + export interface SummaryDataPointValueAtPercentile { + percentile: number; + value: number; + } + + export interface MetricDescriptor { + name: string; + description: string; + unit: string; + type: opentelemetryProto.metrics.v1.MetricDescriptorType; + temporality: opentelemetryProto.metrics.v1.MetricDescriptorTemporality; + } + + export interface InstrumentationLibraryMetrics { + instrumentationLibrary?: opentelemetryProto.common.v1.InstrumentationLibrary; + metrics: opentelemetryProto.metrics.v1.Metric[]; + } + + export interface ResourceMetrics { + resource?: opentelemetryProto.resource.v1.Resource; + instrumentationLibraryMetrics: opentelemetryProto.metrics.v1.InstrumentationLibraryMetrics[]; + } + + export enum MetricDescriptorType { + INVALID_TYPE, + INT64, + MONOTONIC_INT64, + DOUBLE, + MONOTONIC_DOUBLE, + HISTOGRAM, + SUMMARY, + } + + export enum MetricDescriptorTemporality { + INVALID_TEMPORALITY, + INSTANTANEOUS, + DELTA, + CUMULATIVE, + } + } + export namespace trace.v1 { export namespace ConstantSampler { export enum ConstantDecision { @@ -185,23 +278,6 @@ export interface CollectorExporterConfigBase { url?: string; } -/** - * Collector Exporter Config for Web - */ -export interface CollectorExporterConfigBrowser - extends CollectorExporterConfigBase { - headers?: { [key: string]: string }; -} - -/** - * Collector Exporter Config for Node - */ -export interface CollectorExporterConfigNode - extends CollectorExporterConfigBase { - credentials?: grpc.ChannelCredentials; - metadata?: grpc.Metadata; -} - /** * Mapping between api SpanKind and proto SpanKind */ diff --git a/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts index 2386b63ab5..2e11e341df 100644 --- a/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts @@ -20,6 +20,7 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; import { CollectorTraceExporter } from '../../src/platform/browser/index'; import * as collectorTypes from '../../src/types'; +import { CollectorExporterConfigBrowser } from '../../src/platform/browser/types'; import { ensureSpanIsCorrect, @@ -32,7 +33,7 @@ const sendBeacon = navigator.sendBeacon; describe('CollectorTraceExporter - web', () => { let collectorTraceExporter: CollectorTraceExporter; - let collectorExporterConfig: collectorTypes.CollectorExporterConfigBrowser; + let collectorExporterConfig: CollectorExporterConfigBrowser; let spyOpen: any; let spySend: any; let spyBeacon: any;