updateStatistics(vals) { function modcodToStr(modcod) { // модкоды из раздела 5.5.2.2 https://www.etsi.org/deliver/etsi_en/302300_302399/302307/01.01.02_60/en_302307v010102p.pdf const modcods = [ "DUMMY", "QPSK 1/4", "QPSK 1/3", "QPSK 2/5", "QPSK 1/2", "QPSK 3/5", "QPSK 2/3", "QPSK 3/4", "QPSK 4/5", "QPSK 5/6", "QPSK 8/9", "QPSK 9/10", "8PSK 3/5", "8PSK 2/3", "8PSK 3/4", "8PSK 5/6", "8PSK 8/9", "8PSK 9/10", "16APSK 2/3", "16APSK 3/4", "16APSK 4/5", "16APSK 5/6", "16APSK 8/9", "16APSK 9/10", "32APSK 3/4", "32APSK 4/5", "32APSK 5/6", "32APSK 8/9", "32APSK 9/10", ] if (typeof modcod != "number") { return "?"; } if (modcod < 0 || modcod >= modcods.length) { return `? (${modcod})` } return modcods[modcod] } this.lastUpdateTime = new Date(); this.initState = vals["state"]["initState"] this.testState = vals["state"]["testState"] {% if modem == 'scpc' %} this.isCinC = vals["state"]["isCinC"] {% endif %} this.statRx.state = vals["state"]["rx"]["state"] this.statRx.sym_sync_lock = vals["state"]["rx"]["sym_sync_lock"] this.statRx.freq_search_lock = vals["state"]["rx"]["freq_search_lock"] this.statRx.afc_lock = vals["state"]["rx"]["afc_lock"] this.statRx.pkt_sync = vals["state"]["rx"]["pkt_sync"] this.statRx.snr = vals["state"]["rx"]["snr"] this.statRx.rssi = vals["state"]["rx"]["rssi"] this.statRx.modcod = modcodToStr(vals["state"]["rx"]["modcod"]) this.statRx.frameSizeNormal = vals["state"]["rx"]["frameSizeNormal"] this.statRx.isPilots = vals["state"]["rx"]["isPilots"] this.statRx.symError = vals["state"]["rx"]["symError"] this.statRx.freqErr = vals["state"]["rx"]["freqErr"] this.statRx.freqErrAcc = vals["state"]["rx"]["freqErrAcc"] this.statRx.inputSignalLevel = vals["state"]["rx"]["inputSignalLevel"] this.statRx.pllError = vals["state"]["rx"]["pllError"] this.statRx.speedOnRxKbit = vals["state"]["rx"]["speedOnRxKbit"] this.statRx.speedOnIifKbit = vals["state"]["rx"]["speedOnIifKbit"] this.statRx.packetsOk = vals["state"]["rx"]["packetsOk"] this.statRx.packetsBad = vals["state"]["rx"]["packetsBad"] this.statRx.packetsDummy = vals["state"]["rx"]["packetsDummy"] {% if modem == 'scpc' %} this.statTx.state = vals["state"]["tx"]["state"] this.statTx.snr = vals["state"]["tx"]["snr"] this.statTx.modcod = modcodToStr(vals["state"]["tx"]["modcod"]) this.statTx.frameSizeNormal = vals["state"]["tx"]["frameSizeNormal"] this.statTx.isPilots = vals["state"]["tx"]["isPilots"] this.statTx.speedOnTxKbit = vals["state"]["tx"]["speedOnTxKbit"] this.statTx.speedOnIifKbit = vals["state"]["tx"]["speedOnIifKbit"] this.statCinc.occ = vals["state"]["cinc"]["occ"] this.statCinc.correlator = vals["state"]["cinc"]["correlator"] this.statCinc.correlatorFails = vals["state"]["cinc"]["correlatorFails"] this.statCinc.freqErr = vals["state"]["cinc"]["freqErr"] this.statCinc.freqErrAcc = vals["state"]["cinc"]["freqErrAcc"] this.statCinc.channelDelay = vals["state"]["cinc"]["channelDelay"] {% else %} this.statTx.state = vals["state"]["tx"]["state"] this.statTx.modcod = modcodToStr(vals["state"]["tx"]["modcod"]) this.statTx.speedOnTxKbit = vals["state"]["tx"]["speedOnTxKbit"] this.statTx.speedOnIifKbit = vals["state"]["tx"]["speedOnIifKbit"] this.statTx.centerFreq = vals["state"]["tx"]["centerFreq"] this.statTx.symSpeed = vals["state"]["tx"]["symSpeed"] {% endif %} this.statDevice.adrv = vals["state"]["device"]["adrv"] this.statDevice.zynq = vals["state"]["device"]["zynq"] this.statDevice.fpga = vals["state"]["device"]["fpga"] {% if modem == 'tdma' %} this.statDevice.upgradeStatus = vals["state"]["device"]["upgradeStatus"] this.statDevice.upgradePercent = vals["state"]["device"]["upgradePercent"] this.statDevice.upgradeImage = vals["state"]["device"]["upgradeImage"] {% endif %} // аптайм приходит в секундах, надо преобразовать его в человеко-читаемый вид let uptime = vals["state"]["device"]["uptime"] if (uptime) { let secs = uptime % 60; uptime = Math.floor(uptime / 60) let mins = uptime % 60; uptime = Math.floor(uptime / 60) let hours = uptime % 24 uptime = Math.floor( uptime / 24) let res = `${hours}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}` if (uptime > 0) { res = `${uptime} дней, ` + res } this.statOs.uptime = res } else { this.statOs.uptime = '?' } this.statOs.load1 = vals["state"]["device"]["load1min"] this.statOs.load5 = vals["state"]["device"]["load5min"] this.statOs.load15 = vals["state"]["device"]["load15min"] this.statOs.totalram = vals["state"]["device"]["totalram"] this.statOs.freeram = vals["state"]["device"]["freeram"] }, resetPacketsStatistics() { fetch('/api/resetPacketStatistics', { method: 'POST', credentials: 'same-origin' }).then(() => { this.statRx.packetsOk = 0 this.statRx.packetsBad = 0 this.statRx.packetsDummy = 0 }) },