11import api , { trace , context , propagation , Context as OtelContext , ROOT_CONTEXT , Attributes } from "@opentelemetry/api" ;
22import { Handler , DynamoDBStreamEvent , S3Event } from "aws-lambda" ;
3- import { flattenObject } from './utils' ;
3+ import { flatten } from "flat"
44import { Context } from 'aws-lambda' ;
55export * as logger from './logger' ;
66
7- declare const global : {
8- baselimeLambdaFlush : ( ) => Promise < void > ;
7+ declare const global : {
8+ baselimeLambdaFlush : ( ) => Promise < void > ;
99}
1010
1111type FaasDocument = {
@@ -23,17 +23,17 @@ export function wrap(handler: Handler) {
2323 const trigger = triggerToServiceType ( service ) ;
2424 const parent = determinParent ( event , service ) ;
2525 let document : FaasDocument | null = null ;
26- if ( trigger === 'datasource' ) {
27- if ( service === 'dynamodb' ) {
26+ if ( trigger === 'datasource' ) {
27+ if ( service === 'dynamodb' ) {
2828 document = getDynamodbStreamDocumentAttributes ( event ) ;
29- }
29+ }
3030
31- if ( service === 's3' ) {
31+ if ( service === 's3' ) {
3232 document = getS3DocumentAttributes ( event ) ;
3333 }
3434 }
3535 const span = tracer . startSpan ( lambda_context . functionName , {
36- attributes : flattenObject ( {
36+ attributes : flatten ( {
3737 event,
3838 context : lambda_context ,
3939 faas : {
@@ -53,16 +53,16 @@ export function wrap(handler: Handler) {
5353 } , parent ) ;
5454 coldstart = false ;
5555 const ctx = trace . setSpan ( context . active ( ) , span ) ;
56-
56+
5757 try {
5858 const result = await context . with ( ctx , handler as ( args : any [ ] ) => any , null , event , lambda_context ) ;
59- span . setAttributes ( flattenObject ( result , ' result' ) as Attributes ) ;
59+ span . setAttributes ( flatten ( { result } ) as Attributes ) ;
6060 span . end ( ) ;
6161 return result ;
6262 } catch ( e ) {
6363 const err = e as Error ;
6464 span . recordException ( err ) ;
65- span . setAttributes ( flattenObject ( { name : err . name , message : err . message , stack : err . stack } , 'error' ) as Attributes ) ;
65+ span . setAttributes ( flatten ( { error : { name : err . name , message : err . message , stack : err . stack } } ) as Attributes ) ;
6666 span . end ( ) ;
6767 throw e
6868 } finally {
@@ -75,35 +75,35 @@ export function wrap(handler: Handler) {
7575
7676
7777function detectService ( event : any ) {
78- if ( event . requestContext ?. apiId ) {
79- return "api-gateway" ;
80- }
78+ if ( event . requestContext ?. apiId ) {
79+ return "api-gateway" ;
80+ }
8181
82- if ( event . requestContext ?. apiId && event . version === "2.0" ) {
82+ if ( event . requestContext ?. apiId && event . version === "2.0" ) {
8383 return "api-gateway-v2" ;
8484 }
8585
86- if ( event . Records && event . Records [ 0 ] ?. EventSource === "aws:sns" ) {
87- return "sns" ;
88- }
86+ if ( event . Records && event . Records [ 0 ] ?. EventSource === "aws:sns" ) {
87+ return "sns" ;
88+ }
8989
90- if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:sqs" ) {
90+ if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:sqs" ) {
9191 return "sqs" ;
9292 }
9393
94- if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:kinesis" ) {
94+ if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:kinesis" ) {
9595 return "kinesis" ;
9696 }
9797
98- if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:dynamodb" ) {
98+ if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:dynamodb" ) {
9999 return "dynamodb" ;
100100 }
101101
102- if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:s3" ) {
102+ if ( event . Records && event . Records [ 0 ] ?. eventSource === "aws:s3" ) {
103103 return "s3" ;
104104 }
105105
106- return 'unknown'
106+ return 'unknown'
107107}
108108
109109function triggerToServiceType ( service : string ) {
@@ -127,21 +127,21 @@ function triggerToServiceType(service: string) {
127127}
128128
129129const headerGetter = {
130- keys ( carrier : Object ) : string [ ] {
131- return Object . keys ( carrier ) ;
132- } ,
133- get ( carrier : Record < string , string > , key : string ) : string | undefined {
134- return carrier [ key ] ;
135- } ,
130+ keys ( carrier : Object ) : string [ ] {
131+ return Object . keys ( carrier ) ;
132+ } ,
133+ get ( carrier : Record < string , string > , key : string ) : string | undefined {
134+ return carrier [ key ] ;
135+ } ,
136136} ;
137137
138138const snsGetter = {
139- keys ( carrier :Object ) : string [ ] {
140- return Object . keys ( carrier ) ;
141- } ,
142- get ( carrier : Record < string , { Value : string } > , key : string ) : string | undefined {
143- return carrier [ key ] ?. Value ;
144- } ,
139+ keys ( carrier : Object ) : string [ ] {
140+ return Object . keys ( carrier ) ;
141+ } ,
142+ get ( carrier : Record < string , { Value : string } > , key : string ) : string | undefined {
143+ return carrier [ key ] ?. Value ;
144+ } ,
145145} ;
146146
147147function determinParent ( event : any , service : string ) : OtelContext {
@@ -153,7 +153,7 @@ function determinParent(event: any, service: string): OtelContext {
153153 return extractedContext ;
154154 }
155155
156- if ( ! parent ) {
156+ if ( ! parent ) {
157157 return ROOT_CONTEXT
158158 }
159159 return parent ;
@@ -190,7 +190,7 @@ const DynamodbEventToDocumentOperations = {
190190
191191function getDynamodbStreamDocumentAttributes ( event : DynamoDBStreamEvent ) : FaasDocument {
192192 const unixTime = event ?. Records [ 0 ] ?. dynamodb ?. ApproximateCreationDateTime || Date . now ( ) / 1000 ;
193- return {
193+ return {
194194 // TODO we could do better for collection (infer from single table design patterns?)
195195 collection : ( event ?. Records [ 0 ] ?. eventSourceARN || '' ) . split ( "/" ) [ 1 ] ,
196196 name : ( event ?. Records [ 0 ] ?. eventSourceARN || '' ) . split ( "/" ) [ 1 ] ,
@@ -202,11 +202,11 @@ function getDynamodbStreamDocumentAttributes(event: DynamoDBStreamEvent): FaasDo
202202function getS3DocumentAttributes ( event : S3Event ) : FaasDocument {
203203 let operation = 'unkown' ;
204204
205- if ( event . Records [ 0 ] . eventName . startsWith ( 'ObjectCreated' ) ) {
205+ if ( event . Records [ 0 ] . eventName . startsWith ( 'ObjectCreated' ) ) {
206206 operation = 'insert' ;
207207 }
208-
209- if ( event . Records [ 0 ] . eventName . startsWith ( 'ObjectRemoved' ) ) {
208+
209+ if ( event . Records [ 0 ] . eventName . startsWith ( 'ObjectRemoved' ) ) {
210210 operation = 'delete' ;
211211 }
212212 return {
0 commit comments