#ifndef DBCHECK_H #define DBCHECK_H #include #include "pub_sysinfo_api/SysInfoApi.h" #include "db_base_api/CDbBaseApi.h" #include "tsdb_api/TsdbApi.h" #include "db_api_ex/CDbApi.h" #include #include # include namespace Ui { class DbCheck; } struct SModelInfo { //1 正常 -1异常 0未知 int modelReadStatus; int modelWriteStatus; int hisReaderStatus; int tsdbStatus; SModelInfo() { modelReadStatus = 0; modelWriteStatus = 0; hisReaderStatus = 0; tsdbStatus = 0; } }; struct DbItemData { QString first; bool isFirst; bool isUsed; QString sNodeName; int maxSyncId; }; struct SDbItemInfo { iot_public::SDatabaseInfo connect; QString first; bool isFirst; bool isUsed; bool isVirNode; //是否虚拟节点 QString sNodeName; int maxSyncId; bool isDriftAddr; int keepAliveStatus; //1 收到 0 未收到 QString keepAliveTime;//收到的时间 SDbItemInfo(): isVirNode(false) { isDriftAddr = false; isFirst = false; isUsed = false; maxSyncId = 0; keepAliveStatus = 0; } }; class DbCheckThread : public QThread { Q_OBJECT public: explicit DbCheckThread(QObject *parent = Q_NULLPTR); ~DbCheckThread(); bool startKeepAliveUdp(); void stopKeepAliveUdp(); QMap& getDbResult(); SModelInfo& getSModelInfo(); bool isEnableSync(); QString getLastErro(); private: void run(); void updateModelInfo(); bool resetSysInfo(); bool initDbInfoVec(); bool checkDbInfoVec(); bool checkDbInfo(SDbItemInfo& info); bool check(SDbItemInfo &stConnect, iot_public::SNodeInfo &stNodeInfo); private slots: void slotReceiveNetKeepAlivedInfo(); private: iot_public::CSysInfoInterfacePtr m_ptrSysInfo; SModelInfo mModelInfo;//模型状态 QMutex m_mapDbInfoMx; QMap m_mapDBInfo;//数据库连接状态 bool m_isEnableSync; QUdpSocket* m_pRecvUdp; // 接收socket QString mLastErroStr; }; class DbCheck : public QDialog { Q_OBJECT public: explicit DbCheck(QWidget *parent = 0); ~DbCheck(); static bool getDbPara(iot_public::SDatabaseInfo &stConnect, iot_dbms::CDbPara ¶); protected: void closeEvent(QCloseEvent *event); private slots: void brush(); void slotDbCheckFinished(); private: void updateModelInfo(); void updateModelInfo(int status, QLabel* lable); void updateDbInfo(); void updateDbSync(); void updateDbKeepAlive(); void addTable(const SDbItemInfo& info); private: Ui::DbCheck *ui; DbCheckThread m_checkThread; }; #endif // DBCHECK_H