1
I’m picking up information from the interface of an internet modem: Txbytes, Rxbytes, Uptime He gives me a json input:
Entrada=([[
{
"uptime":"15423",
"txbytes":"1147089",
"rxbytes":"23124634"
}
]])
Tab = json.cod(Entrada)
I’ve done the calculation with the following excerpt:
TXAnterior,RXAnterior,TLAnterior = 0,0,0 // Definindo um valor inicial
TXAtual = convnumero(Tab.txbytes) // Converte em números pra calcular
RXAtual = convnumero(Tab.rxbytes)
TLAtual = convnumero(Tab.uptime)
Segundos = TLAtual - TLAnterior // Pegando o que foi consumido
MenosTX = TXAtual - TXAnterior
MenosRX = RXAtual - RXAnterior
VezesTX = (MenosTX * 8) // Os valores foram dados em bytes
VezesRX = (MenosRX * 8) // Convertendo em bits
MediaTX = (VezesTX / (Segundos * 1048576)) // Divide por um milhão "Mega"
MediaRX = (VezesRX / (Segundos * 1048576))
TXAnterior = TXAtual // O anterior vai pegar o valor do atual
RXAnterior = RXAtual
Call of the ajax:
window.onload = function(){
animaGraficos()
};
var dados = ("EnderecoDoRadio=]]..EnderecoDoRadio..[[");
function ajax(dados, nrTentativas, cb) {
$.ajax({
type: "GET",
url: 'monitor.prisma',
data: dados,
dataType: "json",
success: function(sucesso) {
// Beleza deu certo!
cb(null, sucesso);
},
error: function(erro) {
// Tente novamente
if (nrTentativas > 0) setTimeout(ajax.bind(null, dados, nrTentativas - 1, cb), 500);
else cb(erro);
}
});
}
function animaGraficos() {
var timers = [];
var latencia = document.gauges.get('manometro-latencia');
var sinal = document.gauges.get('manometro-sinal');
var qualidade = document.gauges.get('manometro-qualidade');
var envio = document.gauges.get('manometro-envio');
var recebimento = document.gauges.get('manometro-recebimento');
var processador = document.gauges.get('manometro-processador');
setInterval(function() {
ajax(dados, 2, function(err, resposta) {
if (err) return console.log(err);
console.log(resposta);
result=resposta;
latencia.value = resposta.Ping;
sinal.value = resposta.Sinal;
qualidade.value=resposta.Qualidade;
envio.value=resposta.TXBytes;
recebimento.value=resposta.RXBytes;
processador.value=resposta.Processador;
//alert('oi');
if(result.Processador > 80){
$('#manometro-processador').addClass(' animated infinite flash');
}
if(result.Processador < 80){
$('#manometro-processador').removeClass(' animated infinite flash');
}
if(result.Sinal < -85){
$('#manometro-sinal').addClass(' animated infinite flash');
//$('#manometro-sinal').attr('data-value-text','Rafael');
}
if(result.Sinal > -86){
$('#manometro-sinal').removeClass(' animated infinite flash');
}
// se ping não for número
if(isNaN(result.Ping)){
Materialize.toast('<span>Destino inalcançável ou fora do ar</span>', 3000);
}
else if(isNaN(result.Sinal)){ // caso ping exista, veja se tem sinal
Materialize.toast('<span>Verifique usuário, senha e porta</span>', 3000);
}
if(result.ERRO){ // caso haja erros, mostre
Materialize.toast('<span>' + result.ERRO + '</span>', 3000);
}
});
}, 5000 );
}
This way sometimes works, sometimes not because there is a delay to capture the input and not always the calculation is accurate.
I want to know if someone helps me improve this code or has how to do the calculation by own javascript ?
This photo shows how wrong the values are when there is an error:
Where are you running this code? On a server? It is possible to do this calculation on JS yes. Show how you are doing the AJAX call.
– Thiago Barcala
Yes it’s on the server side. The ajax call I’ve already placed.
– Rafael Lemos
What is the language you are using in the server code? Is there a reason you didn’t create a function that based on the previous and current value gives you the Mbps value? And if possible try to use fewer intermediate variables, because it greatly decreases the readability of your code.
– Thiago Barcala
I use Prism on the server side, the intermediate variables I put in because I thought it would be just more readable, but okay. About the function that calculates in Mbps is this above. By logic the time difference in seconds that is the "uptime" would serve to avoid these errors because as you can see is 1Mega multiplied by Seconds.
– Rafael Lemos