-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhandler.js
69 lines (60 loc) · 1.79 KB
/
handler.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
'use strict'
let http = require('http')
let https = require('https')
require('dotenv').config()
const perfect = {
zipCode: process.env.zipCode,
minTemperature: process.env.minTemperature,
maxTemperature: process.env.maxTemperature,
maxPrecipitation: process.env.maxPrecipitation
}
let getCurrentWeather = (zipCode, callback) => {
http.get(`http://api.wunderground.com/api/${process.env.wundergroundApiKey}/conditions/q/${zipCode}.json`, (res) => {
res.setEncoding('utf8')
let rawData = ''
res.on('data', (chunk) => { rawData += chunk })
res.on('end', () => {
try {
callback(JSON.parse(rawData))
} catch (e) {
console.log(e.message)
}
})
})
}
let postToWebhook = () => {
var req = https.request({
host: process.env.successWebhookHost,
path: process.env.successWebhookPath,
method: 'POST'
})
req.write(JSON.stringify(perfect))
req.end()
}
module.exports.checkConditions = (event, context, callback) => {
getCurrentWeather(perfect.zipCode, (currentWeather) => {
let conditionsPerfect = true
let excuses = []
let temperature = parseFloat(currentWeather.current_observation.feelslike_f)
if ((temperature < perfect.minTemperature) || (temperature > perfect.maxTemperature)) {
conditionsPerfect = false
excuses.push({temperature})
}
let precipitationInTheNextHour = parseFloat(currentWeather.current_observation.precip_1hr_in)
if (precipitationInTheNextHour > perfect.maxPrecipitation) {
conditionsPerfect = false
excuses.push({precipitationInTheNextHour})
}
if (conditionsPerfect) {
postToWebhook()
}
const response = {
statusCode: 200,
body: JSON.stringify({
conditionsPerfect,
excuses
})
}
callback(null, response)
})
}