[add]信号服务添加应用监控逻辑
This commit is contained in:
parent
a760450301
commit
c965267d69
@ -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>
|
||||||
@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
|
||||||
|
};
|
||||||
@ -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 //<半运行
|
||||||
|
};
|
||||||
|
|
||||||
@ -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);
|
||||||
|
}
|
||||||
@ -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; //< 网络查询对象
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -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 +=\
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user