Skip to content

Commit

Permalink
Merge pull request #159 from ovotech/ae-1869
Browse files Browse the repository at this point in the history
Remove unwanted tags
  • Loading branch information
dmcregula authored Feb 20, 2023
2 parents e097868 + 41c790e commit bd9093d
Show file tree
Hide file tree
Showing 9 changed files with 22 additions and 57 deletions.
2 changes: 1 addition & 1 deletion packages/datadog-metrics-tracker/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@ovotech/datadog-metrics-tracker",
"description": "Track metrics and store them in DataDog",
"version": "1.3.15",
"version": "1.3.16",
"main": "dist/index.js",
"source": "src/index.ts",
"types": "dist/index.d.ts",
Expand Down
14 changes: 3 additions & 11 deletions packages/datadog-metrics-tracker/src/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { StatsD } from 'hot-shots';

interface Point {
tags: { [name: string]: string };
fields: { [name: string]: any };
measurement: string;
value?: number;
}
Expand All @@ -19,12 +18,7 @@ export abstract class MetricsTracker {
this.sendPointsToDatadog = this.sendPointsToDatadog.bind(this);
}

protected async trackPoint(
measurementName: string,
tags: { [name: string]: string },
fields: { [name: string]: any },
value?: number,
) {
protected async trackPoint(measurementName: string, tags: { [name: string]: string }, value?: number) {
const validTags = this.getValidTags(tags);
this.logInvalidTags(measurementName, tags);

Expand All @@ -36,15 +30,13 @@ export abstract class MetricsTracker {
...this.staticMeta,
...validTags,
},
fields,
value,
});
return;
} catch (err) {
this.logger.error('Error tracking Datadog metric', {
metric: measurementName,
tags: JSON.stringify(validTags),
fields: JSON.stringify(fields),
error: err,
});
return;
Expand All @@ -53,9 +45,9 @@ export abstract class MetricsTracker {

private async sendPointsToDatadog(point: Point) {
this.logger.info(`Sending metrics to Datadog`);
const { measurement, tags, fields, value } = point;
const { measurement, tags, value } = point;
//datadog metrics tag
this.dogstatsd.distribution(measurement, value || 1, { ...tags, ...fields });
this.dogstatsd.distribution(measurement, value || 1, { ...tags });
}

private getInvalidTagNames(tags: { [name: string]: string }) {
Expand Down
1 change: 0 additions & 1 deletion packages/datadog-metrics-tracker/src/external-request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ export class ExternalRequestMetricsTracker extends MetricsTracker {
await this.trackPoint(
ExternalRequestMetricsTracker.externalRequestTimeMeasurementName,
{ requestName, externalServiceName, status: statusCode ? statusCode.toString() : '' },
{ timeMs: Math.round(timeMs), count: 1 },
Math.round(timeMs),
);
}
Expand Down
12 changes: 2 additions & 10 deletions packages/datadog-metrics-tracker/src/kafka.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,11 @@ export class KafkaMetricsTracker extends MetricsTracker {
private static eventReceivedMeasurementName = 'kafka-event-received';

async trackEventReceived(eventName: string, ageMs: number) {
await this.trackPoint(
KafkaMetricsTracker.eventReceivedMeasurementName,
{ eventName },
{ count: 1, ageMs: Math.round(ageMs) },
);
await this.trackPoint(KafkaMetricsTracker.eventReceivedMeasurementName, { eventName });
}

async trackEventProcessed(eventName: string, processingState: ProcessingState) {
await this.trackPoint(
KafkaMetricsTracker.eventProcessedMeasurementName,
{ eventName, processingState },
{ count: 1 },
);
await this.trackPoint(KafkaMetricsTracker.eventProcessedMeasurementName, { eventName, processingState });
}
}

Expand Down
1 change: 0 additions & 1 deletion packages/datadog-metrics-tracker/src/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ export class ResponseMetricsTracker extends MetricsTracker {
await this.trackPoint(
ResponseMetricsTracker.ownResponseTimeMeasurementName,
{ requestName, status: statusCode ? statusCode.toString() : '' },
{ timeMs: Math.round(timeMs), count: 1 },
Math.round(timeMs),
);
}
Expand Down
18 changes: 9 additions & 9 deletions packages/datadog-metrics-tracker/test/base.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ const testMeasurementName = 'test-metrics';
export class TestTracker extends MetricsTracker {
private static testMeasurementName = testMeasurementName;

async trackSomething(tags: { [name: string]: string }, fields: { [name: string]: any }) {
await this.trackPoint(TestTracker.testMeasurementName, tags, fields);
async trackSomething(tags: { [name: string]: string }) {
await this.trackPoint(TestTracker.testMeasurementName, tags);
}
}

Expand All @@ -29,36 +29,36 @@ describe('Base metrics class', () => {
it('Should track valid tags and write the points to Datadog in a batch call', async () => {
const tags = { value: 'A string' };

await tracker.trackSomething(tags, {});
await tracker.trackSomething(tags);
const data = {
...metricsMeta,
...tags,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith(testMeasurementName,1, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith(testMeasurementName, 1, data);
});

it('Should track valid metrics and write the points to Datadog in a batch call', async () => {
const metrics = { string: 'A string', integer: 3, float: 1.23, boolean: true };
const metrics = { string: 'A string' };

await tracker.trackSomething({}, metrics);
await tracker.trackSomething(metrics);
const data = {
...metricsMeta,
...metrics,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith(testMeasurementName,1, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith(testMeasurementName, 1, data);
});

it('Should log rather than track that have empty values', async () => {
const validTags = { validTag: 'A string' };
const invalidTags = { invalidTag: '', anotherInvalidTag: '' };

await tracker.trackSomething({ ...validTags, ...invalidTags }, {});
await tracker.trackSomething({ ...validTags, ...invalidTags });
const data = {
...metricsMeta,
...validTags,
};
jest.runTimersToTime(60000);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith(testMeasurementName,1, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith(testMeasurementName, 1, data);
expect(mockLogger.warn).toHaveBeenLastCalledWith('Attempted to track tags with no value', {
metric: testMeasurementName,
tagNames: 'anotherInvalidTag, invalidTag',
Expand Down
10 changes: 2 additions & 8 deletions packages/datadog-metrics-tracker/test/external-request.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@ describe('Track actions relating to consuming an event from Kafka', () => {
const data = {
externalServiceName,
requestName,
count: 1,
timeMs: 1234,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('external-request-time',timeMs, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('external-request-time', timeMs, data);
});

it.each([200, 404, 500])('Should track a request time with a status code: %d', async statusCode => {
Expand All @@ -36,10 +34,8 @@ describe('Track actions relating to consuming an event from Kafka', () => {
externalServiceName,
requestName,
status: statusCode.toString(10),
count: 1,
timeMs: 123,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('external-request-time',timeMs, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('external-request-time', timeMs, data);
});

it.each([
Expand All @@ -54,8 +50,6 @@ describe('Track actions relating to consuming an event from Kafka', () => {
const data = {
externalServiceName,
requestName,
count: 1,
timeMs: expectedTrackedTime,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('external-request-time', expectedTrackedTime, data);
});
Expand Down
9 changes: 2 additions & 7 deletions packages/datadog-metrics-tracker/test/kafka.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@ describe('Track actions relating to consuming an event from Kafka', () => {
await tracker.trackEventReceived(eventName, ageMs);
const data = {
eventName,
count: 1,
ageMs,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('kafka-event-received',1, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('kafka-event-received', 1, data);
});

it.each([
Expand All @@ -34,10 +32,8 @@ describe('Track actions relating to consuming an event from Kafka', () => {
await tracker.trackEventReceived(eventName, exactAge);
const data = {
eventName,
count: 1,
ageMs: expectedTrackedAge,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('kafka-event-received', 1,data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('kafka-event-received', 1, data);
});

it.each([ProcessingState.Error, ProcessingState.Success])(
Expand All @@ -49,7 +45,6 @@ describe('Track actions relating to consuming an event from Kafka', () => {
const data = {
eventName,
processingState,
count: 1,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('kafka-event-processed', 1, data);
},
Expand Down
12 changes: 3 additions & 9 deletions packages/datadog-metrics-tracker/test/response.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@ describe('Track actions relating to responding to an API request', () => {
await tracker.trackOwnResponseTime(requestName, timeMs);
const data = {
requestName,
count: 1,
timeMs,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('own-response-time',timeMs, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('own-response-time', timeMs, data);
});

it.each([200, 404, 500])('Should track a response time with a status code: %d', async statusCode => {
Expand All @@ -32,10 +30,8 @@ describe('Track actions relating to responding to an API request', () => {
const data = {
requestName,
status: statusCode.toString(10),
count: 1,
timeMs,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('own-response-time',timeMs, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('own-response-time', timeMs, data);
});

it.each([
Expand All @@ -48,9 +44,7 @@ describe('Track actions relating to responding to an API request', () => {
await tracker.trackOwnResponseTime(requestName, exactTime);
const data = {
requestName,
count: 1,
timeMs: expectedTrackedTime,
};
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('own-response-time',expectedTrackedTime, data);
expect(mockDatadog.distribution).toHaveBeenLastCalledWith('own-response-time', expectedTrackedTime, data);
});
});

0 comments on commit bd9093d

Please sign in to comment.