Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function () {
- const fs = require("fs");
- let functions = require("./functions.js");
- let Gamedig;
- let guild;
- let client;
- module.exports.startServerMonitor = function (gamedig, Guild, Client) {
- console.log("Starting server status checker ...");
- Gamedig = gamedig;
- guild = Guild;
- client = Client;
- functions.readConfig();
- serverOfflineDetector();
- console.log("server status checker started");
- };
- module.exports.rereadConfig = function () {
- functions.readConfig();
- };
- /*recursive function that checks the status of the server*/
- async function serverOfflineDetector() {
- while (configReloadInProgress) {
- functions.sleep(5);
- }
- for (let i = 0; i < servers.length; i++) {
- let server = servers[i];
- await Gamedig.query({
- type: server.serverType,
- host: server.serverIP,
- port: server.serverPort
- })
- .then(state => {
- if (server.logPlayerNumers) {
- let fileLoc = `logs/${server.serverName}.csv`;
- if (!fs.existsSync(fileLoc)) {
- fs.writeFile(fileLoc, "time;playercount\n", err => {
- if (err != null) console.error(err)
- });
- }
- let data = new Date().toLocaleString() + ";";
- if (server.serverType === "arma3") {
- data = data + state.raw.numplayers;
- }
- if (server.serverType === "teamspeak3") {
- data = data + state.raw.virtualserver_clientsonline;
- }
- data = data + "\n";
- fs.appendFile(fileLoc, data, err => {
- if (err != null) console.error(err)
- });
- }
- })
- .catch(async error => {
- if (!server.notifyIfDown) return;
- let currentDate = new Date();
- let startDate = new Date(currentDate.getTime());
- let endDate = new Date(currentDate.getTime());
- startDate.setHours(doNotNotifyStart.toString().split(":")[0]);
- startDate.setMinutes(doNotNotifyStart.toString().split(":")[1]);
- endDate.setHours(doNotNotifyEnd.toString().split(":")[0]);
- endDate.setMinutes(doNotNotifyEnd.toString().split(":")[1]);
- currentDate.setHours(currentDate.getUTCHours());
- currentDate.setMinutes(currentDate.getUTCMinutes());
- startDate.getTime();
- endDate.getTime();
- currentDate.getTime();
- if (startDate < currentDate && endDate > currentDate) {
- console.log("Not notifying people because downtime is within planned period");
- return;
- }
- if (server.lastDownPing == null) {
- server.lastDownPing = currentDate;
- } else if ((server.lastDownPing.getTime() + serverDownTimeout * 60000) > currentDate.getTime()) {
- console.log("Not notifying people");
- return;
- }
- let channel = client.channels.get(channelID);
- let users = [];
- for (let j = 0; j < mentionWhenDownUserIDs.length; j++) {
- await client.fetchUser(mentionWhenDownUserIDs[j])
- .then(user => users.push(user))
- .catch(e => console.error(e));
- }
- users.forEach(user => msg = msg + " " + user);
- channel.send(msg);
- server.lastDownPing = currentDate;
- });
- }
- await functions.sleep(downDetectorInterval);
- serverOfflineDetector();
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement