8
8
sendDistributionMetric ,
9
9
sendDistributionMetricWithDate ,
10
10
_metricsQueue ,
11
+ emitTelemetryOnErrorOutsideHandler ,
11
12
} from "./index" ;
12
13
import { incrementErrorsMetric , incrementInvocationsMetric } from "./metrics/enhanced-metrics" ;
13
14
import { LogLevel , setLogLevel } from "./utils" ;
@@ -17,6 +18,8 @@ import { DatadogTraceHeaders } from "./trace/context/extractor";
17
18
import { SpanContextWrapper } from "./trace/span-context-wrapper" ;
18
19
import { TraceSource } from "./trace/trace-context-service" ;
19
20
import { inflateSync } from "zlib" ;
21
+ import { MetricsListener } from "./metrics/listener" ;
22
+ import { SpanOptions , TracerWrapper } from "./trace/tracer-wrapper" ;
20
23
21
24
jest . mock ( "./metrics/enhanced-metrics" ) ;
22
25
@@ -469,3 +472,58 @@ describe("sendDistributionMetricWithDate", () => {
469
472
expect ( _metricsQueue . length ) . toBe ( 1 ) ;
470
473
} ) ;
471
474
} ) ;
475
+
476
+ describe ( "emitTelemetryOnErrorOutsideHandler" , ( ) => {
477
+ let mockedStartSpan = jest . spyOn ( TracerWrapper . prototype , "startSpan" ) ;
478
+ beforeEach ( ( ) => {
479
+ jest . spyOn ( MetricsListener . prototype , "onStartInvocation" ) . mockImplementation ( ) ;
480
+ jest . spyOn ( TracerWrapper . prototype , "isTracerAvailable" , "get" ) . mockImplementation ( ( ) => true ) ;
481
+ } ) ;
482
+ afterEach ( ( ) => {
483
+ mockedIncrementErrors . mockClear ( ) ;
484
+ mockedStartSpan . mockClear ( ) ;
485
+ } ) ;
486
+ it ( "emits a metric when enhanced metrics are enabled" , async ( ) => {
487
+ process . env . DD_ENHANCED_METRICS = "true" ;
488
+ await emitTelemetryOnErrorOutsideHandler ( new ReferenceError ( "some error" ) , "myFunction" , Date . now ( ) ) ;
489
+ expect ( mockedIncrementErrors ) . toBeCalledTimes ( 1 ) ;
490
+ } ) ;
491
+
492
+ it ( "does not emit a metric when enhanced metrics are disabled" , async ( ) => {
493
+ process . env . DD_ENHANCED_METRICS = "false" ;
494
+ await emitTelemetryOnErrorOutsideHandler ( new ReferenceError ( "some error" ) , "myFunction" , Date . now ( ) ) ;
495
+ expect ( mockedIncrementErrors ) . toBeCalledTimes ( 0 ) ;
496
+ } ) ;
497
+
498
+ it ( "creates a span when tracing is enabled" , async ( ) => {
499
+ process . env . DD_TRACE_ENABLED = "true" ;
500
+ const functionName = "myFunction" ;
501
+ const startTime = Date . now ( ) ;
502
+ const fakeError = new ReferenceError ( "some error" ) ;
503
+ const spanName = "aws.lambda" ;
504
+
505
+ await emitTelemetryOnErrorOutsideHandler ( fakeError , functionName , startTime ) ;
506
+
507
+ const options : SpanOptions = {
508
+ tags : {
509
+ service : spanName ,
510
+ operation_name : spanName ,
511
+ resource_names : functionName ,
512
+ "resource.name" : functionName ,
513
+ "span.type" : "serverless" ,
514
+ "error.status" : 500 ,
515
+ "error.type" : fakeError . name ,
516
+ "error.message" : fakeError . message ,
517
+ "error.stack" : fakeError . stack ,
518
+ } ,
519
+ startTime,
520
+ } ;
521
+ expect ( mockedStartSpan ) . toBeCalledWith ( spanName , options ) ;
522
+ } ) ;
523
+
524
+ it ( "does not create a span when tracing is disabled" , async ( ) => {
525
+ process . env . DD_TRACE_ENABLED = "false" ;
526
+ await emitTelemetryOnErrorOutsideHandler ( new ReferenceError ( "some error" ) , "myFunction" , Date . now ( ) ) ;
527
+ expect ( mockedStartSpan ) . toBeCalledTimes ( 0 ) ;
528
+ } ) ;
529
+ } ) ;
0 commit comments