From 63b8de8220d43bf052daa46f0f5c2c1eaf19f667 Mon Sep 17 00:00:00 2001 From: Luciano Mammino Date: Sun, 23 Jun 2019 18:54:59 +0100 Subject: [PATCH] Port waitForEmptyEventLoop in Warmup middlware (#345) to v.1.0.0 branch (#354) * Port waitForEmptyEventLoop in Warmup middlware (#345) to v.1.0.0 branch * version bump --- lerna.json | 2 +- package.json | 2 +- packages/cache/package.json | 2 +- packages/core/package.json | 2 +- .../package.json | 2 +- packages/error-logger/package.json | 2 +- packages/function-shield/package.json | 2 +- .../http-content-negotiation/package.json | 2 +- packages/http-cors/package.json | 2 +- packages/http-error-handler/package.json | 2 +- packages/http-event-normalizer/package.json | 2 +- packages/http-header-normalizer/package.json | 2 +- packages/http-json-body-parser/package.json | 2 +- packages/http-partial-response/package.json | 2 +- .../http-response-serializer/package.json | 2 +- packages/http-security-header/package.json | 2 +- .../http-urlencode-body-parser/package.json | 2 +- packages/input-output-logger/package.json | 2 +- packages/s3-key-normalizer/package.json | 2 +- packages/secrets-manager/package.json | 2 +- packages/ssm/package.json | 2 +- packages/validator/package.json | 2 +- packages/warmup/README.md | 1 + packages/warmup/__tests__/index.js | 65 +++++++++++++++++++ packages/warmup/index.d.ts | 1 + packages/warmup/package.json | 2 +- 26 files changed, 90 insertions(+), 23 deletions(-) diff --git a/lerna.json b/lerna.json index 133344220..1c804e350 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages": [ "packages/*" ], - "version": "1.0.0-alpha.33" + "version": "1.0.0-alpha.34" } diff --git a/package.json b/package.json index 0272154d5..c88540567 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "middy-monorepo", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "🛵 The stylish Node.js middleware engine for AWS Lambda", "engines": { "node": ">=6.10" diff --git a/packages/cache/package.json b/packages/cache/package.json index 0a2e382f3..e5d3956da 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@middy/cache", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Cache middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/core/package.json b/packages/core/package.json index 4d8d893bf..f957721fb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@middy/core", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "🛵 The stylish Node.js middleware engine for AWS Lambda (core package)", "engines": { "node": ">=6.10" diff --git a/packages/do-not-wait-for-empty-event-loop/package.json b/packages/do-not-wait-for-empty-event-loop/package.json index 3e062fbc3..f430ef03e 100644 --- a/packages/do-not-wait-for-empty-event-loop/package.json +++ b/packages/do-not-wait-for-empty-event-loop/package.json @@ -1,6 +1,6 @@ { "name": "@middy/do-not-wait-for-empty-event-loop", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Middleware for the middy framework that allows to easily disable the wait for empty event loop in a Lambda function", "engines": { "node": ">=6.10" diff --git a/packages/error-logger/package.json b/packages/error-logger/package.json index c7b636ea0..eb77ed7c1 100644 --- a/packages/error-logger/package.json +++ b/packages/error-logger/package.json @@ -1,6 +1,6 @@ { "name": "@middy/error-logger", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Input and output logger middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/function-shield/package.json b/packages/function-shield/package.json index 9a5c2bd90..2bbd2fa2a 100644 --- a/packages/function-shield/package.json +++ b/packages/function-shield/package.json @@ -1,6 +1,6 @@ { "name": "@middy/function-shield", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Hardens AWS Lambda execution environment", "engines": { "node": ">=6.10" diff --git a/packages/http-content-negotiation/package.json b/packages/http-content-negotiation/package.json index 5142bb64a..6f75f3774 100644 --- a/packages/http-content-negotiation/package.json +++ b/packages/http-content-negotiation/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-content-negotiation", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Http content negotiation middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-cors/package.json b/packages/http-cors/package.json index ec79e0009..aff8c392e 100644 --- a/packages/http-cors/package.json +++ b/packages/http-cors/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-cors", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "CORS (Cross-Origin Resource Sharing) middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-error-handler/package.json b/packages/http-error-handler/package.json index 27f844d3f..87a40bcd3 100644 --- a/packages/http-error-handler/package.json +++ b/packages/http-error-handler/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-error-handler", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Http error handler middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-event-normalizer/package.json b/packages/http-event-normalizer/package.json index fe3b3509e..3c17cbb84 100644 --- a/packages/http-event-normalizer/package.json +++ b/packages/http-event-normalizer/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-event-normalizer", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Http event normalizer middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-header-normalizer/package.json b/packages/http-header-normalizer/package.json index 1569bb3b8..027dc13b2 100644 --- a/packages/http-header-normalizer/package.json +++ b/packages/http-header-normalizer/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-header-normalizer", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Http header normalizer middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-json-body-parser/package.json b/packages/http-json-body-parser/package.json index ba2b59620..8724e98b6 100644 --- a/packages/http-json-body-parser/package.json +++ b/packages/http-json-body-parser/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-json-body-parser", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Http JSON body parser middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-partial-response/package.json b/packages/http-partial-response/package.json index f8c11224a..d28930bb3 100644 --- a/packages/http-partial-response/package.json +++ b/packages/http-partial-response/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-partial-response", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Http partial response middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-response-serializer/package.json b/packages/http-response-serializer/package.json index 05c6f74a8..7694c274f 100644 --- a/packages/http-response-serializer/package.json +++ b/packages/http-response-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-response-serializer", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Http response serializer middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/http-security-header/package.json b/packages/http-security-header/package.json index 796a4abb4..ff86b4912 100644 --- a/packages/http-security-header/package.json +++ b/packages/http-security-header/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-security-header", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Applies best practice security headers to responses. It's a simplified port of HelmetJS", "engines": { "node": ">=6.10" diff --git a/packages/http-urlencode-body-parser/package.json b/packages/http-urlencode-body-parser/package.json index d1a570279..68ba2b90d 100644 --- a/packages/http-urlencode-body-parser/package.json +++ b/packages/http-urlencode-body-parser/package.json @@ -1,6 +1,6 @@ { "name": "@middy/http-urlencode-body-parser", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Urlencode body parser middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/input-output-logger/package.json b/packages/input-output-logger/package.json index cc7b02a65..3cb4388c0 100644 --- a/packages/input-output-logger/package.json +++ b/packages/input-output-logger/package.json @@ -1,6 +1,6 @@ { "name": "@middy/input-output-logger", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Input and output logger middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/s3-key-normalizer/package.json b/packages/s3-key-normalizer/package.json index af750cc09..e90bc9c25 100644 --- a/packages/s3-key-normalizer/package.json +++ b/packages/s3-key-normalizer/package.json @@ -1,6 +1,6 @@ { "name": "@middy/s3-key-normalizer", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "S3 key normalizer middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/secrets-manager/package.json b/packages/secrets-manager/package.json index 25928aa72..18cdbc678 100644 --- a/packages/secrets-manager/package.json +++ b/packages/secrets-manager/package.json @@ -1,6 +1,6 @@ { "name": "@middy/secrets-manager", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Secrets Manager middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/ssm/package.json b/packages/ssm/package.json index 2794155fd..94b8b4bc1 100644 --- a/packages/ssm/package.json +++ b/packages/ssm/package.json @@ -1,6 +1,6 @@ { "name": "@middy/ssm", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "SSM (EC2 Systems Manager) parameters middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/validator/package.json b/packages/validator/package.json index 757d2676d..05ff5a8d7 100644 --- a/packages/validator/package.json +++ b/packages/validator/package.json @@ -1,6 +1,6 @@ { "name": "@middy/validator", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Validator middleware for the middy framework", "engines": { "node": ">=6.10" diff --git a/packages/warmup/README.md b/packages/warmup/README.md index 0cdc7b16a..1fca0057e 100644 --- a/packages/warmup/README.md +++ b/packages/warmup/README.md @@ -49,6 +49,7 @@ npm install --save @middy/warmup - `isWarmingUp`: a function that accepts the `event` object as a parameter and returns `true` if the current event is a warmup event and `false` if it's a regular execution. The default function will check if the `event` object has a `source` property set to `serverless-plugin-warmup`. - `onWarmup`: a function that gets executed before the handler exits in case of warmup. By default the function just prints: `Exiting early via warmup Middleware`. + - `waitForEmptyEventLoop`: a boolean value (`null` by default), that if set will change the current value for `context.callbackWaitsForEmptyEventLoop`. In some circumstances it might be useful to force this value to be `false` to make sure that the lambda quits as early as possible in case of warmup (for instance if you have created a database connection in a previous middleware, this might be hanging and keeping you lambda active until timeout). ## Sample usage diff --git a/packages/warmup/__tests__/index.js b/packages/warmup/__tests__/index.js index 50ef7eea9..bdd0e4acb 100644 --- a/packages/warmup/__tests__/index.js +++ b/packages/warmup/__tests__/index.js @@ -75,4 +75,69 @@ describe('🥃 Warmup', () => { endTest() }) }) + + test(`Should execute handler with callbackWaitsForEmptyEventLoop if waitForEmptyEventLoop true`, (endTest) => { + console.log = jest.fn() + + const handler = middy((event, context, cb) => { + cb() + }) + handler.use(lambdaIsWarmingUp({ + waitForEmptyEventLoop: true + })) + + const event = { + source: 'serverless-plugin-warmup' + } + const context = {} + handler(event, context, (_, response) => { + expect(context.callbackWaitsForEmptyEventLoop).toBe(true) + expect(response).toBe('warmup') + endTest() + }) + }) + + test(`Should execute handler with callbackWaitsForEmptyEventLoop if waitForEmptyEventLoop false`, (endTest) => { + console.log = jest.fn() + + const handler = middy((event, context, cb) => { + cb() + }) + handler.use(lambdaIsWarmingUp({ + waitForEmptyEventLoop: false + })) + + const event = { + source: 'serverless-plugin-warmup' + } + const context = { + callbackWaitsForEmptyEventLoop: true + } + handler(event, context, (_, response) => { + expect(context.callbackWaitsForEmptyEventLoop).toBe(false) + expect(response).toBe('warmup') + endTest() + }) + }) + + test(`Should execute handler with callbackWaitsForEmptyEventLoop unchanged if waitForEmptyEventLoop is not set`, (endTest) => { + console.log = jest.fn() + + const handler = middy((event, context, cb) => { + cb() + }) + handler.use(lambdaIsWarmingUp({})) + + const event = { + source: 'serverless-plugin-warmup' + } + const context = { + callbackWaitsForEmptyEventLoop: true + } + handler(event, context, (_, response) => { + expect(context.callbackWaitsForEmptyEventLoop).toBe(true) + expect(response).toBe('warmup') + endTest() + }) + }) }) diff --git a/packages/warmup/index.d.ts b/packages/warmup/index.d.ts index af64d935a..25157136a 100644 --- a/packages/warmup/index.d.ts +++ b/packages/warmup/index.d.ts @@ -3,6 +3,7 @@ import middy from '../core' interface IWarmupOptions { isWarmingUp?: (event: any) => boolean; onWarmup?: (event: any) => void; + waitForEmptyEventLoop?: boolean; } declare function warmup(opts?: IWarmupOptions): middy.IMiddyMiddlewareObject; diff --git a/packages/warmup/package.json b/packages/warmup/package.json index 7d00ae486..f0d907162 100644 --- a/packages/warmup/package.json +++ b/packages/warmup/package.json @@ -1,6 +1,6 @@ { "name": "@middy/warmup", - "version": "1.0.0-alpha.33", + "version": "1.0.0-alpha.34", "description": "Warmup (cold start mitigation) middleware for the middy framework", "engines": { "node": ">=6.10"