How to calculate Mbps?

Asked

Viewed 78 times

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:

inserir a descrição da imagem aqui

  • 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.

  • Yes it’s on the server side. The ajax call I’ve already placed.

  • 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.

  • 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.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.