From c87585c228144f4f9358a30101b1822f6fe0b9fa Mon Sep 17 00:00:00 2001 From: x246019 Date: Tue, 17 Jun 2025 10:57:17 -0700 Subject: [PATCH 1/3] Circuit breaker should force number type for batch size and accept field from opt for control --- src/flavors/circuitbreaker.js | 2 +- test/unit/flavors/circuitbreaker.test.js | 83 +++++++++++++++++++++++- 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/src/flavors/circuitbreaker.js b/src/flavors/circuitbreaker.js index 7a252939..7d181a08 100644 --- a/src/flavors/circuitbreaker.js +++ b/src/flavors/circuitbreaker.js @@ -15,6 +15,6 @@ const toUpdateRequest = (opt) => faulty((uow) => ({ UUID: process.env.ESM_ID, // Ref: TriggerEventSourceMappingDynamodbEntitiesTable Enabled: uow.event.alarmData.state.value !== 'ALARM', BatchSize: uow.event.alarmData.state.value === 'INSUFFICIENT_DATA' - ? 1 : process.env.BATCH_SIZE || 100, + ? 1 : Number(opt.circuitBreakerMaxBatchSize) || Number(process.env.CIRCUIT_BREAKER_MAX_BATCH_SIZE) || 100, }, })); diff --git a/test/unit/flavors/circuitbreaker.test.js b/test/unit/flavors/circuitbreaker.test.js index d09b10f5..df26701e 100644 --- a/test/unit/flavors/circuitbreaker.test.js +++ b/test/unit/flavors/circuitbreaker.test.js @@ -2,7 +2,7 @@ import 'mocha'; import { expect } from 'chai'; import sinon from 'sinon'; -import { initialize } from '../../../src'; +import { initialize, initializeFrom } from '../../../src'; import { fromAlarm } from '../../../src/from/cw'; @@ -125,4 +125,85 @@ describe('flavors/circuitbreaker.js', () => { }) .done(done); }); + + it('should enable event source mapping with batch size from opt)', (done) => { + const rules = [ + { + id: 'circuitBreaker', + flavor: circuitBreaker, + circuitBreakerMaxBatchSize: '10', + }, + ]; + const event = { + source: 'aws.cloudwatch', + alarmArn: + 'arn:aws:cloudwatch:us-east-1:444455556666:alarm:lambda-demo-metric-alarm', + accountId: '444455556666', + time: '2023-08-04T12:36:15.490+0000', + region: 'us-east-1', + alarmData: { + alarmName: 'lambda-demo-metric-alarm', + state: { + value: 'OK', + }, + previousState: { + value: 'INSUFFICIENT_DATA', + }, + }, + }; + + initialize({ + ...initializeFrom(rules), + }) + .assemble(fromAlarm(event), false) + .collect() + // .tap((collected) => console.log(JSON.stringify(collected, null, 2))) + .tap((collected) => { + expect(collected.length).to.equal(1); + expect(collected[0].pipeline).to.equal('circuitBreaker'); + expect(collected[0].updateRequest).to.deep.equal({ + UUID: 'a092f90d-9948-4964-95b5-32c46093f734', + Enabled: true, + BatchSize: 10, + }); + }) + .done(done); + }); + it('should enable event source mapping and force Number type for env var of CIRCUIT_BREAKER_MAX_BATCH_SIZE', (done) => { + process.env.CIRCUIT_BREAKER_MAX_BATCH_SIZE = '10'; + const event = { + source: 'aws.cloudwatch', + alarmArn: + 'arn:aws:cloudwatch:us-east-1:444455556666:alarm:lambda-demo-metric-alarm', + accountId: '444455556666', + time: '2023-08-04T12:36:15.490+0000', + region: 'us-east-1', + alarmData: { + alarmName: 'lambda-demo-metric-alarm', + state: { + value: 'OK', + }, + previousState: { + value: 'INSUFFICIENT_DATA', + }, + }, + }; + + initialize({ + circuitBreaker, + }) + .assemble(fromAlarm(event), false) + .collect() + // .tap((collected) => console.log(JSON.stringify(collected, null, 2))) + .tap((collected) => { + expect(collected.length).to.equal(1); + expect(collected[0].pipeline).to.equal('circuitBreaker'); + expect(collected[0].updateRequest).to.deep.equal({ + UUID: 'a092f90d-9948-4964-95b5-32c46093f734', + Enabled: true, + BatchSize: 10, + }); + }) + .done(done); + }); }); From 48e72957e96041a35b271518864644d0e21ee354 Mon Sep 17 00:00:00 2001 From: x246019 Date: Wed, 18 Jun 2025 11:58:40 -0700 Subject: [PATCH 2/3] falls back to original env var used if the new do not exist --- src/flavors/circuitbreaker.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/flavors/circuitbreaker.js b/src/flavors/circuitbreaker.js index 7d181a08..8e268e89 100644 --- a/src/flavors/circuitbreaker.js +++ b/src/flavors/circuitbreaker.js @@ -15,6 +15,9 @@ const toUpdateRequest = (opt) => faulty((uow) => ({ UUID: process.env.ESM_ID, // Ref: TriggerEventSourceMappingDynamodbEntitiesTable Enabled: uow.event.alarmData.state.value !== 'ALARM', BatchSize: uow.event.alarmData.state.value === 'INSUFFICIENT_DATA' - ? 1 : Number(opt.circuitBreakerMaxBatchSize) || Number(process.env.CIRCUIT_BREAKER_MAX_BATCH_SIZE) || 100, + ? 1 : Number(opt.circuitBreakerMaxBatchSize) + || Number(process.env.CIRCUIT_BREAKER_MAX_BATCH_SIZE) + || Number(process.env.BATCH_SIZE) + || 100, }, })); From 4c4f99f3a59e7929ea12f7006ff09d3602cd5687 Mon Sep 17 00:00:00 2001 From: x246019 Date: Wed, 18 Jun 2025 12:42:06 -0700 Subject: [PATCH 3/3] bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a32fe1fc..352fe356 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "aws-lambda-stream", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aws-lambda-stream", - "version": "1.1.2", + "version": "1.1.3", "license": "MIT", "dependencies": { "object-sizeof": "^2.6.0" diff --git a/package.json b/package.json index 86540c43..53c74d87 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aws-lambda-stream", - "version": "1.1.2", + "version": "1.1.3", "description": "Create stream processors with AWS Lambda functions.", "keywords": [ "aws",