Browse Source

1、日志分类:设备、TCP、执行器、脚本进程、正常。
2、结束管道前,先调用CancleIO取消管道上的IO操作,且不直接使用ReadFile读取管道数据,在读取前调用PeekNamedPipe预览管道数据。
经修改后,目前运行情况来看,暂时未再出现由ReadFile导致的阻塞使线程无法结束的问题。

scbc.sat2 5 years ago
parent
commit
a58cd7cacf

+ 26 - 10
SATService/SATService/Global.cpp

@@ -1097,13 +1097,34 @@ namespace GLOBAL
 	/*  日期:;
 	/*  日期:;
 	/*  内容:;
 	/*  内容:;
 	/************************************************************************/
 	/************************************************************************/
-	void WriteTextLog(const TCHAR* format, ...)
+	void WriteTextLog(LOGTYPE logType, const TCHAR* format, ...)
 	{
 	{
 		AutoThreadSection aSection(&g_csTextLog);
 		AutoThreadSection aSection(&g_csTextLog);
+		// 获取今年年份;
+		__time64_t gmt = time(NULL);// 获取当前日历时间(1900-01-01开始的Unix时间戳);
+		struct tm gmtm = { 0 };
+		localtime_s(&gmtm, &gmt); // 时间戳转成本地时间;
 #ifndef RTEST
 #ifndef RTEST
 		// 解析出日志路径;
 		// 解析出日志路径;
 		TCHAR szlogpath[MAX_PATH] = { 0 };
 		TCHAR szlogpath[MAX_PATH] = { 0 };
-		_stprintf_s(szlogpath, _T("%s%s.txt"), g_szCurModuleDir, g_szFna);
+		if ( logType == SAT_EXE ) {
+			_stprintf_s(szlogpath, _T("%s%04d-%02d-%02d\\%s-Exector.txt"), g_szCurModuleDir, gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday, g_szFna);
+		}
+		else if ( logType == SAT_DEV ) {
+			_stprintf_s(szlogpath, _T("%s%04d-%02d-%02d\\%s-Device.txt"), g_szCurModuleDir, gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday, g_szFna);
+		}
+		else if ( logType == SAT_PYE ) {
+			_stprintf_s(szlogpath, _T("%s%04d-%02d-%02d\\%s-PyExecutor.txt"), g_szCurModuleDir, gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday, g_szFna);
+		}
+		else if ( logType == SAT_TCP ) {
+			_stprintf_s(szlogpath, _T("%s%04d-%02d-%02d\\%s-TCP.txt"), g_szCurModuleDir, gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday, g_szFna);
+		} else {
+			_stprintf_s(szlogpath, _T("%s%04d-%02d-%02d\\%s.txt"), g_szCurModuleDir, gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday, g_szFna);
+		}
+
+		if ( !PathFileExists(szlogpath) )
+			MKDIR(szlogpath);
+
 		// 打开或创建文件;
 		// 打开或创建文件;
 		FILE* fp = NULL;
 		FILE* fp = NULL;
 		if (_taccess(szlogpath, 0) != -1)
 		if (_taccess(szlogpath, 0) != -1)
@@ -1134,13 +1155,8 @@ namespace GLOBAL
 		buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
 		buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
 		_vstprintf_s(buffer, len, format, args);
 		_vstprintf_s(buffer, len, format, args);
 		// 将日志内容输入到文件中;
 		// 将日志内容输入到文件中;
-		// 获取今年年份;
-		__time64_t gmt = time(NULL);// 获取当前日历时间(1900-01-01开始的Unix时间戳);
-		struct tm gmtm = { 0 };
-		localtime_s(&gmtm, &gmt); // 时间戳转成本地时间;
-
 #ifndef RTEST
 #ifndef RTEST
-		_ftprintf(fp, _T("%04d-%02d-%02d %02d:%02d:%02d %s\n"), gmtm.tm_year + 1990, gmtm.tm_mon + 1, gmtm.tm_mday, gmtm.tm_hour, gmtm.tm_min, gmtm.tm_sec, buffer);
+		_ftprintf(fp, _T("%04d-%02d-%02d %02d:%02d:%02d %s\n"), gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday, gmtm.tm_hour, gmtm.tm_min, gmtm.tm_sec, buffer);
 
 
 		// 关闭文件,释放资源并设置回原语言区域;
 		// 关闭文件,释放资源并设置回原语言区域;
 		free(buffer);
 		free(buffer);
@@ -1282,7 +1298,7 @@ namespace GLOBAL
 			delete pIpAdapterInfo;
 			delete pIpAdapterInfo;
 		}
 		}
 
 
-		WriteTextLog("【当前主机IP地址:%s】", g_strIPAddress.c_str());
+		WriteTextLog(SAT_NOR, "【当前主机IP地址:%s】", g_strIPAddress.c_str());
 
 
 		return g_strIPAddress;
 		return g_strIPAddress;
 	}
 	}
@@ -1382,7 +1398,7 @@ namespace GLOBAL
 			break;
 			break;
 		}
 		}
 
 
-		WriteTextLog("【当前主机MAC地址:%s】", g_strMacs.c_str());
+		WriteTextLog(SAT_NOR, "【当前主机MAC地址:%s】", g_strMacs.c_str());
 #endif
 #endif
 
 
 		return nTotal;
 		return nTotal;

+ 9 - 1
SATService/SATService/Global.h

@@ -33,6 +33,14 @@ typedef wstring TString;
 
 
 namespace GLOBAL
 namespace GLOBAL
 {
 {
+	enum LOGTYPE{
+		SAT_NOR = 0,
+		SAT_EXE,
+		SAT_DEV,
+		SAT_PYE,
+		SAT_TCP,
+	};
+
 	typedef struct __ST_SAT_CFG__ 
 	typedef struct __ST_SAT_CFG__ 
 	{
 	{
 		// usb设备adb重连时长(超过该时长,执行adb kill)
 		// usb设备adb重连时长(超过该时长,执行adb kill)
@@ -201,7 +209,7 @@ namespace GLOBAL
 	extern void GetHostName();
 	extern void GetHostName();
 	// 创建目录;
 	// 创建目录;
 	bool MKDIR(LPCTSTR dir);
 	bool MKDIR(LPCTSTR dir);
-	void WriteTextLog(const TCHAR* format, ...);
+	void WriteTextLog(LOGTYPE logType, const TCHAR* format, ...);
 	// 写脚本日志;
 	// 写脚本日志;
 	void WritePythonLog(LPCTSTR file, const TCHAR* msg);
 	void WritePythonLog(LPCTSTR file, const TCHAR* msg);
 	// 获取本机IP地址;
 	// 获取本机IP地址;

+ 53 - 37
SATService/SATService/PythonExecutor.cpp

@@ -58,7 +58,7 @@ DWORD CPythonExecutor::_WorkerThread(LPVOID lpParam)
 	// 结束日志线程;
 	// 结束日志线程;
 	that->m_bStopLogExport = TRUE;
 	that->m_bStopLogExport = TRUE;
 	// 可能出错:m_pCaseObj可能会提前释放了,所以需要保证不能提前释放;
 	// 可能出错:m_pCaseObj可能会提前释放了,所以需要保证不能提前释放;
-	GLOBAL::WriteTextLog(_T("脚本执行线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("脚本执行线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
 
 
 	return 0;
 	return 0;
 }
 }
@@ -67,25 +67,29 @@ DWORD CPythonExecutor::_StdoutLogExportThread(LPVOID lpParam)
 {
 {
 	CPythonExecutor* that = (CPythonExecutor*)lpParam;
 	CPythonExecutor* that = (CPythonExecutor*)lpParam;
 
 
-	DWORD dwRead;
+	DWORD dwBytesToRead;
 	CHAR chBuf[BUFSIZE] = {0};
 	CHAR chBuf[BUFSIZE] = {0};
 	BOOL bSuccess = FALSE;
 	BOOL bSuccess = FALSE;
 
 
 	do
 	do
 	{
 	{
-		bSuccess = ReadFile(that->m_hStdOutRead, chBuf, BUFSIZE, &dwRead, NULL);
-		if (!bSuccess || dwRead == 0 || !_tcslen(chBuf)) 
-			continue;
-
-		that->m_ulStartTickCount = GetTickCount64();
-		GLOBAL::WritePythonLog(that->m_szLogPath, chBuf);
-		// 更新日志时间;
-		if ( that->m_pCaseObj )
-			that->m_pCaseObj->_ulStartTickCount = GetTickCount64();
-		memset(chBuf, 0, BUFSIZE);
+		// 预览管道中数据,有才ReadFile;
+		PeekNamedPipe(that->m_hStdOutRead,chBuf,BUFSIZE,&dwBytesToRead,0,0);
+		if( dwBytesToRead ) {
+			bSuccess = ReadFile(that->m_hStdOutRead, chBuf, BUFSIZE, &dwBytesToRead, NULL);
+			if (!bSuccess || dwBytesToRead == 0 || !_tcslen(chBuf)) 
+				continue;
+
+			that->m_ulStartTickCount = GetTickCount64();
+			GLOBAL::WritePythonLog(that->m_szLogPath, chBuf);
+			// 更新日志时间;
+			if ( that->m_pCaseObj )
+				that->m_pCaseObj->_ulStartTickCount = GetTickCount64();
+			memset(chBuf, 0, BUFSIZE);
+		}
 	} while (!that->m_bStopLogExport);
 	} while (!that->m_bStopLogExport);
 
 
-	GLOBAL::WriteTextLog(_T("脚本标准输出日志线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("脚本标准输出日志线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
 
 
 	return 0;
 	return 0;
 }
 }
@@ -100,19 +104,23 @@ DWORD CPythonExecutor::_StderrLogExportThread(LPVOID lpParam)
 
 
 	do
 	do
 	{
 	{
-		bSuccess = ReadFile(that->m_hStdErrorRead, chBuf, BUFSIZE, &dwRead, NULL);
-		if (!bSuccess || dwRead == 0 || !_tcslen(chBuf)) 
-			continue;
-
-		GLOBAL::WritePythonLog(that->m_szLogPath, chBuf);
-		// 脚本结果异常;
-		that->m_pCaseObj->_nExecutionResult = SATHTTP::ABNORMAL;
-		memset(chBuf, 0, BUFSIZE);
+		// 预览管道中数据,有才ReadFile;
+		PeekNamedPipe(that->m_hStdErrorRead,chBuf,BUFSIZE,&dwRead,0,0);
+		if( dwRead ) {
+			bSuccess = ReadFile(that->m_hStdErrorRead, chBuf, BUFSIZE, &dwRead, NULL);
+			if (!bSuccess || dwRead == 0 || !_tcslen(chBuf)) 
+				continue;
+
+			GLOBAL::WritePythonLog(that->m_szLogPath, chBuf);
+			// 脚本结果异常;
+			that->m_pCaseObj->_nExecutionResult = SATHTTP::ABNORMAL;
+			memset(chBuf, 0, BUFSIZE);
+		}
 	} while (!that->m_bStopLogExport); 
 	} while (!that->m_bStopLogExport); 
 	
 	
 	// 结束重定向;
 	// 结束重定向;
 	that->EndSubprocessStdOut();
 	that->EndSubprocessStdOut();
-	GLOBAL::WriteTextLog(_T("脚本标准错误日志线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("脚本标准错误日志线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
 
 
 	return 0;
 	return 0;
 }
 }
@@ -157,7 +165,7 @@ int CPythonExecutor::RedirectSubprocessStdout(LPSTARTUPINFO si /*=NULL*/)
 int CPythonExecutor::RunScriptProcess()
 int CPythonExecutor::RunScriptProcess()
 {
 {
 	if (!PathFileExists(m_szScriptPath)) {
 	if (!PathFileExists(m_szScriptPath)) {
-		GLOBAL::WriteTextLog("【Error】脚本路径无效:%s", m_szScriptPath);
+		GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "【Error】脚本路径无效:%s", m_szScriptPath);
 		return -1;
 		return -1;
 	}
 	}
 
 
@@ -194,7 +202,7 @@ int CPythonExecutor::RunScriptProcess()
 		&m_pi)					// Pointer to PROCESS_INFORMATION structure
 		&m_pi)					// Pointer to PROCESS_INFORMATION structure
 		)
 		)
 	{
 	{
-		GLOBAL::WriteTextLog("【Error】创建子进程失败 (%d),", GetLastError());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "【Error】创建子进程失败 (%d),", GetLastError());
 		return -3;
 		return -3;
 	}
 	}
 
 
@@ -202,13 +210,17 @@ int CPythonExecutor::RunScriptProcess()
 	if ( m_pCaseObj )
 	if ( m_pCaseObj )
 		m_pCaseObj->__dwPythonPID = m_pi.dwProcessId;
 		m_pCaseObj->__dwPythonPID = m_pi.dwProcessId;
 
 
-	GLOBAL::WriteTextLog("Python进程ID=%ld", m_pi.dwProcessId);
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "Python进程ID=%ld", m_pi.dwProcessId);
 	// 等待进程完成退出.
 	// 等待进程完成退出.
 	WaitForSingleObject(m_pi.hProcess, INFINITE);
 	WaitForSingleObject(m_pi.hProcess, INFINITE);
 
 
 	// 必须等待,等待管道输出结果;
 	// 必须等待,等待管道输出结果;
 	Sleep(6000);
 	Sleep(6000);
-	GLOBAL::WriteTextLog("脚本进程结束(%ld)",  m_pi.dwProcessId);
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "脚本进程结束(%ld)",  m_pi.dwProcessId);
+
+	// 关闭管道前,先取消管道的IO操作;
+	CancelIo(m_hStdOutWrite);
+	CancelIo(m_hStdErrorWrite);
 	// 同时需要关闭输出的管道,否则ReadFile会阻塞;
 	// 同时需要关闭输出的管道,否则ReadFile会阻塞;
 	CloseHandle(m_hStdOutWrite);
 	CloseHandle(m_hStdOutWrite);
 	m_hStdOutWrite = NULL;
 	m_hStdOutWrite = NULL;
@@ -230,7 +242,7 @@ int CPythonExecutor::RunScriptProcess()
 int CPythonExecutor::ServiceRunScriptProcess()
 int CPythonExecutor::ServiceRunScriptProcess()
 {
 {
 	if (!PathFileExists(m_szScriptPath)) {
 	if (!PathFileExists(m_szScriptPath)) {
-		GLOBAL::WriteTextLog("【Error】脚本路径无效:%s", m_szScriptPath);
+		GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "【Error】脚本路径无效:%s", m_szScriptPath);
 		return -1;
 		return -1;
 	}
 	}
 
 
@@ -349,16 +361,20 @@ int CPythonExecutor::ServiceRunScriptProcess()
 	if ( m_pCaseObj )
 	if ( m_pCaseObj )
 		m_pCaseObj->__dwPythonPID = m_pi.dwProcessId;
 		m_pCaseObj->__dwPythonPID = m_pi.dwProcessId;
 
 
-	GLOBAL::WriteTextLog("Python进程ID=%ld", m_pi.dwProcessId);
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "Python进程ID=%ld", m_pi.dwProcessId);
 	// 等待进程完成退出.
 	// 等待进程完成退出.
 	WaitForSingleObject(m_pi.hProcess, INFINITE);
 	WaitForSingleObject(m_pi.hProcess, INFINITE);
 	
 	
 	// 必须等待,等待管道输出结果;
 	// 必须等待,等待管道输出结果;
 	Sleep(6000);
 	Sleep(6000);
-	GLOBAL::WriteTextLog("脚本进程结束(%ld)",  m_pi.dwProcessId);
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "脚本进程结束(%ld)",  m_pi.dwProcessId);
 	// 关闭进程句柄. 
 	// 关闭进程句柄. 
 	CloseHandle(m_pi.hProcess);
 	CloseHandle(m_pi.hProcess);
 	CloseHandle(m_pi.hThread);
 	CloseHandle(m_pi.hThread);
+
+	// 关闭管道前,先取消管道的IO操作;
+	CancelIo(m_hStdOutWrite);
+	CancelIo(m_hStdErrorWrite);
 	// 同时需要关闭输出的管道,否则ReadFile会阻塞;
 	// 同时需要关闭输出的管道,否则ReadFile会阻塞;
 	CloseHandle(m_hStdOutWrite);
 	CloseHandle(m_hStdOutWrite);
 	m_hStdOutWrite = NULL;
 	m_hStdOutWrite = NULL;
@@ -458,7 +474,7 @@ void CPythonExecutor::EndLogThread()
 		}
 		}
 		else
 		else
 		{
 		{
-			GLOBAL::WriteTextLog(_T("结束标准输出日志线程失败"));
+			GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("结束标准输出日志线程失败"));
 		}
 		}
 	}
 	}
 
 
@@ -480,7 +496,7 @@ void CPythonExecutor::EndLogThread()
 		}	
 		}	
 		else
 		else
 		{
 		{
-			GLOBAL::WriteTextLog(_T("结束标准错误日志线程失败"));
+			GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("结束标准错误日志线程失败"));
 		}
 		}
 	}
 	}
 }
 }
@@ -499,11 +515,11 @@ BOOL CPythonExecutor::EndSubprocess()
 	TerminateProcess(m_pi.hProcess, 0);
 	TerminateProcess(m_pi.hProcess, 0);
 	// 异步结束,需要等待(5秒)系统完成操作;
 	// 异步结束,需要等待(5秒)系统完成操作;
 	if ( WaitForSingleObject(m_pi.hProcess, 5000) == WAIT_OBJECT_0 ) {
 	if ( WaitForSingleObject(m_pi.hProcess, 5000) == WAIT_OBJECT_0 ) {
-		GLOBAL::WriteTextLog(_T("结束进程(%ld)成功"), m_pi.dwProcessId);
+		GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("结束进程(%ld)成功"), m_pi.dwProcessId);
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog(_T("结束进程(%ld)失败"), m_pi.dwProcessId);
+	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("结束进程(%ld)失败"), m_pi.dwProcessId);
 	return false;
 	return false;
 }
 }
 
 
@@ -554,7 +570,7 @@ bool CPythonExecutor::InitScript(std::string strScript, std::string strLogPath,
 {
 {
 	// 判断脚本是否存在;
 	// 判断脚本是否存在;
 	if (!PathFileExists(strScript.c_str())) {
 	if (!PathFileExists(strScript.c_str())) {
-		GLOBAL::WriteTextLog("【Error】脚本文件不存在:%s\n", strScript.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "【Error】脚本文件不存在:%s\n", strScript.c_str());
 		return false;
 		return false;
 	}
 	}
 
 
@@ -562,14 +578,14 @@ bool CPythonExecutor::InitScript(std::string strScript, std::string strLogPath,
 	if (!PathFileExists(strLogPath.c_str())) {
 	if (!PathFileExists(strLogPath.c_str())) {
 		// 创建路径;
 		// 创建路径;
 		if (!GLOBAL::MKDIR(strLogPath.c_str())) {
 		if (!GLOBAL::MKDIR(strLogPath.c_str())) {
-			GLOBAL::WriteTextLog("【Error】创建目录失败:%s\n", strLogPath.c_str());
+			GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "【Error】创建目录失败:%s\n", strLogPath.c_str());
 			return false;
 			return false;
 		}
 		}
 
 
 		// 创建文件;
 		// 创建文件;
 		std::ofstream flog(strLogPath.c_str());
 		std::ofstream flog(strLogPath.c_str());
 		if ( flog.bad() ) {
 		if ( flog.bad() ) {
-			GLOBAL::WriteTextLog("【Error】创建文件失败:%ld,%s\n", GetLastError(), strLogPath.c_str());
+			GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, "【Error】创建文件失败:%ld,%s\n", GetLastError(), strLogPath.c_str());
 			return false;
 			return false;
 		}
 		}
 		flog.close();
 		flog.close();
@@ -612,7 +628,7 @@ bool CPythonExecutor::IsScriptOver()
 		// 如果任务结果为空,标记成功;
 		// 如果任务结果为空,标记成功;
 		if ( m_pCaseObj->_nExecutionResult == SATHTTP::NONE )
 		if ( m_pCaseObj->_nExecutionResult == SATHTTP::NONE )
 			m_pCaseObj->_nExecutionResult = SATHTTP::SUCCESS;
 			m_pCaseObj->_nExecutionResult = SATHTTP::SUCCESS;
-		GLOBAL::WriteTextLog(_T("====>脚本(%s)已完成"), m_pCaseObj->strCaseName.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("====>脚本(%s)已完成"), m_pCaseObj->strCaseName.c_str());
 		return true;
 		return true;
 	}
 	}
 
 

+ 7 - 7
SATService/SATService/SATDevices.cpp

@@ -159,7 +159,7 @@ DWORD CSATDevices::WorkThread(LPVOID lpVoid)
 				printf("IsDevicesOffline\n");
 				printf("IsDevicesOffline\n");
 #endif
 #endif
 				if ( (GetTickCount64() - it->ulOfflineTime) > GLOBAL::g_stSATConfig.dwAdbTimeout ) {
 				if ( (GetTickCount64() - it->ulOfflineTime) > GLOBAL::g_stSATConfig.dwAdbTimeout ) {
-					//GLOBAL::WriteTextLog("移除设备->设备类型:%d, 设备名称:%s, 状态:%d", it->nType, it->strName.c_str(), it->nStatus);
+					GLOBAL::WriteTextLog(GLOBAL::SAT_DEV, "移除设备->设备类型:%d, 设备名称:%s, 状态:%d", it->nType, it->strName.c_str(), it->nStatus);
 					// 移除设备(需要线程加锁);
 					// 移除设备(需要线程加锁);
 					it = s_vtDevices.erase(it);					
 					it = s_vtDevices.erase(it);					
 				} else {
 				} else {
@@ -168,13 +168,13 @@ DWORD CSATDevices::WorkThread(LPVOID lpVoid)
 							// offline只能reconnect才能重连;
 							// offline只能reconnect才能重连;
 							std::string str = "adb reconnect offline";
 							std::string str = "adb reconnect offline";
 							WinExec(str.c_str(), SW_HIDE);
 							WinExec(str.c_str(), SW_HIDE);
-							//GLOBAL::WriteTextLog("offline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
+							GLOBAL::WriteTextLog(GLOBAL::SAT_DEV, "offline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
 						} 
 						} 
 						else if ( it->nStatus == SATDEV::Dropline ) {
 						else if ( it->nStatus == SATDEV::Dropline ) {
 							std::string str = "adb connect ";
 							std::string str = "adb connect ";
 							str.append(it->strName);
 							str.append(it->strName);
 							WinExec(str.c_str(), SW_HIDE);
 							WinExec(str.c_str(), SW_HIDE);
-							//GLOBAL::WriteTextLog("dropline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
+							GLOBAL::WriteTextLog(GLOBAL::SAT_DEV, "dropline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
 						}
 						}
 						// 等待adb重连完成;
 						// 等待adb重连完成;
 						Sleep(2500);
 						Sleep(2500);
@@ -184,7 +184,7 @@ DWORD CSATDevices::WorkThread(LPVOID lpVoid)
 							// offline需要reconnect才能重连;
 							// offline需要reconnect才能重连;
 							std::string str = "adb reconnect offline";
 							std::string str = "adb reconnect offline";
 							WinExec(str.c_str(), SW_HIDE);
 							WinExec(str.c_str(), SW_HIDE);
-							//GLOBAL::WriteTextLog("usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
+							GLOBAL::WriteTextLog(GLOBAL::SAT_DEV, "usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
 							// 等待adb启动;
 							// 等待adb启动;
 							Sleep(2500);
 							Sleep(2500);
 						}
 						}
@@ -197,7 +197,7 @@ DWORD CSATDevices::WorkThread(LPVOID lpVoid)
 							// 重连所有;
 							// 重连所有;
 							ReConnectAllDevices();
 							ReConnectAllDevices();
 							// 重连后,break此次循环;
 							// 重连后,break此次循环;
-							//GLOBAL::WriteTextLog("usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
+							GLOBAL::WriteTextLog(GLOBAL::SAT_DEV, "usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
 							// 等待adb启动;
 							// 等待adb启动;
 							Sleep(3500);
 							Sleep(3500);
 							// kill后,需要重新GetCurrentDevices查询;
 							// kill后,需要重新GetCurrentDevices查询;
@@ -331,13 +331,13 @@ bool CSATDevices::IsDevicesOffline(SATDEV::STDevice &stDevice, std::vector<SATDE
 		if ( !bFound )
 		if ( !bFound )
 			stDevice.nStatus = SATDEV::Dropline;
 			stDevice.nStatus = SATDEV::Dropline;
 
 
-		//GLOBAL::WriteTextLog("离线->设备类型:%d, 设备名称:%s, 状态:%d", stDevice.nType, stDevice.strName.c_str(), stDevice.nStatus);
+		GLOBAL::WriteTextLog(GLOBAL::SAT_DEV, "离线->设备类型:%d, 设备名称:%s, 状态:%d", stDevice.nType, stDevice.strName.c_str(), stDevice.nStatus);
 	} else {
 	} else {
 		// 若重新连接,重置离线时间;
 		// 若重新连接,重置离线时间;
 		if ( stDevice.ulOfflineTime ) {
 		if ( stDevice.ulOfflineTime ) {
 			stDevice.nStatus = SATDEV::Online;
 			stDevice.nStatus = SATDEV::Online;
 			stDevice.ulOfflineTime = 0;
 			stDevice.ulOfflineTime = 0;
-			GLOBAL::WriteTextLog("重连成功->设备类型:%d, 设备名称:%s, 状态:%d", stDevice.nType, stDevice.strName.c_str(), stDevice.nStatus);
+			GLOBAL::WriteTextLog(GLOBAL::SAT_DEV, "重连成功->设备类型:%d, 设备名称:%s, 状态:%d", stDevice.nType, stDevice.strName.c_str(), stDevice.nStatus);
 		}
 		}
 	}	
 	}	
 
 

+ 38 - 31
SATService/SATService/SATExecutor.cpp

@@ -88,7 +88,7 @@ void CSATExecutor::DelFinishedTask()
 			}
 			}
 			// 删除任务前,变更设备状态为空闲;
 			// 删除任务前,变更设备状态为空闲;
 			SetDeviceStatus(it->Job.strDeviceId, SATDEV::Idle);
 			SetDeviceStatus(it->Job.strDeviceId, SATDEV::Idle);
-			GLOBAL::WriteTextLog("\n<===============================================>\n"
+			GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "\n<===============================================>\n"
 				"end.删除已完成任务:%s\n<===============================================>\n", it->Job.strUniqueId.c_str());
 				"end.删除已完成任务:%s\n<===============================================>\n", it->Job.strUniqueId.c_str());
 			// 删除任务;
 			// 删除任务;
 			m_vtTask.erase(it);
 			m_vtTask.erase(it);
@@ -155,9 +155,11 @@ SATHTTP::STCase* CSATExecutor::ExecuteFreeCaseScript(SATHTTP::STTask* pTask)
 				// 记录开始时间;
 				// 记录开始时间;
 				pCase->_ulStartTickCount = GetTickCount64();
 				pCase->_ulStartTickCount = GetTickCount64();
 				pCase->_strStartTime = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
 				pCase->_strStartTime = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
+				GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "启动脚本(%s)", pCase->strCaseName.c_str());
 			}	
 			}	
 		}
 		}
 		else {
 		else {
+			GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "重新初始化脚本(%s)", pCase->strCaseName.c_str());
 			// 重新初始化脚本;
 			// 重新初始化脚本;
 			CPythonExecutor *pExcutor = (CPythonExecutor *)pCase->_pExcutor;
 			CPythonExecutor *pExcutor = (CPythonExecutor *)pCase->_pExcutor;
 			if ( pExcutor->InitScript(pCase->_strScriptPath, pCase->_strCaseLog, "") ) {
 			if ( pExcutor->InitScript(pCase->_strScriptPath, pCase->_strCaseLog, "") ) {
@@ -277,12 +279,12 @@ bool CSATExecutor::Login(std::string user, std::string password, std::string act
 	m_stLoginReq.strCPU = "";
 	m_stLoginReq.strCPU = "";
 
 
 	if ( ::Login(url, m_stLoginReq, m_stLoginResp) ) {
 	if ( ::Login(url, m_stLoginReq, m_stLoginResp) ) {
-		GLOBAL::WriteTextLog("登录成功");
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "登录成功");
 		m_bLogin = TRUE;
 		m_bLogin = TRUE;
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog("登录失败");
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "登录失败");
 
 
 	return false;
 	return false;
 }
 }
@@ -315,7 +317,7 @@ bool CSATExecutor::UpdateDevice()
 	stUpdateDeviceReq.devicelist.assign(m_vtDevice.begin(), m_vtDevice.end());
 	stUpdateDeviceReq.devicelist.assign(m_vtDevice.begin(), m_vtDevice.end());
 	if ( !::UpdateDeviceMessage(url, stUpdateDeviceReq, stUpdateDeviceResp) )
 	if ( !::UpdateDeviceMessage(url, stUpdateDeviceReq, stUpdateDeviceResp) )
 	{
 	{
-		GLOBAL::WriteTextLog("更新设备信息失败");
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "更新设备信息失败");
 		return false;
 		return false;
 	}
 	}
 	
 	
@@ -354,11 +356,11 @@ bool CSATExecutor::NotifyTaskStart(SATHTTP::STTask* pTask)
 	stNotifyJobStartReq.strSignalImageUrl = CharEncoding::ASCII2UTF8(stNotifyJobStartReq.strSignalImageUrl.c_str());
 	stNotifyJobStartReq.strSignalImageUrl = CharEncoding::ASCII2UTF8(stNotifyJobStartReq.strSignalImageUrl.c_str());
 
 
 	if ( SetResult(url, stNotifyJobStartReq, stNotifyJobStartResp) ) {
 	if ( SetResult(url, stNotifyJobStartReq, stNotifyJobStartResp) ) {
-		GLOBAL::WriteTextLog("更新任务状态成功:%s", pTask->Job.strUniqueId.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "更新任务状态成功:%s", pTask->Job.strUniqueId.c_str());
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog("更新任务状态失败:%s", pTask->Job.strUniqueId.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "更新任务状态失败:%s", pTask->Job.strUniqueId.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -393,11 +395,11 @@ bool CSATExecutor::UploadCaseImg(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase,
 
 
 	// 上传用例图片;
 	// 上传用例图片;
 	if ( SaveResultImg(url, stSaveImgReq, stSaveImgResp) ) {
 	if ( SaveResultImg(url, stSaveImgReq, stSaveImgResp) ) {
-		GLOBAL::WriteTextLog("上传图片成功:任务=%s, 用例=%s, 图片=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), img.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传图片成功:任务=%s, 用例=%s, 图片=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), img.c_str());
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog("上传图片失败:任务=%s, 用例=%s, 图片=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), img.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传图片失败:任务=%s, 用例=%s, 图片=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), img.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -423,11 +425,11 @@ bool CSATExecutor::UploadCaseLog(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase)
 	// 要上传的日志文件;
 	// 要上传的日志文件;
 	stSaveLogReq.strUploads = pCase->_strCaseLog;
 	stSaveLogReq.strUploads = pCase->_strCaseLog;
 	if ( SaveCaseOrTaskLog(url, stSaveLogReq, stSaveLogResp) ) {
 	if ( SaveCaseOrTaskLog(url, stSaveLogReq, stSaveLogResp) ) {
-		GLOBAL::WriteTextLog("上传日志成功:任务=%s, 用例=%s, 日志=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), pCase->_strCaseLog.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传日志成功:任务=%s, 用例=%s, 日志=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), pCase->_strCaseLog.c_str());
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog("上传日志失败:任务=%s, 用例=%s, 日志=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), pCase->_strCaseLog.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传日志失败:任务=%s, 用例=%s, 日志=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str(), pCase->_strCaseLog.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -513,7 +515,7 @@ bool CSATExecutor::ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase
 	stJobProcessReq.strOperationStep = "";
 	stJobProcessReq.strOperationStep = "";
 
 
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
-		GLOBAL::WriteTextLog("上传【用例测试项】结果完成【成功】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传【用例测试项】结果完成【成功】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
 
 
 		// 再上传图片;
 		// 再上传图片;
 		std::string img;
 		std::string img;
@@ -521,14 +523,14 @@ bool CSATExecutor::ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase
 			img = GLOBAL::g_stSATConfig.szCaseResultDir;
 			img = GLOBAL::g_stSATConfig.szCaseResultDir;
 			img.append(it->substr(3));
 			img.append(it->substr(3));
 			img = GLOBAL::Replace(img, "/", "\\");
 			img = GLOBAL::Replace(img, "/", "\\");
-			GLOBAL::WriteTextLog("图片路径=%s", img.c_str());
+			GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "图片路径=%s", img.c_str());
 			UploadCaseImg(pTask, pCase, img);
 			UploadCaseImg(pTask, pCase, img);
 		}
 		}
 
 
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog("上传【用例测试项】结果完成【失败】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传【用例测试项】结果完成【失败】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -619,11 +621,11 @@ bool CSATExecutor::ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCa
 	stJobProcessReq.strOperationStep = "";
 	stJobProcessReq.strOperationStep = "";
 
 
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
-		GLOBAL::WriteTextLog("上传用例结果完成【成功】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传用例结果完成【成功】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog("上传用例结果完成【失败】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "上传用例结果完成【失败】:任务=%s, 用例=%s", pTask->Job.strUniqueId.c_str(), pCase->strCaseName.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -653,7 +655,7 @@ bool CSATExecutor::ReportCaseResult(SATHTTP::STTask* pTask, SATHTTP::STCase *pCa
 			pCase->_nExecutionResult = SATHTTP::ABNORMAL;
 			pCase->_nExecutionResult = SATHTTP::ABNORMAL;
 		// 同时标记任务失败;
 		// 同时标记任务失败;
 		pTask->_nExecutionResult = SATHTTP::FAIL;
 		pTask->_nExecutionResult = SATHTTP::FAIL;
-		GLOBAL::WriteTextLog(_T("测试项空,用例名:%s"), pCase->strCaseName.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("测试项空,用例名:%s"), pCase->strCaseName.c_str());
 	}
 	}
 	
 	
 	int nIndex = 1;
 	int nIndex = 1;
@@ -684,7 +686,7 @@ bool CSATExecutor::ReportCaseResult(SATHTTP::STTask* pTask, SATHTTP::STCase *pCa
 		delete pCase->_pExcutor;
 		delete pCase->_pExcutor;
 	pCase->_pExcutor = NULL;
 	pCase->_pExcutor = NULL;
 
 
-	GLOBAL::WriteTextLog(_T("用例已完成,执行器对象删除成功,脚本用例名为=%s"), pCase->strCaseName.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("用例已完成,执行器对象删除成功,脚本用例名为=%s"), pCase->strCaseName.c_str());
 
 
 	return true;
 	return true;
 }
 }
@@ -710,11 +712,11 @@ bool CSATExecutor::UploadTaskLog(SATHTTP::STTask* pTask)
 	// 要上传的日志文件;
 	// 要上传的日志文件;
 	stSaveLogReq.strUploads = "D:\\sat\\log.txt";//pTask->_strTaskLog;
 	stSaveLogReq.strUploads = "D:\\sat\\log.txt";//pTask->_strTaskLog;
 	if ( SaveCaseOrTaskLog(url, stSaveLogReq, stSaveLogResp) ) {
 	if ( SaveCaseOrTaskLog(url, stSaveLogReq, stSaveLogResp) ) {
-		GLOBAL::WriteTextLog(_T("任务已完成,上传任务日志【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("任务已完成,上传任务日志【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog(_T("任务已完成,上传任务日志【失败】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("任务已完成,上传任务日志【失败】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -784,11 +786,11 @@ bool CSATExecutor::ReportTaskStart(SATHTTP::STTask* pTask)
 	stJobProcessReq.strOperationStep = "";
 	stJobProcessReq.strOperationStep = "";
 
 
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
-		GLOBAL::WriteTextLog(_T("上报任务开始【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("上报任务开始【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog(_T("上报任务开始【失败】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("上报任务开始【失败】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -865,11 +867,11 @@ bool CSATExecutor::ReportTaskFinish(SATHTTP::STTask* pTask)
 	stJobProcessReq.strOperationStep = "";
 	stJobProcessReq.strOperationStep = "";
 
 
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
 	if ( SetResultList(url, stJobProcessReq, stJobProcessResp) ) {
-		GLOBAL::WriteTextLog(_T("上报任务结束【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("上报任务结束【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
 		return true;
 		return true;
 	}
 	}
 
 
-	GLOBAL::WriteTextLog(_T("上报任务结束【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("上报任务结束【成功】,任务编号为=%s"), pTask->Job.strUniqueId.c_str());
 
 
 	return false;
 	return false;
 }
 }
@@ -879,7 +881,7 @@ bool CSATExecutor::GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem>
 	// 解析xml;
 	// 解析xml;
 	tinyxml2::XMLDocument doc;
 	tinyxml2::XMLDocument doc;
 	if (tinyxml2::XML_SUCCESS != doc.LoadFile(xmlpath.c_str()) ) {
 	if (tinyxml2::XML_SUCCESS != doc.LoadFile(xmlpath.c_str()) ) {
-		GLOBAL::WriteTextLog("没有测试项对应的xml文件:%s", xmlpath.c_str());
+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "没有测试项对应的xml文件:%s", xmlpath.c_str());
 		return false;
 		return false;
 	}
 	}
 
 
@@ -890,7 +892,7 @@ bool CSATExecutor::GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem>
 	if (_tcsicmp(pXmlRoot->Value(), "results") != 0)
 	if (_tcsicmp(pXmlRoot->Value(), "results") != 0)
 		return false;
 		return false;
 	
 	
-	GLOBAL::WriteTextLog("开始获取测试项内容:%s", xmlpath.c_str());
+	GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "开始获取测试项内容:%s", xmlpath.c_str());
 	tinyxml2::XMLElement *pXmlElent = pXmlRoot->FirstChildElement();
 	tinyxml2::XMLElement *pXmlElent = pXmlRoot->FirstChildElement();
 	while (pXmlElent) {
 	while (pXmlElent) {
 		if (_tcsicmp(pXmlElent->Value(), _T("item")) == 0) {
 		if (_tcsicmp(pXmlElent->Value(), _T("item")) == 0) {
@@ -1097,7 +1099,7 @@ DWORD CSATExecutor::HearbeatThread(LPVOID lpVoid)
 					// 将任务压入队列中;
 					// 将任务压入队列中;
 					AutoThreadSection ats(&that->m_csTask);
 					AutoThreadSection ats(&that->m_csTask);
 					// 同时下载任务;
 					// 同时下载任务;
-					GLOBAL::WriteTextLog(_T("【任务脚本下载】:%s"), it->Job.strUniqueId.c_str());
+					GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("【任务脚本下载】:%s"), it->Job.strUniqueId.c_str());
 					std::string host = GLOBAL::g_stSATConfig.szCaseServer;
 					std::string host = GLOBAL::g_stSATConfig.szCaseServer;
 					std::string url = host + "/ajaxInteractiveManage!getCaseFileListUrl.action";
 					std::string url = host + "/ajaxInteractiveManage!getCaseFileListUrl.action";
 					std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin();
 					std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin();
@@ -1119,7 +1121,7 @@ DWORD CSATExecutor::HearbeatThread(LPVOID lpVoid)
 							// 脚本下载失败时,需要标记脚本为已运行且异常;
 							// 脚本下载失败时,需要标记脚本为已运行且异常;
 							_case->_nExecutionState = SATHTTP::EXECUTED;
 							_case->_nExecutionState = SATHTTP::EXECUTED;
 							_case->_nExecutionResult = SATHTTP::ABNORMAL;
 							_case->_nExecutionResult = SATHTTP::ABNORMAL;
-							GLOBAL::WriteTextLog(_T("【下载脚本失败】:%s"), _case->strCaseName.c_str());
+							GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("【下载脚本失败】:%s"), _case->strCaseName.c_str());
 						}
 						}
 					}
 					}
 
 
@@ -1166,7 +1168,7 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid)
 							if ( pCase->_nExecutionResult == SATHTTP::ABNORMAL ) {
 							if ( pCase->_nExecutionResult == SATHTTP::ABNORMAL ) {
 								// 设置任务执行结果失败;
 								// 设置任务执行结果失败;
 								pTask->_nExecutionResult = SATHTTP::FAIL;
 								pTask->_nExecutionResult = SATHTTP::FAIL;
-								GLOBAL::WriteTextLog("用例脚本异常退出(%s)", pCase->strCaseName.c_str());
+								GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "用例脚本异常退出(%s)", pCase->strCaseName.c_str());
 							}
 							}
 							// 上报服务器,完成脚本用例,并上传用例结果;
 							// 上报服务器,完成脚本用例,并上传用例结果;
 							that->ReportCaseResult(pTask, pCase);
 							that->ReportCaseResult(pTask, pCase);
@@ -1183,7 +1185,7 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid)
 								pCase->_nExecutionResult = SATHTTP::OVERTIME;
 								pCase->_nExecutionResult = SATHTTP::OVERTIME;
 								// 上报用例结果;
 								// 上报用例结果;
 								that->ReportCaseResult(pTask, pCase);
 								that->ReportCaseResult(pTask, pCase);
-								GLOBAL::WriteTextLog(_T("脚本超时:%s"), pCase->strCaseName.c_str());
+								GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("脚本超时:%s"), pCase->strCaseName.c_str());
 							}
 							}
 						}
 						}
 					}
 					}
@@ -1198,6 +1200,7 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid)
 						that->ReportTaskFinish(pTask);
 						that->ReportTaskFinish(pTask);
 						// 上报任务结果;
 						// 上报任务结果;
 						that->UploadTaskLog(pTask);
 						that->UploadTaskLog(pTask);
+						GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("没有可执行的用例脚本,任务【%s】"), pTask->Job.strUniqueId.c_str());
 					}
 					}
 				}
 				}
 			}
 			}
@@ -1227,7 +1230,7 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid)
 					pTask->_nExecutionState = SATHTTP::INEXECUTED;
 					pTask->_nExecutionState = SATHTTP::INEXECUTED;
 				}
 				}
 				else {
 				else {
-					GLOBAL::WriteTextLog(_T("\n<===============================================>\n# 1、开始执行任务:%s, 用例数量:%ld#\n<===============================================>\n"), 
+					GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("\n<===============================================>\n# 1、开始执行任务:%s, 用例数量:%ld#\n<===============================================>\n"), 
 						pTask->Job.strUniqueId.c_str(), 
 						pTask->Job.strUniqueId.c_str(), 
 						pTask->Job.vtCases.size());
 						pTask->Job.vtCases.size());
 					// 是否有用例脚本在执行;
 					// 是否有用例脚本在执行;
@@ -1247,6 +1250,10 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid)
 				// 将设备变更成繁忙状态;
 				// 将设备变更成繁忙状态;
 				that->SetDeviceStatus(pTask->Job.strDeviceId, SATDEV::InUse);
 				that->SetDeviceStatus(pTask->Job.strDeviceId, SATDEV::InUse);
 			}	
 			}	
+			else
+			{
+				GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("没有可执行的任务"));
+			}
 		}
 		}
 	} while ( WaitForSingleObject(that->m_hEventExcuteScript, 10000) == WAIT_TIMEOUT );
 	} while ( WaitForSingleObject(that->m_hEventExcuteScript, 10000) == WAIT_TIMEOUT );
 
 
@@ -1351,7 +1358,7 @@ DWORD CSATExecutor::WathTVPortThread(PVOID lpVoid)
 						if ( Connect("127.0.0.1", 40000) )
 						if ( Connect("127.0.0.1", 40000) )
 							sendSignal("POWER", 1, 1000);
 							sendSignal("POWER", 1, 1000);
 
 
-						GLOBAL::WriteTextLog("出现异常关机重启现象");
+						GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "出现异常关机重启现象");
 					}
 					}
 
 
 					// 压入容器中;
 					// 压入容器中;

+ 3 - 3
SATService/SATService/SATService.cpp

@@ -35,12 +35,12 @@ void CALLBACK WorkStart()
 // 工作结束回调函数;
 // 工作结束回调函数;
 void CALLBACK WorkEndof()
 void CALLBACK WorkEndof()
 {
 {
-	GLOBAL::WriteTextLog("SATService goto end");
+	GLOBAL::WriteTextLog(GLOBAL::SAT_NOR, "SATService goto end");
 	CSATTCPServer::GetInstance()->Stop();
 	CSATTCPServer::GetInstance()->Stop();
 	CSATTCPServer::GetInstance()->UnloadSocketLib();
 	CSATTCPServer::GetInstance()->UnloadSocketLib();
 	CSATDevices::GetInstance()->EndofWork();
 	CSATDevices::GetInstance()->EndofWork();
 	CSATExecutor::GetInstance()->EndofWork();
 	CSATExecutor::GetInstance()->EndofWork();
-	GLOBAL::WriteTextLog("SATService work end!");
+	GLOBAL::WriteTextLog(GLOBAL::SAT_NOR, "SATService work end!");
 }
 }
 
 
 
 
@@ -67,7 +67,7 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		//GLOBAL::Python27Dir();		// 放到GetIniInfo中执行;
 		//GLOBAL::Python27Dir();		// 放到GetIniInfo中执行;
 		GLOBAL::GetMacAddress();
 		GLOBAL::GetMacAddress();
 		GLOBAL::GetLocalAddress();
 		GLOBAL::GetLocalAddress();
-		GLOBAL::WriteTextLog("SATService goto start, tcp port = %ld", GLOBAL::g_stSATConfig.dwTCPSvrPort);
+		GLOBAL::WriteTextLog(GLOBAL::SAT_TCP, "SATService goto start, tcp port = %ld", GLOBAL::g_stSATConfig.dwTCPSvrPort);
 #if defined RTEST || defined _DEBUG
 #if defined RTEST || defined _DEBUG
 		printf("服务端TCP端口号=%ld\n", GLOBAL::g_stSATConfig.dwTCPSvrPort);
 		printf("服务端TCP端口号=%ld\n", GLOBAL::g_stSATConfig.dwTCPSvrPort);
 		WorkStart();
 		WorkStart();

+ 3 - 3
SATService/SATService/SATTCPServer.cpp

@@ -715,7 +715,7 @@ void CSATTCPServer::_ShowMessage(const CString szFormat,...) const
 	strMessage.FormatV(szFormat,arglist);
 	strMessage.FormatV(szFormat,arglist);
 	va_end(arglist);
 	va_end(arglist);
 
 
-	GLOBAL::WriteTextLog(strMessage);
+	GLOBAL::WriteTextLog(GLOBAL::SAT_TCP, strMessage);
 }
 }
 
 
 #define PAK_LEN sizeof(SATPROTO::DataHeader)
 #define PAK_LEN sizeof(SATPROTO::DataHeader)
@@ -888,7 +888,7 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATPROTO::Package*
 				{
 				{
 					// 登录;
 					// 登录;
 					SATPROTO::UserInfo *pLogin = (SATPROTO::UserInfo*)pak->buf;
 					SATPROTO::UserInfo *pLogin = (SATPROTO::UserInfo*)pak->buf;
-					GLOBAL::WriteTextLog(_T("User=%s, psw=%s, Actuator=%s"), pLogin->szUserName, pLogin->szPassword, pLogin->szActuatorName);
+					GLOBAL::WriteTextLog(GLOBAL::SAT_TCP, _T("User=%s, psw=%s, Actuator=%s"), pLogin->szUserName, pLogin->szPassword, pLogin->szActuatorName);
 					bool bRet = CSATExecutor::GetInstance()->Login(pLogin->szUserName, pLogin->szPassword, pLogin->szActuatorName, !pHeader->cmd);
 					bool bRet = CSATExecutor::GetInstance()->Login(pLogin->szUserName, pLogin->szPassword, pLogin->szActuatorName, !pHeader->cmd);
 
 
 					// 计算数据包长度;
 					// 计算数据包长度;
@@ -1000,7 +1000,7 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATPROTO::Package*
 						GLOBAL::g_PyNotify.report_type = "reboot";
 						GLOBAL::g_PyNotify.report_type = "reboot";
 					}
 					}
 
 
-					GLOBAL::WriteTextLog("收到异常关机或重启:%s", GLOBAL::g_PyNotify.report_type.c_str());
+					GLOBAL::WriteTextLog(GLOBAL::SAT_TCP, "收到异常关机或重启:%s", GLOBAL::g_PyNotify.report_type.c_str());
 #if 0	// 不作任何返回;
 #if 0	// 不作任何返回;
 					// 封装返回数据;
 					// 封装返回数据;
 					long len = sizeof(SATPROTO::DataHeader);
 					long len = sizeof(SATPROTO::DataHeader);