From 70a22572550a6f5f7f40feb732f8ce3794445e15 Mon Sep 17 00:00:00 2001 From: Vladislav Ostapov Date: Thu, 3 Apr 2025 15:26:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D0=B1=D0=BE=D1=80=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=D0=B8,=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=BD=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=20=D0=BE=D1=82=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B8=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=BC=D0=BE=D0=B6=D0=B5=D1=82=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D1=82=D1=8C=20=D0=BD=D0=B0?= =?UTF-8?q?=20FULL=20RATE.=20=D0=9A=20=D1=82=D0=BE=D0=BC=D1=83=20=D0=B6?= =?UTF-8?q?=D0=B5,=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BD=D0=B0=20SCPC?= =?UTF-8?q?=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 3 ++- src/terminal_api_driver.cpp | 49 +++++++++++++++++++++---------------- src/terminal_api_driver.h | 2 ++ 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 13b1a66..e41a004 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -480,7 +480,7 @@ public: rep.headers.push_back({.name = "Content-Type", .value = toString(mime_types::json)}); rep.content.insert(rep.content.end(), result.c_str(), result.c_str() + result.size()); })); - +#ifdef MODEM_IS_SCPC s.resources.emplace_back(std::make_unique("/dev/settings", this->auth, http::auth::User::DEVELOPER, [this](const auto& req, auto& rep) { std::string result; if (req.method == "GET") { @@ -519,6 +519,7 @@ public: rep.content.clear(); http::resource::loadFile("/tmp/weblog-statistics.csv", rep.content); })); +#endif } ~ServerResources() = default; diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index bd3bc21..d39f59c 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -136,6 +136,7 @@ std::string makeTimepointFromMillis(int64_t unix_time_ms) { return ss.str(); } +#ifdef MODEM_IS_SCPC class api_driver::StatisticsLogger { public: StatisticsLogger(): timeStart(TIME_NOW()) {} @@ -238,6 +239,7 @@ private: std::fstream logFile{}; std::shared_mutex mutex; }; +#endif /** * Этот демон нужен для того, чтобы получать статистику из API, а так же корректно сохранять настройки @@ -266,9 +268,8 @@ private: std::string tmpDevState; logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDmaDebug(status_init)", CP_GetDmaDebug(sid, "status_init", &tmpDevState)); #endif -#ifdef MODEM_IS_SCPC - logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDebugMetrics()", CP_GetDebugMetrics(sid, debugMetrics)); +#ifdef MODEM_IS_SCPC bool isCinC = getIsCinC(); if (isCinC) { logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetCinCState()", CP_GetCinCState(sid, cinc)); @@ -443,6 +444,7 @@ private: std::function callback; bool checkNeedUpdate(int64_t now) const { + if (periodMs < 0) return false; // тут нет смысла спать меньше чем на 20мс, поэтому можно разрешить чтение на некоторое время раньше return now - lastUpdate >= (periodMs - 20); } @@ -457,6 +459,22 @@ private: }; IntervalUpdate_t updaters[] = { +#ifdef MODEM_IS_SCPC + // обновление логов + {.lastUpdate = 0, .periodMs = -1, .callback = [this]() { + try { + { + std::lock_guard _alock(this->cpApiMutex); + std::lock_guard _slock(this->stateMutex); + logCpApiError("api_driver::TerminalApiDaemon->statsLogs.putItem()->CP_GetDebugMetrics()", CP_GetDebugMetrics(sid, debugMetrics)); + } + this->statsLogs.putItem(debugMetrics); + BOOST_LOG_TRIVIAL(debug) << "api_driver::TerminalApiDaemon->statsLogs.putItem(): success write statistics state to log!"; + } catch (std::exception& e) { + BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon->statsLogs.putItem() failed to log: " << e.what(); + } + }}, +#endif // обновление статистики {.lastUpdate = 0, .periodMs = CACHE_STATISTICS_UPDATE_MS, .callback = [this]() { try { @@ -465,22 +483,6 @@ private: } catch (std::exception& e) { BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateState(): " << e.what(); } - - // запись статистики в лог, если нужно - try { - static int uc = 0; - if (uc == 0) { - this->statsLogs.putItem(debugMetrics); - - BOOST_LOG_TRIVIAL(debug) << "api_driver::TerminalApiDaemon::updateState(): success write statistics state to log!"; - } - uc++; - if (uc * CACHE_STATISTICS_UPDATE_MS >= this->statsLogs.logPeriodMs) { - uc = 0; - } - } catch (std::exception& e) { - BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateState() failed to log: " << e.what(); - } }}, // обновление состояния устройства (обновления, температура) {.lastUpdate = 0, .periodMs = CACHE_DEV_STATE_UPDATE_MS, .callback = [this]() { @@ -526,7 +528,9 @@ private: CP_Logout(this->sid); this->connectToApi(); } - +#ifdef MODEM_IS_SCPC + updaters[0].periodMs = this->statsLogs.logEn ? this->statsLogs.logPeriodMs.load() : -1; +#endif int64_t sleepTime = 60000; // минута по-умолчанию auto now = TIME_NOW(); for (auto& u: updaters) { @@ -555,8 +559,8 @@ private: demodulator_state demodState{}; device_state devState{}; std::string deviceInitState; - debug_metrics debugMetrics{}; #ifdef MODEM_IS_SCPC + debug_metrics debugMetrics{}; CinC_state cincState{}; #endif @@ -580,7 +584,9 @@ private: TerminalFirmwareVersion firmware; public: +#ifdef MODEM_IS_SCPC StatisticsLogger statsLogs; +#endif std::mutex cpApiMutex; TSID sid; @@ -1371,7 +1377,7 @@ void api_driver::ApiDriver::executeInApi(const std::function& ca BOOST_LOG_TRIVIAL(error) << "ApiDriver::executeInApi(): failed to exec with error: " << e.what(); } } - +#ifdef MODEM_IS_SCPC std::string api_driver::ApiDriver::getLoggingStatisticsSettings() { return this->daemon->statsLogs.getSettings(); } @@ -1379,6 +1385,7 @@ std::string api_driver::ApiDriver::getLoggingStatisticsSettings() { void api_driver::ApiDriver::setLoggingStatisticsSettings(boost::property_tree::ptree &pt) { this->daemon->statsLogs.setSettings(pt); } +#endif std::string api_driver::ApiDriver::loadSysInfo() { std::stringstream result; diff --git a/src/terminal_api_driver.h b/src/terminal_api_driver.h index b75f98d..83a2515 100644 --- a/src/terminal_api_driver.h +++ b/src/terminal_api_driver.h @@ -72,6 +72,7 @@ namespace api_driver { void executeInApi(const std::function &callback); +#ifdef MODEM_IS_SCPC std::string getLoggingStatisticsSettings(); void setLoggingStatisticsSettings(boost::property_tree::ptree &pt); @@ -84,6 +85,7 @@ namespace api_driver { * @param maxItems */ void readLoggingStatistics(std::vector& out, int timeStart = -1, int timeEnd = -1, bool ordering = false, int maxItems = -1); +#endif static std::string loadSysInfo();