From e04ea6163932f6fdd523a5d6c679703e97071596 Mon Sep 17 00:00:00 2001 From: Alexander Girke Date: Thu, 17 Mar 2022 12:46:15 +0100 Subject: [PATCH] Add support for Cloudwatch Composite Alarms --- index.js | 17 ++++++----------- scripts/test.sh | 3 ++- test/sns-cloudwatch-composite-event.json | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 test/sns-cloudwatch-composite-event.json diff --git a/index.js b/index.js index c61ab4e6..3ac66fa6 100644 --- a/index.js +++ b/index.js @@ -233,12 +233,12 @@ var handleCloudWatch = function(event, context) { var region = event.Records[0].EventSubscriptionArn.split(":")[3]; var subject = "AWS CloudWatch Notification"; var alarmName = message.AlarmName; - var metricName = message.Trigger.MetricName; var oldState = message.OldStateValue; var newState = message.NewStateValue; var alarmDescription = message.AlarmDescription; var alarmReason = message.NewStateReason; var trigger = message.Trigger; + var triggeringChildren = message.TriggeringChildren || [] // for composite alarms var color = "warning"; if (message.NewStateValue === "ALARM") { @@ -247,6 +247,10 @@ var handleCloudWatch = function(event, context) { color = "good"; } + var triggerMessage = trigger + ? `${trigger.Statistic} ${trigger.MetricName} ${trigger.ComparisonOperator} ${trigger.Threshold} for ${trigger.EvaluationPeriods} period(s) of ${trigger.Period} seconds.` + : triggeringChildren.map(it => it.Arn).join(" and ") + " transitioned to ALARM state." + var slackMessage = { text: "*" + subject + "*", attachments: [ @@ -255,16 +259,7 @@ var handleCloudWatch = function(event, context) { "fields": [ { "title": "Alarm Name", "value": alarmName, "short": true }, { "title": "Alarm Description", "value": alarmDescription, "short": false}, - { - "title": "Trigger", - "value": trigger.Statistic + " " - + metricName + " " - + trigger.ComparisonOperator + " " - + trigger.Threshold + " for " - + trigger.EvaluationPeriods + " period(s) of " - + trigger.Period + " seconds.", - "short": false - }, + { "title": "Trigger", "value": triggerMessage, "short": false }, { "title": "Old State", "value": oldState, "short": true }, { "title": "Current State", "value": newState, "short": true }, { diff --git a/scripts/test.sh b/scripts/test.sh index c3e1b273..1873e3aa 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -5,9 +5,10 @@ $NODE_LAMBDA run -x test/context.json -j test/sns-codepipeline-event-stage-start $NODE_LAMBDA run -x test/context.json -j test/sns-codepipeline-event-stage-succeeded.json $NODE_LAMBDA run -x test/context.json -j test/sns-codepipeline-event-stage-failed.json $NODE_LAMBDA run -x test/context.json -j test/sns-cloudwatch-event.json +$NODE_LAMBDA run -x test/context.json -j test/sns-cloudwatch-composite-event.json $NODE_LAMBDA run -x test/context.json -j test/sns-event.json $NODE_LAMBDA run -x test/context.json -j test/sns-elastic-beanstalk-event.json $NODE_LAMBDA run -x test/context.json -j test/sns-codedeploy-event.json $NODE_LAMBDA run -x test/context.json -j test/sns-codedeploy-configuration.json $NODE_LAMBDA run -x test/context.json -j test/sns-elasticache-event.json -$NODE_LAMBDA run -x test/context.json -j test/sns-autoscaling-event.json \ No newline at end of file +$NODE_LAMBDA run -x test/context.json -j test/sns-autoscaling-event.json diff --git a/test/sns-cloudwatch-composite-event.json b/test/sns-cloudwatch-composite-event.json new file mode 100644 index 00000000..49db505b --- /dev/null +++ b/test/sns-cloudwatch-composite-event.json @@ -0,0 +1,18 @@ +{ + "Records": [ + { + "EventSource": "aws:sns", + "EventVersion": "1.0", + "EventSubscriptionArn": "arn:aws:sns:us-west-2:123456789123:CloudWatchNotifications:00000000-0000-0000-0000-000000000000", + "Sns": { + "Type": "Notification", + "MessageId": "82728d9c-3a57-5c0f-b8f6-d730c5b86ba4", + "TopicArn": "arn:aws:sns:us-west-2:123456789123:CloudWatchNotifications", + "Timestamp": "2022-03-17T09:21:51.857Z", + "Subject": "ALARM: \"composite-alarm\" in US West - Oregon", + "Message": "{\"AlarmName\":\"composite-alarm\",\"AlarmDescription\":\"A composite alarm.\",\"AWSAccountId\":\"123456789123\",\"NewStateValue\":\"ALARM\",\"NewStateReason\":\"arn:aws:cloudwatch:us-west-2:123456789123:alarm:Alarm1 transitioned to ALARM at Thursday 17 March, 2022 09:21:51 UTC\",\"StateChangeTime\":\"2022-03-17T09:21:51.792+0000\",\"Region\":\"US West - Oregon\",\"AlarmArn\":\"arn:aws:cloudwatch:us-west-2:123456789123:alarm:composite-alarm\",\"OKActions\":[\"arn:aws:sns:us-west-2:123456789123:topic\"],\"AlarmActions\":[\"arn:aws:sns:us-west-2:123456789123:topic\"],\"InsufficientDataActions\":[],\"OldStateValue\":\"OK\",\"AlarmRule\":\"ALARM(\\\"Alarm1\\\") AND ALARM(\\\"Alarm2\\\")\",\"TriggeringChildren\":[{\"Arn\":\"arn:aws:cloudwatch:us-west-2:123456789123:alarm:Alarm1\",\"State\":{\"Value\":\"ALARM\",\"Timestamp\":\"2022-03-17T09:21:51.792+0000\"}},{\"Arn\":\"arn:aws:cloudwatch:us-west-2:123456789123:alarm:Alarm2\",\"State\":{\"Value\":\"ALARM\",\"Timestamp\":\"2022-03-17T09:21:37.874+0000\"}}]}", + "MessageAttributes": {} + } + } + ] +}