Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit 239a9e2

Browse files
authored
Nit: Export for tests and Singleton instance for BaseMetricProducerManager (#277)
1 parent ef3486a commit 239a9e2

3 files changed

Lines changed: 68 additions & 42 deletions

File tree

packages/opencensus-core/src/metrics/export/metric-producer-manager.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,16 @@ import {MetricProducer, MetricProducerManager} from './types';
2222
* metrics that need to be exported.
2323
*/
2424
class BaseMetricProducerManager implements MetricProducerManager {
25+
/** Singleton instance */
26+
private static singletonInstance: MetricProducerManager;
27+
2528
private metricProducers: Set<MetricProducer> = new Set<MetricProducer>();
2629

30+
/** Gets the instance. */
31+
static get instance(): MetricProducerManager {
32+
return this.singletonInstance || (this.singletonInstance = new this());
33+
}
34+
2735
/**
2836
* Adds the MetricProducer to the manager if it is not already present.
2937
*
@@ -66,4 +74,4 @@ class BaseMetricProducerManager implements MetricProducerManager {
6674
}
6775
}
6876

69-
export const metricProducerManagerInstance = new BaseMetricProducerManager();
77+
export const metricProducerManagerInstance = BaseMetricProducerManager.instance;

packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export function createMetricDescriptorData(
2929
metricDescriptor: OCMetricDescriptor, metricPrefix: string,
3030
displayNamePrefix: string): MetricDescriptor {
3131
return {
32-
type: getMetricType(metricDescriptor.name, metricPrefix),
32+
type: createMetricType(metricDescriptor.name, metricPrefix),
3333
description: metricDescriptor.description,
3434
displayName: createDisplayName(metricDescriptor.name, displayNamePrefix),
3535
metricKind: createMetricKind(metricDescriptor.type),
@@ -69,18 +69,17 @@ export function createTimeSeriesList(
6969
}
7070

7171
/** Creates Metric type. */
72-
export function getMetricType(name: string, metricPrefix: string): string {
72+
function createMetricType(name: string, metricPrefix: string): string {
7373
return path.join(metricPrefix, name);
7474
}
7575

7676
/** Creates Metric display name. */
77-
export function createDisplayName(
78-
name: string, displayNamePrefix: string): string {
77+
function createDisplayName(name: string, displayNamePrefix: string): string {
7978
return path.join(displayNamePrefix, name);
8079
}
8180

8281
/** Converts a OpenCensus Type to a StackDriver MetricKind. */
83-
export function createMetricKind(metricDescriptorType: MetricDescriptorType):
82+
function createMetricKind(metricDescriptorType: MetricDescriptorType):
8483
MetricKind {
8584
if (metricDescriptorType === MetricDescriptorType.GAUGE_INT64 ||
8685
metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) {
@@ -95,7 +94,7 @@ export function createMetricKind(metricDescriptorType: MetricDescriptorType):
9594
}
9695

9796
/** Converts a OpenCensus Type to a StackDriver ValueType. */
98-
export function createValueType(metricDescriptorType: MetricDescriptorType):
97+
function createValueType(metricDescriptorType: MetricDescriptorType):
9998
ValueType {
10099
if (metricDescriptorType === MetricDescriptorType.CUMULATIVE_DOUBLE ||
101100
metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) {
@@ -114,8 +113,7 @@ export function createValueType(metricDescriptorType: MetricDescriptorType):
114113
}
115114

116115
/** Constructs a LabelDescriptor from a LabelKey. */
117-
export function createLabelDescriptor(labelKeys: LabelKey[]):
118-
LabelDescriptor[] {
116+
function createLabelDescriptor(labelKeys: LabelKey[]): LabelDescriptor[] {
119117
const labelDescriptorList: LabelDescriptor[] =
120118
labelKeys.map(labelKey => ({
121119
key: labelKey.key,
@@ -133,10 +131,10 @@ export function createLabelDescriptor(labelKeys: LabelKey[]):
133131
}
134132

135133
/** Creates a Metric using the LabelKeys and LabelValues. */
136-
export function createMetric(
134+
function createMetric(
137135
metricDescriptor: OCMetricDescriptor, labelValues: LabelValue[],
138136
metricPrefix: string): {type: string; labels: {[key: string]: string};} {
139-
const type = getMetricType(metricDescriptor.name, metricPrefix);
137+
const type = createMetricType(metricDescriptor.name, metricPrefix);
140138
const labels: {[key: string]: string} = {};
141139
for (let i = 0; i < labelValues.length; i++) {
142140
const value = labelValues[i].value;
@@ -154,7 +152,7 @@ export function createMetric(
154152
/**
155153
* Converts timeseries's point, so that metric can be uploaded to StackDriver.
156154
*/
157-
export function createPoint(
155+
function createPoint(
158156
point: TimeSeriesPoint, startTimeStamp: Timestamp,
159157
valueType: ValueType): Point {
160158
const value = createValue(valueType, point);
@@ -168,7 +166,7 @@ export function createPoint(
168166
}
169167

170168
/** Converts a OpenCensus Point's value to a StackDriver Point value. */
171-
export function createValue(valueType: ValueType, point: TimeSeriesPoint) {
169+
function createValue(valueType: ValueType, point: TimeSeriesPoint) {
172170
if (valueType === ValueType.INT64) {
173171
return {int64Value: point.value as number};
174172
} else if (valueType === ValueType.DOUBLE) {
@@ -182,8 +180,7 @@ export function createValue(valueType: ValueType, point: TimeSeriesPoint) {
182180
}
183181

184182
/** Formats an OpenCensus Distribution to Stackdriver's format. */
185-
export function createDistribution(distribution: DistributionValue):
186-
Distribution {
183+
function createDistribution(distribution: DistributionValue): Distribution {
187184
return {
188185
count: distribution.count,
189186
mean: distribution.count === 0 ? 0 : distribution.sum / distribution.count,
@@ -197,8 +194,7 @@ export function createDistribution(distribution: DistributionValue):
197194
}
198195

199196
/** Converts a OpenCensus BucketOptions to a StackDriver BucketOptions. */
200-
export function createExplicitBucketOptions(bucketOptions: BucketOptions):
201-
number[] {
197+
function createExplicitBucketOptions(bucketOptions: BucketOptions): number[] {
202198
const explicitBucketOptions: number[] = [];
203199
// The first bucket bound should be 0.0 because the Metrics first bucket is
204200
// [0, first_bound) but Stackdriver monitoring bucket bounds begin with
@@ -208,7 +204,7 @@ export function createExplicitBucketOptions(bucketOptions: BucketOptions):
208204
}
209205

210206
/** Converts a OpenCensus Buckets to a list of counts. */
211-
export function createBucketCounts(buckets: DistributionBucket[]): number[] {
207+
function createBucketCounts(buckets: DistributionBucket[]): number[] {
212208
const bucketCounts: number[] = [];
213209
// The first bucket (underflow bucket) should always be 0 count because the
214210
// Metrics first bucket is [0, first_bound) but StackDriver distribution
@@ -239,3 +235,17 @@ function leftZeroPad(ns: number) {
239235
const pad = '000000000'.substring(0, 9 - str.length);
240236
return `${pad}${str}`;
241237
}
238+
239+
export const TEST_ONLY = {
240+
createMetricType,
241+
createDisplayName,
242+
createPoint,
243+
createMetric,
244+
createLabelDescriptor,
245+
createValueType,
246+
createMetricKind,
247+
createDistribution,
248+
createExplicitBucketOptions,
249+
createValue,
250+
createBucketCounts
251+
};

packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {DistributionValue, LabelKey, LabelValue, MetricDescriptor as OCMetricDes
1818
import * as assert from 'assert';
1919

2020
import {StackdriverStatsExporter} from '../src/stackdriver-monitoring';
21-
import {createDisplayName, createDistribution, createLabelDescriptor, createMetric, createMetricDescriptorData, createMetricKind, createPoint, createTimeSeriesList, createValueType, getMetricType, OPENCENSUS_TASK_VALUE_DEFAULT} from '../src/stackdriver-stats-utils';
21+
import {createMetricDescriptorData, createTimeSeriesList, OPENCENSUS_TASK_VALUE_DEFAULT, TEST_ONLY} from '../src/stackdriver-stats-utils';
2222
import {Distribution, MetricDescriptor, MetricKind, ValueType} from '../src/types';
2323

2424
const METRIC_NAME = 'metric-name';
@@ -29,39 +29,43 @@ describe('Stackdriver Stats Exporter Utils', () => {
2929
describe('createMetricKind()', () => {
3030
it('should return a Stackdriver MetricKind', () => {
3131
assert.strictEqual(
32-
createMetricKind(MetricDescriptorType.CUMULATIVE_INT64),
32+
TEST_ONLY.createMetricKind(MetricDescriptorType.CUMULATIVE_INT64),
3333
MetricKind.CUMULATIVE);
3434
assert.strictEqual(
35-
createMetricKind(MetricDescriptorType.GAUGE_INT64), MetricKind.GAUGE);
35+
TEST_ONLY.createMetricKind(MetricDescriptorType.GAUGE_INT64),
36+
MetricKind.GAUGE);
3637
assert.strictEqual(
37-
createMetricKind(MetricDescriptorType.GAUGE_DOUBLE),
38+
TEST_ONLY.createMetricKind(MetricDescriptorType.GAUGE_DOUBLE),
3839
MetricKind.GAUGE);
3940
assert.strictEqual(
40-
createMetricKind(MetricDescriptorType.SUMMARY),
41+
TEST_ONLY.createMetricKind(MetricDescriptorType.SUMMARY),
4142
MetricKind.UNSPECIFIED);
4243
});
4344
});
4445

4546
describe('createValueType()', () => {
4647
it('should return a Stackdriver ValueType', () => {
4748
assert.strictEqual(
48-
createValueType(MetricDescriptorType.GAUGE_DOUBLE), ValueType.DOUBLE);
49+
TEST_ONLY.createValueType(MetricDescriptorType.GAUGE_DOUBLE),
50+
ValueType.DOUBLE);
4951
assert.strictEqual(
50-
createValueType(MetricDescriptorType.CUMULATIVE_INT64),
52+
TEST_ONLY.createValueType(MetricDescriptorType.CUMULATIVE_INT64),
5153
ValueType.INT64);
5254
assert.strictEqual(
53-
createValueType(MetricDescriptorType.GAUGE_INT64), ValueType.INT64);
55+
TEST_ONLY.createValueType(MetricDescriptorType.GAUGE_INT64),
56+
ValueType.INT64);
5457
assert.strictEqual(
55-
createValueType(MetricDescriptorType.CUMULATIVE_DOUBLE),
58+
TEST_ONLY.createValueType(MetricDescriptorType.CUMULATIVE_DOUBLE),
5659
ValueType.DOUBLE);
5760
assert.strictEqual(
58-
createValueType(MetricDescriptorType.CUMULATIVE_DISTRIBUTION),
61+
TEST_ONLY.createValueType(
62+
MetricDescriptorType.CUMULATIVE_DISTRIBUTION),
5963
ValueType.DISTRIBUTION);
6064
assert.strictEqual(
61-
createValueType(MetricDescriptorType.GAUGE_DISTRIBUTION),
65+
TEST_ONLY.createValueType(MetricDescriptorType.GAUGE_DISTRIBUTION),
6266
ValueType.DISTRIBUTION);
6367
assert.strictEqual(
64-
createValueType(MetricDescriptorType.SUMMARY),
68+
TEST_ONLY.createValueType(MetricDescriptorType.SUMMARY),
6569
ValueType.VALUE_TYPE_UNSPECIFIED);
6670
});
6771
});
@@ -70,7 +74,7 @@ describe('Stackdriver Stats Exporter Utils', () => {
7074
const labelKeys: LabelKey[] = [{'key': 'key', 'description': 'desc'}];
7175

7276
it('should return a Stackdriver LabelDescriptor', () => {
73-
assert.deepStrictEqual(createLabelDescriptor(labelKeys), [
77+
assert.deepStrictEqual(TEST_ONLY.createLabelDescriptor(labelKeys), [
7478
{description: 'desc', key: 'key', valueType: 'STRING'}, {
7579
description: 'Opencensus task identifier',
7680
key: 'opencensus_task',
@@ -83,15 +87,16 @@ describe('Stackdriver Stats Exporter Utils', () => {
8387
describe('createDisplayName()', () => {
8488
it('should return a Stackdriver DisplayName', () => {
8589
assert.strictEqual(
86-
createDisplayName('demo/latency', 'custom.googleapis.com/opencensus'),
90+
TEST_ONLY.createDisplayName(
91+
'demo/latency', 'custom.googleapis.com/opencensus'),
8792
'custom.googleapis.com/opencensus/demo/latency');
8893
});
8994
});
9095

91-
describe('getMetricType()', () => {
96+
describe('createMetricType()', () => {
9297
it('should return a Stackdriver MetricType', () => {
9398
assert.strictEqual(
94-
getMetricType('demo/latency', 'opencensus'),
99+
TEST_ONLY.createMetricType('demo/latency', 'opencensus'),
95100
'opencensus/demo/latency');
96101
});
97102
});
@@ -108,7 +113,7 @@ describe('Stackdriver Stats Exporter Utils', () => {
108113
};
109114

110115
it('should return a Stackdriver Metric', () => {
111-
const metric = createMetric(
116+
const metric = TEST_ONLY.createMetric(
112117
metricDescriptor, labelValues,
113118
StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN);
114119
assert.strictEqual(
@@ -120,8 +125,8 @@ describe('Stackdriver Stats Exporter Utils', () => {
120125

121126
it('should return a Stackdriver Metric With External Metric Domain', () => {
122127
const prometheusDomain = 'external.googleapis.com/prometheus/';
123-
const metric =
124-
createMetric(metricDescriptor, labelValues, prometheusDomain);
128+
const metric = TEST_ONLY.createMetric(
129+
metricDescriptor, labelValues, prometheusDomain);
125130
assert.strictEqual(metric.type, `${prometheusDomain}${METRIC_NAME}`);
126131
assert.deepStrictEqual(
127132
metric.labels,
@@ -130,7 +135,8 @@ describe('Stackdriver Stats Exporter Utils', () => {
130135

131136
it('should return a Stackdriver Metric With Empty Label', () => {
132137
const prometheusDomain = 'external.googleapis.com/prometheus/';
133-
const metric = createMetric(metricDescriptor, [], prometheusDomain);
138+
const metric =
139+
TEST_ONLY.createMetric(metricDescriptor, [], prometheusDomain);
134140
assert.strictEqual(metric.type, `${prometheusDomain}${METRIC_NAME}`);
135141
assert.deepStrictEqual(
136142
metric.labels, {'opencensus_task': OPENCENSUS_TASK_VALUE_DEFAULT});
@@ -146,7 +152,8 @@ describe('Stackdriver Stats Exporter Utils', () => {
146152
buckets: [{count: 3}, {count: 1}, {count: 2}, {count: 4}],
147153
};
148154
it('should return a Stackdriver Distribution', () => {
149-
const distribution: Distribution = createDistribution(distributionValue);
155+
const distribution: Distribution =
156+
TEST_ONLY.createDistribution(distributionValue);
150157

151158
assert.strictEqual(distribution.count, 3);
152159
assert.strictEqual(distribution.mean, 0.6666666666666666);
@@ -238,7 +245,7 @@ describe('Stackdriver Stats Exporter Utils', () => {
238245
};
239246

240247
it('should return a Stackdriver Point', () => {
241-
const pt = createPoint(doublePoint, null, ValueType.DOUBLE);
248+
const pt = TEST_ONLY.createPoint(doublePoint, null, ValueType.DOUBLE);
242249

243250
assert.deepStrictEqual(pt, {
244251
value: {doubleValue: 12345678.2},
@@ -247,7 +254,8 @@ describe('Stackdriver Stats Exporter Utils', () => {
247254
});
248255

249256
it('should return a Stackdriver Cumulative Point', () => {
250-
const pt = createPoint(intPoint, startTimestamp, ValueType.INT64);
257+
const pt =
258+
TEST_ONLY.createPoint(intPoint, startTimestamp, ValueType.INT64);
251259

252260
assert.deepStrictEqual(pt, {
253261
value: {int64Value: 12345678},
@@ -259,7 +267,7 @@ describe('Stackdriver Stats Exporter Utils', () => {
259267
});
260268

261269
it('should return a Stackdriver Distribution Point', () => {
262-
const pt = createPoint(
270+
const pt = TEST_ONLY.createPoint(
263271
distributionPoint, startTimestamp, ValueType.DISTRIBUTION);
264272

265273
assert.deepStrictEqual(pt, {

0 commit comments

Comments
 (0)