浏览代码

Z991239-5462 #comment fea: guiconsole support performance monitor

chenliangyu 1 年之前
父节点
当前提交
c32cbfb810

+ 4 - 0
Module/include/EventCode.h

@@ -696,6 +696,10 @@ ERROR_ACCESSAUTH_CONNECT_ACS_x}
 #define WARN_GUICONSOLE_REBOOT_UNKNOWN_REASON	0x50820301
 //performance failed:snapshot
 #define WARN_GUICONSOLE_PERFORMANCE_SNAPSHOT	0x50820401
+//performance failed:thread already existed
+#define WARN_GUICONSOLE_PERFORMANCE_EXISTED		0x50820402
+//performance failed:thread not exist
+#define WARN_GUICONSOLE_PERFORMANCE_NOTEXISTED		0x50820403
 //performance failed:Process32First
 #define WARN_GUICONSOLE_PERFORMANCE_PROCESS32FIRST	0x50820402
 //openLogSender not vaild input

+ 3 - 3
Module/mod_guiconsole/GuiConsole.xml

@@ -37,7 +37,7 @@
 				<param name="additionalMsg" type="string"/>
 			</res>
 		</twoway>
-		<!-- 定义一个名为 OpenEntityMonitor 的双向通信,用于打开实体监控功能 -->
+		<!-- 定义一个名为 OpenEntityMonitor 的双向通信,用于打开实体监控功能,我认为这个一直发会比较消耗内网资源,因为需要一直有状态更新,只在ST环境打开 -->
 		<twoway name="OpenEntityMonitor" overlap="true" simpleret="true">
 			<req>
 				<!-- 预留参数1,类型为整数 -->
@@ -71,10 +71,10 @@
 				<param name="additionalMsg" type="string"/>
 			</res>
 		</twoway>
-		<!-- 定义一个名为 OpenPerformanceSender 的双向通信,用于打开性能发送功能 -->
+		<!-- 定义一个名为 OpenPerformanceSender 的双向通信,用于打开性能发送功能,我认为这个一直发会比较消耗内网资源,因为需要一直有状态更新,只在ST环境打开 -->
 		<twoway name="OpenPerformanceSender" overlap="true" simpleret="true">
 			<req>
-				<!-- 发送频率-秒,类型为整数 -->
+				<!-- 发送频率-秒,类型为整数,建议为5s -->
 				<param name="sendFrequence" type="int"/>
 				<!-- 预留参数2,类型为整数 -->
 				<param name="reserved2" type="int"/>

+ 1 - 1
Module/mod_guiconsole/mod_GuiConsole.h

@@ -102,6 +102,6 @@ private:
 	bool m_isOpenLogSender, m_isOpenEntityMonitor, m_isOpenPerformanceSender;
 	int m_performanceSenderFrequence, m_sendLogType;
 	CUUID m_logSubID;
-	std::thread thread_performanceSend;
+	std::thread *thread_performanceSend;
 };
 

+ 44 - 11
Module/mod_guiconsole/mod_guiconsole.cpp

@@ -2,7 +2,7 @@
 #include "publicFunExport.h"
 #include <EventCode.h>
 #include "GUIConsole_msg_g.h"
-
+#include <chrono>
 
 bool isPad = false;
 
@@ -246,8 +246,19 @@ std::pair<DWORD, std::string> CGUIConsoleEntity::openPerformanceSender(SpReqAnsC
 				dst.cmdlineArr[i] = "";
 				dst.handleNumArr[i] = curStatus.processList[i].ThreadCount;
 			}
+			SpSendBroadcast(GetFunction(), eMsg_PerformanceList, eMsgSig_PerformanceList, dst);
+			std::this_thread::sleep_for(std::chrono::seconds(m_performanceSenderFrequence));
 		}
 	};
+	
+	if (thread_performanceSend != NULL)
+	{
+		LogWarn(SeverityLevelEnum::Severity_Middle, ErrorCodeEnum::Error_AlreadyExist, WARN_GUICONSOLE_PERFORMANCE_EXISTED,
+			"openPerformanceSender, thread_performanceSend already existed");
+		return std::pair<DWORD, std::string>(WARN_GUICONSOLE_PERFORMANCE_EXISTED, "");
+	}
+
+	thread_performanceSend = new std::thread(performanceSender);
 
 	return std::pair<DWORD, std::string>(Error_Succeed, "");
 }
@@ -255,6 +266,17 @@ std::pair<DWORD, std::string> CGUIConsoleEntity::openPerformanceSender(SpReqAnsC
 std::pair<DWORD, std::string> CGUIConsoleEntity::closePerformanceSender()
 {
 	m_isOpenPerformanceSender = false;
+	if(thread_performanceSend == NULL)
+	{
+		LogWarn(SeverityLevelEnum::Severity_Middle, ErrorCodeEnum::Error_NotExist, WARN_GUICONSOLE_PERFORMANCE_NOTEXISTED,
+			"closePerformanceSender, thread_performanceSend not exist");
+		return std::pair<DWORD, std::string>(WARN_GUICONSOLE_PERFORMANCE_NOTEXISTED, "");
+	}
+
+	thread_performanceSend->join();
+	delete thread_performanceSend;
+	thread_performanceSend = NULL;
+
 	return std::pair<DWORD, std::string>(Error_Succeed, "");
 }
 
@@ -317,12 +339,23 @@ std::pair<DWORD, std::string> CGUIConsoleEntity::VTM_controlEntity(SpReqAnsConte
 
 CGUIConsoleEntity::CGUIConsoleEntity()
 	:m_isOpenLogSender(false), m_isOpenEntityMonitor(false), m_isOpenPerformanceSender(false),
-	m_sendLogType(LogTypeEnum::Log_Warning)
+	m_sendLogType(LogTypeEnum::Log_Warning), thread_performanceSend(NULL)
 {
 }
 
 CGUIConsoleEntity::~CGUIConsoleEntity()
-{}
+{
+	m_isOpenPerformanceSender = false;
+	m_isOpenEntityMonitor = false;
+	m_isOpenLogSender = false;
+	if (thread_performanceSend)
+	{
+		thread_performanceSend->detach();
+		delete thread_performanceSend;
+		thread_performanceSend = NULL;
+	}
+
+}
 
 
 void CGUIConsoleSession::Handle_OpenLogSender(SpReqAnsContext<GUIConsoleService_OpenLogSender_Req, GUIConsoleService_OpenLogSender_Ans>::Pointer ctx)
@@ -587,14 +620,14 @@ std::pair<DWORD, std::string> CGUIConsoleEntity::GetAllEntity(CAutoArray<EntityE
 
 void CGUIConsoleEntity::OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp)
 {
-		CSmartPointer<ICallbackListener> spCallback;
-		CSmartPointer<IReleasable> pData;
-		pAsynWaitSp->GetCallback(spCallback, pData);
-		LOG_ASSERT(pData.GetRawPointer() != NULL);
-		callback_entry* entry = static_cast<callback_entry*>((IReleasable*)pData.GetRawPointer());
-		entry->ErrorResult = pAsynWaitSp->AsyncGetAnswer();
-		if(m_isOpenEntityMonitor)
-			PostEntityVary(entry->EntityName);//if registered, while entity status changed, send to web
+	CSmartPointer<ICallbackListener> spCallback;
+	CSmartPointer<IReleasable> pData;
+	pAsynWaitSp->GetCallback(spCallback, pData);
+	LOG_ASSERT(pData.GetRawPointer() != NULL);
+	callback_entry* entry = static_cast<callback_entry*>((IReleasable*)pData.GetRawPointer());
+	entry->ErrorResult = pAsynWaitSp->AsyncGetAnswer();
+	if(m_isOpenEntityMonitor)
+		PostEntityVary(entry->EntityName);//if registered, while entity status changed, send to web
 }