Skip to content

Commit a1247d1

Browse files
authored
Merge 6cc0816 into e08ad86
2 parents e08ad86 + 6cc0816 commit a1247d1

12 files changed

+114
-58
lines changed

integration_tests/snapshots/logs/http-requests_node16.log

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ START
3737
"v": 1
3838
}
3939
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
40+
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
41+
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4042
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4143
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Snapshot test http requests successfully made to URLs: https://ip-ranges.datadoghq.com,https://ip-ranges.datadoghq.eu
4244
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
45+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4346
END Duration: XXXX ms Memory Used: XXXX MB
4447
START
4548
{
@@ -58,7 +61,10 @@ START
5861
"v": 1
5962
}
6063
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
64+
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
65+
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6166
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6267
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Snapshot test http requests successfully made to URLs: https://ip-ranges.datadoghq.com,https://ip-ranges.datadoghq.eu
6368
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
69+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6470
END Duration: XXXX ms Memory Used: XXXX MB

integration_tests/snapshots/logs/http-requests_node18.log

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ START
3737
"v": 1
3838
}
3939
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
40+
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
41+
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4042
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4143
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Snapshot test http requests successfully made to URLs: https://ip-ranges.datadoghq.com,https://ip-ranges.datadoghq.eu
4244
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
45+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4346
END Duration: XXXX ms Memory Used: XXXX MB
4447
START
4548
{
@@ -58,7 +61,10 @@ START
5861
"v": 1
5962
}
6063
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
64+
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
65+
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6166
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6267
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Snapshot test http requests successfully made to URLs: https://ip-ranges.datadoghq.com,https://ip-ranges.datadoghq.eu
6368
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
69+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6470
END Duration: XXXX ms Memory Used: XXXX MB

integration_tests/snapshots/logs/http-requests_node20.log

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ START
3737
"v": 1
3838
}
3939
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
40+
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
41+
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4042
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4143
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Snapshot test http requests successfully made to URLs: https://ip-ranges.datadoghq.com,https://ip-ranges.datadoghq.eu
4244
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
45+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
4346
END Duration: XXXX ms Memory Used: XXXX MB
4447
START
4548
{
@@ -58,7 +61,10 @@ START
5861
"v": 1
5962
}
6063
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
64+
HTTP GET https://ip-ranges.datadoghq.com/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
65+
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6166
HTTP GET https://ip-ranges.datadoghq.eu/ TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6267
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Snapshot test http requests successfully made to URLs: https://ip-ranges.datadoghq.com,https://ip-ranges.datadoghq.eu
6368
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
69+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
6470
END Duration: XXXX ms Memory Used: XXXX MB

integration_tests/snapshots/logs/sync-metrics_node16.log

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed APIGat
1919
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
2020
END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB
2121
START
22+
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SNS request
2223
{
2324
"e": XXXX,
2425
"m": "aws.lambda.enhanced.invocations",
@@ -34,10 +35,11 @@ START
3435
],
3536
"v": 1
3637
}
37-
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SNS request
38+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
3839
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
3940
END Duration: XXXX ms Memory Used: XXXX MB
4041
START
42+
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SQS request
4143
{
4244
"e": XXXX,
4345
"m": "aws.lambda.enhanced.invocations",
@@ -53,6 +55,6 @@ START
5355
],
5456
"v": 1
5557
}
56-
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SQS request
58+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
5759
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
5860
END Duration: XXXX ms Memory Used: XXXX MB

integration_tests/snapshots/logs/sync-metrics_node18.log

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed APIGat
1919
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
2020
END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB
2121
START
22+
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SNS request
2223
{
2324
"e": XXXX,
2425
"m": "aws.lambda.enhanced.invocations",
@@ -34,10 +35,11 @@ START
3435
],
3536
"v": 1
3637
}
37-
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SNS request
38+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
3839
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
3940
END Duration: XXXX ms Memory Used: XXXX MB
4041
START
42+
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SQS request
4143
{
4244
"e": XXXX,
4345
"m": "aws.lambda.enhanced.invocations",
@@ -53,6 +55,6 @@ START
5355
],
5456
"v": 1
5557
}
56-
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SQS request
58+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
5759
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
5860
END Duration: XXXX ms Memory Used: XXXX MB

integration_tests/snapshots/logs/sync-metrics_node20.log

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SNS re
3636
"v": 1
3737
}
3838
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
39+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
3940
END Duration: XXXX ms Memory Used: XXXX MB
4041
START
42+
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SQS request
4143
{
4244
"e": XXXX,
4345
"m": "aws.lambda.enhanced.invocations",
@@ -53,6 +55,6 @@ START
5355
],
5456
"v": 1
5557
}
56-
XXXX-XX-XX XX:XX:XX.XXX INFO [dd.trace_id=XXXX dd.span_id=XXXX] Processed SQS request
58+
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
5759
HTTP POST https://api.datadoghq.com/api/v1/distribution_points?api_key=XXXX TraceHeaders: ["x-datadog-parent-id:XXXX","x-datadog-sampling-priority:-1","x-datadog-trace-id:XXXX"]
5860
END Duration: XXXX ms Memory Used: XXXX MB

src/metrics/api.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import querystring from "querystring";
22
import { URL } from "url";
33

4-
import { logDebug, post } from "../utils";
4+
import { logDebug } from "../utils";
5+
import { post } from "../utils/request";
56
import { APIMetric } from "./model";
67

78
const API_KEY_QUERY_PARAM = "api_key";

src/metrics/extension.spec.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import nock from "nock";
22

3-
import { isExtensionRunning, flushExtension, EXTENSION_URL } from "./extension";
3+
import { isExtensionRunning, EXTENSION_URL } from "./extension";
44
import mock from "mock-fs";
55

66
describe("isExtensionRunning", () => {
@@ -22,15 +22,3 @@ describe("isExtensionRunning", () => {
2222
expect(ran).toBeFalsy();
2323
});
2424
});
25-
describe("flushExtension", () => {
26-
it("calls flush on the extension", async () => {
27-
const scope = nock(EXTENSION_URL).post("/lambda/flush", JSON.stringify({})).reply(200);
28-
await flushExtension();
29-
expect(scope.isDone()).toBeTruthy();
30-
});
31-
it("catches error when flush doesn't respond", async () => {
32-
const scope = nock(EXTENSION_URL).post("/lambda/flush", JSON.stringify({})).replyWithError("Unavailable");
33-
await flushExtension();
34-
expect(scope.isDone()).toBeTruthy();
35-
});
36-
});

src/metrics/extension.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,13 @@
1-
import { URL } from "url";
2-
import { post, logDebug, logError } from "../utils";
1+
import { logDebug } from "../utils";
32
import fs from "fs";
43

54
export const EXTENSION_URL = "http://127.0.0.1:8124";
65
const EXTENSION_PATH = "/opt/extensions/datadog-agent";
7-
const LOCAL_FLUSH_PATH = "/lambda/flush";
8-
const LOCAL_FLUSH_TIMEOUT_MS = 100;
96

107
export async function isExtensionRunning() {
118
const extensionExists = await fileExists(EXTENSION_PATH);
129
if (!extensionExists) {
13-
logDebug(`Extension Layer is not present`);
14-
return false;
15-
}
16-
return true;
17-
}
18-
19-
export async function flushExtension(): Promise<boolean> {
20-
const url = new URL(LOCAL_FLUSH_PATH, EXTENSION_URL);
21-
const result = await post(url, {}, { timeout: LOCAL_FLUSH_TIMEOUT_MS });
22-
if (!result.success) {
23-
logError(`Failed to flush extension. ${result.errorMessage}`);
10+
logDebug(`Extension Layer is not present.`);
2411
return false;
2512
}
2613
return true;

src/metrics/listener.spec.ts

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { EXTENSION_URL } from "./extension";
77
import { MetricsListener } from "./listener";
88
import StatsDClient from "hot-shots";
99
jest.mock("hot-shots");
10+
jest.requireActual("../utils/request");
1011

1112
const siteURL = "example.com";
1213

@@ -78,7 +79,7 @@ describe("MetricsListener", () => {
7879
siteURL,
7980
});
8081

81-
listener.onStartInvocation({});
82+
await listener.onStartInvocation({});
8283
listener.sendDistributionMetric("my-metric", 10, false, "tag:a", "tag:b");
8384
await expect(listener.onCompleteInvocation()).resolves.toEqual(undefined);
8485
});
@@ -153,10 +154,50 @@ describe("MetricsListener", () => {
153154
});
154155
// jest.useFakeTimers();
155156

156-
listener.onStartInvocation({});
157+
await listener.onStartInvocation({});
157158
listener.sendDistributionMetricWithDate("my-metric", 10, new Date(1584983836 * 1000), false, "tag:a", "tag:b");
158159
await listener.onCompleteInvocation();
159160

160161
expect(spy).toHaveBeenCalledWith(`{"e":1584983836,"m":"my-metric","t":["tag:a","tag:b"],"v":10}\n`);
161162
});
163+
164+
describe("_localFlush", () => {
165+
let listener: MetricsListener | undefined;
166+
beforeEach(async () => {
167+
mock({
168+
"/opt/extensions/datadog-agent": Buffer.from([0]),
169+
});
170+
const distributionMock = jest.fn();
171+
(StatsDClient as any).mockImplementation(() => {
172+
return {
173+
distribution: distributionMock,
174+
close: (callback: any) => callback(undefined),
175+
};
176+
});
177+
const kms = new MockKMS("kms-api-key-decrypted");
178+
listener = new MetricsListener(kms as any, {
179+
apiKey: "api-key",
180+
apiKeyKMS: "",
181+
enhancedMetrics: false,
182+
logForwarding: true,
183+
shouldRetryMetrics: false,
184+
localTesting: true,
185+
siteURL,
186+
});
187+
await listener.onStartInvocation({});
188+
});
189+
afterEach(() => {
190+
listener = undefined;
191+
});
192+
it("calls flush on the agent", async () => {
193+
const scope = nock(EXTENSION_URL).post("/lambda/flush", JSON.stringify({})).reply(200);
194+
await listener!["_localFlush"]();
195+
expect(scope.isDone()).toBeTruthy();
196+
});
197+
it("catches error when flush doesn't respond", async () => {
198+
const scope = nock(EXTENSION_URL).post("/lambda/flush", JSON.stringify({})).replyWithError("Unavailable");
199+
await listener!["_localFlush"]();
200+
expect(scope.isDone()).toBeTruthy();
201+
});
202+
});
162203
});

src/metrics/listener.ts

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import { StatsD } from "hot-shots";
22
import { promisify } from "util";
33
import { logDebug, logError } from "../utils";
4-
import { APIClient } from "./api";
5-
import { flushExtension, isExtensionRunning } from "./extension";
4+
import { EXTENSION_URL, isExtensionRunning } from "./extension";
65
import { KMSService } from "./kms-service";
76
import { writeMetricToStdout } from "./metric-log";
87
import { Distribution } from "./model";
9-
import { Processor } from "./processor";
8+
import { URL } from "url";
109

11-
const metricsBatchSendIntervalMS = 10000; // 10 seconds
10+
const METRICS_BATCH_SEND_INTERVAL = 10000; // 10 seconds
11+
const LOCAL_FLUSH_TIMEOUT_MS = 100;
12+
const LOCAL_FLUSH_PATH = "/lambda/flush";
1213

1314
export interface MetricsConfig {
1415
/**
@@ -56,7 +57,7 @@ export interface MetricsConfig {
5657
}
5758

5859
export class MetricsListener {
59-
private currentProcessor?: Promise<Processor>;
60+
private currentProcessor?: Promise<any>;
6061
private apiKey: Promise<string>;
6162
private statsDClient?: StatsD;
6263
private isExtensionRunning?: boolean = undefined;
@@ -83,6 +84,7 @@ export class MetricsListener {
8384

8485
return;
8586
}
87+
8688
this.currentProcessor = this.createProcessor(this.config, this.apiKey);
8789
}
8890

@@ -120,16 +122,8 @@ export class MetricsListener {
120122
logError("failed to flush metrics", error as Error);
121123
}
122124
}
123-
try {
124-
if (this.isExtensionRunning && this.config.localTesting) {
125-
logDebug(`Flushing Extension for local test`);
126-
await flushExtension();
127-
}
128-
} catch (error) {
129-
if (error instanceof Error) {
130-
logError("failed to flush extension", error as Error);
131-
}
132-
}
125+
126+
await this._localFlush();
133127
this.currentProcessor = undefined;
134128
}
135129

@@ -171,12 +165,17 @@ export class MetricsListener {
171165
}
172166

173167
private async createProcessor(config: MetricsConfig, apiKey: Promise<string>) {
174-
const key = await apiKey;
175-
const url = `https://api.${config.siteURL}`;
176-
const apiClient = new APIClient(key, url);
177-
const processor = new Processor(apiClient, metricsBatchSendIntervalMS, config.shouldRetryMetrics);
178-
processor.startProcessing();
179-
return processor;
168+
if (!this.isExtensionRunning && !this.config.logForwarding) {
169+
const { APIClient } = require("./api");
170+
const { Processor } = require("./processor");
171+
172+
const key = await apiKey;
173+
const url = `https://api.${config.siteURL}`;
174+
const apiClient = new APIClient(key, url);
175+
const processor = new Processor(apiClient, METRICS_BATCH_SEND_INTERVAL, config.shouldRetryMetrics);
176+
processor.startProcessing();
177+
return processor;
178+
}
180179
}
181180

182181
private async getAPIKey(config: MetricsConfig) {
@@ -193,4 +192,21 @@ export class MetricsListener {
193192
}
194193
return "";
195194
}
195+
196+
private async _localFlush() {
197+
try {
198+
if (this.isExtensionRunning && this.config.localTesting) {
199+
const { post } = require("../utils/request");
200+
const url = new URL(LOCAL_FLUSH_PATH, EXTENSION_URL);
201+
const result = await post(url, {}, { timeout: LOCAL_FLUSH_TIMEOUT_MS });
202+
if (!result.success) {
203+
logError(`Failed to flush extension. ${result.errorMessage}`);
204+
}
205+
}
206+
} catch (error) {
207+
if (error instanceof Error) {
208+
logError("Failed to flush extension", error);
209+
}
210+
}
211+
}
196212
}

src/utils/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@ export { didFunctionColdStart, getSandboxInitTags, setSandboxInit, isProactiveIn
22
export { wrap, promisifiedHandler } from "./handler";
33
export { Timer } from "./timer";
44
export { logError, logDebug, Logger, setLogLevel, setLogger, LogLevel } from "./log";
5-
export { get, post } from "./request";
65
export { tagObject } from "./tag-object";

0 commit comments

Comments
 (0)