Skip to content

Instantly share code, notes, and snippets.

@ppshein
Created August 14, 2019 17:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ppshein/ed3294e5a447e3e9ff3e63128217dafb to your computer and use it in GitHub Desktop.
Save ppshein/ed3294e5a447e3e9ff3e63128217dafb to your computer and use it in GitHub Desktop.
var AWS = require("aws-sdk");
var lambda = new AWS.Lambda({
region: 'ap-southeast-1'
});
function mongodbMonitorResult() {
return new Promise(function(resolve, reject) {
lambda.invoke({
FunctionName: process.env.MongoMonitorLambdaARN,
Payload: null
}, function(error, data) {
if (error) {
reject(error);
}
if(data.Payload) {
resolve(data.Payload);
}
});
});
}
function transformMongodbObject(members) {
let membersObject = JSON.parse(members);
let cwMetrics = [];
membersObject.map(member => {
if (member.health !== 1) {
let deadCluster = "Following MongoDB cluster " + member.name + "(" + member.stateStr + ") is not working anymore.";
cwMetrics.push(deadCluster);
}
});
return cwMetrics;
}
function sendSNSEmail(eventText) {
if (eventText.length > 0) {
let message = "";
eventText.map((text) => {
message = message + text + "\n";
});
let params = {
Message: message,
Subject: 'MongoDB Replica Status from Lambda',
TopicArn: process.env.TopicARN
};
let publishTextPromise = new AWS.SNS({apiVersion: '2010-03-31'}).publish(params).promise();
return publishTextPromise.then((data) => {
return data.MessageId;
}).catch((err) => {
return err.stack;
});
} else {
return 0;
}
}
exports.handler = function(event, context, callback) {
mongodbMonitorResult().then(transformMongodbObject).then(sendSNSEmail).then((result) => {
callback(null, 'success => ' + result);
}).catch((err) => {
callback(Error(err));
})
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment