Skip to content

Commit

Permalink
fix: add a way of unit testing lambda quickly and fix the lowercase l…
Browse files Browse the repository at this point in the history
…ogical error (#600)

* add a way of testing and fix lowercase logical error

* add more tests and fix console log
  • Loading branch information
wmoussa-gc authored Feb 22, 2024
1 parent 05ce856 commit 4b733d7
Show file tree
Hide file tree
Showing 4 changed files with 3,995 additions and 2 deletions.
10 changes: 8 additions & 2 deletions aws/alarms/lambda/notify_slack/notify_slack.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ function getMessage(message) {
function getSNSMessageSeverity(message) {
const errorMessages = ["error", "critical"];
const warningMessages = ["warning", "failure"];
const alarm_ok_status = '"NewStateValue":"OK"'; // This is the string that is returned when the alarm is reset
const alarm_ok_status = '"newstatevalue":"ok"'; // This is the string that is returned when the alarm is reset

message = message.toLowerCase();

if (message.indexOf("SEV1") != -1) return "SEV1";
if (message.indexOf("sev1") != -1) return "SEV1";

for (var errorMessagesItem in errorMessages) {
if (
Expand Down Expand Up @@ -61,12 +61,14 @@ function getSNSMessageSeverity(message) {
function sendToOpsGenie(logGroup, logMessage, logSeverity, context) {

if (logSeverity !== 1 && logSeverity !== "SEV1") {
console.log(`Skipping sending to OpsGenie because logSeverity is not SEV1: ${logSeverity}`);
return; // skip sending to OpsGenie
}

var postData = {
message: logMessage,
entity: `*${logGroup}*`,
responders: [{ "id": "dbe73fd1-8bfc-4345-bc0a-36987a684d26", "type": "team" }], // Forms Team
priority: "P1",
};

Expand All @@ -81,6 +83,10 @@ function sendToOpsGenie(logGroup, logMessage, logSeverity, context) {
},
};

console.log("Sending to OpsGenie...");
console.log(JSON.stringify(postData));
console.log(JSON.stringify(options));

var req = https.request(options, function (res) {
res.setEncoding("utf8");
res.on("data", function () {
Expand Down
77 changes: 77 additions & 0 deletions aws/alarms/lambda/notify_slack/notify_slack.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
const lambdaLocal = require('lambda-local');
const zlib = require("zlib");

/*
remove the skip to run the test
*/
test.skip('Investigate OpsGenie send function for SNS SEV1', async () => {
const result = await lambdaLocal.execute({
event: {
Records: [
{
Sns: {
Message: JSON.stringify({
AlarmName: 'test-alarm-SEV1',
AlarmDescription: 'test-alarm-description',
NewStateValue: 'ALARM',
NewStateReason: 'test-alarm-reason',
StateChangeTime: '2023-07-13T13:48:30.151Z',
Region: 'us-west-2',
}),
},
},
],
},
lambdaPath: 'notify_slack.js'
});
});


/*
remove the skip to run the test
CloudWatch Logs are delivered to the subscribed Lambda function as a list that is gzip-compressed and base64-encoded.
*/
test.skip('Investigate OpsGenie send function for Cloud Watch Log with severity=1', async () => {
const logData = JSON.stringify({
"messageType": "DATA_MESSAGE",
"owner": "123456789123",
"logGroup": "testLogGroup",
"logStream": "testLogStream",
"subscriptionFilters": [
"testFilter"
],
"logEvents": [
{
"id": "eventId1",
"timestamp": 1440442987000,
"message": `{
"level": "error",
"severity": 1,
"msg": "User clcqov5tv000689x5aib9uelt performed GrantFormAccess on Form clfsi1lva008789xagkeouz3w\\nAccess granted to bee@cds-snc.ca"
}`

}
]
});
const encodedData = compressAndEncode(logData);

console.log(encodedData);

const result = await lambdaLocal.execute({
event: {
"awslogs": {
"data": `${encodedData}`
}
},
lambdaPath: 'notify_slack.js'
});
});

function compressAndEncode(data) {
// Compress the data using zlib
const compressedData = zlib.gzipSync(data);
// Encode the compressed data using base64
const encodedData = compressedData.toString('base64');
return encodedData;
}
Loading

0 comments on commit 4b733d7

Please sign in to comment.