добавил в мониторинг TDMA-морды статус обновления

This commit is contained in:
2025-04-03 14:23:08 +03:00
parent a6a4391123
commit 940a2139b9
8 changed files with 76 additions and 13 deletions

View File

@@ -255,7 +255,6 @@ private:
void updateState() {
modulator_state modulator{};
demodulator_state demodulator{};
device_state device{};
#ifdef MODEM_IS_SCPC
CinC_state cinc{};
#endif
@@ -263,7 +262,6 @@ private:
std::lock_guard lock(this->cpApiMutex);
logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetModulatorState()", CP_GetModulatorState(sid, modulator));
logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDemodulatorState()", CP_GetDemodulatorState(sid, demodulator));
logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDeviceState()", CP_GetDeviceState(sid, device));
#ifdef MODEM_IS_TDMA
std::string tmpDevState;
logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDmaDebug(status_init)", CP_GetDmaDebug(sid, "status_init", &tmpDevState));
@@ -281,7 +279,6 @@ private:
std::lock_guard lock2(this->stateMutex);
this->modState = modulator;
this->demodState = demodulator;
this->devState = device;
#ifdef MODEM_IS_TDMA
this->deviceInitState = tmpDevState;
#endif
@@ -323,6 +320,16 @@ private:
}
}
void updateDeviceState() {
device_state device{};
std::lock_guard lock(this->cpApiMutex);
logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDeviceState()", CP_GetDeviceState(sid, device));
{
std::lock_guard lock2(this->stateMutex);
this->devState = device;
}
}
void unsafeLoadNetworkSettings(TerminalNetworkSettings& s) {
s.loadDefaults();
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp));
@@ -475,6 +482,15 @@ private:
BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateState() failed to log: " << e.what();
}
}},
// обновление состояния устройства (обновления, температура)
{.lastUpdate = 0, .periodMs = CACHE_DEV_STATE_UPDATE_MS, .callback = [this]() {
try {
this->updateDeviceState();
BOOST_LOG_TRIVIAL(debug) << "api_driver::TerminalApiDaemon::updateDeviceState(): success update!";
} catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateDeviceState(): " << e.what();
}
}},
// обновление кеша настроек
{.lastUpdate = 0, .periodMs = CACHE_SETTINGS_UPDATE_MS, .callback = [this]() {
try {
@@ -515,7 +531,12 @@ private:
auto now = TIME_NOW();
for (auto& u: updaters) {
if (u.checkNeedUpdate(now)) {
u.lastUpdate = now;
// выравнивание таймингов (-20ms...+50ms)
if (u.lastUpdate + u.periodMs + 50 < now) {
u.lastUpdate += u.periodMs;
} else {
u.lastUpdate = now;
}
u.callback();
now = TIME_NOW();
}
@@ -942,6 +963,25 @@ std::string api_driver::ApiDriver::loadTerminalState() const {
result << ",\n\"device.adrv\":"; writeDouble(result, device.adrv_temp, 1);
result << ",\"device.fpga\":"; writeDouble(result, device.pl_temp, 1);
result << ",\"device.zynq\":"; writeDouble(result, device.zynq_temp, 1);
#ifdef MODEM_IS_TDMA
if (device.cur_image.empty()) {
result << R"(,
"device.upgradeStatus":"Нет обновлений","device.upgradePercent":0,"device.upgradeImage":"")";
} else {
switch (device.status) {
case NORM_RX_OBJECT_NEW_API: result << ",\n" R"("device.upgradeStatus": "Начало загрузки")"; break;
case NORM_RX_OBJECT_INFO_API: result << ",\n" R"("device.upgradeStatus": "Получено имя образа")"; break;
case NORM_RX_OBJECT_UPDATED_API: result << ",\n" R"("device.upgradeStatus": "Загружается")"; break;
case NORM_RX_OBJECT_COMPLETED_API: result << ",\n" R"("device.upgradeStatus": "Загрузка завершена")"; break;
case NORM_RX_OBJECT_ABORTED_API: result << ",\n" R"("device.upgradeStatus": "Загрузка прервана")"; break;
default: result << ",\n" R"("device.upgradeStatus": "?")";
}
result << ",\"device.upgradePercent\":" << device.dwl_percent;
result << ",\"device.upgradeImage\":" << buildEscapedString(device.cur_image);
}
#endif
result << "}";

View File

@@ -9,7 +9,8 @@
namespace api_driver {
constexpr int CACHE_STATISTICS_UPDATE_MS = 500;
constexpr int CACHE_STATISTICS_UPDATE_MS = 500; ///< время обновления кеша статистики модулятора/демодулятора
constexpr int CACHE_DEV_STATE_UPDATE_MS = 3000; ///< время обновления статуса устройства (обновления по воздуху, температуры)
constexpr int CACHE_SETTINGS_UPDATE_MS = 5000;
constexpr int CACHE_QOS_UPDATE_MS = 5000;