218 lines
6.3 KiB
C++
218 lines
6.3 KiB
C++
#include "ShowProcInfo.h"
|
|
|
|
using namespace std;
|
|
using namespace iot_public;
|
|
using namespace iot_dbms;
|
|
using namespace iot_sys;
|
|
|
|
iot_sys::CShowProcInfo::CShowProcInfo(const CConsoleMngPtr &ptrConsoleMng)
|
|
:m_ptrConsoleMng(ptrConsoleMng)
|
|
{
|
|
}
|
|
|
|
iot_sys::CShowProcInfo::~CShowProcInfo()
|
|
{
|
|
m_ptrConsoleMng.reset();
|
|
}
|
|
|
|
bool iot_sys::CShowProcInfo::getRunProcInfo(int nDomainId, int nAppId, std::vector<iot_sys::STableRunProcInfo> &vecProc)
|
|
{
|
|
CRdbAccessEx objProcInfoTable;
|
|
if (!objProcInfoTable.open(CN_AppName_BASE.c_str(), CN_TN_SysRunProcInfo.c_str()))
|
|
{
|
|
CUSTOM_PRINT("打开表[%s]失败", CN_TN_SysRunProcInfo.c_str());
|
|
return false;
|
|
}
|
|
|
|
vector<string> vecCol;
|
|
vector<CONDINFO> vecCond;
|
|
CRdbPublic::addCondInfo(vecCond, "domain_id", nDomainId);
|
|
CRdbPublic::addCondInfo(vecCond, "app_id", nAppId);
|
|
bool bRet = false;
|
|
{
|
|
CTableLockGuard tableLock(objProcInfoTable); //< 加锁保护表
|
|
bRet = objProcInfoTable.selectAllVec(vecCond, vecProc, vecCol);
|
|
}
|
|
|
|
if (!bRet)
|
|
{
|
|
CUSTOM_PRINT("获取域[%d],应用[%d]的进程运行信息失败", nDomainId, nAppId);
|
|
}
|
|
|
|
if (objProcInfoTable.isOpen())
|
|
{
|
|
objProcInfoTable.close();
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
bool iot_sys::CShowProcInfo::getModelProcInfo(int nAppId, std::vector<std::string> &vecProcName)
|
|
{
|
|
CRdbAccessEx objModelProcInfoTable;
|
|
if (!objModelProcInfoTable.open(CN_AppName_BASE.c_str(), CN_TN_SysModelProcInfo.c_str()))
|
|
{
|
|
CUSTOM_PRINT("打开表[%s]失败", CN_TN_SysModelProcInfo.c_str());
|
|
return false;
|
|
}
|
|
|
|
struct _SRecord
|
|
{
|
|
char szProcName[64];
|
|
};
|
|
|
|
vector<_SRecord> vecRecord;
|
|
vector<string> vecCol{ "proc_name" };
|
|
vector<CONDINFO> vecCond;
|
|
CRdbPublic::addCondInfo(vecCond, "app_id", nAppId);
|
|
bool bRet = false;
|
|
|
|
{
|
|
CTableLockGuard tableLock(objModelProcInfoTable); //< 加锁保护表
|
|
bRet = objModelProcInfoTable.selectAllVec(vecCond, vecRecord, vecCol);
|
|
}
|
|
|
|
if (!bRet)
|
|
{
|
|
CUSTOM_PRINT("获取应用[%d]的进程配置信息失败", nAppId);
|
|
}
|
|
else
|
|
{
|
|
for (size_t i = 0; i < vecRecord.size(); ++i)
|
|
{
|
|
vecProcName.push_back(vecRecord[i].szProcName);
|
|
}
|
|
}
|
|
|
|
if (objModelProcInfoTable.isOpen())
|
|
{
|
|
objModelProcInfoTable.close();
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
bool iot_sys::CShowProcInfo::getLocalNodeInfoByRtdbTable(int &nDomainId, std::string &strNodeName)
|
|
{
|
|
CRdbAccessEx objProcInfoTable;
|
|
if (!objProcInfoTable.open(CN_AppName_BASE.c_str(), CN_TN_SysRunProcInfo.c_str()))
|
|
{
|
|
CUSTOM_PRINT("打开表[%s]失败", CN_TN_SysRunProcInfo.c_str());
|
|
return false;
|
|
}
|
|
|
|
bool bRet = true;
|
|
{
|
|
CTableLockGuard tableLock(objProcInfoTable); //< 加锁保护表
|
|
if (objProcInfoTable.getRecordCount() <= 0)
|
|
{
|
|
bRet = false;
|
|
}
|
|
else
|
|
{
|
|
STableRunProcInfo stRunProcInfo;
|
|
if (!objProcInfoTable.getRecordByIndexAllColumn(0, stRunProcInfo))
|
|
{
|
|
bRet = false;
|
|
}
|
|
else
|
|
{
|
|
nDomainId = stRunProcInfo.stKey.nDomainId;
|
|
strNodeName = stRunProcInfo.stKey.szNodeName;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (objProcInfoTable.isOpen())
|
|
{
|
|
objProcInfoTable.close();
|
|
}
|
|
|
|
if (!bRet)
|
|
{
|
|
CUSTOM_PRINT("通过表[%s]获取本机信息失败。可通过查询进程信息列表确定原因");
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
void iot_sys::CShowProcInfo::showProcInfo()
|
|
{
|
|
CRdbAccessEx objProcInfoTable;
|
|
if (!objProcInfoTable.open(CN_AppName_BASE.c_str(), CN_TN_SysRunProcInfo.c_str()))
|
|
{
|
|
CUSTOM_PRINT("打开表[%s]失败", CN_TN_SysRunProcInfo.c_str());
|
|
return;
|
|
}
|
|
|
|
bool bRet = false;
|
|
vector<STableRunProcInfo> vecRunProcInfo;
|
|
{
|
|
CTableLockGuard tableLock(objProcInfoTable);
|
|
bRet = objProcInfoTable.selectJustAll(vecRunProcInfo);
|
|
}
|
|
|
|
if (bRet)
|
|
{
|
|
TwoDimensionArray vecTable;
|
|
showProcInfoTitle(vecTable);
|
|
|
|
for (size_t i = 0; i < vecRunProcInfo.size(); ++i)
|
|
{
|
|
const STableRunProcInfo &stRecord = vecRunProcInfo[i];
|
|
vector<string> vecRow;
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.stKey.nDomainId));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.stKey.nAppId));
|
|
vecRow.push_back(stRecord.stKey.szNodeName);
|
|
vecRow.push_back(stRecord.stKey.szProcName);
|
|
vecRow.push_back(stRecord.stKey.szProcParam);
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.lProcId));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nIsStartup));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nToQuit));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nQuit));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nIsRegist));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nIsActive));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nIsMaster));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nIsSlave));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.nIsFault));
|
|
vecRow.push_back(boost::lexical_cast<string>(stRecord.lLastTime));
|
|
|
|
vecTable.push_back(vecRow);
|
|
}
|
|
|
|
m_ptrConsoleMng->printTable(vecTable);
|
|
cout << endl;
|
|
}
|
|
else
|
|
{
|
|
CUSTOM_PRINT("查询表[%s]记录失败", CN_TN_SysRunProcInfo.c_str());
|
|
}
|
|
|
|
if (objProcInfoTable.isOpen())
|
|
{
|
|
objProcInfoTable.close();
|
|
}
|
|
}
|
|
|
|
void iot_sys::CShowProcInfo::showProcInfoTitle(std::vector<std::vector<std::string> > &vecTable)
|
|
{
|
|
vector<string> vecRow;
|
|
vecRow.push_back("domian_id");
|
|
vecRow.push_back("app_id");
|
|
vecRow.push_back("node_name");
|
|
vecRow.push_back("proc_name");
|
|
vecRow.push_back("proc_param");
|
|
vecRow.push_back("proc_id");
|
|
vecRow.push_back("is_startup");
|
|
vecRow.push_back("to_quit");
|
|
vecRow.push_back("is_quit");
|
|
vecRow.push_back("is_regist");
|
|
vecRow.push_back("is_active");
|
|
vecRow.push_back("is_master");
|
|
vecRow.push_back("is_slave");
|
|
vecRow.push_back("is_fault");
|
|
vecRow.push_back("last_time");
|
|
|
|
vecTable.push_back(vecRow);
|
|
}
|