This repository has been archived by the owner on Jul 8, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
stats.js
66 lines (60 loc) · 1.55 KB
/
stats.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
let http = require('http');
let https = require('https');
const servers = [
'vps71670.vps.ovh.ca',
'vps244529.ovh.net',
'vps117870.vps.ovh.ca',
];
function request(options) {
return new Promise((resolve, reject) => {
let client = (options.port === 443) ? https : http;
let req = client.request(options, res => {
res.setEncoding('utf8');
let body = '';
res.on('data', chunk => {
body += '' + chunk;
});
res.on('end', () => {
try {
resolve(JSON.parse(body));
} catch(err) {
reject(err);
}
});
});
req.on('error', reject);
req.end();
});
}
function mergeArrays(arrays) {
return arrays.reduce((acc, array) =>
acc.map((item, i) => item + array[i]));
}
function mergeStats(stats) {
return stats.reduce((acc, stat) => {
for (const key in acc) {
if (Object(acc[key]) instanceof Array) {
acc[key] = mergeArrays([acc[key], stat[key]]);
} else if (Object(acc[key]) instanceof Object) {
acc[key] = mergeStats([acc[key], stat[key]]);
}
}
return acc;
});
}
function getServerAnalytics(server) {
return request({
hostname: server,
port: 443,
rejectUnauthorized: false,
path: '/$analytics/v1'
});
}
Promise.all(servers.map(getServerAnalytics))
.then(stats => {
let stat = mergeStats(stats);
let dailyTotal = mergeArrays([stat.vendorMonthly, stat.rawMonthly]);
let monthlyTotal = dailyTotal.reduce((a, b) => a + b);
console.log(monthlyTotal);
})
.catch(err => {console.error(err); process.exit(1);});