2025-03-12 14:17:01 +08:00

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);
}