/* Onionr - Private P2P Communication This file loads stats to show on the main node web page This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see */ uptimeDisplay = document.getElementById('uptime') connectedDisplay = document.getElementById('connectedNodes') storedBlockDisplay = document.getElementById('storedBlocks') queuedBlockDisplay = document.getElementById('blockQueue') lastIncoming = document.getElementById('lastIncoming') totalRec = document.getElementById('totalRec') securityLevel = document.getElementById('securityLevel') sec_description_str = 'unknown' statsInterval = null function showSecStatNotice(){ var secWarnEls = document.getElementsByClassName('secRequestNotice') for (el = 0; el < secWarnEls.length; el++){ secWarnEls[el].style.display = 'block' } } function seconds2time (seconds) { //func from https://stackoverflow.com/a/7579799/2465421 by https://stackoverflow.com/users/14555/jottos var hours = Math.floor(seconds / 3600) var minutes = Math.floor((seconds - (hours * 3600)) / 60) var seconds = seconds - (hours * 3600) - (minutes * 60) var time = "" if (hours != 0) { time = hours+":" } if (minutes != 0 || time !== "") { minutes = (minutes < 10 && time !== "") ? "0"+minutes : String(minutes) time += minutes+":" } if (time === "") { time = seconds+"s" } else { time += (seconds < 10) ? "0"+seconds : String(seconds) } return time } fetch('/config/get/general.security_level', { headers: { "token": webpass }}) .then((resp) => resp.text()) // Transform the data into text .then(function(resp) { switch(resp){ case "0": sec_description_str = 'normal' break; case "1": sec_description_str = 'high' break; case "2": sec_description_str = 'very high' break; case "3": sec_description_str = 'extreme' break; } if (sec_description_str !== 'normal'){ showSecStatNotice() } }) var getStats = function(){ if (document.hidden){ console.debug('skipping stats since no window focus') return } fetch('/getstats', { headers: { "token": webpass }}) .then((resp) => resp.json()) .then(function(stats) { uptimeDisplay.innerText = seconds2time(stats['uptime']) connectedNodes = stats['connectedNodes'].split('\n') connectedDisplay.innerText = '' for (x = 0; x < connectedNodes.length; x++){ if (! connectedDisplay.innerText.includes(connectedNodes[x])){ connectedDisplay.innerText += '🧅 ' + connectedNodes[x] + '\n' } } storedBlockDisplay.innerText = stats['blockCount'] queuedBlockDisplay.innerText = stats['blockQueueCount'] document.getElementById('threads').innerText = stats['threads'] document.getElementById('ramPercent').innerText = (stats['ramPercent']).toFixed(2) + '%' document.getElementById('fileDescriptors').innerText = stats['fd'] document.getElementById('diskUsage').innerText = stats['diskUsage'] securityLevel.innerText = sec_description_str fetch('/hitcount', { headers: { "token": webpass }}) .then((resp) => resp.text()) .then(function(resp) { totalRec.innerText = resp }) fetch('/lastconnect', { headers: { "token": webpass }}) .then((resp) => resp.text()) .then(function(conn) { var lastConnect = conn if (lastConnect > 0){ var humanDate = new Date(0) humanDate.setUTCSeconds(conn) humanDate = humanDate.toString() lastConnect = humanDate.substring(0, humanDate.indexOf('(')); } else{ lastConnect = 'None since start' } lastIncoming.innerText = lastConnect }) }) } document.addEventListener("visibilitychange", function() { if (document.visibilityState === 'visible') { getStats() } }) getStats() statsInterval = setInterval(function(){getStats()}, 1000) fetch('/config/get/ui.animated_background', { headers: { "token": webpass }}) .then((resp) => resp.text()) // Transform the data into text .then(function(resp) { if (resp == "false"){ return } fetch('/config/get/ui.theme', { headers: { "token": webpass }}) .then((resp) => resp.text()) // Transform the data into text .then(function(resp) { if (resp == '"dark"'){ /* particlesJS.load(@dom-id, @path-json, @callback (optional)); */ particlesJS.load('particles-js', '/shared/main/particles.json', function() { console.debug('callback - particles.js config loaded') }) } } ) } )