8
8
sendDistributionMetric ,
9
9
sendDistributionMetricWithDate ,
10
10
_metricsQueue ,
11
+ emitTelemetryOnErrorOutsideHandler ,
11
12
} from "./index" ;
12
13
import {
13
14
incrementErrorsMetric ,
@@ -21,6 +22,8 @@ import { DatadogTraceHeaders } from "./trace/context/extractor";
21
22
import { SpanContextWrapper } from "./trace/span-context-wrapper" ;
22
23
import { TraceSource } from "./trace/trace-context-service" ;
23
24
import { inflateSync } from "zlib" ;
25
+ import { MetricsListener } from "./metrics/listener" ;
26
+ import { SpanOptions , TracerWrapper } from "./trace/tracer-wrapper" ;
24
27
25
28
jest . mock ( "./metrics/enhanced-metrics" ) ;
26
29
@@ -536,3 +539,58 @@ describe("sendDistributionMetricWithDate", () => {
536
539
expect ( _metricsQueue . length ) . toBe ( 1 ) ;
537
540
} ) ;
538
541
} ) ;
542
+
543
+ describe ( "emitTelemetryOnErrorOutsideHandler" , ( ) => {
544
+ let mockedStartSpan = jest . spyOn ( TracerWrapper . prototype , "startSpan" ) ;
545
+ beforeEach ( ( ) => {
546
+ jest . spyOn ( MetricsListener . prototype , "onStartInvocation" ) . mockImplementation ( ) ;
547
+ jest . spyOn ( TracerWrapper . prototype , "isTracerAvailable" , "get" ) . mockImplementation ( ( ) => true ) ;
548
+ } ) ;
549
+ afterEach ( ( ) => {
550
+ mockedIncrementErrors . mockClear ( ) ;
551
+ mockedStartSpan . mockClear ( ) ;
552
+ } ) ;
553
+ it ( "emits a metric when enhanced metrics are enabled" , async ( ) => {
554
+ process . env . DD_ENHANCED_METRICS = "true" ;
555
+ await emitTelemetryOnErrorOutsideHandler ( new ReferenceError ( "some error" ) , "myFunction" , Date . now ( ) ) ;
556
+ expect ( mockedIncrementErrors ) . toBeCalledTimes ( 1 ) ;
557
+ } ) ;
558
+
559
+ it ( "does not emit a metric when enhanced metrics are disabled" , async ( ) => {
560
+ process . env . DD_ENHANCED_METRICS = "false" ;
561
+ await emitTelemetryOnErrorOutsideHandler ( new ReferenceError ( "some error" ) , "myFunction" , Date . now ( ) ) ;
562
+ expect ( mockedIncrementErrors ) . toBeCalledTimes ( 0 ) ;
563
+ } ) ;
564
+
565
+ it ( "creates a span when tracing is enabled" , async ( ) => {
566
+ process . env . DD_TRACE_ENABLED = "true" ;
567
+ const functionName = "myFunction" ;
568
+ const startTime = Date . now ( ) ;
569
+ const fakeError = new ReferenceError ( "some error" ) ;
570
+ const spanName = "aws.lambda" ;
571
+
572
+ await emitTelemetryOnErrorOutsideHandler ( fakeError , functionName , startTime ) ;
573
+
574
+ const options : SpanOptions = {
575
+ tags : {
576
+ service : spanName ,
577
+ operation_name : spanName ,
578
+ resource_names : functionName ,
579
+ "resource.name" : functionName ,
580
+ "span.type" : "serverless" ,
581
+ "error.status" : 500 ,
582
+ "error.type" : fakeError . name ,
583
+ "error.message" : fakeError . message ,
584
+ "error.stack" : fakeError . stack ,
585
+ } ,
586
+ startTime,
587
+ } ;
588
+ expect ( mockedStartSpan ) . toBeCalledWith ( spanName , options ) ;
589
+ } ) ;
590
+
591
+ it ( "does not create a span when tracing is disabled" , async ( ) => {
592
+ process . env . DD_TRACE_ENABLED = "false" ;
593
+ await emitTelemetryOnErrorOutsideHandler ( new ReferenceError ( "some error" ) , "myFunction" , Date . now ( ) ) ;
594
+ expect ( mockedStartSpan ) . toBeCalledTimes ( 0 ) ;
595
+ } ) ;
596
+ } ) ;
0 commit comments