-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbackend.js
92 lines (85 loc) · 2.62 KB
/
backend.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
'use strict';
const AWS = require('aws-sdk');
const dynamo = require('./lib/dynamo');
const lambda = require('./lib/lambda');
module.exports.trigger = (event, context, callback) => {
dynamo.getSites().then((sites) => {
sites.forEach((site) => {
console.log(site);
lambda.checkSite(site);
});
callback(null, { message: "Trigger Succeeded" });
});
};
module.exports.probe = (event, context, callback) => {
const rp = require('request-promise');
const errors = require('request-promise/errors');
return new Promise((resolve, reject) => {
rp({uri: event.url, resolveWithFullResponse: true}).then((response) => {
const statusCode = response.statusCode.toString(10);
const array = {
site: event,
date: response.headers.date,
state: "OK",
code: statusCode,
message: response.statusMessage
};
return resolve(array);
}).catch(errors.StatusCodeError, (error) => {
const statusCode = error.statusCode.toString(10);
const array = {
site: event,
date: error.response.headers.date,
state: "Fail",
code: statusCode,
message: error.error
};
return resolve(array);
}).catch(errors.RequestError, (error) => {
const now = new Date().toUTCString();
const array = {
site: event,
date: now,
state: "Fail",
code: error.error.code,
message: error.message
};
return resolve(array);
});
}).then((array) => {
console.log(array);
if (event.code == undefined || event.code != array.code) {
console.log("Accessing DynamoDB...");
dynamo.updateSiteState(array);
lambda.callSNS(array);
}
return resolve(null, array);
});
};
module.exports.sns = (event, context, callback) => {
const snsConfig = {
sessionToken: process.env.AWS_SESSION_TOKEN,
region: process.env.AWS_REGION,
};
const sns = new AWS.SNS(snsConfig);
const params = {
TopicArn: process.env.SNS_TOPIC_ARN,
Subject: "Status " + event['state'] + " - " + event.site['name'],
Message: "Date : " + event['date'] + "\n" +
"StatusCode: " + event['code'] + "\n" +
"Check : " + event['state'] + "\n" +
"Name : " + event.site['name'] + "\n" +
"URL : " + event.site['url'] + "\n" +
"Response : " + event['message']
};
console.log("Start SNS Publish");
sns.publish(params, function(err, data){
if (err) console.log(err, err.stack);
else {
console.log(data);
}
});
callback(null, {
message: "SNS function success!"
});
};