Onionr/static-data/www/shared/main/stats.js

176 lines
6.0 KiB
JavaScript
Executable File

/*
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 <https://www.gnu.org/licenses/>
*/
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(totalRec) {
totalRec.innerText = totalRec
})
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')
})
}
}
)
}
)