242 lines
7.2 KiB
C++
242 lines
7.2 KiB
C++
#ifndef STRUCTS_H
|
|
#define STRUCTS_H
|
|
|
|
#include "api-driver/stricts-enable.h"
|
|
#include "proxy.h"
|
|
#include <atomic>
|
|
#include <fstream>
|
|
#include <shared_mutex>
|
|
#include <string>
|
|
#include <boost/log/trivial.hpp>
|
|
#include <boost/property_tree/ptree_fwd.hpp>
|
|
|
|
#include "common/nlohmann/json.hpp"
|
|
|
|
|
|
namespace api_driver::obj {
|
|
#ifdef API_OBJECT_DEBUG_METRICS_ENABLE
|
|
class StatisticsLogger {
|
|
public:
|
|
StatisticsLogger();
|
|
|
|
static constexpr const char* LOG_FILENAME = "/tmp/weblog-statistics.csv";
|
|
|
|
int64_t timeStart;
|
|
|
|
bool logEn = false;
|
|
std::atomic<int> logPeriodMs = 1000;
|
|
std::atomic<int> maxAgeMs = 10000;
|
|
|
|
/**
|
|
*
|
|
* @return {"en": bool, "logPeriodMs": int, "maxAgeMs": int}
|
|
*/
|
|
std::string getSettings();
|
|
void setSettings(boost::property_tree::ptree &pt);
|
|
|
|
void updateCallback(proxy::CpProxy& cp);
|
|
/**
|
|
* Записать значение в "базу данных". Метку при этом вставлять не нужно, она будет вставлена автоматически.
|
|
* @param item
|
|
*/
|
|
void putItem(const debug_metrics& item);
|
|
|
|
// void collectExpiredItems();
|
|
|
|
// void resetLogs() {
|
|
// std::lock_guard _lock(mutex);
|
|
// logs.clear();
|
|
// }
|
|
|
|
~StatisticsLogger();
|
|
private:
|
|
// std::pmr::deque<LogItem> logs;
|
|
std::fstream logFile{};
|
|
std::shared_mutex mutex;
|
|
};
|
|
#endif
|
|
|
|
#if defined(MODEM_IS_SCPC)
|
|
static constexpr const char* DEFAULT_SERVER_NAME = "RSCM-101";
|
|
#elif defined(MODEM_IS_TDMA)
|
|
static constexpr const char* DEFAULT_SERVER_NAME = "TDMA Abonent";
|
|
#elif defined(MODEM_IS_SHPC)
|
|
static constexpr const char* DEFAULT_SERVER_NAME = "SHPS Terminal";
|
|
#else
|
|
#error "Selected modem type not supported!"
|
|
#endif
|
|
|
|
#ifdef API_OBJECT_NETWORK_SETTINGS_ENABLE
|
|
class TerminalNetworkSettings {
|
|
public:
|
|
std::string managementIp, managementGateway, dataIp, serverName;
|
|
bool isL2 = true;
|
|
unsigned int dataMtu = 1500;
|
|
|
|
TerminalNetworkSettings();
|
|
TerminalNetworkSettings(const TerminalNetworkSettings& src);
|
|
TerminalNetworkSettings& operator= (const TerminalNetworkSettings& src);
|
|
|
|
void loadDefaults();
|
|
|
|
void updateCallback(proxy::CpProxy& cp);
|
|
void updateFromPt(boost::property_tree::ptree &pt);
|
|
void store(proxy::CpProxy& cp);
|
|
std::string asJson();
|
|
|
|
~TerminalNetworkSettings();
|
|
};
|
|
#endif
|
|
|
|
#ifdef API_OBJECT_QOS_SETTINGS_ENABLE
|
|
class TerminalQosSettings {
|
|
public:
|
|
static constexpr const char* DEFAULT_QOS_CLASSES = R"({"rt1":[],"rt2":[],"rt3":[],"cd":[]})";
|
|
std::string qosSettingsJson;
|
|
bool qosEnabled = false;
|
|
|
|
TerminalQosSettings();
|
|
TerminalQosSettings(const TerminalQosSettings& src);
|
|
TerminalQosSettings& operator= (const TerminalQosSettings& src);
|
|
|
|
void loadDefaults();
|
|
|
|
void updateCallback(proxy::CpProxy& cp);
|
|
void updateFromPt(boost::property_tree::ptree &pt);
|
|
void store(proxy::CpProxy& cp);
|
|
std::string asJson();
|
|
|
|
~TerminalQosSettings();
|
|
};
|
|
#endif
|
|
|
|
class TerminalFirmwareVersion {
|
|
public:
|
|
std::string version, modemId, modemSn, macMang, macData;
|
|
|
|
TerminalFirmwareVersion();
|
|
TerminalFirmwareVersion(const TerminalFirmwareVersion& src);
|
|
~TerminalFirmwareVersion();
|
|
|
|
// logCpApiError("api_driver::TerminalApiDaemon::connectToApi()->CP_GetNetwork(version)", CP_GetNetwork(sid, "version", &f.version));
|
|
// logCpApiError("api_driver::TerminalApiDaemon::connectToApi()->CP_GetNetwork(chip_id)", CP_GetNetwork(sid, "chip_id", &f.modemId));
|
|
// rtrim(f.modemId);
|
|
// logCpApiError("api_driver::TerminalApiDaemon::connectToApi()->CP_GetNetwork(serial)", CP_GetNetwork(sid, "serial", &f.modemSn));
|
|
// logCpApiError("api_driver::TerminalApiDaemon::connectToApi()->CP_GetNetwork(mac_eth0)", CP_GetNetwork(sid, "mac_eth0", &f.macMang));
|
|
// logCpApiError("api_driver::TerminalApiDaemon::connectToApi()->CP_GetNetwork(mac_eth1)", CP_GetNetwork(sid, "mac_eth1", &f.macData));
|
|
void load(proxy::CpProxy& cp);
|
|
std::string asJson();
|
|
|
|
TerminalFirmwareVersion& operator= (const TerminalFirmwareVersion& src);
|
|
};
|
|
|
|
/**
|
|
* Обертка состояния терминала, тут состояние девайса, модулятора/демодулятора, состояние автоматического обновления.
|
|
*/
|
|
class TerminalState {
|
|
public:
|
|
std::string fInitState{};
|
|
bool fIsTest = false; // daemon->isTest()
|
|
bool fTxState = false;
|
|
#ifdef MODEM_IS_SCPC
|
|
bool fIsCinC = false;
|
|
#endif
|
|
|
|
bool fRxState;
|
|
bool fRxSymSyncLock;
|
|
bool fRxFreqSearchLock;
|
|
bool fRxAfcLock;
|
|
bool fRxPktSync;
|
|
|
|
float fRxSnr;
|
|
float fRxRssi;
|
|
uint16_t fRxModcod;
|
|
bool fRxFrameSizeNormal;
|
|
bool fRxIsPilots;
|
|
|
|
double fRxSymError;
|
|
double fRxFreqErr;
|
|
double fRxFreqErrAcc;
|
|
double fRxInputSignalLevel;
|
|
double fRxPllError;
|
|
double fRxSpeedOnRxKbit;
|
|
double fRxSpeedOnIifKbit;
|
|
uint32_t fRxPacketsOk;
|
|
uint32_t fRxPacketsBad;
|
|
uint32_t fRxPacketsDummy;
|
|
|
|
uint16_t fTxModcod;
|
|
double fTxSpeedOnTxKbit;
|
|
double fTxSpeedOnIifKbit;
|
|
#ifdef MODEM_IS_SCPC
|
|
float fTxSnr;
|
|
bool fTxFrameSizeNormal;
|
|
bool fTxIsPilots;
|
|
double fCincOcc;
|
|
bool fCincCorrelator;
|
|
uint32_t fCincCorrelatorFails;
|
|
int32_t fCincFreqErr;
|
|
int32_t fCincFreqErrAcc;
|
|
float fCincChannelDelay;
|
|
#endif
|
|
#ifdef MODEM_IS_TDMA
|
|
double fTxCenterFreq;
|
|
double fTxSymSpeed;
|
|
#endif
|
|
|
|
TerminalState();
|
|
|
|
/**
|
|
* Обновление основной части статистики, то есть RX/TX и sysinfo
|
|
*/
|
|
void updateCallback(proxy::CpProxy& cp);
|
|
nlohmann::json asJson();
|
|
|
|
~TerminalState();
|
|
};
|
|
|
|
class TerminalDeviceState {
|
|
public:
|
|
time_t fOsUptime{};
|
|
double fOsLoad1{};
|
|
double fOsLoad5{};
|
|
double fOsLoad15{};
|
|
unsigned int fOsTotalram{};
|
|
unsigned int fOsFreeram{};
|
|
unsigned int fOsProcs{};
|
|
|
|
double fTempAdrv{};
|
|
double fTempZynq{};
|
|
double fTempFpga{};
|
|
#ifdef MODEM_IS_TDMA
|
|
DOWNLOAD_STATUS fUpgradeStatus{};
|
|
unsigned int fUpgradePercent{};
|
|
std::string fUpgradeImage;
|
|
#endif
|
|
|
|
TerminalDeviceState();
|
|
TerminalDeviceState(const TerminalDeviceState& src);
|
|
TerminalDeviceState& operator= (const TerminalDeviceState& src);
|
|
|
|
void updateCallback(proxy::CpProxy& cp);
|
|
nlohmann::json asJson() const;
|
|
|
|
~TerminalDeviceState();
|
|
};
|
|
|
|
class TerminalRxTxSettings {
|
|
public:
|
|
|
|
// TODO описать все параметры для всех терминалов
|
|
|
|
void updateCallback(proxy::CpProxy& cp);
|
|
void updateFromPt(boost::property_tree::ptree &pt);
|
|
void store(proxy::CpProxy& cp);
|
|
std::string asJson();
|
|
|
|
~TerminalRxTxSettings();
|
|
};
|
|
}
|
|
|
|
#endif //STRUCTS_H
|