Browse Source

Z991239-5911 #comment 把网卡信息获取提前到实体启动(基于网络检测在启动之初已经完成,无需再次获取);添加debug日志,方便排查偶发的信创sigsegv事件

oilyang 9 months ago
parent
commit
0b231b872e

+ 15 - 14
Module/mod_healthmanager/HealthManagerFSM.cpp

@@ -3,7 +3,6 @@
 #include <string>
 #include <algorithm>
 #include <regex>
-#include "CommEntityUtil.hpp"
 #include "SpUtility.h"
 #include "iniutil.h"
 #if defined(RVC_OS_WIN)
@@ -90,6 +89,8 @@ ErrorCodeEnum CHealthManagerFSM::Initial()
 		GetEntityBase()->GetFunction()->SetSysVar("TerminalStage", "X");
 	WaitDeamonFinishTask* task = new WaitDeamonFinishTask(this);
 	GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
+	m_netList.Init(0);
+	SP::Module::Net::GetINETMacAddresses(m_netList);
 
 	return Error_Succeed;
 }
@@ -829,21 +830,20 @@ void CHealthManagerFSM::ToLogWarnTermAboutInfo()
 	CSmartPointer<IConfigInfo> spConfigRun;
 	GetEntityBase()->GetFunction()->OpenConfig(Config_Run, spConfigRun);
 
-	CAutoArray<SP::Module::Net::NetworkAdapterItem> netList;
-	SP::Module::Net::GetINETMacAddresses(netList);
+	//CAutoArray<SP::Module::Net::NetworkAdapterItem> netList;
+	if (m_netList.GetCount() == 0)
+		SP::Module::Net::GetINETMacAddresses(m_netList);
 	CSimpleStringA csMac(""), csIP(""), csDNS("");
-    for (int i = 0; i < netList.GetCount(); i++) {
+    for (int i = 0; i < m_netList.GetCount(); i++) {
 		if (!csMac.IsNullOrEmpty()) {
 			csMac += ";";
 		}
-		csMac += netList[i].mac.c_str();
-	}
-    for (int i = 0; i < netList.GetCount(); i++) {
+		csMac += m_netList[i].mac.c_str();
 		if (!csIP.IsNullOrEmpty()) {
 			csIP += ";";
 		}
-        csIP += netList[i].ip.c_str();
-    }
+		csIP += m_netList[i].ip.c_str();
+	}
 	for (int i = 0; i < m_dns.GetCount(); i++) {
 		if (!csDNS.IsNullOrEmpty()) {
 			csDNS += ";";
@@ -1042,13 +1042,14 @@ void CHealthManagerFSM::QueryHardwareInfo(SpReqAnsContext<HealthManagerService_Q
 	CSystemStaticInfo info;
 	GetEntityBase()->GetFunction()->GetSystemStaticInfo(info);
 
-	CAutoArray<SP::Module::Net::NetworkAdapterItem> netList;
-	SP::Module::Net::GetINETMacAddresses(netList);
+	//CAutoArray<SP::Module::Net::NetworkAdapterItem> netList;
+	if (m_netList.GetCount() == 0)
+		SP::Module::Net::GetINETMacAddresses(m_netList);
 
 	CAutoArray<CSimpleStringA> ipAddrs, macAddrs;
-	for (int i = 0; i < netList.GetCount(); i++) {
-		CSimpleStringA tmpip = netList[i].ip.c_str();
-		CSimpleStringA tmpmac = netList[i].mac.c_str();
+	for (int i = 0; i < m_netList.GetCount(); i++) {
+		CSimpleStringA tmpip = m_netList[i].ip.c_str();
+		CSimpleStringA tmpmac = m_netList[i].mac.c_str();
 		ipAddrs.Append(&tmpip, 0, 1);
 		macAddrs.Append(&tmpmac, 0, 1);
 	}

+ 2 - 0
Module/mod_healthmanager/HealthManagerFSM.h

@@ -9,6 +9,7 @@
 using namespace std;
 
 #include "CommEntitySettings.hpp"
+#include "CommEntityUtil.hpp"
 #include "HealthManager_msg_g.h"
 #include "HealthManager_def_g.h"
 #include "AccessAuthorization_client_g.h"
@@ -226,6 +227,7 @@ private:
 	CSystemStaticInfo m_sysInfo;
 	std::map<string, string> m_computerInfo;
 	CAutoArray<string> m_dns;
+	CAutoArray<SP::Module::Net::NetworkAdapterItem> m_netList;
 };
 
 struct WaitDeamonFinishTask : public ITaskSp

+ 4 - 2
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -421,13 +421,15 @@ void CHealthManagerEntity::OnCheckTimeTimeout()
 #if defined(RVC_OS_LINUX)
 bool FindGuardianPid(CAutoArray<int> &pIDArr)
 {
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to check guardian process");
     char* relate_processes[] = { "guardian" };
     int relate_processes_count = 1;
     alive_process_info processes[64];
 	int alive_process_info_count = 64;
     memset(processes, 0, sizeof(processes));
 
-    osutil_detect_unique_app(relate_processes, relate_processes_count, &alive_process_info_count, processes);
+    int retOfDetect = osutil_detect_unique_app(relate_processes, relate_processes_count, &alive_process_info_count, processes);
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("detect guardian return:%d, alive_process_info_count:%d", retOfDetect, alive_process_info_count);
     if (alive_process_info_count > 0) {
 		if (alive_process_info_count > 64)
 			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("too many guardian:%d", alive_process_info_count);
@@ -688,7 +690,7 @@ bool CHealthManagerEntity::StartGuardian()
 	tk_process_t* process = NULL;
 	tk_process_option_t option;
 	csBinPath += "/guardian";
-	sprintf(app, "%s %s %s %d", (const char*)csBinPath, staticInfo.strTerminalID.GetData(), "oiltest", 1);
+	sprintf(app, "%s %s %s %d", (const char*)csBinPath, staticInfo.strTerminalID.GetData(), "shouhu", 1);
 	Dbg("path:%s, app:%s", (const char*)csBinPath, (const char*)app);
 	option.exit_cb = NULL;
 	option.file = NULL;