1
1
import { Context , Handler } from "aws-lambda" ;
2
- import {
3
- incrementErrorsMetric ,
4
- incrementInvocationsMetric ,
5
- KMSService ,
6
- MetricsConfig ,
7
- MetricsListener ,
8
- } from "./metrics" ;
2
+ import { MetricsConfig } from "./metrics" ;
3
+ import type { MetricsListener as MetricsListenerType } from "./metrics" ;
4
+
9
5
import { TraceConfig , TraceHeaders , TraceListener } from "./trace" ;
10
6
import {
11
7
logDebug ,
@@ -17,6 +13,8 @@ import {
17
13
setLogger ,
18
14
setLogLevel ,
19
15
} from "./utils" ;
16
+ import { getExtensionPath } from "./utils/extension-path" ;
17
+ import { existsSync } from "fs" ;
20
18
21
19
export { TraceHeaders } from "./trace" ;
22
20
@@ -77,8 +75,9 @@ export const defaultConfig: Config = {
77
75
siteURL : "" ,
78
76
} as const ;
79
77
80
- let currentMetricsListener : MetricsListener | undefined ;
78
+ let currentMetricsListener : MetricsListenerType | undefined ;
81
79
let currentTraceListener : TraceListener | undefined ;
80
+ let isExtension : boolean ;
82
81
83
82
/**
84
83
* Wraps your AWS lambda handler functions to add tracing/metrics support
@@ -97,7 +96,20 @@ export function datadog<TEvent, TResult>(
97
96
config ?: Partial < Config > ,
98
97
) : Handler < TEvent , TResult > {
99
98
const finalConfig = getConfig ( config ) ;
100
- const metricsListener = new MetricsListener ( new KMSService ( ) , finalConfig ) ;
99
+ let metricsListener : MetricsListenerType ;
100
+ let incrementErrorsMetric : any ;
101
+ let incrementInvocationsMetric : any ;
102
+ if ( ! isExtensionEnabled ( ) ) {
103
+ const {
104
+ MetricsListener,
105
+ KMSService,
106
+ incrementErrorsMetric : errorFunc ,
107
+ incrementInvocationsMetric : invoFunc ,
108
+ } = require ( "./metrics" ) ;
109
+ incrementErrorsMetric = errorFunc ;
110
+ incrementInvocationsMetric = invoFunc ;
111
+ metricsListener = new MetricsListener ( new KMSService ( ) , finalConfig ) ;
112
+ }
101
113
102
114
const traceListener = new TraceListener ( finalConfig ) ;
103
115
@@ -122,7 +134,7 @@ export function datadog<TEvent, TResult>(
122
134
try {
123
135
await traceListener . onStartInvocation ( event , context ) ;
124
136
await metricsListener . onStartInvocation ( event ) ;
125
- if ( finalConfig . enhancedMetrics ) {
137
+ if ( finalConfig . enhancedMetrics && ! isExtensionEnabled ( ) ) {
126
138
incrementInvocationsMetric ( metricsListener , context ) ;
127
139
}
128
140
} catch ( err ) {
@@ -145,7 +157,7 @@ export function datadog<TEvent, TResult>(
145
157
localResult ,
146
158
finalConfig . captureLambdaPayload ,
147
159
) ;
148
- if ( responseIs5xxError ) {
160
+ if ( responseIs5xxError && ! isExtensionEnabled ( ) ) {
149
161
incrementErrorsMetric ( metricsListener , context ) ;
150
162
}
151
163
}
@@ -156,7 +168,7 @@ export function datadog<TEvent, TResult>(
156
168
error = err ;
157
169
}
158
170
try {
159
- if ( didThrow && finalConfig . enhancedMetrics ) {
171
+ if ( didThrow && finalConfig . enhancedMetrics && ! isExtensionEnabled ( ) ) {
160
172
incrementErrorsMetric ( metricsListener , context ) ;
161
173
}
162
174
await metricsListener . onCompleteInvocation ( ) ;
@@ -299,3 +311,13 @@ function getRuntimeTag(): string {
299
311
const version = process . version ;
300
312
return `dd_lambda_layer:datadog-node${ version } ` ;
301
313
}
314
+
315
+ function isExtensionEnabled ( ) : boolean {
316
+ if ( isExtension !== undefined ) {
317
+ return isExtension ;
318
+ }
319
+
320
+ const extensionPath = getExtensionPath ( ) ;
321
+ isExtension = existsSync ( extensionPath ) ;
322
+ return isExtension ;
323
+ }
0 commit comments