Skip to content

Commit 6b34e5d

Browse files
committed
make sure flushing is not canceled
1 parent 73e3d8d commit 6b34e5d

File tree

8 files changed

+56
-51
lines changed

8 files changed

+56
-51
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
3232

3333
The latest layer is: `arn:aws:lambda:${your-region-here}:097948374213:layer:baselime-node:8`
3434

35+
36+
The latest layer is: `arn:aws:lambda:${your-region-here}:097948374213:layer:baselime-node:8`
37+
38+
39+
The latest layer is: `arn:aws:lambda:${your-region-here}:374211872663:layer:baselime-node:13`
40+
41+
42+
The latest layer is: `arn:aws:lambda:${your-region-here}:374211872663:layer:baselime-node:14`
43+
44+
45+
The latest layer is: `arn:aws:lambda:${your-region-here}:374211872663:layer:baselime-node:15`
46+
3547
## [0.1.11] 2023-07-22
3648

3749
- publish via CI

examples/serverless/serverless.yml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ service: tracing
22

33
package:
44
individually: true
5-
patterns:
6-
- 'node_modules/@baselime/lambda-node-opentelemetry'
75

86
plugins:
97
- serverless-esbuild
@@ -15,8 +13,6 @@ provider:
1513
region: eu-west-2
1614
architecture: arm64
1715
versionFunctions: false
18-
layers:
19-
- arn:aws:lambda:eu-west-2:097948374213:layer:baselime-extension-arm64:1
2016
iam:
2117
role:
2218
statements:
@@ -29,12 +25,8 @@ provider:
2925
- Effect: Allow
3026
Action: 'events:PutEvents'
3127
Resource: '*'
32-
environment:
33-
BASELIME_KEY: ${env:BASELIME_KEY}
34-
NODE_OPTIONS: --require node_modules/@baselime/lambda-node-opentelemetry/lambda-wrapper.js
35-
OTEL_LOG_LEVEL: debug
36-
COLLECTOR_URL: https://otel.baselime.cc/v1
37-
DISPATCH_POST_URI: https://lambda-extension.baselime.cc
28+
tags:
29+
'baselime:tracing': true
3830
functions:
3931
hello:
4032
handler: src/main.handler

examples/serverless/src/api.js

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import Dynamodb from 'aws-sdk/clients/dynamodb';
22
import SNS from 'aws-sdk/clients/sns';
33
import EventBridge from 'aws-sdk/clients/eventbridge';
4-
import { wrap } from '@baselime/lambda-node-opentelemetry';
54

65
const dynamo = new Dynamodb();
76
const sns = new SNS();
87
const eventbridge = new EventBridge();
98

10-
export const handler = wrap(async (event) => {
9+
export const handler = async (event, context) => {
10+
context.callbackWaitForEmptyEventLoop = false;
1111
await sns.publish({ TopicArn: process.env.TOPIC_ARN, Message: 'wow much payload' }).promise()
1212
await eventbridge.putEvents({
1313
Entries: [{
@@ -16,24 +16,24 @@ export const handler = wrap(async (event) => {
1616
}]
1717
}).promise()
1818
const random = Math.random();
19-
if(random < 0.3) {
20-
const response = await dynamo.updateItem({
21-
TableName: 'this-table-does-not-exist',
22-
ReturnValues: 'ALL_NEW',
23-
Key: {
24-
id: {
25-
S: 'test'
26-
}
27-
},
28-
UpdateExpression: 'ADD #c :c',
29-
ExpressionAttributeNames: {
30-
'#c': 'count'
31-
},
32-
ExpressionAttributeValues: {
33-
':c': { N: '1' }
34-
}
35-
}).promise()
36-
}
19+
// if(random < 0.3) {
20+
// const response = await dynamo.updateItem({
21+
// TableName: 'this-table-does-not-exist',
22+
// ReturnValues: 'ALL_NEW',
23+
// Key: {
24+
// id: {
25+
// S: 'test'
26+
// }
27+
// },
28+
// UpdateExpression: 'ADD #c :c',
29+
// ExpressionAttributeNames: {
30+
// '#c': 'count'
31+
// },
32+
// ExpressionAttributeValues: {
33+
// ':c': { N: '1' }
34+
// }
35+
// }).promise()
36+
// }
3737
const response = await dynamo.updateItem({
3838
TableName: process.env.DB_NAME,
3939
ReturnValues: 'ALL_NEW',
@@ -56,4 +56,4 @@ export const handler = wrap(async (event) => {
5656
data: response
5757
})
5858
}
59-
});
59+
};
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
const { wrap } = require('@baselime/lambda-node-opentelemetry');
21

3-
exports.handler = wrap(async (event) => {
2+
exports.handler = async (event, context) => {
3+
context.callbackWaitForEmptyEventLoop = false;
44
console.log(event.Records[0].Sns)
55
return {
66
message: 'req processed'
77
}
8-
});
8+
};
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
const { wrap } = require('@baselime/lambda-node-opentelemetry');
21

3-
exports.handler = wrap(async (event) => {
2+
exports.handler = async (event, context) => {
3+
context.callbackWaitForEmptyEventLoop = false;
44
console.log(event)
55
return {
66
message: 'req processed'
77
}
8-
});
8+
};

examples/serverless/src/main.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const tiny = require("tiny-json-http");
22
const { context, trace, } = require("@opentelemetry/api");
3-
const { wrap } = require("@baselime/lambda-node-opentelemetry");
43

54
const { flattenObject } = require("./utils");
65

@@ -36,15 +35,16 @@ function trackAll(name, lib) {
3635
return tracedLib;
3736
}
3837

39-
exports.handler = wrap(async (e) => {
38+
exports.handler = async (e, context) => {
39+
context.callbackWaitForEmptyEventLoop = false;
4040
const { body: customer } = await track("tiny.get", tiny.get, {
4141
url: `${process.env.API_URL}/hello`,
4242
});
4343

44-
await track("tiny.post", tiny.post, {
45-
url: "https://eokl0ly5zia7pe1.m.pipedream.net",
46-
data: customer,
47-
});
44+
// await track("tiny.post", tiny.post, {
45+
// url: "https://eokl0ly5zia7pe1.m.pipedream.net",
46+
// data: customer,
47+
// });
4848

4949
return customer;
50-
});
50+
};

src/index.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Context } from 'aws-lambda';
55
export * as logger from './logger';
66

77
declare const global : {
8-
baselimeLambdaFlush: () => void;
8+
baselimeLambdaFlush: () => Promise<void>;
99
}
1010

1111
export function wrap(handler: Handler) {
@@ -45,11 +45,9 @@ export function wrap(handler: Handler) {
4545
span.end();
4646
throw e
4747
} finally {
48-
4948
if (global.baselimeLambdaFlush) {
50-
global.baselimeLambdaFlush();
49+
await global.baselimeLambdaFlush();
5150
}
52-
5351
}
5452
}
5553
}
@@ -118,4 +116,3 @@ function extractContext(event: any) {
118116
}
119117
return propagation.extract(api.context.active(), {}, headerGetter);
120118
}
121-

src/lambda-wrapper.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ declare const global : {
6868
}
6969

7070

71-
global['baselimeLambdaFlush'] = () => {
72-
provider.forceFlush();
71+
global['baselimeLambdaFlush'] = async () => {
72+
try {
73+
await provider.forceFlush();
74+
} catch(e) {
75+
console.log(e)
76+
}
7377
};

0 commit comments

Comments
 (0)