diff --git a/README.md b/README.md index e87debd..378f4dd 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ 3. Create database and tables - Script does not create database and tables by default - - Create database `sshmon` with 2 tables: + - Create database `sshmon` with 3 tables: @@ -66,6 +66,40 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
downtime
NameTypeExtra
idintAUTO_INCREMENT PRIMARY KEY
ipvarchar(255)
timedatetime
statusvarchar(255)
4. Register new account in app 5. Login diff --git a/src/routes/ping.ts b/src/routes/ping.ts index 90ef131..466cdc9 100644 --- a/src/routes/ping.ts +++ b/src/routes/ping.ts @@ -1,4 +1,5 @@ import { Request, Response } from 'express'; +import { connection } from '../index.js'; export default { method: "GET", @@ -6,6 +7,21 @@ export default { callback: async (data: any, req: Request, res: Response) => { const ip = req.params.ip; const r = await data.ping(ip); + if((Number(data.pings.get(ip).split("_")[0]) + (1000 * 60 * 5)) < Date.now()) { + if(!r.alive) connection.query("SELECT * FROM downtime WHERE ip=? AND date=? AND status=?", [ip, new Date(Number(data.pings.get(ip).split("_")[0])).toISOString().slice(0, 19).replace('T', ' '), "DOWN"], (err, results, fields) => { + if(err) throw err; + if(results.length === 0) connection.query("INSERT INTO downtime VALUES (NULL, ?, ?, ?)", [ip, new Date(Number(data.pings.get(ip).split("_")[0])).toISOString().slice(0, 19).replace('T', ' '), "DOWN"], (errr, resultss, fieldss) => { + if(errr) throw errr; + }); + }); + + else connection.query("SELECT * FROM downtime WHERE ip=? AND date=? AND status=?", [ip, new Date(Number(data.pings.get(ip).split("_")[0])).toISOString().slice(0, 19).replace('T', ' '), "UP"], (err, results, fields) => { + if(err) throw err; + if(results.length === 0) connection.query("INSERT INTO downtime VALUES (NULL, ?, ?, ?)", [ip, new Date(Number(data.pings.get(ip).split("_")[0])).toISOString().slice(0, 19).replace('T', ' '), "UP"], (errr, resultss, fieldss) => { + if(errr) throw errr; + }); + }); + } if(!r.alive && data.pings.get(ip).split("_")[1] === "1") data.pings.set(ip, `${Date.now()}_0`); else if(r.alive) data.pings.set(ip, `${Date.now()}_1`); res.setHeader('Content-Type', 'application/json');