Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
32d7962
chore: updating submodule for opentelemetry-proto
Sep 21, 2021
f9972c8
chore: initialized exporter-metrics-otlp-grpc package
Sep 21, 2021
9685772
feat\!: populated exporter-metrics-otlp-grpc package
Sep 21, 2021
007970c
chore: bootstrapped exporter-metrics-otlp-http package
Sep 21, 2021
9618274
feat\!: migrated metric exporter logic to exporter-metrics-otlp-http
Sep 21, 2021
d2ecae0
chore: updating submodule for opentelemetry-proto
Sep 21, 2021
07b43bf
chore: bootstrapped exporter-metrics-otlp-proto package
Sep 21, 2021
5ac7d7b
feat!: migrated proto logic to exporter-metrics-otlp-proto package
Sep 21, 2021
308cfe3
fix: fixed some issues in grpc and proto
Sep 22, 2021
16e7a95
removed debug logging
Sep 22, 2021
c50cada
added api to devdeps
Sep 22, 2021
e5ed763
merge branch 'main' into split-exporters
Sep 29, 2021
0751815
fixed imports
Sep 29, 2021
b886cb9
merge 'main' into split-exporters
Oct 5, 2021
211fa12
updated versions to latest
Oct 5, 2021
9140258
fixed merge conflicts
Oct 26, 2021
8b3571f
applied changes from #2496 to metricHelpers
Oct 26, 2021
752463e
renamed exporter-otlp-http -> exporter-trace-otlp-http
Oct 26, 2021
c4aa74a
renamed exporter-otlp-grpc -> exporter-trace-otlp-grpc
Oct 26, 2021
3e7daf4
renamed exporter-otlp-proto -> exporter-trace-otlp-proto
Oct 26, 2021
44de3a7
Merge branch 'main' into split-exporters
dyladan Oct 26, 2021
8eccf90
Merge branch 'main' into split-exporters
vmarchaud Oct 27, 2021
2992e5c
fix conflicts and bump api version
Oct 28, 2021
81891ec
Merge branch 'split-exporters' of https://github.com/willarmiros/open…
Oct 28, 2021
353d038
Merge branch 'main' into split-exporters
dyladan Nov 1, 2021
e068039
Merge branch 'main' into split-exporters
rauno56 Nov 2, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat\!: populated exporter-metrics-otlp-grpc package
  • Loading branch information
William Armiros committed Sep 21, 2021
commit 9685772ad3db00fad0bf0b8a57d45980041a8695
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ module.exports = {
"commonjs": true,
"node": true,
},
...require('../../eslint.config.js')
...require('../../../eslint.config.js')
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@
"@opentelemetry/exporter-otlp-http": "0.25.0",
"@opentelemetry/exporter-otlp-grpc": "0.25.0",
"@opentelemetry/sdk-metrics-base": "0.25.0",
"@opentelemetry/resources": "0.25.0",
"@opentelemetry/sdk-trace-base": "0.25.0"
"@opentelemetry/resources": "0.25.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@
import {
otlpTypes,
toOTLPExportMetricServiceRequest,
} from '@opentelemetry/exporter-otlp-http';
} from '../../../../packages/opentelemetry-exporter-otlp-http';
import { MetricRecord, MetricExporter } from '@opentelemetry/sdk-metrics-base';
import { OTLPExporterConfigNode, ServiceClientType } from './types';
import { OTLPExporterNodeBase } from './OTLPExporterNodeBase';
import {
OTLPExporterConfigNode,
OTLPExporterNodeBase,
ServiceClientType,
validateAndNormalizeUrl
} from '../../../../packages/opentelemetry-exporter-otlp-grpc';
import { baggageUtils, getEnv } from '@opentelemetry/core';
import { validateAndNormalizeUrl } from './util';
import { Metadata } from '@grpc/grpc-js';

const DEFAULT_COLLECTOR_URL = 'localhost:4317';
Expand Down Expand Up @@ -58,7 +61,7 @@ export class OTLPMetricExporter
);
}

getDefaultUrl(config: OTLPExporterConfigNode) {
getDefaultUrl(config: OTLPExporterConfigNode): string {
return typeof config.url === 'string'
? validateAndNormalizeUrl(config.url)
: getEnv().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length > 0
Expand All @@ -68,7 +71,7 @@ export class OTLPMetricExporter
: DEFAULT_COLLECTOR_URL;
}

getServiceClientType() {
getServiceClientType(): ServiceClientType {
return ServiceClientType.METRICS;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/*
* 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.
*/

export * from './OTLPMetricExporter';
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {
ValueRecorder,
} from '@opentelemetry/api-metrics';
import { diag } from '@opentelemetry/api';
import { otlpTypes } from '@opentelemetry/exporter-otlp-http';
import { otlpTypes } from '../../../../packages/opentelemetry-exporter-otlp-http';
import * as metrics from '@opentelemetry/sdk-metrics-base';
import * as assert from 'assert';
import * as fs from 'fs';
Expand All @@ -38,7 +38,7 @@ import {
mockCounter,
mockObserver,
mockValueRecorder,
} from './helper';
} from './metricsHelper';

const metricsServiceProtoPath =
'opentelemetry/proto/collector/metrics/v1/metrics_service.proto';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
/*
* 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 {
Counter,
ObserverResult,
ValueObserver,
ValueRecorder,
ValueType,
} from '@opentelemetry/api-metrics';
import { otlpTypes } from '../../../../packages/opentelemetry-exporter-otlp-http';
import * as metrics from '@opentelemetry/sdk-metrics-base';
import { Resource } from '@opentelemetry/resources';
import * as assert from 'assert';
import * as grpc from '@grpc/grpc-js';
import { VERSION } from '@opentelemetry/core';

const meterProvider = new metrics.MeterProvider({
interval: 30000,
resource: new Resource({
service: 'ui',
version: 1,
cost: 112.12,
}),
});

const meter = meterProvider.getMeter('default', '0.0.1');

export function mockCounter(): metrics.Metric<metrics.BoundCounter> & Counter {
const name = 'int-counter';
const metric =
meter['_metrics'].get(name) ||
meter.createCounter(name, {
description: 'sample counter description',
valueType: ValueType.INT,
});
metric.clear();
metric.bind({});
return metric;
}

export function mockObserver(
callback: (observerResult: ObserverResult) => void
): metrics.Metric<metrics.BoundCounter> & ValueObserver {
const name = 'double-observer';
const metric =
meter['_metrics'].get(name) ||
meter.createValueObserver(
name,
{
description: 'sample observer description',
valueType: ValueType.DOUBLE,
},
callback
);
metric.clear();
metric.bind({});
return metric;
}

export function mockValueRecorder(): metrics.Metric<metrics.BoundValueRecorder> &
ValueRecorder {
const name = 'int-recorder';
const metric =
meter['_metrics'].get(name) ||
meter.createValueRecorder(name, {
description: 'sample recorder description',
valueType: ValueType.INT,
boundaries: [0, 100],
});
metric.clear();
metric.bind({});
return metric;
}

export function ensureExportedAttributesAreCorrect(
attributes: otlpTypes.opentelemetryProto.common.v1.KeyValue[]
) {
assert.deepStrictEqual(
attributes,
[
{
key: 'component',
value: {
stringValue: 'document-load',
value: 'stringValue',
},
},
],
'exported attributes are incorrect'
);
}

export function ensureExportedCounterIsCorrect(
metric: otlpTypes.opentelemetryProto.metrics.v1.Metric,
time?: number
) {
assert.deepStrictEqual(metric, {
name: 'int-counter',
description: 'sample counter description',
unit: '1',
data: 'intSum',
intSum: {
dataPoints: [
{
labels: [],
exemplars: [],
value: '1',
startTimeUnixNano: '1592602232694000128',
timeUnixNano: String(time),
},
],
isMonotonic: true,
aggregationTemporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE',
},
});
}

export function ensureExportedObserverIsCorrect(
metric: otlpTypes.opentelemetryProto.metrics.v1.Metric,
time?: number
) {
assert.deepStrictEqual(metric, {
name: 'double-observer',
description: 'sample observer description',
unit: '1',
data: 'doubleGauge',
doubleGauge: {
dataPoints: [
{
labels: [],
exemplars: [],
value: 6,
startTimeUnixNano: '1592602232694000128',
timeUnixNano: String(time),
},
],
},
});
}

export function ensureExportedValueRecorderIsCorrect(
metric: otlpTypes.opentelemetryProto.metrics.v1.Metric,
time?: number,
explicitBounds: number[] = [Infinity],
bucketCounts: string[] = ['2', '0']
) {
assert.deepStrictEqual(metric, {
name: 'int-recorder',
description: 'sample recorder description',
unit: '1',
data: 'intHistogram',
intHistogram: {
dataPoints: [
{
labels: [],
exemplars: [],
sum: '21',
count: '2',
startTimeUnixNano: '1592602232694000128',
timeUnixNano: String(time),
bucketCounts,
explicitBounds,
},
],
aggregationTemporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE',
},
});
}

export function ensureResourceIsCorrect(
resource: otlpTypes.opentelemetryProto.resource.v1.Resource
) {
assert.deepStrictEqual(resource, {
attributes: [
{
'key': 'service.name',
'value': {
'stringValue': `unknown_service:${process.argv0}`,
'value': 'stringValue'
}
},
{
'key': 'telemetry.sdk.language',
'value': {
'stringValue': 'nodejs',
'value': 'stringValue'
}
},
{
'key': 'telemetry.sdk.name',
'value': {
'stringValue': 'opentelemetry',
'value': 'stringValue'
}
},
{
'key': 'telemetry.sdk.version',
'value': {
'stringValue': VERSION,
'value': 'stringValue'
}
},
{
key: 'service',
value: {
stringValue: 'ui',
value: 'stringValue',
},
},
{
key: 'version',
value: {
intValue: '1',
value: 'intValue',
},
},
{
key: 'cost',
value: {
doubleValue: 112.12,
value: 'doubleValue',
},
},
],
droppedAttributesCount: 0,
});
}

export function ensureMetadataIsCorrect(
actual: grpc.Metadata,
expected: grpc.Metadata
) {
//ignore user agent
expected.remove('user-agent');
actual.remove('user-agent');
assert.deepStrictEqual(actual.getMap(), expected.getMap());
}
4 changes: 3 additions & 1 deletion packages/opentelemetry-exporter-otlp-grpc/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@
* limitations under the License.
*/

export * from './OTLPExporterNodeBase';
export * from './OTLPTraceExporter';
export * from './OTLPMetricExporter';
export { ServiceClientType } from './types';
export { validateAndNormalizeUrl } from './util';
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
import * as assert from 'assert';
import { OTLPExporterNodeBase } from '../src/OTLPExporterNodeBase';
import { OTLPExporterConfigNode, ServiceClientType } from '../src/types';
import { mockedReadableSpan } from './helper';
import { mockedReadableSpan } from './traceHelper';

class MockCollectorExporter extends OTLPExporterNodeBase<
ReadableSpan,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import {
ensureMetadataIsCorrect,
ensureResourceIsCorrect,
mockedReadableSpan,
} from './helper';
} from './traceHelper';

const traceServiceProtoPath =
'opentelemetry/proto/collector/trace/v1/trace_service.proto';
Expand Down
Loading