diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..d830298 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +node_modules/ +.prettier* +package* diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..7e0399f --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": false, + "printWidth": 300 +} diff --git a/package.json b/package.json index b185e23..d2b743d 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,18 @@ "version": "6.3.0", "description": "Watchdog for fluxnode", "main": "watchdog.js", + "scripts": { + "format:check": "prettier --check .", + "format:write": "prettier --write ." + }, "dependencies": { "@prince25/discord-webhook-sender": "^1.2.3", - "axios": "^0.21.1", - "https": "^1.0.0", "fs": "0.0.1-security", "moment": "^2.24.0", + "node-telegram-bot-api": "^0.53.0", "path": "^0.12.7", "shelljs": "^0.8.3", "sleep": "^6.1.0", - "node-telegram-bot-api": "^0.53.0", "webhook-discord": "^3.7.7" }, "repository": { @@ -21,5 +23,8 @@ }, "keywords": [], "author": "Kamil Piekarski", - "license": "ISC" + "license": "ISC", + "devDependencies": { + "prettier": "^3.1.0" + } } diff --git a/watchdog.js b/watchdog.js index 7aa39af..8fb49e4 100644 --- a/watchdog.js +++ b/watchdog.js @@ -1,65 +1,48 @@ -const shell = require('shelljs'); -const sleep = require('sleep'); -const moment = require('moment'); -const webhook = require("@prince25/discord-webhook-sender") -const fs = require('fs'); -const https = require('https'); -const TelegramBot = require('node-telegram-bot-api'); -const axios = require('axios'); +const shell = require("shelljs"); +const sleep = require("sleep"); +const moment = require("moment"); +const webhook = require("@prince25/discord-webhook-sender"); +const fs = require("fs"); +const TelegramBot = require("node-telegram-bot-api"); sleep.sleep(15); -console.log('Watchdog v6.3.0 Starting...'); -console.log('================================================================='); +console.log("Watchdog v6.3.0 Starting..."); +console.log("================================================================="); -const path = 'config.js'; +const path = "config.js"; var sync_lock = 0; -var tire_lock=0; -var lock_zelback=0; -var zelcashd_counter=0; -var zelbench_counter=0; -var zelbench_daemon_counter=0; -var inactive_counter=0; -var mongod_counter=0; -var paid_local_time="N/A"; -var expiried_time="N/A"; -var watchdog_sleep="N/A"; +var tire_lock = 0; +var lock_zelback = 0; +var zelcashd_counter = 0; +var zelbench_counter = 0; +var zelbench_daemon_counter = 0; +var inactive_counter = 0; +var mongod_counter = 0; +var paid_local_time = "N/A"; +var expiried_time = "N/A"; +var watchdog_sleep = "N/A"; var disc_count = 0; -var h_IP=0; -var component_update=0; -var kda_sync = -1; -var historic_height = 0; -var kda_lock=0; -var no_sync = 0; -var not_responding = 0; -var job_count=0; -var reset_height=0; -var fix_tiggered=0; -var kda_sleep=0; -var after_fix=0; -var sleep_msg=0; - -function between(min, max) { - return Math.floor( - Math.random() * (max - min) + min - ) +var h_IP = 0; +var component_update = 0; +var job_count = 0; +var sleep_msg = 0; + +function between(min, max) { + return Math.floor(Math.random() * (max - min) + min); } let autoUpdate = between(60, 240); // auto update will now be different on each node and checks are defined between 1 and 4h. -async function job_creator(){ - +async function job_creator() { ++job_count; - if ( job_count % autoUpdate === 0 ) { + if (job_count % autoUpdate === 0) { await auto_update(); } - if ( job_count % 4 === 0 ) { + if (job_count % 5 === 0) { await flux_check(); } - if ( job_count % 17 === 0 ) { - await kda_check(); - } // reset job count - if ( job_count % autoUpdate === 0 ) { + if (job_count % autoUpdate === 0) { job_count = 0; autoUpdate = between(60, 240); } @@ -72,798 +55,406 @@ function checkIfValidIP(str) { return regexExp.test(str); } -async function getKadenaNodeHeight(ip) { - try { - const agent = new https.Agent({ - rejectUnauthorized: false - }); - const kadenaData = await axios.get(`https://${ip}:31350/chainweb/0.0/mainnet01/cut`, { httpsAgent: agent , timeout: 5000}); - return kadenaData.data.height; - } catch (e) { - // console.log(`${e}`); - return -1; - } -} - -async function getKadenaNetworkHeight() { - - try { - - const agent = new https.Agent({ - rejectUnauthorized: false - }); - - var kadenaData1 = await axios.get(`https://us-e1.chainweb.com/chainweb/0.0/mainnet01/cut`, { httpsAgent: agent , timeout: 5000}); - kadenaData1 = kadenaData1.data.height; - // console.log(`Connection 1 ${kadenaData1}`) - - } catch (e) { - var kadenaData1 = -1 - // console.log(`Connection 1 ${e}`); - } - - try { - - const agent = new https.Agent({ - rejectUnauthorized: false - }); - - var kadenaData2 = await axios.get(`https://us-w2.chainweb.com/chainweb/0.0/mainnet01/cut`, { httpsAgent: agent , timeout: 5000}); -kadenaData2 = kadenaData2.data.height; -//console.log(`Connection 2 ${kadenaData2}`); - } catch (e) { - var kadenaData2 = -1 - // console.log(`Connection 2 ${e}`); - } - -try { - const agent = new https.Agent({ - rejectUnauthorized: false - }); -var kadenaData3 = await axios.get(`https://fr1.chainweb.com/chainweb/0.0/mainnet01/cut`, { httpsAgent: agent , timeout: 5000}); -kadenaData3 = kadenaData3.data.height; - } catch (e) { - var kadenaData3 = -1 - //console.log(`Connection 3 ${e}`); - } - -// console.log("Bootstrap node height: "+ kadenaData1 + " " + kadenaData2 + " " + kadenaData3); - let kadenaData = max(Number(kadenaData1), Number(kadenaData2), Number(kadenaData3)); - return kadenaData; - -} - - -async function kda_check(){ - -let kda_docker_check = await shell.exec(`docker ps --filter name=fluxkadenachainwebnode | wc -l`,{ silent: true }).stdout; - -if ( kda_docker_check != 2 ){ -console.log(`KDA docker apps not detected!`); -console.log(`Check skipped...`); -console.log('================================================================='); -return; -} - - let ip = await Myip(); - let height = await getKadenaNodeHeight(ip); - - if ( historic_height != 0 ) { - - if ( historic_height == height && kda_lock == 0 ) { - - kda_sync = -1; - kda_lock=1; - console.log(`KDA sync problem detected! Height: ${height}`); - /*error('KDA node sync freez detected!'); - await discord_hook("KDA node sync freez detected!",web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - // KDA error notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = 'KDA node sync freez detected!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - - sleep.sleep(3); - - if ( typeof action == "undefined" || action == "1" ){ - - reset_height = height; - shell.exec(`docker restart fluxkadenachainwebnode`,{ silent: true }).stdout; - - let kda_date_docker_check = await shell.exec(`docker ps --filter name=fluxKadenaChainWebData | wc -l`,{ silent: true }).stdout; - - if ( kda_date_docker_check == 2 ){ - setTimeout(() => { - shell.exec(`docker restart fluxKadenaChainWebData`,{ silent: true }).stdout; - }, 30 * 60 * 1000); // In case KadenaChainWebData is installed restart the app after 30m. - } - - /*await discord_hook("KDA node restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); - // Fix action telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'KDA node restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - console.log(`Restarting container....`); - - } - console.log('================================================================='); - return; - - } - - } - - if ( height != -1 ){ - historic_height = height; - console.log("KDA Node height: "+height); - } - - // if ( height == -1 ) { - // console.log(`Info: KDA node height unavailable!`); - // } - - let network_height = await getKadenaNetworkHeight(); - console.log("KDA Network height: "+network_height); - - if ( network_height == -1 ) { - console.log(`Error: KDA network height unavailable! Check Skipped...`); - console.log('================================================================='); - return; - } - - let network_diff = Math.abs(network_height-height); - - if ( height == -1 && kda_sync != -1) { - - let docker_status = await shell.exec(`docker inspect --format='{{.State.Health.Status}}' fluxkadenachainwebnode`,{ silent: true }); - - - console.log(`KDA docker status: ${docker_status.trim()}`); - console.log(`Error: KDA node height unavailable!`); - - if ( docker_status.indexOf("starting") == "-1" ) { - ++not_responding; - } - - if ( not_responding == 2 ) { - - kda_sync = -1; - /*error(`KDA node height unavailable! KDA node not working correct!`); - await discord_hook(`KDA node not working correct!\nDocker status: **${docker_status.trim()}**`,web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - // KDA error notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = "KDA node not working correct! \nDocker status: "+docker_status.trim()+""; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - - if ( typeof action == "undefined" || action == "1" ){ - fix_tiggered=1; - shell.exec(`docker restart fluxkadenachainwebnode`,{ silent: true }).stdout; - - let kda_date_docker_check = await shell.exec(`docker ps --filter name=fluxKadenaChainWebData | wc -l`,{ silent: true }).stdout; - - if ( kda_date_docker_check == 2 ){ - setTimeout(() => { - shell.exec(`docker restart fluxKadenaChainWebData`,{ silent: true }).stdout; - }, 30 * 60 * 1000); // In case KadenaChainWebData is installed restart the app after 30m. - } - - /*await discord_hook("KDA node restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); - // Fix action telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'KDA node restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - console.log(`Restarting container....`); - } - - console.log('================================================================='); - return; - - } - -} else { - - if ( height == -1 ) { - - ++after_fix; - - if ( fix_tiggered == 1 && after_fix == 2) { - - after_fix = 0; - - if ( kda_sleep == 0 ) { - - kda_sleep = 1; - /*await discord_hook("KDA Watchdog in sleep mode..\nManual operation needed!",web_hook_url,ping,'Alert','#EA1414','Info','watchdog_manual1.png',label); - // KDA Watchdog in sleep mode notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Info: '; - var msg_text = "KDA Watchdog in sleep mode! \n\u{203C} Manual operation needed \u{203C}"; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - - } - } - - let docker_status = await shell.exec(`docker inspect --format='{{.State.Health.Status}}' fluxkadenachainwebnode`,{ silent: true }); - console.log(`Error: KDA node not working correct!`); - console.log(`KDA docker status: ${docker_status.trim()}`); - console.log('================================================================='); - return; - - } - -} - -if ( height != -1 ){ - - not_responding = 0; - kda_sleep = 0; - after_fix=0; - - if ( fix_tiggered == 1 ) { - - fix_tiggered=0; - - if ( typeof action == "undefined" || action == "1" ){ - /*await discord_hook("KDA node fixed! Apps responding...",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - // Daemon fixed notification telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = "KDA node fixed!"; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - } - - } - -} - - if ( network_diff < 3000 ) { - - if ( kda_lock == 1 && reset_height != height ){ - - if ( typeof action == "undefined" || action == "1" ){ - /*await discord_hook("KDA node sync fixed!",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - // Daemon fixed notification telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = 'KDA node sync fixed!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - } - - } - - if ( reset_height != height ){ - kda_lock=0; - } - - kda_sync = 1; - no_sync = 0; - console.log(`KDA node synced with network, diff: ${network_diff}`); - - } else { - - if ( kda_sync != -1 && height != -1 ) { - - kda_sync = -1; - - if ( no_sync == 0 ) { - - no_sync = 1 - console.log(`KDA node not synced with network, diff: ${network_diff}`); - /*error(`KDA node not synced with network, diff: ${network_diff}`); - await discord_hook(`KDA node not synced, diff:**${network_diff}**`,web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - // KDA error notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = "KDA node not synced, diff: "+network_diff+""; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label);*/ - sleep.sleep(3); - - } - - } - - } - - if ( kda_sync == -1 ) { - console.log(`Awaiting for full sync with KDA network...`); - } - - let docker_status = await shell.exec(`docker inspect --format='{{.State.Health.Status}}' fluxkadenachainwebnode`,{ silent: true }); - console.log(`KDA docker status: ${docker_status.trim()}`); - console.log('================================================================='); - -} -async function Myip(){ - const check_list = ['ifconfig.me', 'api4.my-ip.io/ip', 'checkip.amazonaws.com' , 'api.ipify.org']; +async function Myip() { + const check_list = ["ifconfig.me", "api4.my-ip.io/ip", "checkip.amazonaws.com", "api.ipify.org"]; var MyIP = null; - for (const [index, val] of check_list.entries()) { - MyIP = await shell.exec(`curl -sk -m 10 https://${val} | tr -dc '[:alnum:].'`,{ silent: true }).stdout; + for (const [_index, val] of check_list.entries()) { + MyIP = await shell.exec(`curl -sk -m 10 https://${val} | tr -dc '[:alnum:].'`, { silent: true }).stdout; - if (checkIfValidIP(MyIP)){ + if (checkIfValidIP(MyIP)) { break; } - } - if ( MyIP != "" ){ - h_IP=MyIP; + if (MyIP != "") { + h_IP = MyIP; /* console.log(`Saved IP for historical usage.`); */ } - if ( MyIP == "" ){ - MyIP=h_IP; + if (MyIP == "") { + MyIP = h_IP; console.log(`Info: Historical IP used.`); } -return MyIP; + return MyIP; } -async function discord_hook(node_msg,web_hook_url,ping,title,color,field_name,thumbnail_png,label) { - - if ( typeof web_hook_url !== "undefined" && web_hook_url !== "0" ) { - - if ( typeof ping == "undefined" || ping == "0") { - var node_ip = await Myip(); - var api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'",{ silent: true }); - if ( api_port == "" ){ - var ui_port = 16126; - } else { - var ui_port = (Number(api_port.trim()))-1; - } - const Hook = new webhook.Webhook(`${web_hook_url}`); - Hook.setUsername('Flux Watchdog'); - - if ( typeof label == "undefined" ) { - - const msg = new webhook.MessageBuilder() - .setTitle(`:loudspeaker: **FluxNode ${title}**`) - .addField('URL:', `http://${node_ip}:${ui_port}`) - .addField(`${field_name}:`, node_msg) - .setColor(`${color}`) - .setThumbnail(`https://fluxnodeservice.com/images/${thumbnail_png}`); - await Hook.send(msg); - - } else { - - const msg = new webhook.MessageBuilder() +async function discord_hook(node_msg, web_hook_url, ping, title, color, field_name, thumbnail_png, label) { + if (typeof web_hook_url !== "undefined" && web_hook_url !== "0") { + if (typeof ping == "undefined" || ping == "0") { + var node_ip = await Myip(); + var api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'", { silent: true }); + if (api_port == "") { + var ui_port = 16126; + } else { + var ui_port = Number(api_port.trim()) - 1; + } + const Hook = new webhook.Webhook(`${web_hook_url}`); + Hook.setUsername("Flux Watchdog"); + + if (typeof label == "undefined") { + const msg = new webhook.MessageBuilder().setTitle(`:loudspeaker: **FluxNode ${title}**`).addField("URL:", `http://${node_ip}:${ui_port}`).addField(`${field_name}:`, node_msg).setColor(`${color}`).setThumbnail(`https://fluxnodeservice.com/images/${thumbnail_png}`); + await Hook.send(msg); + } else { + const msg = new webhook.MessageBuilder() .setTitle(`:loudspeaker: **FluxNode ${title}**`) - .addField('Name:', `${label}`) - .addField('URL:', `http://${node_ip}:${ui_port}`) + .addField("Name:", `${label}`) + .addField("URL:", `http://${node_ip}:${ui_port}`) .addField(`${field_name}:`, node_msg) .setColor(`${color}`) .setThumbnail(`https://fluxnodeservice.com/images/${thumbnail_png}`); - await Hook.send(msg); - - } - + await Hook.send(msg); + } + } else { + var node_ip = await Myip(); + var api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'", { silent: true }); + if (api_port == "") { + var ui_port = 16126; + } else { + var ui_port = Number(api_port.trim()) - 1; + } + const Hook = new webhook.Webhook(`${web_hook_url}`); + Hook.setUsername("Flux Watchdog"); + if (typeof label == "undefined") { + const msg = new webhook.MessageBuilder().setTitle(`:loudspeaker: **FluxNode ${title}**`).addField("URL:", `http://${node_ip}:${ui_port}`).addField(`${field_name}:`, node_msg).setColor(`${color}`).setThumbnail(`https://fluxnodeservice.com/images/${thumbnail_png}`).setText(`Ping: <@${ping}>`); + await Hook.send(msg); } else { - var node_ip = await Myip(); - var api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'",{ silent: true }); - if ( api_port == "" ){ - var ui_port = 16126; - } else { - var ui_port = (Number(api_port.trim()))-1; - } - const Hook = new webhook.Webhook(`${web_hook_url}`); - Hook.setUsername('Flux Watchdog'); - - if ( typeof label == "undefined" ) { - const msg = new webhook.MessageBuilder() + const msg = new webhook.MessageBuilder() .setTitle(`:loudspeaker: **FluxNode ${title}**`) - .addField('URL:', `http://${node_ip}:${ui_port}`) + .addField("Name:", `${label}`) + .addField("URL:", `http://${node_ip}:${ui_port}`) .addField(`${field_name}:`, node_msg) .setColor(`${color}`) .setThumbnail(`https://fluxnodeservice.com/images/${thumbnail_png}`) .setText(`Ping: <@${ping}>`); - await Hook.send(msg); - } else { - - const msg = new webhook.MessageBuilder() - .setTitle(`:loudspeaker: **FluxNode ${title}**`) - .addField('Name:', `${label}`) - .addField('URL:', `http://${node_ip}:${ui_port}`) - .addField(`${field_name}:`, node_msg) - .setColor(`${color}`) - .setThumbnail(`https://fluxnodeservice.com/images/${thumbnail_png}`) - .setText(`Ping: <@${ping}>`); - await Hook.send(msg); - - } - + await Hook.send(msg); } - - } - + } + } } function max() { - var args = Array.prototype.slice.call(arguments); - return Math.max.apply(Math, args.filter(function(val) { - return !isNaN(val); - })); + var args = Array.prototype.slice.call(arguments); + return Math.max.apply( + Math, + args.filter(function (val) { + return !isNaN(val); + }) + ); } -async function Check_Sync(height,time) { - +async function Check_Sync(height, time) { // var exec_comment1=`curl -sk -m 8 https://explorer.flux.zelcore.io/api/status?q=getInfo | jq '.info.blocks'` - var exec_comment2=`curl -sk -m 8 https://explorer.runonflux.io/api/status?q=getInfo | jq '.info.blocks'` - var exec_comment3=`curl -sk -m 8 https://explorer.zelcash.online/api/status?q=getInfo | jq '.info.blocks'` - // var explorer_block_height_01 = await shell.exec(`${exec_comment1}`,{ silent: true }).stdout; - var explorer_block_height_02 = await shell.exec(`${exec_comment2}`,{ silent: true }).stdout; - var explorer_block_height_03 = await shell.exec(`${exec_comment3}`,{ silent: true }).stdout; - var explorer_block_height = max(explorer_block_height_02,explorer_block_height_03); - var height_diff = Math.abs(explorer_block_height-height); - - if ( explorer_block_height == 0 ) { + var exec_comment2 = `curl -sk -m 8 https://explorer.runonflux.io/api/status?q=getInfo | jq '.info.blocks'`; + var exec_comment3 = `curl -sk -m 8 https://explorer.zelcash.online/api/status?q=getInfo | jq '.info.blocks'`; + // var explorer_block_height_01 = await shell.exec(`${exec_comment1}`,{ silent: true }).stdout; + var explorer_block_height_02 = await shell.exec(`${exec_comment2}`, { silent: true }).stdout; + var explorer_block_height_03 = await shell.exec(`${exec_comment3}`, { silent: true }).stdout; + var explorer_block_height = max(explorer_block_height_02, explorer_block_height_03); + var height_diff = Math.abs(explorer_block_height - height); + + if (explorer_block_height == 0) { console.log(`Info: Flux network height unavailable! Check Skipped...`); return; } - - if ( height > explorer_block_height ) { + + if (height > explorer_block_height) { console.log(`Info: Flux node height > network height! Check Skipped...`); return; } - - if ( height_diff < 12 ) { - - if ( sync_lock != 0 ) { - - if ( typeof action == "undefined" || action == "1" ){ - - await discord_hook("Flux daemon is synced!",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - - // Sync Fixed notification telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = 'Flux daemon is synced!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - } - - } + if (height_diff < 12) { + if (sync_lock != 0) { + if (typeof action == "undefined" || action == "1") { + await discord_hook("Flux daemon is synced!", web_hook_url, ping, "Fix Info", "#1F8B4C", "Info", "watchdog_fixed2.png", label); + + // Sync Fixed notification telegram + var emoji_title = "\u{1F4A1}"; + var emoji_fixed = "\u{2705}"; + var info_type = "Fixed Info " + emoji_fixed; + var field_type = "Info: "; + var msg_text = "Flux daemon is synced!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + } console.log(`Flux daemon is synced (${height}, diff: ${height_diff})`); sync_lock = 0; - } else { - console.log(`Flux daemon is not synced (${height}, diff: ${height_diff})`); - if ( sync_lock == 0 ) { - - await discord_hook(`Flux daemon is not synced!\nDaemon height: **${height}**\nNetwork height: **${explorer_block_height}**\nDiff: **${height_diff}**`,web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - - // Sync problem - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = "Flux daemon is not synced! \nDaemon height: "+height+"\nNetwork height: "+explorer_block_height+"\nDiff: "+height_diff; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - - - if ( typeof action == "undefined" || action == "1" ){ - - - shell.exec("sudo systemctl stop zelcash",{ silent: true }); - sleep.sleep(2); - shell.exec("sudo fuser -k 16125/tcp",{ silent: true }); - shell.exec("sudo systemctl start zelcash",{ silent: true }); - console.log(time+' => Flux daemon restarting...'); - await discord_hook("Flux daemon restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); - - // Fix action telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'Flux daemon restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); + if (sync_lock == 0) { + await discord_hook(`Flux daemon is not synced!\nDaemon height: **${height}**\nNetwork height: **${explorer_block_height}**\nDiff: **${height_diff}**`, web_hook_url, ping, "Alert", "#EA1414", "Error", "watchdog_error1.png", label); + + // Sync problem + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Error: "; + var msg_text = "Flux daemon is not synced! \nDaemon height: " + height + "\nNetwork height: " + explorer_block_height + "\nDiff: " + height_diff; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + + if (typeof action == "undefined" || action == "1") { + shell.exec("sudo systemctl stop zelcash && sleep 2", { silent: true }); + shell.exec("sudo fuser -k 16125/tcp", { silent: true }); + shell.exec("sudo systemctl start zelcash", { silent: true }); + console.log(time + " => Flux daemon restarting..."); + await discord_hook("Flux daemon restarted!", web_hook_url, ping, "Fix Action", "#FFFF00", "Info", "watchdog_fix1.png", label); - } + // Fix action telegram + var emoji_title = "\u{26A1}"; + var emoji_fix = "\u{1F528}"; + var info_type = "Fix Action " + emoji_fix; + var field_type = "Info: "; + var msg_text = "Flux daemon restarted!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } sync_lock = 1; } - } } if (fs.existsSync(path)) { - - var home_dir = shell.exec("echo $HOME",{ silent: true }).stdout; - var zelcash_path = `${home_dir.trim()}/.zelcash/zelcash.conf`; - var daemon_cli='zelcash-cli'; - var daemon_package_name='zelcash'; + var home_dir = shell.exec("echo $HOME", { silent: true }).stdout; + var zelcash_path = `${home_dir.trim()}/.zelcash/zelcash.conf`; + var daemon_cli = "zelcash-cli"; if (fs.existsSync(`/usr/local/bin/flux-cli`)) { - daemon_cli='flux-cli'; - daemon_package_name='flux'; + daemon_cli = "/usr/local/bin/flux-cli"; } if (!fs.existsSync(zelcash_path)) { - zelcash_path = `${home_dir.trim()}/.flux/flux.conf`; - } - + zelcash_path = `${home_dir.trim()}/.flux/flux.conf`; + } if (fs.existsSync(`/usr/local/bin/fluxbenchd`)) { - bench_cli='fluxbench-cli'; - bench_package_name='fluxbench'; - } else { - bench_cli='zelbench-cli'; - bench_package_name='zelbench'; - } - + bench_cli = "/usr/local/bin/fluxbench-cli"; + } else { + bench_cli = "zelbench-cli"; + } if (fs.existsSync(zelcash_path)) { - var tx_hash = shell.exec("grep -w zelnodeoutpoint "+zelcash_path+" | sed -e 's/zelnodeoutpoint=//'",{ silent: true }).stdout; - var exec_comment = `${daemon_cli} decoderawtransaction $(${daemon_cli} getrawtransaction ${tx_hash} ) | jq '.vout[].value' | egrep '1000|12500|40000'` - var type = shell.exec(`${exec_comment}`,{ silent: true }).stdout; - switch(Number(type.trim())){ + var tx_hash = shell.exec("grep -w zelnodeoutpoint " + zelcash_path + " | sed -e 's/zelnodeoutpoint=//'", { silent: true }).stdout; + var exec_comment = `${daemon_cli} decoderawtransaction $(${daemon_cli} getrawtransaction ${tx_hash} ) | jq '.vout[].value' | egrep '1000|12500|40000'`; + var type = shell.exec(`${exec_comment}`, { silent: true }).stdout; + switch (Number(type.trim())) { case 1000: - var tire_name="CUMULUS"; - break; + var tire_name = "CUMULUS"; + break; case 12500: - var tire_name="NIMBUS"; - break; + var tire_name = "NIMBUS"; + break; case 40000: - var tire_name="STRATUS"; - break; + var tire_name = "STRATUS"; + break; default: - var tire_name="UNKNOW"; + var tire_name = "UNKNOW"; } - -} else { - - var tire_name="UNKNOW"; + } else { + var tire_name = "UNKNOW"; } + var config = require("./config.js"); + var eps_limit = config.tier_eps_min; + var web_hook_url = config.web_hook_url; + var action = config.action; + var ping = config.ping; + var telegram_alert = config.telegram_alert; + var label = config.label; -var config = require('./config.js'); -var eps_limit=config.tier_eps_min; -var web_hook_url=config.web_hook_url; -var action=config.action; -var ping=config.ping; -var telegram_alert = config.telegram_alert; -var label= config.label; - -console.log('Config file:'); -console.log(`Tier: ${tire_name}`); -console.log(`Minimum eps: ${eps_limit}`); -if (typeof action == "undefined" || action == "1" ) -{ -console.log('Fix action: enabled'); -} else { -console.log('Fix action: disabled'); -} - -if (typeof web_hook_url !== "undefined" && web_hook_url !== "0" ) -{ -console.log('Discord alert: enabled'); - -if (typeof ping !== "undefined" && ping !== "0" ){ -console.log('Discord ping: enabled'); -} else { -console.log('Discord ping: disabled'); -} - - + console.log("Config file:"); + console.log(`Tier: ${tire_name}`); + console.log(`Minimum eps: ${eps_limit}`); + if (typeof action == "undefined" || action == "1") { + console.log("Fix action: enabled"); + } else { + console.log("Fix action: disabled"); + } -} else { -console.log('Discord alert: disabled'); -} + if (typeof web_hook_url !== "undefined" && web_hook_url !== "0") { + console.log("Discord alert: enabled"); -if (typeof telegram_alert !== "undefined" && telegram_alert !== "0" ) -{ -console.log('Telegram alert: enabled'); -} else { -console.log('Telegram alert: disabled'); -} + if (typeof ping !== "undefined" && ping !== "0") { + console.log("Discord ping: enabled"); + } else { + console.log("Discord ping: disabled"); + } + } else { + console.log("Discord alert: disabled"); + } + if (typeof telegram_alert !== "undefined" && telegram_alert !== "0") { + console.log("Telegram alert: enabled"); + } else { + console.log("Telegram alert: disabled"); + } -console.log(`Update settings:`); -if ( config.zelcash_update == "1" ) { -console.log('=> Flux daemon: enabled'); -} else { -console.log('=> Flux daemon: disabled'); -} -if ( config.zelbench_update == "1" ) { -console.log('=> Fluxbench: enabled'); -} else { -console.log('=> Fluxbench: disabled'); -} -if ( config.zelflux_update == "1" ) { -console.log('=> FluxOS: enabled'); + console.log(`Update settings:`); + if (config.zelcash_update == "1") { + console.log("=> Flux daemon: enabled"); + } else { + console.log("=> Flux daemon: disabled"); + } + if (config.zelbench_update == "1") { + console.log("=> Fluxbench: enabled"); + } else { + console.log("=> Fluxbench: disabled"); + } + if (config.zelflux_update == "1") { + console.log("=> FluxOS: enabled"); + } else { + console.log("=> FluxOS: disabled"); + } + console.log("================================================================="); } else { -console.log('=> FluxOS: disabled'); -} -console.log('================================================================='); -} -else { - - var home_dir = shell.exec("echo $HOME",{ silent: true }).stdout; - var zelcash_path = `${home_dir.trim()}/.zelcash/zelcash.conf`; - var daemon_cli='zelcash-cli'; - var daemon_package_name='zelcash'; + var home_dir = shell.exec("echo $HOME", { silent: true }).stdout; + var zelcash_path = `${home_dir.trim()}/.zelcash/zelcash.conf`; + var daemon_cli = "zelcash-cli"; if (fs.existsSync(`/usr/local/bin/flux-cli`)) { - daemon_cli='flux-cli'; - daemon_package_name='flux'; + daemon_cli = "/usr/local/bin/flux-cli"; } if (!fs.existsSync(zelcash_path)) { - zelcash_path = `${home_dir.trim()}/.flux/flux.conf`; - } - + zelcash_path = `${home_dir.trim()}/.flux/flux.conf`; + } if (fs.existsSync(`/usr/local/bin/fluxbenchd`)) { - bench_cli='fluxbench-cli'; - bench_package_name='fluxbench'; - } else { - bench_cli='zelbench-cli'; - bench_package_name='zelbench'; - } - + bench_cli = "/usr/local/bin/fluxbench-cli"; + } else { + bench_cli = "zelbench-cli"; + } if (fs.existsSync(zelcash_path)) { - var tx_hash = shell.exec("grep -w zelnodeoutpoint "+zelcash_path+" | sed -e 's/zelnodeoutpoint=//'",{ silent: true }).stdout; - var exec_comment = `${daemon_cli} decoderawtransaction $(${daemon_cli} getrawtransaction ${tx_hash} ) | jq '.vout[].value' | egrep '1000|12500|40000'` - var type = shell.exec(`${exec_comment}`,{ silent: true }).stdout; - - switch(Number(type.trim())){ - case 1000: - var tire_name="CUMULUS"; - var eps_limit = 90; - break; - - case 12500: - var tire_name="NIMBUS"; - var eps_limit = 180 - break; - - case 40000: - var tire_name="STRATUS"; - var eps_limit = 300 - break; - - default: - var tire_name="UNKNOW"; - var eps_limit = 0; + var tx_hash = shell.exec("grep -w zelnodeoutpoint " + zelcash_path + " | sed -e 's/zelnodeoutpoint=//'", { silent: true }).stdout; + var exec_comment = `${daemon_cli} decoderawtransaction $(${daemon_cli} getrawtransaction ${tx_hash} ) | jq '.vout[].value' | egrep '1000|12500|40000'`; + var type = shell.exec(`${exec_comment}`, { silent: true }).stdout; - } + switch (Number(type.trim())) { + case 1000: + var tire_name = "CUMULUS"; + var eps_limit = 90; + break; -} else { - var eps_limit = 0; - var tire_name="UNKNOW"; -} + case 12500: + var tire_name = "NIMBUS"; + var eps_limit = 180; + break; + + case 40000: + var tire_name = "STRATUS"; + var eps_limit = 300; + break; + default: + var tire_name = "UNKNOW"; + var eps_limit = 0; + } + } else { + var eps_limit = 0; + var tire_name = "UNKNOW"; + } -const dataToWrite = `module.exports = { + const dataToWrite = `module.exports = { tier_eps_min: '${eps_limit}', zelflux_update: '0', zelcash_update: '0', zelbench_update: '0', action: '1', - ping: '0'; - web_hook_url: '0'; - telegram_alert: '0'; - telegram_bot_token: '0'; + ping: '0', + web_hook_url: '0', + telegram_alert: '0', + telegram_bot_token: '0', telegram_chat_id: '0' }`; -console.log('Creating config file...'); -console.log("========================"); - -const userconfig = fs.createWriteStream(path); - userconfig.once('open', () => { - userconfig.write(dataToWrite); - userconfig.end(); -}); - -sleep.sleep(3); -var config = require('./config.js'); -var web_hook_url=config.web_hook_url; -var action=config.action; -var ping=config.ping; -var telegram_alert = config.telegram_alert; - -console.log('Config file:'); -console.log(`Tier: ${tire_name}`); -console.log(`Minimum eps: ${eps_limit}`); -if (typeof action == "undefined" || action == "1" ) -{ -console.log('Fix action: enabled'); -} else { -console.log('Fix action: disabled'); -} + console.log("Creating config file..."); + console.log("========================"); -if (typeof web_hook_url !== "undefined" && web_hook_url !== "0" ) -{ -console.log('Discord alert: enabled'); + try { + fs.writeFileSync(path, dataToWrite, { flag: "w" }); + console.log("Config file created successfully."); + console.log("========================"); + } catch (error) { + console.error("Error creating config file:", error); + console.log("========================"); + } -if (typeof ping !== "undefined" && ping !== "0" ) { -console.log('Discord ping: enabled'); -} else { -console.log('Discord ping: disabled'); -} + sleep.sleep(3); + var config = require("./config.js"); + var web_hook_url = config.web_hook_url; + var action = config.action; + var ping = config.ping; + var telegram_alert = config.telegram_alert; + console.log("Config file:"); + console.log(`Tier: ${tire_name}`); + console.log(`Minimum eps: ${eps_limit}`); + if (typeof action == "undefined" || action == "1") { + console.log("Fix action: enabled"); + } else { + console.log("Fix action: disabled"); + } -} else { -console.log('Discord alert: disabled'); -} + if (typeof web_hook_url !== "undefined" && web_hook_url !== "0") { + console.log("Discord alert: enabled"); -if (typeof telegram_alert !== "undefined" && telegram_alert !== "0" ) -{ -console.log('Telegram alert: enabled'); -} else { -console.log('Telegram alert: disabled'); -} + if (typeof ping !== "undefined" && ping !== "0") { + console.log("Discord ping: enabled"); + } else { + console.log("Discord ping: disabled"); + } + } else { + console.log("Discord alert: disabled"); + } -console.log(`Update settings:`); -if ( config.zelcash_update == "1" ) { -console.log('=> Flux daemon: enabled'); -} else { -console.log('=> Flux daemon: disabled'); -} -if ( config.zelbench_update == "1" ) { -console.log('=> Fluxbench: enabled'); -} else { -console.log('=> Fluxbench: disabled'); -} -if ( config.zelflux_update == "1" ) { -console.log('=> FluxOS: enabled'); -} else { -console.log('=> FluxOS: disabled'); -} -console.log('================================================================='); + if (typeof telegram_alert !== "undefined" && telegram_alert !== "0") { + console.log("Telegram alert: enabled"); + } else { + console.log("Telegram alert: disabled"); + } + console.log(`Update settings:`); + if (config.zelcash_update == "1") { + console.log("=> Flux daemon: enabled"); + } else { + console.log("=> Flux daemon: disabled"); + } + if (config.zelbench_update == "1") { + console.log("=> Fluxbench: enabled"); + } else { + console.log("=> Fluxbench: disabled"); + } + if (config.zelflux_update == "1") { + console.log("=> FluxOS: enabled"); + } else { + console.log("=> FluxOS: disabled"); + } + console.log("================================================================="); } -async function send_telegram_msg(emoji_title,info_type,field_type,msg_text,label) { - +async function send_telegram_msg(emoji_title, info_type, field_type, msg_text, label) { var telegram_alert = config.telegram_alert; - if ( typeof telegram_alert !== "undefined" && telegram_alert == 1 ) { - + if (typeof telegram_alert !== "undefined" && telegram_alert == 1) { const node_ip = await Myip(); - var api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'",{ silent: true }); - if ( api_port == "" ){ - var ui_port = 16126; - } else { - var ui_port = (Number(api_port.trim()))-1; - } + var api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'", { silent: true }); + if (api_port == "") { + var ui_port = 16126; + } else { + var ui_port = Number(api_port.trim()) - 1; + } const token = config.telegram_bot_token; const chatId = config.telegram_chat_id; - const bot = new TelegramBot(token, {polling: false}); + const bot = new TelegramBot(token, { polling: false }); - if ( typeof label == "undefined" ) { - bot.sendMessage(chatId, emoji_title+" FluxNode Watchdog "+emoji_title+"\n----------------------------------------\nType: "+info_type+"\nURL: http://"+node_ip+":"+ui_port+"\n"+field_type+""+msg_text,{parse_mode: 'HTML'}); + if (typeof label == "undefined") { + bot.sendMessage(chatId, emoji_title + " FluxNode Watchdog " + emoji_title + "\n----------------------------------------\nType: " + info_type + "\nURL: http://" + node_ip + ":" + ui_port + "\n" + field_type + "" + msg_text, { parse_mode: "HTML" }); } else { - bot.sendMessage(chatId, emoji_title+" FluxNode Watchdog "+emoji_title+"\n----------------------------------------\nType: "+info_type+"\nName: "+label+"\nURL: http://"+node_ip+":"+ui_port+"\n"+field_type+""+msg_text,{parse_mode: 'HTML'}); + bot.sendMessage(chatId, emoji_title + " FluxNode Watchdog " + emoji_title + "\n----------------------------------------\nType: " + info_type + "\nName: " + label + "\nURL: http://" + node_ip + ":" + ui_port + "\n" + field_type + "" + msg_text, { + parse_mode: "HTML", + }); } - } - } function getFilesizeInBytes(filename) { try { @@ -880,777 +471,708 @@ function error(args) { // write to file const filepath = `watchdog_error.log`; const size = getFilesizeInBytes(filepath); - let flag = 'a+'; - if (size > (25 * 1000 * 1000)) { // 25MB - flag = 'w'; // rewrite file + let flag = "a+"; + if (size > 25 * 1000 * 1000) { + // 25MB + flag = "w"; // rewrite file } - const data_error = moment.utc().format('YYYY-MM-DD HH:mm:ss'); + const data_error = moment.utc().format("YYYY-MM-DD HH:mm:ss"); const stream = fs.createWriteStream(filepath, { flags: flag }); stream.write(`${data_error} => ${args}\n`); stream.end(); } catch (err) { - console.error('This shall not have happened'); + console.error("This shall not have happened"); console.error(err); } } async function auto_update() { - delete require.cache[require.resolve('./config.js')]; - var config = require('./config.js'); - var remote_version = shell.exec("curl -sS -m 5 https://raw.githubusercontent.com/RunOnFlux/fluxnode-watchdog/master/package.json | jq -r '.version'",{ silent: true }).stdout; - var local_version = shell.exec("jq -r '.version' package.json",{ silent: true }).stdout; - console.log(' UPDATE CHECKING....'); - console.log('================================================================='); + delete require.cache[require.resolve("./config.js")]; + var config = require("./config.js"); + var remote_version = shell.exec("curl -sS -m 5 https://raw.githubusercontent.com/RunOnFlux/fluxnode-watchdog/master/package.json | jq -r '.version'", { silent: true }).stdout; + var local_version = shell.exec("jq -r '.version' package.json", { silent: true }).stdout; + console.log(" UPDATE CHECKING...."); + console.log("================================================================="); console.log(`Watchdog current: ${remote_version.trim()} installed: ${local_version.trim()}`); - if ( remote_version.trim() != "" && local_version.trim() != "" ){ - if ( remote_version.trim() !== local_version.trim()){ - console.log('New watchdog version detected:'); - console.log('================================================================='); - console.log('Local version: '+local_version.trim()); - console.log('Remote version: '+remote_version.trim()); - console.log('================================================================='); - shell.exec("cd /home/$USER/watchdog && git checkout . && git fetch && git pull -p",{ silent: true }).stdout; - var local_ver = shell.exec("jq -r '.version' package.json",{ silent: true }).stdout; - if ( local_ver.trim() == remote_version.trim() ){ - await discord_hook(`Fluxnode Watchdog updated!\nVersion: **${remote_version}**`,web_hook_url,ping,'Update','#1F8B4C','Info','watchdog_update1.png',label); + if (remote_version.trim() != "" && local_version.trim() != "") { + if (remote_version.trim() !== local_version.trim()) { + console.log("New watchdog version detected:"); + console.log("================================================================="); + console.log("Local version: " + local_version.trim()); + console.log("Remote version: " + remote_version.trim()); + console.log("================================================================="); + shell.exec("cd /home/$USER/watchdog && git checkout . && git fetch && git pull -p", { silent: true }).stdout; + var local_ver = shell.exec("jq -r '.version' package.json", { silent: true }).stdout; + if (local_ver.trim() == remote_version.trim()) { + await discord_hook(`Fluxnode Watchdog updated!\nVersion: **${remote_version}**`, web_hook_url, ping, "Update", "#1F8B4C", "Info", "watchdog_update1.png", label); // Update notification Watchdog telegram - var emoji_title = '\u{23F0}'; - var emoji_update='\u{1F504}'; - var info_type = 'New Update '+emoji_update; - var field_type = 'Info: '; - var msg_text = "Fluxnode Watchdog updated! \nVersion: "+remote_version; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - console.log('Update successfully.'); + var emoji_title = "\u{23F0}"; + var emoji_update = "\u{1F504}"; + var info_type = "New Update " + emoji_update; + var field_type = "Info: "; + var msg_text = "Fluxnode Watchdog updated! \nVersion: " + remote_version; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + + console.log("Update successfully."); } sleep.sleep(20); - console.log(' '); + console.log(" "); } } if (config.zelflux_update == "1") { - - var zelflux_remote_version = shell.exec("curl -sS -m 5 https://raw.githubusercontent.com/RunOnFlux/flux/master/package.json | jq -r '.version'",{ silent: true }).stdout; - var zelflux_local_version = shell.exec("jq -r '.version' /home/$USER/zelflux/package.json",{ silent: true }).stdout; - - console.log(`FluxOS current: ${zelflux_remote_version.trim()} installed: ${zelflux_local_version.trim()}`); - if ( zelflux_remote_version.trim() != "" && zelflux_local_version.trim() != "" ){ - - if ( zelflux_remote_version.trim() !== zelflux_local_version.trim() ){ - component_update = 1; - console.log('New FluxOS version detected:'); - console.log('================================================================='); - console.log('Local version: '+zelflux_local_version.trim()); - console.log('Remote version: '+zelflux_remote_version.trim()); - console.log('================================================================='); - shell.exec("pm2 stop flux",{ silent: true }).stdout; - sleep.sleep(5); - shell.exec("cd /home/$USER/zelflux && git checkout . && git fetch && git pull -p",{ silent: true }).stdout; - sleep.sleep(5); - shell.exec("pm2 start flux",{ silent: true }).stdout; - sleep.sleep(20); - var zelflux_lv = shell.exec("jq -r '.version' /home/$USER/zelflux/package.json",{ silent: true }).stdout; - if ( zelflux_remote_version.trim() == zelflux_lv.trim() ) { - - await discord_hook(`FluxOS updated!\nVersion: **${zelflux_remote_version}**`,web_hook_url,ping,'Update','#1F8B4C','Info','watchdog_update1.png',label); - - // Update notification FluxOS telegram - var emoji_title = '\u{23F0}'; - var emoji_update='\u{1F504}'; - var info_type = 'New Update '+emoji_update; - var field_type = 'Info: '; - var msg_text = "FluxOS updated!\nVersion: "+zelflux_remote_version; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - console.log('Update successfully.'); + var zelflux_remote_version = shell.exec("curl -sS -m 5 https://raw.githubusercontent.com/RunOnFlux/flux/master/package.json | jq -r '.version'", { silent: true }).stdout; + var zelflux_local_version = shell.exec("jq -r '.version' /home/$USER/zelflux/package.json", { silent: true }).stdout; + + console.log(`FluxOS current: ${zelflux_remote_version.trim()} installed: ${zelflux_local_version.trim()}`); + if (zelflux_remote_version.trim() != "" && zelflux_local_version.trim() != "") { + if (zelflux_remote_version.trim() !== zelflux_local_version.trim()) { + component_update = 1; + console.log("New FluxOS version detected:"); + console.log("================================================================="); + console.log("Local version: " + zelflux_local_version.trim()); + console.log("Remote version: " + zelflux_remote_version.trim()); + console.log("================================================================="); + shell.exec("pm2 stop flux && sleep 5", { silent: true }).stdout; + shell.exec("cd /home/$USER/zelflux && git checkout . && git fetch && git pull -p && sleep 5", { silent: true }).stdout; + shell.exec("pm2 start flux && sleep 20", { silent: true }).stdout; + var zelflux_lv = shell.exec("jq -r '.version' /home/$USER/zelflux/package.json", { silent: true }).stdout; + if (zelflux_remote_version.trim() == zelflux_lv.trim()) { + await discord_hook(`FluxOS updated!\nVersion: **${zelflux_remote_version}**`, web_hook_url, ping, "Update", "#1F8B4C", "Info", "watchdog_update1.png", label); + + // Update notification FluxOS telegram + var emoji_title = "\u{23F0}"; + var emoji_update = "\u{1F504}"; + var info_type = "New Update " + emoji_update; + var field_type = "Info: "; + var msg_text = "FluxOS updated!\nVersion: " + zelflux_remote_version; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + + console.log("Update successfully."); } sleep.sleep(20); - console.log(' '); + console.log(" "); + } } - } } if (config.zelcash_update == "1") { - var zelcash_remote_version = shell.exec("curl -s -m 5 https://apt.runonflux.io/pool/main/f/flux/ | grep -o '[0-9].[0-9].[0-9]' | head -n1",{ silent: true }).stdout; - var zelcash_local_version = shell.exec(`dpkg -l flux | grep -w flux | awk '{print $3}'`,{ silent: true }).stdout; + var zelcash_remote_version = shell.exec("curl -s -m 5 https://apt.runonflux.io/pool/main/f/flux/ | grep -o '[0-9].[0-9].[0-9]' | head -n1", { silent: true }).stdout; + var zelcash_local_version = shell.exec(`dpkg -l flux | grep -w flux | awk '{print $3}'`, { silent: true }).stdout; console.log(`Flux daemon current: ${zelcash_remote_version.trim()} installed: ${zelcash_local_version.trim()}`); - if ( zelcash_remote_version.trim() != "" && zelcash_local_version.trim() != "" ){ - if ( zelcash_remote_version.trim() !== zelcash_local_version.trim() ){ - component_update = 1; - console.log('New Flux daemon version detected:'); - console.log('================================================================='); - console.log('Local version: '+zelcash_local_version.trim()); - console.log('Remote version: '+zelcash_remote_version.trim()); - var update_info = shell.exec("ps -C apt,apt-get,dpkg >/dev/null && echo 'installing software' || echo 'all clear'",{ silent: true }).stdout; - if ( update_info == "installing software" ) { - - shell.exec("sudo killall apt",{ silent: true }).stdout; - shell.exec("sudo killall apt-get",{ silent: true }).stdout; - shell.exec("sudo dpkg --configure -a",{ silent: true }).stdout; - - } - var zelcash_dpkg_version_before = shell.exec(`dpkg -l flux | grep -w flux | awk '{print $3}'`,{ silent: true }).stdout; - shell.exec("sudo systemctl stop zelcash",{ silent: true }) - shell.exec("sudo fuser -k 16125/tcp",{ silent: true }) - shell.exec("sudo apt-get update",{ silent: true }) - shell.exec("sudo apt-get install flux -y",{ silent: true }) - var zelcash_dpkg_version_after = shell.exec(`dpkg -l flux | grep -w flux | awk '{print $3}'`,{ silent: true }).stdout; - sleep.sleep(2); - shell.exec("sudo systemctl start zelcash",{ silent: true }) - if ( (zelcash_dpkg_version_before !== zelcash_dpkg_version_after) && zelcash_dpkg_version_after != "" ){ - await discord_hook(`Fluxnode daemon updated!\nVersion: **${zelcash_dpkg_version_after}**`,web_hook_url,ping,'Update','#1F8B4C','Info','watchdog_update1.png',label); - // Update notification daemon - var emoji_title = '\u{23F0}'; - var emoji_update='\u{1F504}'; - var info_type = 'New Update '+emoji_update; - var field_type = 'Info: '; - var msg_text = "Fluxnode Daemon updated! \nVersion: "+zelcash_dpkg_version_after; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - console.log('Update successfully.'); - console.log(' '); - sleep.sleep(2); - } else { - console.log('Script called.'); - console.log(' '); - sleep.sleep(2); + if (zelcash_remote_version.trim() != "" && zelcash_local_version.trim() != "") { + if (zelcash_remote_version.trim() !== zelcash_local_version.trim()) { + component_update = 1; + console.log("New Flux daemon version detected:"); + console.log("================================================================="); + console.log("Local version: " + zelcash_local_version.trim()); + console.log("Remote version: " + zelcash_remote_version.trim()); + var update_info = shell.exec("ps -C apt,apt-get,dpkg >/dev/null && echo 'installing software' || echo 'all clear'", { silent: true }).stdout; + if (update_info == "installing software") { + shell.exec("sudo killall apt", { silent: true }).stdout; + shell.exec("sudo killall apt-get", { silent: true }).stdout; + shell.exec("sudo dpkg --configure -a", { silent: true }).stdout; + } + var zelcash_dpkg_version_before = shell.exec(`dpkg -l flux | grep -w flux | awk '{print $3}'`, { silent: true }).stdout; + shell.exec("sudo systemctl stop zelcash", { silent: true }); + shell.exec("sudo fuser -k 16125/tcp", { silent: true }); + shell.exec("sudo apt-get update", { silent: true }); + shell.exec("sudo apt-get install flux -y", { silent: true }); + var zelcash_dpkg_version_after = shell.exec(`dpkg -l flux | grep -w flux | awk '{print $3}' && sleep 2`, { silent: true }).stdout; + shell.exec("sudo systemctl start zelcash", { silent: true }); + if (zelcash_dpkg_version_before !== zelcash_dpkg_version_after && zelcash_dpkg_version_after != "") { + await discord_hook(`Fluxnode daemon updated!\nVersion: **${zelcash_dpkg_version_after}**`, web_hook_url, ping, "Update", "#1F8B4C", "Info", "watchdog_update1.png", label); + // Update notification daemon + var emoji_title = "\u{23F0}"; + var emoji_update = "\u{1F504}"; + var info_type = "New Update " + emoji_update; + var field_type = "Info: "; + var msg_text = "Fluxnode Daemon updated! \nVersion: " + zelcash_dpkg_version_after; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + console.log("Update successfully."); + console.log(" "); + sleep.sleep(2); + } else { + console.log("Script called."); + console.log(" "); + sleep.sleep(2); + } } } } - } - -if (config.zelbench_update == "1") { - - var zelbench_remote_version = shell.exec("curl -s -m 5 https://apt.runonflux.io/pool/main/f/fluxbench/ | grep -o '[0-9].[0-9].[0-9]' | head -n1",{ silent: true }).stdout; - var zelbench_local_version = shell.exec("dpkg -l fluxbench | grep -w fluxbench | awk '{print $3}'",{ silent: true }).stdout; - - - console.log(`Fluxbench current: ${zelbench_remote_version.trim()} installed: ${zelbench_local_version.trim()}`); - - if ( zelbench_remote_version.trim() != "" && zelbench_local_version.trim() != "" ){ - - if ( zelbench_remote_version.trim() !== zelbench_local_version.trim() ){ - component_update = 1; - console.log('New Fluxbench version detected:'); - console.log('================================================================='); - console.log('Local version: '+zelbench_local_version.trim()); - console.log('Remote version: '+zelbench_remote_version.trim()); - console.log('================================================================='); - - var update_info = shell.exec("ps -C apt,apt-get,dpkg >/dev/null && echo 'installing software' || echo 'all clear'",{ silent: true }).stdout; - if ( update_info == "installing software" ) { - - shell.exec("sudo killall apt",{ silent: true }).stdout; - shell.exec("sudo killall apt-get",{ silent: true }).stdout; - shell.exec("sudo dpkg --configure -a",{ silent: true }).stdout; - - } - - - var zelbench_dpkg_version_before = shell.exec(`dpkg -l fluxbench | grep -w fluxbench | awk '{print $3}'`,{ silent: true }).stdout; - shell.exec("sudo systemctl stop zelcash",{ silent: true }) - shell.exec("sudo fuser -k 16125/tcp",{ silent: true }) - shell.exec("sudo apt-get update",{ silent: true }) - shell.exec("sudo apt-get install fluxbench -y",{ silent: true }) - sleep.sleep(2); - shell.exec("sudo systemctl start zelcash",{ silent: true }) - - var zelbench_dpkg_version_after = shell.exec(`dpkg -l fluxbench | grep -w fluxbench | awk '{print $3}'`,{ silent: true }).stdout; - - if ( (zelbench_dpkg_version_before !== zelbench_dpkg_version_after) && zelbench_dpkg_version_after != "" ){ - - await discord_hook(`Fluxnode benchmark updated!\nVersion: **${zelbench_dpkg_version_after}**`,web_hook_url,ping,'Update','#1F8B4C','Info','watchdog_update1.png',label); - - // Update notification benchmark telegram - var emoji_title = '\u{23F0}'; - var emoji_update='\u{1F504}'; - var info_type = 'New Update '+emoji_update; - var field_type = 'Info: '; - var msg_text = "Fluxnode Benchmark updated! \nVersion: "+zelbench_dpkg_version_after; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - console.log('Update successfully.'); - console.log(' '); - sleep.sleep(2); - } else { - console.log('Script called.'); - console.log(' '); - sleep.sleep(2); - } + if (config.zelbench_update == "1") { + var zelbench_remote_version = shell.exec("curl -s -m 5 https://apt.runonflux.io/pool/main/f/fluxbench/ | grep -o '[0-9].[0-9].[0-9]' | head -n1", { silent: true }).stdout; + var zelbench_local_version = shell.exec("dpkg -l fluxbench | grep -w fluxbench | awk '{print $3}'", { silent: true }).stdout; + + console.log(`Fluxbench current: ${zelbench_remote_version.trim()} installed: ${zelbench_local_version.trim()}`); + + if (zelbench_remote_version.trim() != "" && zelbench_local_version.trim() != "") { + if (zelbench_remote_version.trim() !== zelbench_local_version.trim()) { + component_update = 1; + console.log("New Fluxbench version detected:"); + console.log("================================================================="); + console.log("Local version: " + zelbench_local_version.trim()); + console.log("Remote version: " + zelbench_remote_version.trim()); + console.log("================================================================="); + + var update_info = shell.exec("ps -C apt,apt-get,dpkg >/dev/null && echo 'installing software' || echo 'all clear'", { silent: true }).stdout; + if (update_info == "installing software") { + shell.exec("sudo killall apt", { silent: true }).stdout; + shell.exec("sudo killall apt-get", { silent: true }).stdout; + shell.exec("sudo dpkg --configure -a", { silent: true }).stdout; + } + var zelbench_dpkg_version_before = shell.exec(`dpkg -l fluxbench | grep -w fluxbench | awk '{print $3}'`, { silent: true }).stdout; + shell.exec("sudo systemctl stop zelcash", { silent: true }); + shell.exec("sudo fuser -k 16125/tcp", { silent: true }); + shell.exec("sudo apt-get update", { silent: true }); + shell.exec("sudo apt-get install fluxbench -y && sleep 2", { silent: true }); + shell.exec("sudo systemctl start zelcash", { silent: true }); + + var zelbench_dpkg_version_after = shell.exec(`dpkg -l fluxbench | grep -w fluxbench | awk '{print $3}'`, { silent: true }).stdout; + + if (zelbench_dpkg_version_before !== zelbench_dpkg_version_after && zelbench_dpkg_version_after != "") { + await discord_hook(`Fluxnode benchmark updated!\nVersion: **${zelbench_dpkg_version_after}**`, web_hook_url, ping, "Update", "#1F8B4C", "Info", "watchdog_update1.png", label); + + // Update notification benchmark telegram + var emoji_title = "\u{23F0}"; + var emoji_update = "\u{1F504}"; + var info_type = "New Update " + emoji_update; + var field_type = "Info: "; + var msg_text = "Fluxnode Benchmark updated! \nVersion: " + zelbench_dpkg_version_after; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + + console.log("Update successfully."); + console.log(" "); + sleep.sleep(2); + } else { + console.log("Script called."); + console.log(" "); + sleep.sleep(2); + } + } + } } - } -} -console.log('================================================================='); - + console.log("================================================================="); } async function flux_check() { - - delete require.cache[require.resolve('./config.js')]; - var config=require('./config.js'); - web_hook_url=config.web_hook_url; - action=config.action; - ping=config.ping; - label=config.label; - - const service_inactive = shell.exec("systemctl list-units --full -all | grep 'zelcash' | grep -o 'inactive'",{ silent: true }).stdout; - const data_time_utc = moment.utc().format('YYYY-MM-DD HH:mm:ss'); + delete require.cache[require.resolve("./config.js")]; + var config = require("./config.js"); + web_hook_url = config.web_hook_url; + action = config.action; + ping = config.ping; + label = config.label; + + const service_inactive = shell.exec("systemctl list-units --full -all | grep 'zelcash' | grep -o 'inactive'", { silent: true }).stdout; + const data_time_utc = moment.utc().format("YYYY-MM-DD HH:mm:ss"); const stillUtc = moment.utc(data_time_utc).toDate(); - const local = moment(stillUtc).local().format('YYYY-MM-DD HH:mm:ss'); + const local = moment(stillUtc).local().format("YYYY-MM-DD HH:mm:ss"); - console.log('UTC: '+data_time_utc+' | LOCAL: '+local ); - console.log('================================================================='); + console.log("UTC: " + data_time_utc + " | LOCAL: " + local); + console.log("================================================================="); -var update_info = shell.exec("ps -C apt,apt-get,dpkg >/dev/null && echo 'installing software' || echo 'all clear'",{ silent: true }).stdout; -if ( update_info == "installing software" ) { - console.log('Update detected...'); - console.log('Watchdog in sleep mode => '+data_time_utc); - console.log('================================================================='); - return; -} + var update_info = shell.exec("ps -C apt,apt-get,dpkg >/dev/null && echo 'installing software' || echo 'all clear'", { silent: true }).stdout; + if (update_info == "installing software") { + console.log("Update detected..."); + console.log("Watchdog in sleep mode => " + data_time_utc); + console.log("================================================================="); + return; + } -if ( service_inactive.trim() == "inactive" ) { - - console.log('Flux daemon service status: inactive'); - console.log('Watchdog in sleep mode => '+data_time_utc); - ++inactive_counter; - console.log('============================================================['+inactive_counter+']'); - if ( inactive_counter > 6 ) { - shell.exec("sudo fuser -k 16125/tcp",{ silent: true }) - shell.exec("sudo systemctl start zelcash",{ silent: true }) - inactive_counter=0; - } else { - return; + if (service_inactive.trim() == "inactive") { + console.log("Flux daemon service status: inactive"); + console.log("Watchdog in sleep mode => " + data_time_utc); + ++inactive_counter; + console.log("============================================================[" + inactive_counter + "]"); + if (inactive_counter > 6) { + shell.exec("sudo fuser -k 16125/tcp", { silent: true }); + shell.exec("sudo systemctl start zelcash", { silent: true }); + inactive_counter = 0; + } else { + return; + } } -} -if ( component_update == 1 ) { - console.log('Component update detected!'); - console.log('Watchdog checking skipped!'); - console.log('================================================================='); + if (component_update == 1) { + console.log("Component update detected!"); + console.log("Watchdog checking skipped!"); + console.log("================================================================="); component_update = 0; return; - } - - -if ( zelbench_counter > 2 || zelcashd_counter > 2 || zelbench_daemon_counter > 2 ){ - - try{ - var zelcash_getinfo_info = JSON.parse(shell.exec(`${daemon_cli} getinfo`,{ silent: true }).stdout); - var zelcash_check = zelcash_getinfo_info.version; - var zelbench_getstatus_info = JSON.parse(shell.exec(`${bench_cli} getstatus`,{ silent: true }).stdout); - var zelbench_benchmark_status = zelbench_getstatus_info.benchmarking; - } catch { - } - if (watchdog_sleep != "1"){ + if (zelbench_counter > 2 || zelcashd_counter > 2 || zelbench_daemon_counter > 2) { + try { + var zelcash_getinfo_info = JSON.parse(shell.exec(`${daemon_cli} getinfo`, { silent: true }).stdout); + var zelcash_check = zelcash_getinfo_info.version; + var zelbench_getstatus_info = JSON.parse(shell.exec(`${bench_cli} getstatus`, { silent: true }).stdout); + var zelbench_benchmark_status = zelbench_getstatus_info.benchmarking; + } catch (error) { + console.log(error); + } - watchdog_sleep="1"; + if (watchdog_sleep != "1") { + watchdog_sleep = "1"; - if ( zelcashd_counter > 2 ) { - error('Watchdog in sleep mode! Flux daemon status: not responding'); + if (zelcashd_counter > 2) { + error("Watchdog in sleep mode! Flux daemon status: not responding"); } else { - error('Watchdog in sleep mode! Fluxbench status: '+zelbench_benchmark_status); + error("Watchdog in sleep mode! Fluxbench status: " + zelbench_benchmark_status); } + } - } - - if (typeof zelcash_check !== "undefined" && zelbench_benchmark_status != "toaster" && zelbench_benchmark_status != "failed" && typeof zelbench_benchmark_status !== "undefined"){ - zelcashd_counter=0; - zelbench_counter=0; - zelbench_daemon_counter=0; - watchdog_sleep="N/A" - sleep_msg=0; - } else { - console.log('Watchdog in sleep mode => '+data_time_utc); - console.log('================================================================='); - if ( zelcashd_counter == 3 || zelbench_counter == 3 ) { - - if ( sleep_msg == "0" ) { - sleep_msg=1; - await discord_hook("Watchdog in sleep mode..\nManual operation needed!",web_hook_url,ping,'Alert','#EA1414','Info','watchdog_manual1.png',label); + if (typeof zelcash_check !== "undefined" && zelbench_benchmark_status != "toaster" && zelbench_benchmark_status != "failed" && typeof zelbench_benchmark_status !== "undefined") { + zelcashd_counter = 0; + zelbench_counter = 0; + zelbench_daemon_counter = 0; + watchdog_sleep = "N/A"; + sleep_msg = 0; + } else { + console.log("Watchdog in sleep mode => " + data_time_utc); + console.log("================================================================="); + if (zelcashd_counter == 3 || zelbench_counter == 3) { + if (sleep_msg == "0") { + sleep_msg = 1; + await discord_hook("Watchdog in sleep mode..\nManual operation needed!", web_hook_url, ping, "Alert", "#EA1414", "Info", "watchdog_manual1.png", label); // Watchdog in sleep mode notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Info: '; - var msg_text = "Watchdog in sleep mode!\n----------------------------------------\n\u{203C} Manual operation needed \u{203C}"; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - } - + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Info: "; + var msg_text = "Watchdog in sleep mode!\n----------------------------------------\n\u{203C} Manual operation needed \u{203C}"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); } - return; - } - } - -try{ + } + return; + } + } - var zelbench_getstatus_info = JSON.parse(shell.exec(`${bench_cli} getstatus`,{ silent: true }).stdout); + // get fluxbench status + try { + let fluxbenchStatus = shell.exec(`${bench_cli} getstatus`, { silent: true }); + if (fluxbenchStatus.code !== 0) console.log(`fluxbench code: ${fluxbenchStatus.code ?? "n/a"}`); + if (fluxbenchStatus.stderr !== "") console.log(`fluxbench stderr: ${fluxbenchStatus.stderr ?? "n/a"}`); + var zelbench_getstatus_info = JSON.parse(fluxbenchStatus.stdout); var zelbench_status = zelbench_getstatus_info.status; var zelback_status = zelbench_getstatus_info.zelback; - - if ( typeof zelback_status == "undefined" ){ + + if (typeof zelback_status == "undefined") { zelback_status = zelbench_getstatus_info.flux; } var zelbench_benchmark_status = zelbench_getstatus_info.benchmarking; + } catch (error) { + console.log(error.message ?? error); + } - }catch { - -} - - try{ - var zelbench_getbenchmarks_info = JSON.parse(shell.exec(`${bench_cli} getbenchmarks`,{ silent: true }).stdout); - // var zelbench_ddwrite = zelbench_getbenchmarks_info.ddwrite; + // get flux node benchmarks + try { + let fluxbenchInfo = shell.exec(`${bench_cli} getbenchmarks`, { silent: true }); + if (fluxbenchInfo.code !== 0) console.log(`fluxbench code: ${fluxbenchInfo.code ?? "n/a"}`); + if (fluxbenchInfo.stderr !== "") console.log(`fluxbench stderr: ${fluxbenchInfo.stderr ?? "n/a"}`); + var zelbench_getbenchmarks_info = JSON.parse(fluxbenchInfo.stdout); + // var zelbench_ddwrite = zelbench_getbenchmarks_info.ddwrite; var zelbench_eps = zelbench_getbenchmarks_info.eps; var zelbench_time = zelbench_getbenchmarks_info.time; var zelbench_error = zelbench_getbenchmarks_info.error; - }catch { - -} + } catch (error) { + console.log(error.message ?? error); + } - try{ - var zelcash_getinfo_info = JSON.parse(shell.exec(`${daemon_cli} getinfo`,{ silent: true }).stdout); + // get flux daemon info + try { + let fluxDaemonInfo = shell.exec(`${daemon_cli} getinfo`, { silent: true }); + if (fluxDaemonInfo.code !== 0) console.log(`daemon code: ${fluxDaemonInfo.code ?? "n/a"}`); + if (fluxDaemonInfo.stderr !== "") console.log(`daemon stderr: ${fluxDaemonInfo.stderr ?? "n/a"}`); + var zelcash_getinfo_info = JSON.parse(fluxDaemonInfo.stdout); var zelcash_check = zelcash_getinfo_info.version; var zelcash_height = zelcash_getinfo_info.blocks; - }catch { - -} - - try{ - var zelcash_getzelnodestatus_info = JSON.parse(shell.exec(`${daemon_cli} getzelnodestatus`,{ silent: true }).stdout); - var zelcash_node_status = zelcash_getzelnodestatus_info.status - var zelcash_last_paid_height = zelcash_getzelnodestatus_info.last_paid_height - var activesince = zelcash_getzelnodestatus_info.activesince - var lastpaid = zelcash_getzelnodestatus_info.lastpaid - }catch { + } catch (error) { + console.log(error.message ?? error); + } -} + // get flux node status from daemon + try { + let fluxnodeStatus = shell.exec(`${daemon_cli} getzelnodestatus`, { silent: true }); + if (fluxnodeStatus.code !== 0) console.log(`daemon code: ${fluxnodeStatus.code ?? "n/a"}`); + if (fluxnodeStatus.stderr !== "") console.log(`daemon stderr: ${fluxnodeStatus.stderr ?? "n/a"}`); + var zelcash_getzelnodestatus_info = JSON.parse(fluxnodeStatus.stdout); + var zelcash_node_status = zelcash_getzelnodestatus_info.status; + var zelcash_last_paid_height = zelcash_getzelnodestatus_info.last_paid_height; + var activesince = zelcash_getzelnodestatus_info.activesince; + var lastpaid = zelcash_getzelnodestatus_info.lastpaid; + } catch (error) { + console.log(error.message ?? error); + } -const mongod_check = shell.exec("pgrep mongod",{ silent: true }).stdout; + const mongod_check = shell.exec("pgrep mongod", { silent: true }).stdout; -if ( typeof zelbench_status == "undefined" && typeof zelcash_check !== "undefined" ) { - + if (typeof zelbench_status == "undefined" && typeof zelcash_check !== "undefined") { ++zelbench_daemon_counter; - - if ( zelbench_daemon_counter == "1" ){ - - console.log('Flux benchmark crash detected!'); - error('Flux benchmark crash detected!'); - await discord_hook("Flux benchmark crash detected!",web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - - // Daemon crash notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = 'Flux benchmark crash detected!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - sleep.sleep(2); - - } - - if ( typeof action == "undefined" || action == "1" ){ - shell.exec("sudo systemctl stop zelcash",{ silent: true }); - sleep.sleep(2); - shell.exec("sudo fuser -k 16125/tcp",{ silent: true }); - shell.exec("sudo systemctl start zelcash",{ silent: true }); - console.log(data_time_utc+' => Flux daemon restarting...'); - await discord_hook("Flux benchmark restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); - - // Fix action daemon restarted notification telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'Flux benchmark restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - } - - console.log('================================================================='); - return; - -} else { - - if ( zelbench_daemon_counter != 0 ) { - - await discord_hook("Flux benchmark fixed!",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - //Fixed benchmark notification telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = 'Flux benchmark fixed!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - zelbench_daemon_counter=0; - } -} - - -if (zelcash_node_status == "" || typeof zelcash_node_status == "undefined" ){ - console.log('Fluxnode status = dead'); -} else { - if ( zelcash_node_status == "expired"){ - console.log('Fluxnode status = '+zelcash_node_status); - - if (expiried_time != "1"){ - expiried_time="1"; - error('Fluxnode expired => UTC: '+data_time_utc+' | LOCAL: '+local); - await discord_hook('Fluxnode expired\nUTC: '+data_time_utc+'\nLOCAL: '+local,web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - - //Expired notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = "Fluxnode expired! \nUTC: "+data_time_utc+"\nLOCAL: "+local; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); + if (zelbench_daemon_counter == "1") { + console.log("Flux benchmark crash detected!"); + error("Flux benchmark crash detected!"); + await discord_hook("Flux benchmark crash detected!", web_hook_url, ping, "Alert", "#EA1414", "Error", "watchdog_error1.png", label); + + // Daemon crash notification telegram + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Error: "; + var msg_text = "Flux benchmark crash detected!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + sleep.sleep(2); } - } - else { - expiried_time="N/A"; - console.log('Fluxnode status = '+zelcash_node_status); - } -} + if (typeof action == "undefined" || action == "1") { + shell.exec("sudo systemctl stop zelcash && sleep 2", { silent: true }); + shell.exec("sudo fuser -k 16125/tcp", { silent: true }); + shell.exec("sudo systemctl start zelcash", { silent: true }); + console.log(data_time_utc + " => Flux daemon restarting..."); + await discord_hook("Flux benchmark restarted!", web_hook_url, ping, "Fix Action", "#FFFF00", "Info", "watchdog_fix1.png", label); -if (zelback_status == "" || typeof zelback_status == "undefined"){ - console.log('Fluxback status = dead'); -} else { + // Fix action daemon restarted notification telegram + var emoji_title = "\u{26A1}"; + var emoji_fix = "\u{1F528}"; + var info_type = "Fix Action " + emoji_fix; + var field_type = "Info: "; + var msg_text = "Flux benchmark restarted!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } - if (zelback_status == "disconnected"){ - ++disc_count; - console.log('FluxOS status = '+zelback_status); - if ( lock_zelback != "1" && disc_count == 2) { - error('FluxOS disconnected!'); - var flux_api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'",{ silent: true }); - var port_api = Number(flux_api_port.trim()); - var error_output=shell.exec(`curl -sSL -m 10 http://localhost:${port_api}/id/loginphrase`,{ silent: true }).stdout; - error(`Error: ${error_output}`); - await discord_hook("FluxOS disconnected!",web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - - // FluxOS disconnected notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = 'FluxOS disconnected!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - sleep.sleep(2); - lock_zelback=1; + console.log("================================================================="); + return; + } else { + if (zelbench_daemon_counter != 0) { + await discord_hook("Flux benchmark fixed!", web_hook_url, ping, "Fix Info", "#1F8B4C", "Info", "watchdog_fixed2.png", label); + //Fixed benchmark notification telegram + var emoji_title = "\u{1F4A1}"; + var emoji_fixed = "\u{2705}"; + var info_type = "Fixed Info " + emoji_fixed; + var field_type = "Info: "; + var msg_text = "Flux benchmark fixed!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + zelbench_daemon_counter = 0; + } + } + if (zelcash_node_status == "" || typeof zelcash_node_status == "undefined") { + console.log("Fluxnode status = dead"); + } else { + if (zelcash_node_status == "expired") { + console.log("Fluxnode status = " + zelcash_node_status); + + if (expiried_time != "1") { + expiried_time = "1"; + error("Fluxnode expired => UTC: " + data_time_utc + " | LOCAL: " + local); + await discord_hook("Fluxnode expired\nUTC: " + data_time_utc + "\nLOCAL: " + local, web_hook_url, ping, "Alert", "#EA1414", "Error", "watchdog_error1.png", label); + + //Expired notification telegram + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Error: "; + var msg_text = "Fluxnode expired! \nUTC: " + data_time_utc + "\nLOCAL: " + local; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + } else { + expiried_time = "N/A"; + console.log("Fluxnode status = " + zelcash_node_status); } + } - if ( typeof action == "undefined" || action == "1" ){ + if (zelback_status == "" || typeof zelback_status == "undefined") { + console.log("Fluxback status = dead"); + } else { + if (zelback_status == "disconnected") { + ++disc_count; + console.log("FluxOS status = " + zelback_status); + if (lock_zelback != "1" && disc_count == 2) { + error("FluxOS disconnected!"); + var flux_api_port = await shell.exec("grep -w apiport /home/$USER/zelflux/config/userconfig.js | grep -o '[[:digit:]]*'", { silent: true }); + var port_api = Number(flux_api_port.trim()); + var error_output = shell.exec(`curl -sSL -m 10 http://localhost:${port_api}/id/loginphrase`, { silent: true }).stdout; + error(`Error: ${error_output}`); + await discord_hook("FluxOS disconnected!", web_hook_url, ping, "Alert", "#EA1414", "Error", "watchdog_error1.png", label); + + // FluxOS disconnected notification telegram + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Error: "; + var msg_text = "FluxOS disconnected!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); - if ( disc_count == 2 ){ - shell.exec("pm2 restart flux",{ silent: true }); - shell.exec("sudo systemctl restart zelcash",{ silent: true }); sleep.sleep(2); - console.log(data_time_utc+' => FluxOS restarting...'); - await discord_hook("FluxOS restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); - - // Fix action telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'FluxOS restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - } + lock_zelback = 1; + } - } + if (typeof action == "undefined" || action == "1") { + if (disc_count == 2) { + shell.exec("pm2 restart flux", { silent: true }); + shell.exec("sudo systemctl restart zelcash && sleep 2", { silent: true }); + console.log(data_time_utc + " => FluxOS restarting..."); + await discord_hook("FluxOS restarted!", web_hook_url, ping, "Fix Action", "#FFFF00", "Info", "watchdog_fix1.png", label); + + // Fix action telegram + var emoji_title = "\u{26A1}"; + var emoji_fix = "\u{1F528}"; + var info_type = "Fix Action " + emoji_fix; + var field_type = "Info: "; + var msg_text = "FluxOS restarted!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + } + } else { + console.log("FluxOS status = " + zelback_status); + + if (disc_count == 2) { + await discord_hook("FluxOS connection fixed!", web_hook_url, ping, "Fix Info", "#1F8B4C", "Info", "watchdog_fixed2.png", label); + + // FluxOS fixed notification telegram + var emoji_title = "\u{1F4A1}"; + var emoji_fixed = "\u{2705}"; + var info_type = "Fixed Info " + emoji_fixed; + var field_type = "Info: "; + var msg_text = "FluxOS connection fixed!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + lock_zelback = 0; + disc_count = 0; + } + } + if (zelbench_status == "" || typeof zelbench_status == "undefined") { + console.log("Fluxbench status = dead"); } else { - console.log('FluxOS status = '+zelback_status); - - if ( disc_count == 2 ) { - await discord_hook("FluxOS connection fixed!",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - - // FluxOS fixed notification telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = 'FluxOS connection fixed!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - + if (zelbench_status == "online") { + console.log("Fluxbench status = " + zelbench_status); + } else { + console.log("Fluxbench status = " + zelbench_status); } - lock_zelback=0; - disc_count=0; } -} - - if (zelbench_status == "" || typeof zelbench_status == "undefined"){ -console.log('Fluxbench status = dead'); -} else { - if (zelbench_status == "online"){ - console.log('Fluxbench status = '+zelbench_status); + if (zelbench_benchmark_status == "" || typeof zelbench_benchmark_status == "undefined") { + console.log("Fluxbench status = dead"); } else { - console.log('Fluxbench status = '+zelbench_status); + if (zelbench_benchmark_status == "toaster" || zelbench_benchmark_status == "failed") { + console.log("Benchmark status = " + zelbench_benchmark_status); + await discord_hook("Benchmark " + zelbench_benchmark_status + " \n**Reason:**\n" + zelbench_error, web_hook_url, ping, "Alert", "#EA1414", "Error", "watchdog_error1.png", label); + + // Benchmark failed notification telegram + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Error: "; + var msg_text = "Benchmark " + zelbench_benchmark_status + " \u{274C} \nReason:\n" + zelbench_error; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } else { + console.log("Benchmark status = " + zelbench_benchmark_status); + } } -} - -if (zelbench_benchmark_status == "" || typeof zelbench_benchmark_status == "undefined"){ - console.log('Fluxbench status = dead'); -} else { - - if (zelbench_benchmark_status == "toaster" || zelbench_benchmark_status == "failed" ){ - console.log('Benchmark status = '+zelbench_benchmark_status); - await discord_hook('Benchmark '+zelbench_benchmark_status+' \n**Reason:**\n'+zelbench_error,web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - - // Benchmark failed notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = "Benchmark "+zelbench_benchmark_status+" \u{274C} \nReason:\n"+zelbench_error; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - + if (zelbench_time == "null" || zelbench_time == "" || typeof zelbench_time == "undefined") { } else { - console.log('Benchmark status = '+zelbench_benchmark_status); + const durationInMinutes = "30"; + const timestamp = moment.unix(Number(zelbench_time)); + const bench_local_time = timestamp.format("DD/MM/YYYY HH:mm:ss"); + const next_benchmark_time = moment(timestamp, "DD/MM/YYYY HH:mm:ss").add(durationInMinutes, "minutes").format("DD/MM/YYYY HH:mm:ss"); + const start_date = moment(data_time_utc, "YYYY-MM-DD HH:mm:ss"); + const end_date = moment(next_benchmark_time, "YYYY-MM-DD HH:mm:ss"); + const time_left = moment(end_date.diff(start_date)).format("mm:ss"); + console.log("Last benchmark time = " + bench_local_time); + console.log("Next benchmark time = " + next_benchmark_time + " (left: " + time_left + ")"); } -} - -if (zelbench_time == "null" || zelbench_time == "" || typeof zelbench_time == "undefined"){ -} else{ - const durationInMinutes = '30'; - const timestamp = moment.unix(Number(zelbench_time)); - const bench_local_time = timestamp.format("DD/MM/YYYY HH:mm:ss") - const next_benchmark_time = moment(timestamp, 'DD/MM/YYYY HH:mm:ss').add(durationInMinutes, 'minutes').format('DD/MM/YYYY HH:mm:ss'); - const start_date = moment(data_time_utc, 'YYYY-MM-DD HH:mm:ss'); - const end_date = moment(next_benchmark_time, 'YYYY-MM-DD HH:mm:ss'); - const time_left = moment(end_date.diff(start_date)).format("mm:ss"); - console.log('Last benchmark time = '+bench_local_time); - console.log('Next benchmark time = '+next_benchmark_time+' (left: '+time_left+')'); -} - -if (zelcash_last_paid_height == "null" || zelcash_last_paid_height == "" || typeof zelcash_last_paid_height == "undefined"){ -} else{ - console.log('Last paid hight = '+zelcash_last_paid_height); -} - -if (lastpaid == "null" || lastpaid == "" || typeof lastpaid == "undefined"){ -console.log('Last paid time = '+paid_local_time); -} else{ - var timestamp_paid = moment.unix(Number(lastpaid)); - paid_local_time = timestamp_paid.format("DD/MM/YYYY HH:mm:ss") - console.log('Last paid time = '+paid_local_time); -} - -if (activesince == "null" || activesince == "" || typeof activesince == "undefined"){ -} else{ - const timestamp_active = moment.unix(Number(activesince)); - const active_local_time = timestamp_active.format("DD/MM/YYYY HH:mm:ss") - console.log('Active since = '+active_local_time); -} - -if (typeof zelcash_check !== "undefined" ){ - - if ( zelcashd_counter != 0 ) { - - await discord_hook("Flux daemon fixed!",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - - // Daemon fixed notification telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = 'Flux daemon fixed!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); + if (zelcash_last_paid_height == "null" || zelcash_last_paid_height == "" || typeof zelcash_last_paid_height == "undefined") { + } else { + console.log("Last paid hight = " + zelcash_last_paid_height); } - zelcashd_counter=0; - console.log('Flux daemon status = running'); -} -else { - - ++zelcashd_counter; - console.log('Flux daemon status = dead'); - if ( zelcashd_counter == "1" ){ - - error('Flux daemon crash detected!'); - await discord_hook("Flux daemon crash detected!",web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); + if (lastpaid == "null" || lastpaid == "" || typeof lastpaid == "undefined") { + console.log("Last paid time = " + paid_local_time); + } else { + var timestamp_paid = moment.unix(Number(lastpaid)); + paid_local_time = timestamp_paid.format("DD/MM/YYYY HH:mm:ss"); + console.log("Last paid time = " + paid_local_time); + } - // Daemon crash notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = 'Flux daemon crash detected!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - sleep.sleep(2); + if (activesince == "null" || activesince == "" || typeof activesince == "undefined") { + } else { + const timestamp_active = moment.unix(Number(activesince)); + const active_local_time = timestamp_active.format("DD/MM/YYYY HH:mm:ss"); + console.log("Active since = " + active_local_time); + } - } + if (typeof zelcash_check !== "undefined") { + if (zelcashd_counter != 0) { + await discord_hook("Flux daemon fixed!", web_hook_url, ping, "Fix Info", "#1F8B4C", "Info", "watchdog_fixed2.png", label); - if ( typeof action == "undefined" || action == "1" ){ - shell.exec("sudo systemctl stop zelcash",{ silent: true }); + // Daemon fixed notification telegram + var emoji_title = "\u{1F4A1}"; + var emoji_fixed = "\u{2705}"; + var info_type = "Fixed Info " + emoji_fixed; + var field_type = "Info: "; + var msg_text = "Flux daemon fixed!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + zelcashd_counter = 0; + console.log("Flux daemon status = running"); + } else { + ++zelcashd_counter; + console.log("Flux daemon status = dead"); + + if (zelcashd_counter == "1") { + error("Flux daemon crash detected!"); + await discord_hook("Flux daemon crash detected!", web_hook_url, ping, "Alert", "#EA1414", "Error", "watchdog_error1.png", label); + + // Daemon crash notification telegram + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Error: "; + var msg_text = "Flux daemon crash detected!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); sleep.sleep(2); - shell.exec("sudo fuser -k 16125/tcp",{ silent: true }); - shell.exec("sudo systemctl start zelcash",{ silent: true }); - console.log(data_time_utc+' => Flux daemon restarting...'); - await discord_hook("Flux daemon restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); - - // Fix action daemon restarted notification telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'Flux daemon restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - } - -} - - - -if (mongod_check == ""){ - - ++mongod_counter; - console.log('MongoDB status = dead'); - -if ( mongod_counter == "1" ){ - error('MongoDB crash detected!'); - await discord_hook("MongoDB crash detected!",web_hook_url,ping,'Alert','#EA1414','Error','watchdog_error1.png',label); - - // MongoDB crash notification telegram - var emoji_title = '\u{1F6A8}'; - var emoji_bell = '\u{1F514}'; - var info_type = 'Alert '+emoji_bell; - var field_type = 'Error: '; - var msg_text = 'MongoDB crash detected!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - sleep.sleep(2); -} - - if (mongod_counter < 3){ - if ( typeof action == "undefined" || action == "1" ){ - - console.log(data_time_utc+' => MongoDB restarting...'); - shell.exec("sudo systemctl restart mongod",{ silent: true }) - await discord_hook("MongoDB restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); + } - // Fix action mongodb notification telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'MongoDB restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); + if (typeof action == "undefined" || action == "1") { + shell.exec("sudo systemctl stop zelcash && sleep 2", { silent: true }); + shell.exec("sudo fuser -k 16125/tcp", { silent: true }); + shell.exec("sudo systemctl start zelcash", { silent: true }); + console.log(data_time_utc + " => Flux daemon restarting..."); + await discord_hook("Flux daemon restarted!", web_hook_url, ping, "Fix Action", "#FFFF00", "Info", "watchdog_fix1.png", label); - } + // Fix action daemon restarted notification telegram + var emoji_title = "\u{26A1}"; + var emoji_fix = "\u{1F528}"; + var info_type = "Fix Action " + emoji_fix; + var field_type = "Info: "; + var msg_text = "Flux daemon restarted!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } } -return; -} else { - - if ( mongod_counter != 0 ) { - - await discord_hook("MongoDB connection fixed!",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - - // Fixed notification mongodb telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = 'MongoDB connection fixed!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - } - mongod_counter=0; -} - - + if (mongod_check == "") { + ++mongod_counter; + console.log("MongoDB status = dead"); + if (mongod_counter == "1") { + error("MongoDB crash detected!"); + await discord_hook("MongoDB crash detected!", web_hook_url, ping, "Alert", "#EA1414", "Error", "watchdog_error1.png", label); + // MongoDB crash notification telegram + var emoji_title = "\u{1F6A8}"; + var emoji_bell = "\u{1F514}"; + var info_type = "Alert " + emoji_bell; + var field_type = "Error: "; + var msg_text = "MongoDB crash detected!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); -if ( zelbench_benchmark_status == "toaster" || zelbench_benchmark_status == "failed" ){ - ++zelbench_counter; - var error_line=shell.exec("egrep -a --color 'Failed' /home/$USER/.fluxbenchmark/debug.log | tail -1 | sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}.[0-9]\{2\}.[0-9]\{2\}.[0-9]\{2\}.//'",{ silent: true }); - error('Benchmark problem detected! Fluxbench status: '+zelbench_benchmark_status); - error('Reason: '+error_line.trim()); - console.log('Benchmark problem detected! Fluxbench status: '+zelbench_benchmark_status); - console.log('Reason: '+error_line.trim()); - if ( typeof action == "undefined" || action == "1" ){ - - console.log(data_time_utc+' => Fluxbench restarting...'); - shell.exec(`${bench_cli} restartnodebenchmarks`,{ silent: true }); - await discord_hook("Benchmark restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); + sleep.sleep(2); + } - // Fix action benchmark notification telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'Benchmark restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); + if (mongod_counter < 3) { + if (typeof action == "undefined" || action == "1") { + console.log(data_time_utc + " => MongoDB restarting..."); + shell.exec("sudo systemctl restart mongod", { silent: true }); + await discord_hook("MongoDB restarted!", web_hook_url, ping, "Fix Action", "#FFFF00", "Info", "watchdog_fix1.png", label); + + // Fix action mongodb notification telegram + var emoji_title = "\u{26A1}"; + var emoji_fix = "\u{1F528}"; + var info_type = "Fix Action " + emoji_fix; + var field_type = "Info: "; + var msg_text = "MongoDB restarted!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + } + return; + } else { + if (mongod_counter != 0) { + await discord_hook("MongoDB connection fixed!", web_hook_url, ping, "Fix Info", "#1F8B4C", "Info", "watchdog_fixed2.png", label); + + // Fixed notification mongodb telegram + var emoji_title = "\u{1F4A1}"; + var emoji_fixed = "\u{2705}"; + var info_type = "Fixed Info " + emoji_fixed; + var field_type = "Info: "; + var msg_text = "MongoDB connection fixed!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + mongod_counter = 0; } -} -else{ - - if ( zelbench_counter != 0 ) { - - await discord_hook("Flux benchmark fixed!",web_hook_url,ping,'Fix Info','#1F8B4C','Info','watchdog_fixed2.png',label); - - //Fixed benchmark notification telegram - var emoji_title = '\u{1F4A1}'; - var emoji_fixed = '\u{2705}'; - var info_type = 'Fixed Info '+emoji_fixed; - var field_type = 'Info: '; - var msg_text = 'Flux benchmark fixed!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); - - } -zelbench_counter=0; -} - -delete require.cache[require.resolve('./config.js')]; -var config = require('./config.js'); - -if (config.tier_eps_min != "" && config.tier_eps_min != "0" && zelbench_eps != "" && zelbench_eps < config.tier_eps_min ){ -++tire_lock; -if ( tire_lock < 4 ) { -error('Benchmark problem detected! CPU eps under minimum limit for '+tire_name+'('+eps_limit+'), current eps: '+zelbench_eps.toFixed(2)); -console.log('Benchmark problem detected!'); -console.log('CPU eps under minimum limit for '+tire_name+'('+eps_limit+'), current eps: '+zelbench_eps.toFixed(2)); - if ( typeof action == "undefined" || action == "1" ){ - - console.log(data_time_utc+' => Fluxbench restarting...'); - shell.exec(`${bench_cli} restartnodebenchmarks`,{ silent: true }); - await discord_hook("Benchmark restarted!",web_hook_url,ping,'Fix Action','#FFFF00','Info','watchdog_fix1.png',label); - - // Fix action benchmark notification telegram - var emoji_title = '\u{26A1}'; - var emoji_fix = '\u{1F528}'; - var info_type = 'Fix Action '+emoji_fix; - var field_type = 'Info: '; - var msg_text = 'Benchmark restarted!'; - await send_telegram_msg(emoji_title,info_type,field_type,msg_text,label); + if (zelbench_benchmark_status == "toaster" || zelbench_benchmark_status == "failed") { + ++zelbench_counter; + var error_line = shell.exec("egrep -a --color 'Failed' /home/$USER/.fluxbenchmark/debug.log | tail -1 | sed 's/[0-9]{4}-[0-9]{2}-[0-9]{2}.[0-9]{2}.[0-9]{2}.[0-9]{2}.//'", { silent: true }); + error("Benchmark problem detected! Fluxbench status: " + zelbench_benchmark_status); + error("Reason: " + error_line.trim()); + console.log("Benchmark problem detected! Fluxbench status: " + zelbench_benchmark_status); + console.log("Reason: " + error_line.trim()); + if (typeof action == "undefined" || action == "1") { + console.log(data_time_utc + " => Fluxbench restarting..."); + shell.exec(`${bench_cli} restartnodebenchmarks`, { silent: true }); + await discord_hook("Benchmark restarted!", web_hook_url, ping, "Fix Action", "#FFFF00", "Info", "watchdog_fix1.png", label); + + // Fix action benchmark notification telegram + var emoji_title = "\u{26A1}"; + var emoji_fix = "\u{1F528}"; + var info_type = "Fix Action " + emoji_fix; + var field_type = "Info: "; + var msg_text = "Benchmark restarted!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + } else { + if (zelbench_counter != 0) { + await discord_hook("Flux benchmark fixed!", web_hook_url, ping, "Fix Info", "#1F8B4C", "Info", "watchdog_fixed2.png", label); + + //Fixed benchmark notification telegram + var emoji_title = "\u{1F4A1}"; + var emoji_fixed = "\u{2705}"; + var info_type = "Fixed Info " + emoji_fixed; + var field_type = "Info: "; + var msg_text = "Flux benchmark fixed!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + zelbench_counter = 0; } -} -} else { -tire_lock=0; -} - if ( zelcash_height != "" && typeof zelcash_height != "undefined" ){ - var skip_sync=between(1, 4); - if ( skip_sync > 2 ) { - await Check_Sync(zelcash_height,data_time_utc); - } else { - console.log('Sync check skipped: '+skip_sync+' <= 2'); - } - } -console.log('============================================================['+zelbench_counter+'/'+zelcashd_counter+']'); + delete require.cache[require.resolve("./config.js")]; + var config = require("./config.js"); + + if (config.tier_eps_min != "" && config.tier_eps_min != "0" && zelbench_eps != "" && zelbench_eps < config.tier_eps_min) { + ++tire_lock; + if (tire_lock < 4) { + error("Benchmark problem detected! CPU eps under minimum limit for " + tire_name + "(" + eps_limit + "), current eps: " + zelbench_eps.toFixed(2)); + console.log("Benchmark problem detected!"); + console.log("CPU eps under minimum limit for " + tire_name + "(" + eps_limit + "), current eps: " + zelbench_eps.toFixed(2)); + if (typeof action == "undefined" || action == "1") { + console.log(data_time_utc + " => Fluxbench restarting..."); + shell.exec(`${bench_cli} restartnodebenchmarks`, { silent: true }); + await discord_hook("Benchmark restarted!", web_hook_url, ping, "Fix Action", "#FFFF00", "Info", "watchdog_fix1.png", label); + + // Fix action benchmark notification telegram + var emoji_title = "\u{26A1}"; + var emoji_fix = "\u{1F528}"; + var info_type = "Fix Action " + emoji_fix; + var field_type = "Info: "; + var msg_text = "Benchmark restarted!"; + await send_telegram_msg(emoji_title, info_type, field_type, msg_text, label); + } + } + } else { + tire_lock = 0; + } + if (zelcash_height != "" && typeof zelcash_height != "undefined") { + var skip_sync = between(1, 4); + if (skip_sync > 2) { + await Check_Sync(zelcash_height, data_time_utc); + } else { + console.log("Sync check skipped: " + skip_sync + " <= 2"); + } + } + console.log("============================================================[" + zelbench_counter + "/" + zelcashd_counter + "]"); } -setInterval(job_creator, 1*60*1000); +setInterval(job_creator, 1 * 60 * 1000);