From 629dd4f1aa94beb6ce1d13406fdd297cf6393709 Mon Sep 17 00:00:00 2001 From: Furkan Kaymak Date: Tue, 20 Jul 2021 23:42:10 +0300 Subject: [PATCH] route53 health check support --- config.js | 4 ++++ index.js | 42 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/config.js b/config.js index ce51bc77..10404c89 100644 --- a/config.js +++ b/config.js @@ -24,6 +24,10 @@ module.exports = { autoscaling: { // text in the sns message or topicname to match on to process this service type match_text: "AutoScaling" + }, + healthcheck: { + // text in the sns message or topicname to match on to process this service type + match_text: "route53-health-check" } } diff --git a/index.js b/index.js index c61ab4e6..b8964723 100644 --- a/index.js +++ b/index.js @@ -227,6 +227,42 @@ var handleElasticache = function(event, context) { return _.merge(slackMessage, baseSlackMessage); }; +var handleHealthCheck = function(event, context) { + var timestamp = (new Date(event.Records[0].Sns.Timestamp)).getTime()/1000; + var message = JSON.parse(event.Records[0].Sns.Message); + var region = event.Records[0].EventSubscriptionArn.split(":")[3]; + var subject = "AWS CloudWatch Notification"; + var alarmName = message.AlarmName; + var color = 'warning'; + var customMessage = "Monitor is "; + + if (message.NewStateValue === "ALARM") { + color = 'danger'; + customMessage += "*DOWN*: "; + } else if (message.NewStateValue === "OK") { + color = 'good'; + customMessage += "*UP*: "; + } + customMessage += alarmName.split("-awsroute53-")[0]; + + var slackMessage = { + text: "*" + subject + "*", + attachments: [ + { + "title": alarmName, + "title_link": "https://console.aws.amazon.com/cloudwatch/home?region=" + region + "#alarm:alarmFilter=ANY;name=" + encodeURIComponent(alarmName), + "color": color, + "fields": [ + { "value": customMessage, "short": false} + ], + "footer_icon": "https://d0.awsstatic.com/logos/Services/aws-icons_12_amazon-cloudwatch.png", + "ts": timestamp + } + ] + }; + return _.merge(slackMessage, baseSlackMessage); +}; + var handleCloudWatch = function(event, context) { var timestamp = (new Date(event.Records[0].Sns.Timestamp)).getTime()/1000; var message = JSON.parse(event.Records[0].Sns.Message); @@ -367,7 +403,11 @@ var processEvent = function(event, context) { catch (e) { } - if(eventSubscriptionArn.indexOf(config.services.codepipeline.match_text) > -1 || eventSnsSubject.indexOf(config.services.codepipeline.match_text) > -1 || eventSnsMessageRaw.indexOf(config.services.codepipeline.match_text) > -1){ + if(eventSubscriptionArn.indexOf(config.services.healthcheck.match_text) > -1 || eventSnsSubject.indexOf(config.services.healthcheck.match_text) > -1 || eventSnsMessageRaw.indexOf(config.services.healthcheck.match_text) > -1){ + console.log("processing route53 healthcheck notification"); + slackMessage = handleHealthCheck(event,context) + } + else if(eventSubscriptionArn.indexOf(config.services.codepipeline.match_text) > -1 || eventSnsSubject.indexOf(config.services.codepipeline.match_text) > -1 || eventSnsMessageRaw.indexOf(config.services.codepipeline.match_text) > -1){ console.log("processing codepipeline notification"); slackMessage = handleCodePipeline(event,context) }