Andrew Boyson / web

Dependents:   oldheating gps motorhome heating

base/net/web-net-script.js

Committer:
andrewboyson
Date:
2020-12-26
Revision:
143:cc2e148cb96a
Parent:
133:98c6bf14bc37
Child:
144:7106252b7abf

File content as of revision 143:cc2e148cb96a:

//Net script
'use strict';

let mac = '';
let tcp = '';
let dns = '';

function parseTcpLine(line)
{
    if (line.length == 0) return;
    let fields = line.split('\t');
    let state      = parseInt(fields[0], 16);
    let idleMs     = parseInt(fields[1], 16);
    let ipType     = parseInt(fields[2], 16);
    let arIndex    = parseInt(fields[3], 16);
    let locPort    = parseInt(fields[4], 16);
    let remPort    = parseInt(fields[5], 16);
    let bytesRcvd  = parseInt(fields[6], 16);
    let bytesSent  = parseInt(fields[7], 16);
    
    switch (state)
    {
        case 1:  tcp += "  Syn";                           break;
        case 2:  tcp += "  Est";                           break;
        case 3:  tcp += " Wait";                           break;
        default: tcp += state.toString().padStart(5, ' '); break;
    }
    
    let idleMinutes = Math.floor(idleMs / 1000 / 60);
    tcp += idleMinutes.toString().padStart(4, ' ');
    tcp += "     ";
    
    if      (ipType == 0x0800) tcp += "IPv4";
    else if (ipType == 0x86DD) tcp += "IPv6";
    else                       tcp += fields[1];
    
    tcp +=   arIndex.toString().padStart(4, ' ');
    tcp +=   locPort.toString().padStart(9, ' ');
    tcp +=   remPort.toString().padStart(9, ' ');
    tcp += bytesRcvd.toString().padStart(6, ' ');
    tcp += bytesSent.toString().padStart(6, ' ');
    tcp += '\r\n';
}
function parseTcpLines(text)
{
    tcp = "State Idle Protocol ARI Port-Loc Port-Rem  Rcvd  Sent\n";
    text.split('\n').forEach(parseTcpLine);
}
function parseDnsLine(line)
{
    if (line.length == 0) return;
    let fields = line.split('\t');
    
    dns += parseInt(fields[0], 16).toString().padStart(2, ' ');
    let minutes  = parseInt(fields[1], 16) / 1000 / 60;
    dns += Math.floor(minutes).toString().padStart(4, ' ');
    dns += ' ';
    dns += Net.makeIp6(fields[2]).padEnd(40, ' ');
    dns += ' ';
    dns += fields[3];
    dns += ' ';
    dns += fields[4];
    dns += '\r\n';
}
function parseGenLines(text)
{
    let lines = text.split('\n');
    mac = Net.makeMac(lines[ 0]);
}
function parse()
{
    let topics = Ajax.response.split('\f');
    parseGenLines(topics[0]);
    parseTcpLines(topics[1]);
    parseDnsLines(topics[2]);
}
function display()
{
    let elem;

    elem = Ajax.getElementOrNull('ajax-tcp'         ); if (elem) elem.textContent = tcp;
    elem = Ajax.getElementOrNull('ajax-mac'         ); if (elem) elem.textContent = mac;
    elem = Ajax.getElementOrNull('ajax-dns'         ); if (elem) elem.textContent = dns;
}

Ajax.server     = '/net-ajax';
Ajax.onResponse = function() { parse(); display(); };
Ajax.init();