[add]信号服务添加应用监控逻辑
This commit is contained in:
parent
a760450301
commit
c965267d69
@ -9,11 +9,20 @@
|
||||
<alm_clr value="1" desc="告警消失的值"/>
|
||||
</alarm_signal>
|
||||
-->
|
||||
|
||||
<!--
|
||||
<proc_check_signal>
|
||||
<proc_check name="fes" domain_id="1" app_id="1" />
|
||||
<alm_io file="/sys/class/gpio/gpio85/value"/>
|
||||
<alm_act value="0" />
|
||||
<alm_clr value="1" />
|
||||
</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>
|
||||
@ -9,7 +9,8 @@
|
||||
#include "alarm/CAlarmDataCollect.h"
|
||||
#include "processCheck/CProcessCheckSignalManage.h"
|
||||
#include "processCheck/CProcessQueryThread.h"
|
||||
|
||||
#include "appCheck/CAppQueryThread.h"
|
||||
#include "appCheck/CAppCheckSignalManage.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace iot_public;
|
||||
@ -46,11 +47,14 @@ int iot_service::SignalSrvThread::setMaster()
|
||||
{
|
||||
m_bMaster=true;
|
||||
//CAlarmSignalManage::instance()->initialize();
|
||||
|
||||
//CAlarmDataCollect::instance()->initialize();
|
||||
|
||||
CProcessCheckSignalManage::instance()->initialize();
|
||||
CProcessQueryThread::instance()->initialize();
|
||||
//CProcessCheckSignalManage::instance()->initialize();
|
||||
//CProcessQueryThread::instance()->initialize();
|
||||
|
||||
CAppCheckSignalManage::instance()->initialize();
|
||||
CAppQueryThread::instance()->initialize();
|
||||
|
||||
|
||||
return iotSuccess;
|
||||
}
|
||||
@ -63,7 +67,10 @@ int iot_service::SignalSrvThread::setSlave()
|
||||
//CAlarmDataCollect::instance()->release();
|
||||
//CAlarmSignalManage::instance()->release();
|
||||
|
||||
CProcessQueryThread::instance()->release();
|
||||
//CProcessQueryThread::instance()->release();
|
||||
|
||||
CAppQueryThread::instance()->release();
|
||||
|
||||
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/CAlarmSignalManage.cpp \
|
||||
processCheck/CProcessQueryThread.cpp \
|
||||
processCheck/CProcessCheckSignalManage.cpp
|
||||
processCheck/CProcessCheckSignalManage.cpp \
|
||||
appCheck/CAppCheckSignalManage.cpp \
|
||||
appCheck/CAppQueryThread.cpp
|
||||
|
||||
HEADERS += \
|
||||
SignalSrvApp.h \
|
||||
@ -34,7 +36,13 @@ HEADERS += \
|
||||
alarm/CAlarmSignalManage.h \
|
||||
processCheck/CProcessQueryThread.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 +=\
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user