-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
80 lines (67 loc) · 3.54 KB
/
index.ts
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
import { createClient } from 'redis';
import 'dotenv/config'
import * as ff from '@google-cloud/functions-framework';
ff.http('summit-status', async (req: ff.Request, res: ff.Response) => {
res.set('Access-Control-Allow-Origin', "*")
res.set('Access-Control-Allow-Methods', 'GET, POST');
if (req.method === "OPTIONS") {
// Send response to OPTIONS requests
res.set('Access-Control-Allow-Methods', 'GET');
res.set('Access-Control-Allow-Headers', 'Content-Type');
res.set('Access-Control-Max-Age', '3600');
res.status(204).send('');
return;
} else if(req.method == "POST") {
console.log("SummitStatusDataUpdater: Saving Data!"); // Used for querying Logging Explorer to find the "SummitStatusDataUpdater"
const client = await getClient();
await client.connect();
if(req.path == "/current-stats") {
if(req.body.current == undefined) {
return res.status(204).json({ status: "SUCCESS", message: "No data to save! This usually means an error occurred while querying the EFD database."});
} else {
await client.set('summit-status:current', JSON.stringify(req.body.current));
return res.status(200).json({ status: "SUCCESS", message: "Saved current stats data!"});
}
} else if(req.path == "/hourly-stats") {
if(req.body.hourly == undefined) {
return res.status(204).json({ status: "SUCCESS", message: "No data to save! This usually means an error occurred while querying the EFD database."});
} else {
await client.set('summit-status:hourly', JSON.stringify(req.body.hourly));
return res.status(200).json({ status: "SUCCESS", message: "Saved hourly stats data!"});
}
} else if(req.path == "/daily-stats") {
if(req.body.daily == undefined) {
return res.status(204).json({ status: "SUCCESS", message: "No data to save! This usually means an error occurred while querying the EFD database."});
} else {
await client.set("summit-status:daily", JSON.stringify(req.body.daily));
return res.status(200).json({ status: "SUCCESS", message: "Saved daily stats data!"});
}
} else {
return res.status(404).json({ status: "ERROR", message: "Incorrect endpoint."});
}
} else if(req.method == "GET") {
const client = await getClient();
await client.connect();
let currentSummitData = await client.get('summit-status:current');
let hourlySummitData = await client.get('summit-status:hourly');
let dailySummitData = await client.get('summit-status:daily');
let summitData = {
current: (currentSummitData == null) ? { error: "No data available." } : JSON.parse(currentSummitData),
hourly: (hourlySummitData == null) ? { error: "No data available." } : JSON.parse(hourlySummitData),
daily: (dailySummitData == null) ? { error: "No data available." } : JSON.parse(dailySummitData)
}
return res.status(200).send(summitData);
} else {
return res.status(400).send();
}
});
async function getClient() {
const client = createClient({
url: `redis://${process.env.REDIS_USERNAME}:${process.env.REDIS_PASS}@${process.env.REDIS_IP}:${process.env.REDIS_PORT}`,
socket: {
connectTimeout: 30000
}
});
client.on('error', err => console.log('Redis Client Error', err));
return client;
}