1047 lines
30 KiB
C++
Raw Normal View History

2025-03-12 11:08:50 +08:00

/******************************************************************************//**
* @file SysInfoImp.h
2025-08-26 23:55:59 +08:00
* @brief 访
2025-03-12 11:08:50 +08:00
* @author yikenan
* @version 1.0
* @date
**********************************************************************************/
#include <bitset>
#include "boost/typeof/typeof.hpp"
#include "boost/format.hpp"
#include "boost/asio/ip/host_name.hpp"
#include "boost/foreach.hpp"
#include "boost/algorithm/string/predicate.hpp"
#include "pub_logger_api/logger.h"
#include "pub_utility_api/CRC32.h"
#include "common/Common.h"
#include "SysInfoImp.h"
2025-03-12 14:17:01 +08:00
namespace iot_public
2025-03-12 11:08:50 +08:00
{
CSysInfoImp::CSysInfoImp()
{
}
CSysInfoImp::~CSysInfoImp()
{
}
bool CSysInfoImp::loadData()
{
return m_objData.loadData();
}
/**
@brief 使
@param
@return
@retval
*/
void CSysInfoImp::printAllData()
{
m_objData.printData();
}
bool CSysInfoImp::reloadAllData()
{
return m_objData.loadData();
}
/**
@brief
@param std::vector<SAppInfo> & vecAppInfo
@return
@retval
*/
int CSysInfoImp::getAllAppInfo(std::vector<SAppInfo> &vecAppInfo)
{
vecAppInfo.clear();
for (BOOST_AUTO(it, m_objData.m_mapAppInfo.begin());
it != m_objData.m_mapAppInfo.end();
it++)
{
vecAppInfo.push_back(it->second);
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param std::vector<SDomainInfo> & vecDomainInfo
@return
@retval
*/
int CSysInfoImp::getAllDomainInfo(std::vector<SDomainInfo> &vecDomainInfo)
{
vecDomainInfo.clear();
for (BOOST_AUTO(it, m_objData.m_mapDomainInfo.begin());
it != m_objData.m_mapDomainInfo.end();
it++)
{
vecDomainInfo.push_back(it->second);
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param std::vector<SLocationInfo> & vecLocationInfo
@return
@retval
*/
int CSysInfoImp::getAllLocationInfo(std::vector<SLocationInfo> &vecLocationInfo)
{
vecLocationInfo.clear();
for (BOOST_AUTO(it, m_objData.m_mapLocationInfo.begin());
it != m_objData.m_mapLocationInfo.end();
it++)
{
vecLocationInfo.push_back(it->second);
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param std::vector<SNodeInfo> & vecNodeInfo
@return
@retval
*/
int CSysInfoImp::getAllNodeInfo(std::vector<SNodeInfo> &vecNodeInfo)
{
vecNodeInfo.clear();
for (BOOST_AUTO(it, m_objData.m_mapNodeInfo.begin());
it != m_objData.m_mapNodeInfo.end();
it++)
{
vecNodeInfo.push_back(it->second);
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param std::vector<SSubsystemInfo> & vecSubsystemInfo
@return
@retval
*/
int CSysInfoImp::getAllSubsystemInfo(std::vector<SSubsystemInfo> &vecSubsystemInfo)
{
vecSubsystemInfo.clear();
for (BOOST_AUTO(it, m_objData.m_mapSubsystemInfo.begin());
it != m_objData.m_mapSubsystemInfo.end();
it++)
{
vecSubsystemInfo.push_back(it->second);
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param int nDomainId
@param int nAppId
@param SAppDeploy & stAppDeploy
@return
@retval
*/
int CSysInfoImp::getAppDeployById(int nDomainId, int nAppId, SAppDeploy &stAppDeploy)
{
//“nDomainId-nAppId”作为key
std::string strKey = boost::str(boost::format("%d-%d") % nDomainId % nAppId);
BOOST_AUTO(it, m_objData.m_mapAppDeploy.find(strKey));
if (it == m_objData.m_mapAppDeploy.end())
{
LOGERROR("getAppDeployById(): 未找到该部署信息 nDomainId = %d, nAppId = %d",
nDomainId, nAppId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stAppDeploy = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strDomainName
@param const std::string & strAppName
@param SAppDeploy & stAppDeploy
@return
@retval
*/
int CSysInfoImp::getAppDeployByName(const std::string &strDomainName, const std::string &strAppName, SAppDeploy &stAppDeploy)
{
SDomainInfo stDomInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getDomainInfoByName(strDomainName, stDomInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getAppDeployByName(): 未找到该域 strDomainName == %s", strDomainName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
SAppInfo stAppInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getAppInfoByName(strAppName, stAppInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getAppDeployByName(): 未找到该专业 strAppName == %s", strAppName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
return getAppDeployById(stDomInfo.nId, stAppInfo.nId, stAppDeploy);
}
/**
@brief
@param std::string strNodeName
@param std::vector<SAppDeploy> & vecAppDeploy
@return
@retval
*/
int CSysInfoImp::getAppDeployByNodeName(const std::string &strNodeName, std::vector<SAppDeploy> &vecAppDeploy)
{
SNodeInfo stNodeInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getNodeInfoByName(strNodeName, stNodeInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getAppDeployByNodeName(): 未找到该节点 strNodeName == %s", strNodeName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
vecAppDeploy.clear();
for (BOOST_AUTO(it, m_objData.m_mapAppDeploy.begin());
it != m_objData.m_mapAppDeploy.end();
it++)
{
if (it->second.nDomainId == stNodeInfo.nDomainId &&
it->second.mapNodeToPriority.find(strNodeName) != it->second.mapNodeToPriority.end())
{
vecAppDeploy.push_back(it->second);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
//virtual int getSubsystemListByNodeId(int nNodeId,std::vector<SSubsystemInfo> &vecSubsystemInfo) = 0;
/**
@brief ID获取应用信息
@param int nAppId ID
@param SAppInfo & stAppInfo
@return
@retval
*/
int CSysInfoImp::getAppInfoById(int nAppId, SAppInfo &stAppInfo)
{
BOOST_AUTO(it, m_objData.m_mapAppInfo.find(nAppId));
if (it == m_objData.m_mapAppInfo.end())
{
LOGERROR("getAppInfoById(): 未找到该应用 nAppId == %d请检查配置 。", nAppId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stAppInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strAppName
@param SAppInfo & stAppInfo
@return
@retval
*/
int CSysInfoImp::getAppInfoByName(const std::string &strAppName, SAppInfo &stAppInfo)
{
for (BOOST_AUTO(it, m_objData.m_mapAppInfo.begin());
it != m_objData.m_mapAppInfo.end();
it++)
{
//不区分大小写比较
if (boost::algorithm::iequals(strAppName, it->second.strName))
{
stAppInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
}
LOGERROR("getAppInfoByName(): 未找到该应用 strAppName == %s", strAppName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param int nSubsystemId ID
@param SAppInfo &stAppInfo
@return
@retval
*/
int CSysInfoImp::getAppInfoBySubsystemId(int nSubsystemId, SAppInfo &stAppInfo)
{
SSubsystemInfo stSubSysInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getSubsystemInfoById(nSubsystemId, stSubSysInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getAppInfoBySubsystemId(): 未找到该专业 nSubsystemId == %d", nSubsystemId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
if(stSubSysInfo.nAppId < CN_AppId_BASE)
{
LOGWARN("getAppInfoBySubsystemId(): nAppId == %d 不存在 ", stSubSysInfo.nAppId );
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
return getAppInfoById(stSubSysInfo.nAppId, stAppInfo);
}
/**
@brief
@param const std::string & strSubsystemName
@param SAppInfo &stAppInfo
@return
@retval
*/
int CSysInfoImp::getAppInfoBySubsystemName(const std::string &strSubsystemName, SAppInfo &stAppInfo)
{
SSubsystemInfo stSubSysInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getSubsystemInfoByName(strSubsystemName, stSubSysInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getAppInfoBySubsystemName(): 未找到该专业 strSubsystemName == %s", strSubsystemName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
return getAppInfoById(stSubSysInfo.nAppId, stAppInfo);
}
/**
@brief
@param SDomainInfo & stDomainInfo
@return
@retval
*/
int CSysInfoImp::getCenterDomainInfo(SDomainInfo &stDomainInfo)
{
for (BOOST_AUTO(it, m_objData.m_mapDomainInfo.begin());
it != m_objData.m_mapDomainInfo.end();
it++)
{
if (it->second.bIsCenter)
{
stDomainInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
}
LOGERROR("getCenterDomainInfo(): 未找到中心域");
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param int nDomainId
@param SDatabaseInfo & stFirstConnect
@param std::vector<SDatabaseInfo> & vecLocalDBInfo
@param std::vector<SDatabaseInfo> & vecRemoteDBInfo
@return
@retval
*/
int CSysInfoImp::getDBInfoByDomainId(int nDomainId, SDatabaseInfo &stFirstConnect,
std::vector<SDatabaseInfo> &vecLocalDBInfo,
std::vector<SDatabaseInfo> &vecRemoteDBInfo)
{
BOOST_AUTO(itDbDep, m_objData.m_mapDBDeploy.find(nDomainId));
if (m_objData.m_mapDBDeploy.end() == itDbDep)
{
//没有找到该域ID的配置
LOGERROR("getDBInfoByDomainId(): 未找到该域 nDomainId == %d", nDomainId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
//stFirstConnect
{
BOOST_AUTO(it1stDbInfo, m_objData.m_mapDatabaseInfo.find(itDbDep->second.strFirstConnect));
if (m_objData.m_mapDatabaseInfo.end() != it1stDbInfo)
{
stFirstConnect = it1stDbInfo->second;
}
}
//vecLocalDBInfo
vecLocalDBInfo.clear();
for (size_t i = 0; i < itDbDep->second.vecLocalNode.size(); i++)
{
BOOST_AUTO(itDbInfo, m_objData.m_mapDatabaseInfo.find(itDbDep->second.vecLocalNode[i]));
if (m_objData.m_mapDatabaseInfo.end() != itDbInfo)
{
vecLocalDBInfo.push_back(itDbInfo->second);
}
}
//vecRemoteDBInfo
vecRemoteDBInfo.clear();
for (size_t j = 0; j < itDbDep->second.vecRemoteDomain.size(); j++)
{
//通过本域的远程域ID找到远程域的DBDeploy
const int nRmtDomID = itDbDep->second.vecRemoteDomain.at(j);
BOOST_AUTO(itRmtDbDep, m_objData.m_mapDBDeploy.find(nRmtDomID));
if (m_objData.m_mapDBDeploy.end() == itRmtDbDep)
{
continue;
}
//将远程域的所有数据库节点加入到vecRemoteDBInfo
for (size_t k = 0; k < itRmtDbDep->second.vecLocalNode.size(); k++)
{
BOOST_AUTO(itRmtDbInfo, m_objData.m_mapDatabaseInfo.find(itRmtDbDep->second.vecLocalNode[k]));
if (m_objData.m_mapDatabaseInfo.end() != itRmtDbInfo)
{
vecRemoteDBInfo.push_back(itRmtDbInfo->second);
}
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strNodeName
@param SDatabaseInfo & stDBInfo
@return
@retval
*/
int CSysInfoImp::getDBInfoByNodeName(const std::string &strNodeName, SDatabaseInfo &stDBInfo)
{
BOOST_AUTO(it, m_objData.m_mapDatabaseInfo.find(strNodeName));
if (m_objData.m_mapDatabaseInfo.end() == it)
{
LOGERROR("getDBInfoByNodeName(): 未找到该数据库节点 strNodeName == %s", strNodeName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stDBInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param int nDomainId
@param SDomainInfo & stDomainInfo
@return
@retval
*/
int CSysInfoImp::getDomainInfoById(int nDomainId, SDomainInfo &stDomainInfo)
{
BOOST_AUTO(it, m_objData.m_mapDomainInfo.find(nDomainId));
if (m_objData.m_mapDomainInfo.end() == it)
{
LOGERROR("getDomainInfoById(): 未找到该域 nDomainId == %d", nDomainId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stDomainInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strDomainName
@param SDomainInfo & stDomainInfo
@return
@retval
*/
int CSysInfoImp::getDomainInfoByName(const std::string &strDomainName, SDomainInfo &stDomainInfo)
{
for (BOOST_AUTO(it, m_objData.m_mapDomainInfo.begin());
it != m_objData.m_mapDomainInfo.end();
it++)
{
if (strDomainName == it->second.strName)
{
stDomainInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
}
LOGERROR("getDomainInfoByName(): 未找到该域 strDomainName == %s", strDomainName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string strNodeName
@param SDomainInfo & stDomainInfo
@return
@retval
*/
int CSysInfoImp::getDomainInfoByNodeName(const std::string strNodeName, SDomainInfo &stDomainInfo)
{
SNodeInfo stNodeInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getNodeInfoByName(strNodeName, stNodeInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getDomainInfoByNodeName(): 未找到该节点 strNodeName == %s", strNodeName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
return getDomainInfoById(stNodeInfo.nDomainId, stDomainInfo);
}
/**
@brief
@param std::vector<SAppDeploy> & vecAppDeploy
@return
@retval
*/
int CSysInfoImp::getLocalAppDeploy(std::vector<SAppDeploy> &vecAppDeploy)
{
const std::string strMyHostName = boost::asio::ip::host_name();
return getAppDeployByNodeName(strMyHostName, vecAppDeploy);
}
/**
@brief
@param SDatabaseInfo & stFirstConnect
@param std::vector<SDatabaseInfo> & vecLocalDBInfo
@param std::vector<SDatabaseInfo> & vecRemoteDBInfo
@return
@retval
*/
int CSysInfoImp::getLocalDBInfo(SDatabaseInfo &stFirstConnect,
std::vector<SDatabaseInfo> &vecLocalDBInfo,
std::vector<SDatabaseInfo> &vecRemoteDBInfo)
{
SNodeInfo stNodeInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getLocalNodeInfo(stNodeInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getLocalDBInfo(): 未找到本机节点信息");
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
return getDBInfoByDomainId(stNodeInfo.nDomainId, stFirstConnect, vecLocalDBInfo, vecRemoteDBInfo);
}
/**
@brief
@param SNodeInfo & stNodeInfo
@return
@retval
*/
int CSysInfoImp::getLocalNodeInfo(SNodeInfo &stNodeInfo)
{
const std::string strMyHostName = boost::asio::ip::host_name();
return getNodeInfoByName(strMyHostName, stNodeInfo);
}
/**
@brief ID获取本进程运行所需的相关参数
@param int nAppId ID
@param SRunAppInfo & stRunAppInfo
@return
@retval
*/
int CSysInfoImp::getLocalRunAppInfoById(int nAppId, SRunAppInfo &stRunAppInfo)
{
//获取NodeInfo
SNodeInfo stLocalNodeInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getLocalNodeInfo(stLocalNodeInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getLocalRunAppInfoById(): 未找到本机节点信息");
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
//获取AppInfo
BOOST_AUTO(itAppInfo, m_objData.m_mapAppInfo.find(nAppId));
if (m_objData.m_mapAppInfo.end() == itAppInfo)
{
LOGERROR("getLocalRunAppInfoById(): 未找到该应用 nAppId == %d", nAppId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
//获取DomainInfo
BOOST_AUTO(itDomInfo, m_objData.m_mapDomainInfo.find(stLocalNodeInfo.nDomainId));
if (m_objData.m_mapDomainInfo.end() == itDomInfo)
{
LOGERROR("getLocalRunAppInfoById(): 未找到该域 nDomainId == %d", stLocalNodeInfo.nDomainId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
//获取LocationInfo
BOOST_AUTO(itLocatInfo, m_objData.m_mapLocationInfo.find(stLocalNodeInfo.nLocationId));
if (m_objData.m_mapLocationInfo.end() == itLocatInfo)
{
LOGERROR("getLocalRunAppInfoById(): 未找到该位置 nLocationId == %d", stLocalNodeInfo.nLocationId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stRunAppInfo.nDomainId = stLocalNodeInfo.nDomainId;
stRunAppInfo.bIsCenterDomain = itDomInfo->second.bIsCenter;
stRunAppInfo.nAppId = nAppId;
stRunAppInfo.strAppName = itAppInfo->second.strName;
stRunAppInfo.nLocationId = stLocalNodeInfo.nLocationId;
stRunAppInfo.bIsCenterLocation = itLocatInfo->second.bIsCenter;
stRunAppInfo.strLocalNodeName = stLocalNodeInfo.strName;
stRunAppInfo.strLocalNodeDesc = stLocalNodeInfo.strDesc;
stRunAppInfo.eNodeType = stLocalNodeInfo.eNodeType;
stRunAppInfo.setSubsystemId.clear();
BOOST_FOREACH(const int i, itAppInfo->second.vecSubsystemId)
{
stRunAppInfo.setSubsystemId.insert(i);
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strSubsystemName
@param SRunAppInfo & stRunAppInfo
@return
@retval
*/
int CSysInfoImp::getLocalRunAppInfoByName(const std::string &strAppName, SRunAppInfo &stRunAppInfo)
{
SAppInfo stAppInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getAppInfoByName(strAppName, stAppInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getLocalRunAppInfoByName(): 未找到该应用 strAppName == %s", strAppName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
return getLocalRunAppInfoById(stAppInfo.nId, stRunAppInfo);
}
//----virtual int getAllDBDeploy(std::vector<SDBDeploy> &vecDBDeploy) = 0;
/**
@brief
@param int nLocationId
@param SLocationInfo & stLocationInfo
@return
@retval
*/
int CSysInfoImp::getLocationInfoById(int nLocationId, SLocationInfo &stLocationInfo)
{
BOOST_AUTO(it, m_objData.m_mapLocationInfo.find(nLocationId));
if (m_objData.m_mapLocationInfo.end() == it)
{
LOGERROR("getLocationInfoById(): 未找到该位置 nLocationId == %d", nLocationId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stLocationInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strLocationName
@param SLocationInfo & stLocationInfo
@return
@retval
*/
int CSysInfoImp::getLocationInfoByName(const std::string &strLocationName, SLocationInfo &stLocationInfo)
{
for (BOOST_AUTO(it, m_objData.m_mapLocationInfo.begin());
it != m_objData.m_mapLocationInfo.end();
it++)
{
if (strLocationName == it->second.strName)
{
stLocationInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
}
LOGERROR("getLocationInfoByName(): 未找到该位置 strLocationName == %s", strLocationName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
/**
@brief ID获取该域下所有的位置信息
@param int nDomainId
@param std::vector<SLocationInfo> & vecLocationInfo
@return
@retval
*/
int CSysInfoImp::getLocationListByDomainId(int nDomainId, std::vector<SLocationInfo> &vecLocationInfo)
{
vecLocationInfo.clear();
for (BOOST_AUTO(it, m_objData.m_mapLocationInfo.begin());
it != m_objData.m_mapLocationInfo.end();
it++)
{
if (nDomainId == it->second.nDomainId)
{
vecLocationInfo.push_back(it->second);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string strNodeName
@param SNodeInfo & stNodeInfo
@return
@retval
*/
int CSysInfoImp::getNodeInfoByName(const std::string strNodeName, SNodeInfo &stNodeInfo)
{
BOOST_AUTO(it, m_objData.m_mapNodeInfo.find(strNodeName));
if (m_objData.m_mapNodeInfo.end() == it)
{
LOGERROR("getNodeInfoByName(): 未找到该节点 strNodeName == [%s]", strNodeName.c_str());
std::map<std::string, SNodeInfo>::iterator i;
for ( i=m_objData.m_mapNodeInfo.begin(); i!=m_objData.m_mapNodeInfo.end(); i++ )
{
LOGERROR("现有节点:[%s]", i->second.strName.c_str());
}
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stNodeInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param int nDomainId
@param std::vector<SNodeInfo> & vecNodeInfo
@return
@retval
*/
int CSysInfoImp::getNodeListByDomainId(int nDomainId, std::vector<SNodeInfo> &vecNodeInfo)
{
vecNodeInfo.clear();
for (BOOST_AUTO(it, m_objData.m_mapNodeInfo.begin());
it != m_objData.m_mapNodeInfo.end();
it++)
{
if (it->second.nDomainId == nDomainId)
{
vecNodeInfo.push_back(it->second);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strDomainName
@param std::vector<SNodeInfo> & vecNodeInfo
@return
@retval
*/
int CSysInfoImp::getNodeListByDomainName(const std::string &strDomainName, std::vector<SNodeInfo> &vecNodeInfo)
{
SDomainInfo stDomInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getDomainInfoByName(strDomainName, stDomInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getNodeListByDomainName(): 未找到该域 strDomainName == %s", strDomainName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
return getNodeListByDomainId(stDomInfo.nId, vecNodeInfo);
}
/**
@brief ID获取专业信息
@param int nSubsystemId ID
@param SSubsystemInfo & stSubsystemInfo
@return
@retval
*/
int CSysInfoImp::getSubsystemInfoById(int nSubsystemId, SSubsystemInfo &stSubsystemInfo)
{
BOOST_AUTO(it, m_objData.m_mapSubsystemInfo.find(nSubsystemId));
if (m_objData.m_mapSubsystemInfo.end() == it)
{
LOGERROR("getSubsystemInfoById(): 未找到该专业 nSubsystemId = %d", nSubsystemId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stSubsystemInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strSubsystemName
@param SSubsystemInfo & stSubsystemInfo
@return
@retval
*/
int CSysInfoImp::getSubsystemInfoByName(const std::string &strSubsystemName, SSubsystemInfo &stSubsystemInfo)
{
for (BOOST_AUTO(it, m_objData.m_mapSubsystemInfo.begin());
it != m_objData.m_mapSubsystemInfo.end();
it++)
{
if (strSubsystemName == it->second.strName)
{
stSubsystemInfo = it->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
}
LOGERROR("getSubsystemInfoByName(): 未找到该专业 strSubsystemName == %s", strSubsystemName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param int nAppId ID
@param std::vector<SSubsystemInfo> & vecSubsystemInfo
@return
@retval
*/
int CSysInfoImp::getSubsystemListByAppId(int nAppId, std::vector<SSubsystemInfo> &vecSubsystemInfo)
{
vecSubsystemInfo.clear();
SAppInfo stAppInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getAppInfoById(nAppId, stAppInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getSubsystemListByAppId(): 未找到该应用 nAppId == %d", nAppId);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
for (size_t i = 0; i < stAppInfo.vecSubsystemId.size(); i++)
{
const int nSubSysId = stAppInfo.vecSubsystemId.at(i);
BOOST_AUTO(it, m_objData.m_mapSubsystemInfo.find(nSubSysId));
if (m_objData.m_mapSubsystemInfo.end() != it)
{
vecSubsystemInfo.push_back(it->second);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief
@param const std::string & strAppName
@param std::vector<SSubsystemInfo> & vecSubsystemInfo
@return
@retval
*/
int CSysInfoImp::getSubsystemListByAppName(const std::string &strAppName, std::vector<SSubsystemInfo> &vecSubsystemInfo)
{
vecSubsystemInfo.clear();
SAppInfo stAppInfo;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getAppInfoByName(strAppName, stAppInfo))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getSubsystemListByAppName(): 未找到该应用 strAppName == %s", strAppName.c_str());
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
for (size_t i = 0; i < stAppInfo.vecSubsystemId.size(); i++)
{
const int nSubSysId = stAppInfo.vecSubsystemId.at(i);
BOOST_AUTO(it, m_objData.m_mapSubsystemInfo.find(nSubSysId));
if (m_objData.m_mapSubsystemInfo.end() != it)
{
vecSubsystemInfo.push_back(it->second);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/* @brief 获取本节点部署的各应用下的进程列表 */
int CSysInfoImp::getLocalProcInfoList(SProcessInfoMAP &mapProcInfo)
{
std::vector<SAppDeploy> vecAppDeploy;
2025-03-12 14:54:22 +08:00
if (iotSuccess != getLocalAppDeploy(vecAppDeploy))
2025-03-12 11:08:50 +08:00
{
LOGERROR("getLocalProcInfoList(): 未找到本节点应用部署信息");
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
SProcessInfoSeq vecProcInfo;
for (BOOST_AUTO(pAppIter, vecAppDeploy.begin()); pAppIter != vecAppDeploy.end(); ++pAppIter)
{
mapProcInfo[pAppIter->nAppId] = vecProcInfo;
}
for (BOOST_AUTO(it, m_objData.m_mapProcessInfo.begin()); it != m_objData.m_mapProcessInfo.end(); ++it)
{
SProcessInfoMAP::iterator pProcInfoIter = mapProcInfo.find(it->second.nAppId);
if (pProcInfoIter != mapProcInfo.end())
{
pProcInfoIter->second.push_back(it->second);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/* @brief 获取指定应用部署的进程列表 */
int CSysInfoImp::getProcInfoListByAppId(int nAppId, SProcessInfoMAP &mapProcInfo)
{
for (BOOST_AUTO(it, m_objData.m_mapProcessInfo.begin()); it != m_objData.m_mapProcessInfo.end(); ++it)
{
if (it->second.nAppId == nAppId)
{
mapProcInfo[it->second.nAppId].push_back(it->second);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief 线
@param vecMbRelayInfo:
2025-03-12 14:54:22 +08:00
@return iotSuccess
2025-03-12 11:08:50 +08:00
@retval
*/
int CSysInfoImp::getAllMbRelayInfo(std::vector<SMbRelayInfo> &vecMbRelayInfo)
{
vecMbRelayInfo.clear();
for (BOOST_AUTO(itMap, m_objData.m_mapMbRelayInfo.begin());
m_objData.m_mapMbRelayInfo.end() != itMap;
itMap++)
{
vecMbRelayInfo.push_back(itMap->second);
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief ID获取消息总线转发信息
@param vecMbRelayInfo
2025-03-12 14:54:22 +08:00
@return iotSuccess
2025-03-12 11:08:50 +08:00
@retval
*/
int CSysInfoImp::getMbRelayInfoBySrcDomainID(int nSrcDomainID,
std::vector<SMbRelayInfo> &vecMbRelayInfo)
{
vecMbRelayInfo.clear();
for (BOOST_AUTO(itMap, m_objData.m_mapMbRelayInfo.begin());
m_objData.m_mapMbRelayInfo.end() != itMap;
itMap++)
{
const SMbRelayInfo &stMbRelayInfo = itMap->second;
if (stMbRelayInfo.m_nSrcDomainID == nSrcDomainID)
{
vecMbRelayInfo.push_back(stMbRelayInfo);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief ID获取消息总线转发信息
@param vecMbRelayInfo
2025-03-12 14:54:22 +08:00
@return iotSuccess
2025-03-12 11:08:50 +08:00
@retval
*/
int CSysInfoImp::getMbRelayInfoByDstDomainID(int nDstDomainID,
std::vector<SMbRelayInfo> &vecMbRelayInfo)
{
vecMbRelayInfo.clear();
for (BOOST_AUTO(itMap, m_objData.m_mapMbRelayInfo.begin());
m_objData.m_mapMbRelayInfo.end() != itMap;
itMap++)
{
const SMbRelayInfo &stMbRelayInfo = itMap->second;
if (stMbRelayInfo.m_nDstDomainID == nDstDomainID)
{
vecMbRelayInfo.push_back(stMbRelayInfo);
}
}
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
@brief ID获取消息总线转发信息
@param objMbRelayInfo
2025-03-12 14:54:22 +08:00
@return iotSuccess
2025-03-12 11:08:50 +08:00
@retval
*/
int CSysInfoImp::getMbRelayInfoBySrcAndDstDomainID(int nSrcDomainID, int nDstDomainID,
SMbRelayInfo &stMbRelayInfo)
{
//< “nSrcDomainID-nDstDomainID”作为key
const std::string strKey = boost::str(boost::format("%d-%d")
% nSrcDomainID % nDstDomainID);
BOOST_AUTO(itMap, m_objData.m_mapMbRelayInfo.find(strKey));
if (m_objData.m_mapMbRelayInfo.end() == itMap)
{
LOGERROR("getMbRelayInfoBySrcAndDstDomainID(): 未找到转发配置 nSrcDomainID == %d, nDstDomainID == %d",
nSrcDomainID, nDstDomainID);
2025-03-12 14:54:22 +08:00
return iotFailed;
2025-03-12 11:08:50 +08:00
}
stMbRelayInfo = itMap->second;
2025-03-12 14:54:22 +08:00
return iotSuccess;
2025-03-12 11:08:50 +08:00
}
/**
* @brief getUniqueIdOfNodeInfo id
* @return CRC32值
*/
unsigned int CSysInfoImp::getUniqueIdOfNodeInfo()
{
unsigned int nRet = 0;
std::vector<SNodeInfo> vecNodeInfo;
2025-03-12 14:54:22 +08:00
if ( iotSuccess != getAllNodeInfo(vecNodeInfo) || vecNodeInfo.size() <= 0 )
2025-03-12 11:08:50 +08:00
return nRet;
// 按节点名排序
std::sort( vecNodeInfo.begin(), vecNodeInfo.end(), [](const SNodeInfo& objNode0,const SNodeInfo& objNode1){
return objNode0.strName < objNode1.strName;
} );
// 将所有节点配置组合成一个字符串
std::string sInfo = "";
for ( size_t i=0; i<vecNodeInfo.size(); i++ )
{
sInfo = sInfo + vecNodeInfo.at(i).strName + ";" + vecNodeInfo.at(i).strNic1Addr + ";" +
vecNodeInfo.at(i).strNic2Addr + ";";
}
// 获取字符串crc
2025-03-12 16:06:06 +08:00
nRet = calcCRC32( (unsigned char*)sInfo.c_str(), static_cast<int>(sInfo.size()) );
2025-03-12 11:08:50 +08:00
// 基本不可能发生以防万一是以防43亿分之一
if ( nRet == 0 )
{
LOGERROR("CRC算出来的值是0去买彩票吧");
}
return nRet;
}
2025-03-12 14:17:01 +08:00
} //namespace iot_public
2025-03-12 11:08:50 +08:00