#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 &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 vecCol; vector 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 &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 vecCol{ "proc_name" }; vector 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 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 vecRow; vecRow.push_back(boost::lexical_cast(stRecord.stKey.nDomainId)); vecRow.push_back(boost::lexical_cast(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(stRecord.lProcId)); vecRow.push_back(boost::lexical_cast(stRecord.nIsStartup)); vecRow.push_back(boost::lexical_cast(stRecord.nToQuit)); vecRow.push_back(boost::lexical_cast(stRecord.nQuit)); vecRow.push_back(boost::lexical_cast(stRecord.nIsRegist)); vecRow.push_back(boost::lexical_cast(stRecord.nIsActive)); vecRow.push_back(boost::lexical_cast(stRecord.nIsMaster)); vecRow.push_back(boost::lexical_cast(stRecord.nIsSlave)); vecRow.push_back(boost::lexical_cast(stRecord.nIsFault)); vecRow.push_back(boost::lexical_cast(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 > &vecTable) { vector 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); }