#include "DataMng.h" #include "pub_utility_api/FileUtil.h" #include "pub_utility_api/CommonConfigParse.h" #include "boost/asio/ip/host_name.hpp" #include #include #include #include #include #include #include #include #include #include using namespace sys_startup; using namespace std; using namespace iot_public; DataMng *DataMng::m_pInstance = Q_NULLPTR; DataMng *DataMng::instance() { if(m_pInstance == Q_NULLPTR) { m_pInstance = new DataMng(); } return m_pInstance; } void DataMng::destory() { if(m_mutex) { delete m_mutex; } m_mutex = Q_NULLPTR; if(m_mutexApp) { delete m_mutexApp; } m_mutexApp = Q_NULLPTR; if(m_mutexProc) { delete m_mutexProc; } m_mutexProc = Q_NULLPTR; m_pInstance = Q_NULLPTR; delete this; } bool DataMng::loadJson() { QFile loadFile(iot_public::CFileUtil::getPathOfCfgFile("sys_startup.json").c_str()); if(!loadFile.exists() || !loadFile.open(QIODevice::ReadOnly | QIODevice::Text)) { return false; } QString allData = loadFile.readAll(); loadFile.close(); QJsonParseError error; QJsonDocument document = QJsonDocument::fromJson(allData.toUtf8(),&error); if(error.error != QJsonParseError::NoError) { qDebug()< appMap; appMap[CN_AppId_BASE] = a; m_modelDeployInfoMap[m_nodeVec.at(index)] = appMap; } QString filename = "../../data/sys_model_info/SYS_MODEL_DEPLOY_INFO.xml"; QFile file( filename ); if( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) { return ; } QDomDocument document; if(!document.setContent(&file)) { qDebug()<<"error"; return ; } QDomElement table = document.documentElement();//返回根节点table QDomNode node = table.firstChild(); while (!node.isNull()) { int num = node.toElement().attribute("NUM").toInt(); int app_id = node.toElement().attribute("APP_ID").toInt(); QString app_desc = QString::fromStdString(m_modelAppInfoMap.value(app_id).m_desc); for(int i = 1;i <= num; i++) { QString nodeName = node.toElement().attribute(QString("NODE%1").arg(i)); QMap >::iterator it = m_modelDeployInfoMap.find(nodeName); if(it!= m_modelDeployInfoMap.end()) { QMap &info = it.value(); SApp a; a.m_appId = app_id; a.m_appName = m_modelAppInfoMap.value(app_id).m_tagName; a.m_desc = app_desc.toStdString(); a.m_nodeName =node.toElement().attribute(QString("NODE%1").arg(i)).toStdString(); if(nodeIsUsed(a.m_nodeName)) { info[a.m_appId] = a; } }else { QMap info; SApp a; a.m_appId = app_id; a.m_appName = m_modelAppInfoMap.value(app_id).m_tagName; a.m_desc = app_desc.toStdString(); a.m_nodeName =node.toElement().attribute(QString("NODE%1").arg(i)).toStdString(); if(nodeIsUsed(a.m_nodeName)) { info[a.m_appId] = a; m_modelDeployInfoMap[nodeName] = info; } } } node = node.nextSibling(); } } bool DataMng::nodeIsUsed(const std::string &nodeName) { bool res = false; for(int index(0);index DataMng::getVersionInfo() { return m_versionMap; } QString DataMng::getZhTitle() { return m_zhTitle; } QString DataMng::getEnTitle() { return m_enTitle; } void DataMng::loadLocalProcInfo() { QList localAppIdList; localAppIdList.clear(); m_sysRunProcInfoVec.clear(); m_modelProcInfoVec.clear(); QMap >::iterator it = m_modelDeployInfoMap.find(getHostName()); if(it != m_modelDeployInfoMap.end()) { localAppIdList.append(it.value().keys()); } QString filename = "../../data/sys_model_info/SYS_MODEL_PROCESS_INFO.xml"; QFile file( filename ); if( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) { return ; } QDomDocument document; if(!document.setContent(&file)) { qDebug()<<"error"; return ; } QDomElement table = document.documentElement();//返回根节点table QDomNode node = table.firstChild(); while (!(node.isNull())) { int app_id = node.toElement().attribute("APP_ID").toInt(); if(node.toElement().attribute("NOT_USED").toInt() == 1) { node = node.nextSibling(); continue; } if(localAppIdList.contains(app_id)) { SProcess proc; proc.m_appId = app_id; proc.m_appDesc = m_modelAppInfoMap.value(app_id).m_desc; proc.m_nodeName = getHostName().toStdString(); proc.m_procName = node.toElement().attribute("PROC_NAME").toStdString(); proc.m_procDesc = node.toElement().attribute("DESCRIPTION").toStdString(); m_sysRunProcInfoVec.push_back(proc); m_modelProcInfoVec.push_back(proc); } node = node.nextSibling(); } m_nLocalProcNum = (int)m_sysRunProcInfoVec.size(); LOGINFO("本机一共需要启动%d个进程.",m_nLocalProcNum); } QVector DataMng::getPage1ButtonInfo() { return m_page1ButtonInfoVec; } QString DataMng::getTitle() { return m_title; } QString DataMng::getPng() { return m_png; } QMap DataMng::getPage3ButtonInfo() { return m_page3ButtonInfoMap; } bool DataMng::getButtonInfoByName(const QString &name, SButtonInfo &buttonInfo) { QMap::iterator it = m_buttonInfoMap.find(name); if(it != m_buttonInfoMap.end()) { buttonInfo = it.value(); return true; }else { return false; } } QString DataMng::getStartPng() { return m_stStartPng; } QString DataMng::getStopPng() { return m_stStopPng; } QString DataMng::getStartBorderColor() { return m_stStartBorderColor; } QString DataMng::getStopBorderColor() { return m_stStopBorderColor; } QString DataMng::getStartWaterColor() { return m_stStartWaterColor; } QString DataMng::getStopWaterColor() { return m_stStopWaterColor; } QString DataMng::getSysIcon() { return m_stSysIcon; } QString DataMng::getRestartPng() { return m_stRestartPng; } void DataMng::setBaseStatus(bool runStatus) { QMutexLocker lock(m_mutex); m_bBaseIsRun = runStatus; } bool DataMng::getBaseStatus() { QMutexLocker lock(m_mutex); return m_bBaseIsRun; } QString DataMng::getHostName() { return QString::fromStdString(boost::asio::ip::host_name()); } bool DataMng::getSysStatus() { QMutexLocker lock(m_mutex); return m_bSysIsRun; } void DataMng::setSysStatus(bool runStatus) { QMutexLocker lock(m_mutex); m_bSysIsRun = runStatus; } bool DataMng::getAllowedStatus() { QMutexLocker lock(m_mutex); return m_bIsAllowedOpt; } void DataMng::setAllowedStatus(bool allowed) { QMutexLocker lock(m_mutex); m_bIsAllowedOpt = allowed; } SSysModelAppInfo DataMng::getModelAppInfoById(int appId) { SSysModelAppInfo appInfo; return m_modelAppInfoMap.value(appId,appInfo); } QMap > DataMng::getDeployInfo() { return m_modelDeployInfoMap; } std::vector DataMng::getProcInfo() { return m_modelProcInfoVec; } void DataMng::setRunAppInfo(const vector &runAppVec) { QMutexLocker lock(m_mutexApp); m_sysRunAppInfoVec = runAppVec; } vector DataMng::getRunAppInfo() { QMutexLocker lock(m_mutexApp); return m_sysRunAppInfoVec; } void DataMng::setRunProcInfo(const std::vector &runProcVec,const float &disk) { QMutexLocker lock(m_mutexProc); m_sysRunProcInfoVec = runProcVec; m_fDisk = disk; } void DataMng::getRunProcInfo(std::vector &procVec, float &disk) { QMutexLocker lock(m_mutexProc); procVec = m_sysRunProcInfoVec; disk = m_fDisk; } int DataMng::getDomainId() { return m_locIdDomainOdMap.value(m_nodeLocIdMap.value(getHostName(),1),1); } std::vector DataMng::getInitAppInfoVec() { std::vector initAppInfoVec; QMap >::iterator it = m_modelDeployInfoMap.begin(); while (it != m_modelDeployInfoMap.end()) { QMap appMap = it.value(); QMap::iterator pos = appMap.begin(); while (pos != appMap.end()) { initAppInfoVec.push_back(pos.value()); pos++; } it++; } return initAppInfoVec; } std::vector DataMng::getInitProcInfoVec() { return m_modelProcInfoVec; } std::string DataMng::getAppDescByAppId(int appId) { return m_modelAppInfoMap.value(appId).m_desc; } string DataMng::getAppNameByAppId(int appId) { return m_modelAppInfoMap.value(appId).m_tagName; } std::string DataMng::getProcDescByAppIdAndProcName(int appId, const std::string &procName) { for(int index(0);index<(int)m_modelProcInfoVec.size();index++) { if(m_modelProcInfoVec[index].m_appId == appId && m_modelProcInfoVec[index].m_procName == procName) { return m_modelProcInfoVec[index].m_procDesc; } } return ""; } DataMng::DataMng(): m_mutex(Q_NULLPTR), m_mutexApp(Q_NULLPTR), m_mutexProc(Q_NULLPTR) { loadJson(); loadXml(); loadVersion(); m_bBaseIsRun = false; m_bSysIsRun = false; m_bIsAllowedOpt = true; m_mutex = new QMutex; m_mutexApp = new QMutex; m_mutexProc = new QMutex; m_fDisk = 0.0; }