[add]信号服务添加应用监控逻辑

This commit is contained in:
liang-ys 2026-02-10 11:09:11 +08:00
parent a760450301
commit c965267d69
8 changed files with 430 additions and 9 deletions

View File

@ -9,11 +9,20 @@
<alm_clr value="1" desc="告警消失的值"/> <alm_clr value="1" desc="告警消失的值"/>
</alarm_signal> </alarm_signal>
--> -->
<!--
<proc_check_signal> <proc_check_signal>
<proc_check name="fes" domain_id="1" app_id="1" /> <proc_check name="fes" domain_id="1" app_id="1" />
<alm_io file="/sys/class/gpio/gpio85/value"/> <alm_io file="/sys/class/gpio/gpio85/value"/>
<alm_act value="0" /> <alm_act value="0" />
<alm_clr value="1" /> <alm_clr value="1" />
</proc_check_signal> </proc_check_signal>
-->
<app_check_signal>
<app_check check_app_id="4" conn_domain_id="1" conn_app_id="1" />
<alm_io file="/sys/class/gpio/gpio85/value"/>
<alm_act value="0" />
<alm_clr value="1" />
</app_check_signal>
</root> </root>

View File

@ -9,7 +9,8 @@
#include "alarm/CAlarmDataCollect.h" #include "alarm/CAlarmDataCollect.h"
#include "processCheck/CProcessCheckSignalManage.h" #include "processCheck/CProcessCheckSignalManage.h"
#include "processCheck/CProcessQueryThread.h" #include "processCheck/CProcessQueryThread.h"
#include "appCheck/CAppQueryThread.h"
#include "appCheck/CAppCheckSignalManage.h"
using namespace std; using namespace std;
using namespace iot_public; using namespace iot_public;
@ -46,11 +47,14 @@ int iot_service::SignalSrvThread::setMaster()
{ {
m_bMaster=true; m_bMaster=true;
//CAlarmSignalManage::instance()->initialize(); //CAlarmSignalManage::instance()->initialize();
//CAlarmDataCollect::instance()->initialize(); //CAlarmDataCollect::instance()->initialize();
CProcessCheckSignalManage::instance()->initialize(); //CProcessCheckSignalManage::instance()->initialize();
CProcessQueryThread::instance()->initialize(); //CProcessQueryThread::instance()->initialize();
CAppCheckSignalManage::instance()->initialize();
CAppQueryThread::instance()->initialize();
return iotSuccess; return iotSuccess;
} }
@ -63,7 +67,10 @@ int iot_service::SignalSrvThread::setSlave()
//CAlarmDataCollect::instance()->release(); //CAlarmDataCollect::instance()->release();
//CAlarmSignalManage::instance()->release(); //CAlarmSignalManage::instance()->release();
CProcessQueryThread::instance()->release(); //CProcessQueryThread::instance()->release();
CAppQueryThread::instance()->release();
return iotSuccess; return iotSuccess;
} }
@ -77,7 +84,9 @@ void iot_service::SignalSrvThread::execute()
} }
CProcessCheckSignalManage::instance()->handleSignal(); //CProcessCheckSignalManage::instance()->handleSignal();
CAppCheckSignalManage::instance()->handleSignal();
} }

View File

@ -0,0 +1,176 @@
#include "CAppCheckSignalManage.h"
#include "SignalSrvCommon.h"
#include "QSet"
#include "rapidjson/document.h"
#include "rapidjson/error/en.h"
#include <QDomComment>
#include <QFile>
#include "pub_utility_api/FileUtil.h"
#include <QProcess>
#include "pub_logger_api/logger.h"
#include "CAppQueryCommon.h"
static QMutex g_mutex;
CAppCheckSignalManage *CAppCheckSignalManage::pInstance = NULL;
CAppCheckSignalManage *CAppCheckSignalManage::instance()
{
QMutexLocker locker(&g_mutex);
if(pInstance == NULL)
{
pInstance = new CAppCheckSignalManage();
}
return pInstance;
}
void CAppCheckSignalManage::initialize()
{
loadConfig();
}
bool CAppCheckSignalManage::setGpio(QString value)
{
#ifdef Q_OS_WIN
#else
QFile file(m_strAlmIO);
if (!file.open(QIODevice::WriteOnly)) {
LOGERROR("open %s faild %s when want to write %s",m_strAlmIO.toStdString().c_str(),file.errorString().toStdString().c_str(),value.toStdString().c_str());
return false;
}
file.write(value.toUtf8());
file.close();
#endif
return true;
}
void CAppCheckSignalManage::updateAppSatus(int appId, int appStatus)
{
QMutexLocker locker(&m_mutex);
if(appId==m_checkAppId)
{
m_mapAppStatus[m_checkAppId]=appStatus;
}
}
void CAppCheckSignalManage::handleSignal()
{
QMutexLocker locker(&m_mutex);
if(!m_bActive)
{
return;
}
if(m_mapAppStatus.contains(m_checkAppId)&&m_mapAppStatus[m_checkAppId]==EN_APP_STATUS::EN_APP_RUNNING)
{
setGpio(m_strAlmClrValue);
}
else
{
setGpio(m_strAlmActValue);
}
}
void CAppCheckSignalManage::loadConfig()
{
QDomDocument doc;
QString strCfg = iot_public::CFileUtil::getPathOfCfgFile(iot_service::CN_CFG_NAME,CN_DIR_PRODUCT).c_str();
QFile file(strCfg);
if (!file.open(QIODevice::ReadOnly))
{
LOGERROR("signal_srv can not found file(%s)",strCfg.toStdString().c_str());
return;
}
if (!doc.setContent(&file)){
file.close();
return;
}
file.close();
QDomElement root = doc.documentElement();
QDomElement alarmSignalNode= root.firstChildElement("app_check_signal");
if (alarmSignalNode.isNull()) {
LOGINFO("signal_srv can not found app_check_signal node,and not outputsignal");
return ;
}
QDomElement almIoElem = alarmSignalNode.firstChildElement("alm_io");
if (!almIoElem.isNull())
{
m_strAlmIO=almIoElem.attribute("file");
LOGINFO("alm_io file: %s",almIoElem.attribute("file").toStdString().c_str());
}
else
{
LOGERROR("alm_io can not find!");
return ;
}
QDomElement appCheckElem = alarmSignalNode.firstChildElement("app_check");
QDomElement almActElem = alarmSignalNode.firstChildElement("alm_act");
QDomElement almClrElem = alarmSignalNode.firstChildElement("alm_clr");
if(!appCheckElem.isNull())
{
m_checkAppId=appCheckElem.attribute("check_app_id").toInt();
m_connectDomainId=appCheckElem.attribute("conn_domain_id").toInt();
m_connectAppId=appCheckElem.attribute("conn_app_id").toInt();
LOGINFO("app_check_id: %s conn_domain_id %s conn_app_id %s",appCheckElem.attribute("check_app_id").toStdString().c_str(),
appCheckElem.attribute("domain_id").toStdString().c_str(),appCheckElem.attribute("conn_app_id").toStdString().c_str());
}
else
{
LOGERROR("app_check app_id can not find!");
return ;
}
if (!almActElem.isNull())
{
m_strAlmActValue=almActElem.attribute("value");
LOGINFO("alm_act value: %s",almActElem.attribute("value").toStdString().c_str());
}
else
{
LOGERROR("alm_act value can not find!");
return ;
}
if (!almClrElem.isNull())
{
m_strAlmClrValue=almClrElem.attribute("value");
LOGINFO("alm_clr value: %s",almClrElem.attribute("value").toStdString().c_str());
}
else
{
LOGERROR("alm_clr value can not find!");
return ;
}
m_bActive=true;
LOGINFO("app_check_signal load config ok and will use");
}
int CAppCheckSignalManage::getConnectDomainId()
{
return m_connectDomainId;
}
int CAppCheckSignalManage::getConnectAppId()
{
return m_connectAppId;
}
CAppCheckSignalManage::CAppCheckSignalManage()
{
loadConfig();
}

View File

@ -0,0 +1,49 @@
#pragma once
#include <QString>
#include <QMutex>
#include <QMap>
#include "CAppQueryCommon.h"
class CAppCheckSignalManage
{
public:
static CAppCheckSignalManage * instance();
~CAppCheckSignalManage();
void initialize();
bool setGpio(QString value);
void updateAppSatus(int appId,int appStatus);
void handleSignal();
void loadConfig();
int getConnectDomainId();
int getConnectAppId();
private:
CAppCheckSignalManage();
private:
static CAppCheckSignalManage * pInstance;
QMutex m_mutex;
QString m_strAlmIO;
QString m_strAlmActValue;
QString m_strAlmClrValue;
QMap<int,int> m_mapAppStatus;
int m_connectDomainId=0;
int m_connectAppId=0;
int m_checkAppId=0;
bool m_bActive=false;
};

View File

@ -0,0 +1,37 @@
#pragma once
#include <QString>
const std::string CN_TN_SysRunRedundancyInfo = "sys_run_redundancy_info";
struct SApp
{
std::string m_nodeName;
int m_appId;
std::string m_appName;
std::string m_desc;
int m_isActive ;
int m_isMaster ;
int m_isSlave ;
int m_hasMaster;
SApp()
{
m_nodeName = "";
m_appId =0;
m_appName = "";
m_desc = "";
m_isActive = 0;
m_isMaster = 0;
m_isSlave = 0;
m_hasMaster = 0;
}
};
enum EN_APP_STATUS
{
EN_APP_STOP = 0, //<已停止
EN_APP_RUNNING, //<正在运行
EN_APP_UNKNOW, //<未知
EN_APP_HALF //<半运行
};

View File

@ -0,0 +1,87 @@
#include "CAppQueryThread.h"
#include "CAppQueryCommon.h"
#include "CAppCheckSignalManage.h"
#include "rdb_net_api/CRdbNetApi.h"
#include "pub_logger_api/logger.h"
static QMutex g_mutex;
CAppQueryThread *CAppQueryThread::m_pInstance = NULL;
CAppQueryThread *CAppQueryThread::instance()
{
QMutexLocker locker(&g_mutex);
if(m_pInstance == NULL)
{
m_pInstance = new CAppQueryThread();
}
return m_pInstance;
}
CAppQueryThread::CAppQueryThread():CTimerThreadBase("CAppQueryThread",2000)
{
initData();
}
CAppQueryThread::~CAppQueryThread()
{
}
void CAppQueryThread::execute()
{
queryAppRunInfo();
}
void CAppQueryThread::initialize()
{
resume();
LOGINFO("CAppQueryThread::initialize()");
}
void CAppQueryThread::release()
{
suspend();
LOGINFO("CAppQueryThread::release()");
}
bool CAppQueryThread::queryAppRunInfo()
{
bool bRet = false;
iot_idl::RdbRet objRdbRet;
std::vector <std::string> vecColumn = {"app_id","node_name","is_active","is_master","is_slave"};
bRet=m_objRdbNetApi.queryTotal(CN_TN_SysRunRedundancyInfo,vecColumn,objRdbRet,false,false);
if(!bRet ||objRdbRet.msgrecord_size() < 0)
{
return false;
}
for(int i=0;i<objRdbRet.msgrecord_size();++i)
{
SApp app;
app.m_appId = objRdbRet.msgrecord(i).msgvaluearray(0).nvalue();
app.m_nodeName = objRdbRet.msgrecord(i).msgvaluearray(1).strvalue();
app.m_isActive = objRdbRet.msgrecord(i).msgvaluearray(2).nvalue();
app.m_isMaster = objRdbRet.msgrecord(i).msgvaluearray(3).nvalue();
app.m_isSlave = objRdbRet.msgrecord(i).msgvaluearray(4).nvalue();
CAppCheckSignalManage::instance()->updateAppSatus( app.m_appId, app.m_isActive);
}
return true;
}
void CAppQueryThread::initData()
{
int connDomainId=CAppCheckSignalManage::instance()->getConnectDomainId();
int connAppId=CAppCheckSignalManage::instance()->getConnectAppId();
m_objRdbNetApi.connect(connDomainId,connAppId);
}

View File

@ -0,0 +1,46 @@
#pragma once
#include "CAppQueryThread.h"
#include "pub_utility_api/TimerThreadBase.h"
#include "rdb_net_api/CRdbNetApi.h"
#include "CAppQueryCommon.h"
using namespace iot_dbms;
class CAppQueryThread : public iot_public::CTimerThreadBase
{
public:
static CAppQueryThread *instance();
virtual ~CAppQueryThread();
/**
* @brief execute
*/
virtual void execute();
void initialize();
void release();
private:
/**
* @brief queryAppRunInfo
* @return true- false-
*/
bool queryAppRunInfo();
void initData();
CAppQueryThread();
private:
static CAppQueryThread * m_pInstance;
CRdbNetApi m_objRdbNetApi; //< 网络查询对象
};

View File

@ -23,7 +23,9 @@ SOURCES += main.cpp \
alarm/CAlarmDataCollect.cpp \ alarm/CAlarmDataCollect.cpp \
alarm/CAlarmSignalManage.cpp \ alarm/CAlarmSignalManage.cpp \
processCheck/CProcessQueryThread.cpp \ processCheck/CProcessQueryThread.cpp \
processCheck/CProcessCheckSignalManage.cpp processCheck/CProcessCheckSignalManage.cpp \
appCheck/CAppCheckSignalManage.cpp \
appCheck/CAppQueryThread.cpp
HEADERS += \ HEADERS += \
SignalSrvApp.h \ SignalSrvApp.h \
@ -34,7 +36,13 @@ HEADERS += \
alarm/CAlarmSignalManage.h \ alarm/CAlarmSignalManage.h \
processCheck/CProcessQueryThread.h \ processCheck/CProcessQueryThread.h \
processCheck/CProcessCheckSignalManage.h \ processCheck/CProcessCheckSignalManage.h \
processCheck/CProcessQueryCommon.h processCheck/CProcessQueryCommon.h \
processCheck/CProcessCheckSignalManage.h \
processCheck/CProcessQueryCommon.h \
processCheck/CProcessQueryThread.h \
appCheck/CAppCheckSignalManage.h \
appCheck/CAppQueryCommon.h \
appCheck/CAppQueryThread.h
LIBS +=\ LIBS +=\