From 0982544c2ee296a044da8510214462ff77a4053d Mon Sep 17 00:00:00 2001 From: Vladislav Ostapov Date: Wed, 15 Jan 2025 10:12:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BE=20=D1=81=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=B5=20=D0=B2=20=D1=81=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D1=8F=D0=BD=D0=B8=D0=B8=20=D1=83=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D1=81=D1=82=D0=B2=D0=B0=20(load=20average=20+=20RAM=20to?= =?UTF-8?q?tal/free)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/common/monitoring-data.js.j2 | 2 +- .../template/common/monitoring-methods.js.j2 | 20 +++ .../template/common/monitoring.html.j2 | 4 +- src/terminal_api_driver.cpp | 117 ++++++++++++------ static/main-scpc.html | 26 +++- static/main-tdma.html | 24 +++- 6 files changed, 149 insertions(+), 44 deletions(-) diff --git a/front-generator/template/common/monitoring-data.js.j2 b/front-generator/template/common/monitoring-data.js.j2 index cc9fdce..87777fe 100644 --- a/front-generator/template/common/monitoring-data.js.j2 +++ b/front-generator/template/common/monitoring-data.js.j2 @@ -43,5 +43,5 @@ statDevice: { // температурные датчики adrv: 0, zynq: 0, fpga: 0 }, - statOs: {uptime: '?'}, + statOs: {uptime: '?', load1: '?', load5: '?', load15: '?', totalram: '?', freeram: '?'}, diff --git a/front-generator/template/common/monitoring-methods.js.j2 b/front-generator/template/common/monitoring-methods.js.j2 index 45b1128..bc5d411 100644 --- a/front-generator/template/common/monitoring-methods.js.j2 +++ b/front-generator/template/common/monitoring-methods.js.j2 @@ -1,4 +1,19 @@ 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" || modcod < 0 || modcod >= modcod.length) { + return "?"; + } + return modcods[modcod] + } + this.lastUpdateTime = new Date(); this.initState = vals["mainState"]["initState"] {% if modem == 'scpc' %} @@ -69,6 +84,11 @@ } else { this.statOs.uptime = '?' } + this.statOs.load1 = vals["sysinfo"]["load1min"] + this.statOs.load5 = vals["sysinfo"]["load5min"] + this.statOs.load15 = vals["sysinfo"]["load15min"] + this.statOs.totalram = vals["sysinfo"]["totalram"] + this.statOs.freeram = vals["sysinfo"]["freeram"] }, resetPacketsStatistics() { diff --git a/front-generator/template/common/monitoring.html.j2 b/front-generator/template/common/monitoring.html.j2 index 07e2b13..d1c1f82 100644 --- a/front-generator/template/common/monitoring.html.j2 +++ b/front-generator/template/common/monitoring.html.j2 @@ -55,7 +55,7 @@ {% endraw %}{% endif %}{% raw %} {% endraw %}{% if modem == 'scpc' %}{% raw %} -
+

Статистика режима CinC

@@ -75,6 +75,8 @@ + +
Температура ZYNQ{{ statDevice.zynq }} °C
Температура FPGA{{ statDevice.fpga }} °C
Uptime{{ statOs.uptime }}
Load average{{ statOs.load1 }} {{ statOs.load5 }} {{ statOs.load15 }}
RAM total/free{{ statOs.totalram }}Mb/{{ statOs.freeram }}Mb
diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 4bcde72..4330d74 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -77,10 +77,10 @@ public: TerminalNetworkSettings& operator= (const TerminalNetworkSettings& src) = default; void loadDefaults() { - managementIp = "0.0.0.0/0"; + managementIp = "0.0.0.0"; managementGateway = ""; mode = "l2"; - dataIp = "0.0.0.0/0"; + dataIp = "0.0.0.0"; dataMtu = 1500; } }; @@ -799,6 +799,46 @@ void api_driver::ApiDriver::resetPacketStatistics() const { this->daemon->resetPacketStatistics(); } +static void generateModcode(std::ostream& out, const char* paramName, uint32_t modcod) { + struct _modcodDef {const char* modulation; const char* speed;}; + const static _modcodDef defs[] = { + {.modulation = "DUMMY", .speed = "0"}, + {.modulation = "QPSK", .speed = "1/4"}, + {.modulation = "QPSK", .speed = "1/3"}, + {.modulation = "QPSK", .speed = "2/5"}, + {.modulation = "QPSK", .speed = "1/2"}, + {.modulation = "QPSK", .speed = "3/5"}, + {.modulation = "QPSK", .speed = "2/3"}, + {.modulation = "QPSK", .speed = "3/4"}, + {.modulation = "QPSK", .speed = "4/5"}, + {.modulation = "QPSK", .speed = "5/6"}, + {.modulation = "QPSK", .speed = "8/9"}, + {.modulation = "QPSK", .speed = "9/10"}, + {.modulation = "8PSK", .speed = "3/5"}, + {.modulation = "8PSK", .speed = "2/3"}, + {.modulation = "8PSK", .speed = "3/4"}, + {.modulation = "8PSK", .speed = "5/6"}, + {.modulation = "8PSK", .speed = "8/9"}, + {.modulation = "8PSK", .speed = "9/10"}, + {.modulation = "16APSK", .speed = "2/3"}, + {.modulation = "16APSK", .speed = "3/4"}, + {.modulation = "16APSK", .speed = "4/5"}, + {.modulation = "16APSK", .speed = "5/6"}, + {.modulation = "16APSK", .speed = "8/9"}, + {.modulation = "16APSK", .speed = "9/10"}, + {.modulation = "32APSK", .speed = "3/4"}, + {.modulation = "32APSK", .speed = "4/5"}, + {.modulation = "32APSK", .speed = "5/6"}, + {.modulation = "32APSK", .speed = "8/9"}, + {.modulation = "32APSK", .speed = "9/10"}, + }; + const _modcodDef* d = defs; + if (modcod < 28) { + d = defs + modcod; + } + +} + std::string api_driver::ApiDriver::loadSettings() const { if (daemon == nullptr) { return R"({"error": "api daemon not started!"})"; @@ -819,24 +859,24 @@ std::string api_driver::ApiDriver::loadSettings() const { std::stringstream result; #ifdef MODEM_IS_SCPC - result << "{\n\"general.isCinC\":" << boolAsStr(modSettings.is_cinc); - result << ",\"general.txEn\":" << boolAsStr(modSettings.tx_is_on); - result << ",\"general.modulatorMode\":" << (modSettings.is_carrier ? "\"normal\"" : "\"test\""); - result << ",\"general.autoStartTx\":" << boolAsStr(modSettings.is_save_current_state); - result << ",\"general.isTestInputData\":" << boolAsStr(modSettings.is_test_data); - result << ",\n\"tx.attenuation\":"; writeDouble(result, modSettings.attenuation); - result << ",\"tx.rolloff\":" << static_cast(modSettings.rollof * 100); - result << ",\"tx.cymRate\":" << modSettings.baudrate; - result << ",\"tx.centerFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz, 3); + result << "{\n\"isCinC\":" << boolAsStr(modSettings.is_cinc); + result << ",\"txEn\":" << boolAsStr(modSettings.tx_is_on); + result << ",\"txModulatorIsTest\":" << boolAsStr(!modSettings.is_carrier); + result << ",\"txAutoStart\":" << boolAsStr(modSettings.is_save_current_state); + result << ",\"txIsTestInput\":" << boolAsStr(modSettings.is_test_data); + result << ",\n\"txAttenuation\":"; writeDouble(result, modSettings.attenuation); + result << ",\"txRolloff\":" << static_cast(modSettings.rollof * 100); + result << ",\"txBaudrate\":" << modSettings.baudrate; + result << ",\"txCentralFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz, 3); result << ",\"dvbs2.frameSizeNormal\":" << boolAsStr(!(modSettings.modcod_tx & 2)); result << ",\"dvbs2.ccm_modcod\":" << (modSettings.modcod_tx >> 2); // result << ",\"dvbs2.isPilots\":" << "null"; - result << ",\n\"dvbs2.isAcm\":" << boolAsStr(acmSettings.enable); + result << ",\n\"dvbIsAcm\":" << boolAsStr(acmSettings.enable); result << ",\"dvbs2.acm_maxModcod\":" << (acmSettings.max_modcod >> 2); result << ",\"dvbs2.acm_minModcod\":" << (acmSettings.min_modcod >> 2); result << ",\"dvbs2.snrReserve\":"; writeDouble(result, acmSettings.snr_treashold_acm); - result << ",\"dvbs2.servicePacketPeriod\":" << acmSettings.period_pack; + result << ",\"dvbServicePacketPeriod\":" << acmSettings.period_pack; result << ",\n\"acm.en\":" << boolAsStr(acmSettings.enable_auto_atten); result << ",\"acm.maxAttenuation\":"; writeDouble(result, acmSettings.max_attenuation); @@ -1098,35 +1138,34 @@ std::string api_driver::ApiDriver::loadSysInfo() { struct sysinfo info{}; sysinfo(&info); - struct sysinfo { - long uptime; /* Seconds since boot */ - unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ - unsigned long totalram; /* Total usable main memory size */ - unsigned long freeram; /* Available memory size */ - unsigned long sharedram; /* Amount of shared memory */ - unsigned long bufferram; /* Memory used by buffers */ - unsigned long totalswap; /* Total swap space size */ - unsigned long freeswap; /* Swap space still available */ - unsigned short procs; /* Number of current processes */ - unsigned long totalhigh; /* Total high memory size */ - unsigned long freehigh; /* Available high memory size */ - unsigned int mem_unit; /* Memory unit size in bytes */ - }; + // struct sysinfo { + // long uptime; /* Seconds since boot */ + // unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ + // unsigned long totalram; /* Total usable main memory size */ + // unsigned long freeram; /* Available memory size */ + // unsigned long sharedram; /* Amount of shared memory */ + // unsigned long bufferram; /* Memory used by buffers */ + // unsigned long totalswap; /* Total swap space size */ + // unsigned long freeswap; /* Swap space still available */ + // unsigned short procs; /* Number of current processes */ + // unsigned long totalhigh; /* Total high memory size */ + // unsigned long freehigh; /* Available high memory size */ + // unsigned int mem_unit; /* Memory unit size in bytes */ + // }; + + double f_load = 1.0 / (1 << SI_LOAD_SHIFT); result << "{\n\"uptime\":" << info.uptime; - result << ",\"load1min\":" << info.loads[0]; - result << ",\"load5min\":" << info.loads[1]; - result << ",\"load15min\":" << info.loads[2]; - result << ",\"totalram\":" << info.totalram; - result << ",\"freeram\":" << info.freeram; - result << ",\"sharedram\":" << info.sharedram; - result << ",\"bufferram\":" << info.bufferram; - result << ",\"totalswap\":" << info.totalswap; - result << ",\"freeswap\":" << info.freeswap; + result << ",\"load1min\":"; writeDouble(result, f_load * static_cast(info.loads[0]), 2); + result << ",\"load5min\":"; writeDouble(result, f_load * static_cast(info.loads[1]), 2); + result << ",\"load15min\":"; writeDouble(result, f_load * static_cast(info.loads[2]), 2); + result << ",\"totalram\":" << ((info.totalram * info.mem_unit) >> 20); // Mb + result << ",\"freeram\":" << ((info.freeram * info.mem_unit) >> 20); // Mb + result << ",\"sharedram\":" << ((info.sharedram * info.mem_unit) >> 20); // Mb + result << ",\"bufferram\":" << ((info.bufferram * info.mem_unit) >> 20); // Mb + // result << ",\"totalswap\":" << info.totalswap * info.mem_unit; + // result << ",\"freeswap\":" << info.freeswap * info.mem_unit; result << ",\"procs\":" << static_cast(info.procs); - result << ",\"totalhigh\":" << info.totalhigh; - result << ",\"freehigh\":" << info.freehigh; - result << ",\"mem_unit\":" << info.mem_unit; result << "\n}"; return result.str(); } diff --git a/static/main-scpc.html b/static/main-scpc.html index 5647fe1..6c173cd 100644 --- a/static/main-scpc.html +++ b/static/main-scpc.html @@ -99,7 +99,7 @@
-
+

Статистика режима CinC

@@ -119,6 +119,8 @@ + +
Температура ZYNQ{{ statDevice.zynq }} °C
Температура FPGA{{ statDevice.fpga }} °C
Uptime{{ statOs.uptime }}
Load average{{ statOs.load1 }} {{ statOs.load5 }} {{ statOs.load15 }}
RAM total/free{{ statOs.totalram }}Mb/{{ statOs.freeram }}Mb
@@ -658,7 +660,7 @@ statDevice: { // температурные датчики adrv: 0, zynq: 0, fpga: 0 }, - statOs: {uptime: '?'}, + statOs: {uptime: '?', load1: '?', load5: '?', load15: '?', totalram: '?', freeram: '?'}, // ========== include end from 'common/monitoring-data.js.j2' // ========== include from 'common/setup-data.js.j2' @@ -915,6 +917,21 @@ // ========== include from 'common/monitoring-methods.js.j2' 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" || modcod < 0 || modcod >= modcod.length) { + return "?"; + } + return modcods[modcod] + } + this.lastUpdateTime = new Date(); this.initState = vals["mainState"]["initState"] this.isCinC = vals["mainState"]["isCinC"] @@ -974,6 +991,11 @@ } else { this.statOs.uptime = '?' } + this.statOs.load1 = vals["sysinfo"]["load1min"] + this.statOs.load5 = vals["sysinfo"]["load5min"] + this.statOs.load15 = vals["sysinfo"]["load15min"] + this.statOs.totalram = vals["sysinfo"]["totalram"] + this.statOs.freeram = vals["sysinfo"]["freeram"] }, resetPacketsStatistics() { diff --git a/static/main-tdma.html b/static/main-tdma.html index 7b9c489..03eb59f 100644 --- a/static/main-tdma.html +++ b/static/main-tdma.html @@ -105,6 +105,8 @@ Температура ZYNQ{{ statDevice.zynq }} °C Температура FPGA{{ statDevice.fpga }} °C Uptime{{ statOs.uptime }} + Load average{{ statOs.load1 }} {{ statOs.load5 }} {{ statOs.load15 }} + RAM total/free{{ statOs.totalram }}Mb/{{ statOs.freeram }}Mb
@@ -350,7 +352,7 @@ statDevice: { // температурные датчики adrv: 0, zynq: 0, fpga: 0 }, - statOs: {uptime: '?'}, + statOs: {uptime: '?', load1: '?', load5: '?', load15: '?', totalram: '?', freeram: '?'}, // ========== include end from 'common/monitoring-data.js.j2' // ========== include from 'common/setup-data.js.j2' @@ -509,6 +511,21 @@ // ========== include from 'common/monitoring-methods.js.j2' 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" || modcod < 0 || modcod >= modcod.length) { + return "?"; + } + return modcods[modcod] + } + this.lastUpdateTime = new Date(); this.initState = vals["mainState"]["initState"] @@ -559,6 +576,11 @@ } else { this.statOs.uptime = '?' } + this.statOs.load1 = vals["sysinfo"]["load1min"] + this.statOs.load5 = vals["sysinfo"]["load5min"] + this.statOs.load15 = vals["sysinfo"]["load15min"] + this.statOs.totalram = vals["sysinfo"]["totalram"] + this.statOs.freeram = vals["sysinfo"]["freeram"] }, resetPacketsStatistics() {