Repository navigation
Expand file tree
/
Copy pathserviceChecker.js
More file actions
83 lines (78 loc) · 2.19 KB
/
Copy pathserviceChecker.js
File metadata and controls
83 lines (78 loc) · 2.19 KB
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
const telnet = require('telnet-client');
const fs = require('fs');
var crypto = require('crypto');
const dns = require('dns');
function checkResult(service,str,i)
{
let hash = crypto.createHash('md5').update(str).digest('hex');
if(!uptime[service]) uptime[service] = {score:0}
let expected
if(typeof i !== 'undefined')
{
expected = services[service].expected[i]
uptime[service].lastChecked = i
}
else
{
expected = services[service].expected
}
if(hash == expected)
{
uptime[service].isUp = true
uptime[service].score+=1
}
else
{
uptime[service].isUp = false
uptime[service].score-=1
}
fs.writeFile(`uptime.json`, JSON.stringify(uptime,null,4).replace(/(\n})(.*\n)*/,"\n}"), err => {
if(err){
release()
throw err;
}
});
}
module.exports = async function()
{
uptime = JSON.parse(fs.readFileSync('uptime.json', 'utf8'));
services = JSON.parse(fs.readFileSync('services.json', 'utf8'));
for(let service in services)
{
if(services[service].type == "telnet")
{
let connection = new telnet();
let params = services[service].params
params.negotiationMandatory = false
let lastChecked = uptime[service] && uptime[service].lastChecked>-1?uptime[service].lastChecked:-1
let i = lastChecked+1<services[service].cmd.length?lastChecked+1:0
let cmd = services[service].cmd[i]
// connect to server
connection.connect(params)
.then(prompt => {
connection.send(cmd)
.then(response => {
let str = services[service].trim[0]
+response.split(services[service].trim[0])[1].split(services[service].trim[1])[0]
+services[service].trim[1]
connection.end()
checkResult(service,str,i)
})
}, function(error) {
console.log('promises reject:', error)
})
.catch(function(error) {
// handle the throw (timeout)
})
}
else if(services[service].type == "dns")
{
dns.setServers([services[service].server]);
let lastChecked = uptime[service] && uptime[service].lastChecked>-1?uptime[service].lastChecked:-1
let i = lastChecked+1<services[service].urls.length?lastChecked+1:0
dns.lookup(services[service].urls[i],(err,address,family) => {
checkResult(service,address,i)
})
}
}
}