diff options
author | sauros <sauros@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2003-01-24 15:15:43 +0000 |
---|---|---|
committer | sauros <sauros@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2003-01-24 15:15:43 +0000 |
commit | aa8cb9dde7a3e4c5e9b74c6cc38aecd63d913de1 (patch) | |
tree | 26f232eceda7fefab44871cd2081741f2c3e0a94 /src/zabbix_agent_win32 | |
parent | 4c3c487681ffd4c369b2bd781aa0b16f9a87dd10 (diff) | |
download | zabbix-aa8cb9dde7a3e4c5e9b74c6cc38aecd63d913de1.tar.gz zabbix-aa8cb9dde7a3e4c5e9b74c6cc38aecd63d913de1.tar.xz zabbix-aa8cb9dde7a3e4c5e9b74c6cc38aecd63d913de1.zip |
- Added some parameters for agent statistics monitoring: number of accepted and rejected connections, processing errors, etc. (Victor)
- Fixed bug in calculating md5_hash[] and cksum[] parameters for zero-length files (Victor)
- md5_hash[] and cksum[] now returns ZBX_UNSUPPORTED for files larger than 64MB (due to high performance impact caused by checksum computing for large files). (Victor)
git-svn-id: svn://svn.zabbix.com/trunk@665 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/zabbix_agent_win32')
-rwxr-xr-x | src/zabbix_agent_win32/Debug/ZabbixW32.exe | bin | 315468 -> 315468 bytes | |||
-rw-r--r-- | src/zabbix_agent_win32/README | 31 | ||||
-rwxr-xr-x | src/zabbix_agent_win32/Release/ZabbixW32.exe | bin | 102400 -> 102400 bytes | |||
-rw-r--r-- | src/zabbix_agent_win32/collect.cpp | 3 | ||||
-rw-r--r-- | src/zabbix_agent_win32/comm.cpp | 20 | ||||
-rw-r--r-- | src/zabbix_agent_win32/log.cpp | 24 | ||||
-rw-r--r-- | src/zabbix_agent_win32/main.cpp | 6 | ||||
-rw-r--r-- | src/zabbix_agent_win32/messages.mc | 2 | ||||
-rw-r--r-- | src/zabbix_agent_win32/sysinfo.cpp | 122 | ||||
-rw-r--r-- | src/zabbix_agent_win32/zabbixw32.h | 7 |
10 files changed, 163 insertions, 52 deletions
diff --git a/src/zabbix_agent_win32/Debug/ZabbixW32.exe b/src/zabbix_agent_win32/Debug/ZabbixW32.exe Binary files differindex fd31109b..48d27102 100755 --- a/src/zabbix_agent_win32/Debug/ZabbixW32.exe +++ b/src/zabbix_agent_win32/Debug/ZabbixW32.exe diff --git a/src/zabbix_agent_win32/README b/src/zabbix_agent_win32/README index b9b9f6ab..1d27c8bc 100644 --- a/src/zabbix_agent_win32/README +++ b/src/zabbix_agent_win32/README @@ -133,7 +133,9 @@ Parameters supported by Zabbix Win32 Agent I. Zabbix standard parameters -cksum[<path>] <path> can be normal Windows path, like C:\, or UNC +cksum[<path>] <path> can be normal Windows path, like C:\, or UNC. + Agent will return UNSUPPORTED if file is larger than + 64MB. diskfree[<path>] <path> can be normal Windows path, like C:\, or UNC disktotal[<path>] <path> can be normal Windows path, like C:\, or UNC filesize[<path>] <path> can be normal Windows path, like C:\, or UNC @@ -163,6 +165,30 @@ last minute (in milliseconds) agent[max_collector_time] Maximum time spent by collector thread on sample processing (in milliseconds) +agent[accepted_requests] +Total number of requests accepted by agent for processing. + +agent[rejected_requests] +Total number of requests rejected by agent because they was coming from +unallowed source. + +agent[timed_out_requests] +Total number of requests timed out in processing. + +agent[accept_errors] +Total number of accept() syscall errors. + +agent[processed_requests] +Total number of requests successfully processed by agent. + +agent[failed_requests] +Total number of requests with errors in processing (requests generated +ZBX_ERROR return code). + +agent[unsupported_requests] +Total number of requests for unsupported parameters (requests generated +ZBX_UNSUPPORTED return code). + cpu_util Average CPU(s) utilization (in percents) for last minute @@ -185,7 +211,8 @@ Average specific CPU utilization (in percents) for last 15 minutes, where <instance> is zero-based CPU number md5_hash[<file name>] -MD5 hash of specified file (returned as string) +MD5 hash of specified file (returned as string). Agent will return UNSUPPORTED +if file is larger than 64MB. perf_counter[<path>] Value of any performance counter, where <path> is the counter path (you can use diff --git a/src/zabbix_agent_win32/Release/ZabbixW32.exe b/src/zabbix_agent_win32/Release/ZabbixW32.exe Binary files differindex 3c6a31e9..e48c17c6 100755 --- a/src/zabbix_agent_win32/Release/ZabbixW32.exe +++ b/src/zabbix_agent_win32/Release/ZabbixW32.exe diff --git a/src/zabbix_agent_win32/collect.cpp b/src/zabbix_agent_win32/collect.cpp index f4c619fe..688bcccb 100644 --- a/src/zabbix_agent_win32/collect.cpp +++ b/src/zabbix_agent_win32/collect.cpp @@ -78,7 +78,7 @@ void CollectorThread(void *) if (PdhOpenQuery(NULL,0,&query)!=ERROR_SUCCESS) { - WriteLog(MSG_PDH_OPEN_QUERY_FAILED,EVENTLOG_ERROR_TYPE,"s",GetSystemErrorText(GetLastError())); + WriteLog(MSG_PDH_OPEN_QUERY_FAILED,EVENTLOG_ERROR_TYPE,"e",GetLastError()); return; } @@ -141,6 +141,7 @@ void CollectorThread(void *) // Data collection loop WriteLog(MSG_COLLECTOR_INIT_OK,EVENTLOG_INFORMATION_TYPE,NULL); + SetEvent(eventCollectorStarted); do { LONG sum; diff --git a/src/zabbix_agent_win32/comm.cpp b/src/zabbix_agent_win32/comm.cpp index f79db473..cc1573ea 100644 --- a/src/zabbix_agent_win32/comm.cpp +++ b/src/zabbix_agent_win32/comm.cpp @@ -35,6 +35,16 @@ struct REQUEST // +// Global data +// + +double statAcceptedRequests=0; +double statRejectedRequests=0; +double statTimedOutRequests=0; +double statAcceptErrors=0; + + +// // Validates server's address // @@ -103,6 +113,7 @@ static void CommThread(void *param) { strcpy(rq.result,"ZBX_ERROR\n"); WriteLog(MSG_REQUEST_TIMEOUT,EVENTLOG_WARNING_TYPE,"s",rq.cmd); + statTimedOutRequests++; } send(sock,rq.result,strlen(rq.result),0); @@ -135,7 +146,7 @@ void ListenerThread(void *) // Create socket if ((sock=socket(AF_INET,SOCK_STREAM,0))==-1) { - WriteLog(MSG_SOCKET_ERROR,EVENTLOG_ERROR_TYPE,"s",GetSystemErrorText(WSAGetLastError())); + WriteLog(MSG_SOCKET_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError()); exit(1); } @@ -148,7 +159,7 @@ void ListenerThread(void *) // Bind socket if (bind(sock,(struct sockaddr *)&servAddr,sizeof(struct sockaddr_in))!=0) { - WriteLog(MSG_BIND_ERROR,EVENTLOG_ERROR_TYPE,"s",GetSystemErrorText(WSAGetLastError())); + WriteLog(MSG_BIND_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError()); exit(1); } @@ -164,8 +175,9 @@ void ListenerThread(void *) int error=WSAGetLastError(); if (error!=WSAEINTR) - WriteLog(MSG_ACCEPT_ERROR,EVENTLOG_ERROR_TYPE,"s",GetSystemErrorText(error)); + WriteLog(MSG_ACCEPT_ERROR,EVENTLOG_ERROR_TYPE,"e",error); errorCount++; + statAcceptErrors++; if (errorCount>1000) { WriteLog(MSG_TOO_MANY_ERRORS,EVENTLOG_WARNING_TYPE,NULL); @@ -178,10 +190,12 @@ void ListenerThread(void *) if (IsValidServerAddr(servAddr.sin_addr.S_un.S_addr)) { + statAcceptedRequests++; _beginthread(CommThread,0,(void *)sockClient); } else // Unauthorized connection { + statRejectedRequests++; shutdown(sockClient,2); closesocket(sockClient); } diff --git a/src/zabbix_agent_win32/log.cpp b/src/zabbix_agent_win32/log.cpp index 8609befd..d431d0ae 100644 --- a/src/zabbix_agent_win32/log.cpp +++ b/src/zabbix_agent_win32/log.cpp @@ -133,13 +133,15 @@ static void WriteLogToFile(char *message) // s - String // d - Decimal integer // x - Hex integer +// e - System error code (will appear in log as textual description) // void WriteLog(DWORD msg,WORD wType,char *format...) { va_list args; - char *strings[16]; + char *strings[16],*msgBuf; int numStrings=0; + DWORD error; memset(strings,0,sizeof(char *)*16); @@ -162,6 +164,26 @@ void WriteLog(DWORD msg,WORD wType,char *format...) strings[numStrings]=(char *)malloc(16); sprintf(strings[numStrings],"0x%08X",va_arg(args,DWORD)); break; + case 'e': + error=va_arg(args,DWORD); + if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL,error, + MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), // Default language + (LPSTR)&msgBuf,0,NULL)>0) + { + msgBuf[strcspn(msgBuf,"\r\n")]=0; + strings[numStrings]=(char *)malloc(strlen(msgBuf)+1); + strcpy(strings[numStrings],msgBuf); + LocalFree(msgBuf); + } + else + { + strings[numStrings]=(char *)malloc(64); + sprintf(strings[numStrings],"MSG 0x%08X - Unable to find message text",error); + } + break; default: strings[numStrings]=(char *)malloc(32); sprintf(strings[numStrings],"BAD FORMAT (0x%08X)",va_arg(args,DWORD)); diff --git a/src/zabbix_agent_win32/main.cpp b/src/zabbix_agent_win32/main.cpp index b9e3a193..8fe0ef08 100644 --- a/src/zabbix_agent_win32/main.cpp +++ b/src/zabbix_agent_win32/main.cpp @@ -30,6 +30,7 @@ DWORD dwTlsLogPrefix; HANDLE eventShutdown; +HANDLE eventCollectorStarted; BOOL optStandalone=FALSE; BOOL optUseEventLog=TRUE; @@ -123,15 +124,18 @@ BOOL Initialize(void) ImportSymbols(); eventShutdown=CreateEvent(NULL,TRUE,FALSE,NULL); + eventCollectorStarted=CreateEvent(NULL,TRUE,FALSE,NULL); // Internal command aliases AddAlias("system[uptime]","perf_counter[\\System\\System Up Time]"); // Start TCP/IP listener and collector threads _beginthread(CollectorThread,0,NULL); - Sleep(1500); // Allow collector thread to initialize + WaitForSingleObject(eventCollectorStarted,INFINITE); // Allow collector thread to initialize _beginthread(ListenerThread,0,NULL); + CloseHandle(eventCollectorStarted); + return TRUE; } diff --git a/src/zabbix_agent_win32/messages.mc b/src/zabbix_agent_win32/messages.mc index 9cc61c3f..6e9dce13 100644 --- a/src/zabbix_agent_win32/messages.mc +++ b/src/zabbix_agent_win32/messages.mc @@ -131,7 +131,7 @@ Unable to create mapping for file "%1": %2 MessageId= SymbolicName=MSG_MAP_VIEW_FAILED Language=English -MapViewOfFile(%1) failed: %2 +MapViewOfFile("%1") failed: %2 . MessageId= diff --git a/src/zabbix_agent_win32/sysinfo.cpp b/src/zabbix_agent_win32/sysinfo.cpp index c61ab26b..496c96d7 100644 --- a/src/zabbix_agent_win32/sysinfo.cpp +++ b/src/zabbix_agent_win32/sysinfo.cpp @@ -37,6 +37,10 @@ LONG H_ProcInfo(char *cmd,char *arg,double *value); static DWORD procList[MAX_PROCESSES]; static HMODULE modList[MAX_MODULES]; +static double statProcessedRequests=0; +static double statFailedRequests=0; +static double statUnsupportedRequests=0; + // // Get instance for parameters like name[instance] @@ -396,6 +400,7 @@ static LONG H_MD5Hash(char *cmd,char *arg,char **value) char fileName[MAX_PATH],hashText[MD5_DIGEST_SIZE*2+1]; unsigned char *data,hash[MD5_DIGEST_SIZE]; HANDLE hFile,hFileMapping; + DWORD dwSize,dwSizeHigh; int i; // Get file name from parameter name and open it @@ -404,32 +409,43 @@ static LONG H_MD5Hash(char *cmd,char *arg,char **value) if (hFile==INVALID_HANDLE_VALUE) return SYSINFO_RC_NOTSUPPORTED; - // Create file mapping object - hFileMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); - if (hFileMapping==NULL) - { - WriteLog(MSG_FILE_MAP_FAILED,EVENTLOG_ERROR_TYPE,"ss", - fileName,GetSystemErrorText(GetLastError())); - CloseHandle(hFile); - return SYSINFO_RC_ERROR; - } + // Get file size + dwSize=GetFileSize(hFile,&dwSizeHigh); + if (dwSizeHigh>0 || dwSize>0x4000000) + return SYSINFO_RC_NOTSUPPORTED; // We will not work with files larger than 64MB - // Map entire file to process's address space - data=(unsigned char *)MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0); - if (data==NULL) + if (dwSize>0) // We will not create mapping for zero-length files { - WriteLog(MSG_MAP_VIEW_FAILED,EVENTLOG_ERROR_TYPE,"ss", - fileName,GetSystemErrorText(GetLastError())); - CloseHandle(hFileMapping); - CloseHandle(hFile); - return SYSINFO_RC_ERROR; + // Create file mapping object + hFileMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); + if (hFileMapping==NULL) + { + WriteLog(MSG_FILE_MAP_FAILED,EVENTLOG_ERROR_TYPE,"se", + fileName,GetLastError()); + CloseHandle(hFile); + return SYSINFO_RC_ERROR; + } + + // Map entire file to process's address space + data=(unsigned char *)MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0); + if (data==NULL) + { + WriteLog(MSG_MAP_VIEW_FAILED,EVENTLOG_ERROR_TYPE,"se", + fileName,GetLastError()); + CloseHandle(hFileMapping); + CloseHandle(hFile); + return SYSINFO_RC_ERROR; + } } - CalculateMD5Hash(data,GetFileSize(hFile,NULL),hash); + CalculateMD5Hash(data,dwSize,hash); // Unmap and close file - UnmapViewOfFile(data); - CloseHandle(hFileMapping); + if (dwSize>0) + { + UnmapViewOfFile(data); + CloseHandle(hFileMapping); + } CloseHandle(hFile); // Convert MD5 hash to text form @@ -448,9 +464,9 @@ static LONG H_MD5Hash(char *cmd,char *arg,char **value) static LONG H_CRC32(char *cmd,char *arg,double *value) { char fileName[MAX_PATH]; - unsigned char *data; HANDLE hFile,hFileMapping; - DWORD crc; + DWORD dwSize,dwSizeHigh,crc; + unsigned char *data; // Get file name from parameter name and open it GetParameterInstance(cmd,fileName,MAX_PATH-1); @@ -458,32 +474,43 @@ static LONG H_CRC32(char *cmd,char *arg,double *value) if (hFile==INVALID_HANDLE_VALUE) return SYSINFO_RC_NOTSUPPORTED; - // Create file mapping object - hFileMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); - if (hFileMapping==NULL) - { - WriteLog(MSG_FILE_MAP_FAILED,EVENTLOG_ERROR_TYPE,"ss", - fileName,GetSystemErrorText(GetLastError())); - CloseHandle(hFile); - return SYSINFO_RC_ERROR; - } + // Get file size + dwSize=GetFileSize(hFile,&dwSizeHigh); + if (dwSizeHigh>0 || dwSize>0x4000000) + return SYSINFO_RC_NOTSUPPORTED; // We will not work with files larger than 64MB - // Map entire file to process's address space - data=(unsigned char *)MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0); - if (data==NULL) + if (dwSize>0) // We will not create mapping for zero-length files { - WriteLog(MSG_MAP_VIEW_FAILED,EVENTLOG_ERROR_TYPE,"ss", - fileName,GetSystemErrorText(GetLastError())); - CloseHandle(hFileMapping); - CloseHandle(hFile); - return SYSINFO_RC_ERROR; + // Create file mapping object + hFileMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); + if (hFileMapping==NULL) + { + WriteLog(MSG_FILE_MAP_FAILED,EVENTLOG_ERROR_TYPE,"ss", + fileName,GetSystemErrorText(GetLastError())); + CloseHandle(hFile); + return SYSINFO_RC_ERROR; + } + + // Map entire file to process's address space + data=(unsigned char *)MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0); + if (data==NULL) + { + WriteLog(MSG_MAP_VIEW_FAILED,EVENTLOG_ERROR_TYPE,"ss", + fileName,GetSystemErrorText(GetLastError())); + CloseHandle(hFileMapping); + CloseHandle(hFile); + return SYSINFO_RC_ERROR; + } } - crc=CalculateCRC32(data,GetFileSize(hFile,NULL)); + crc=CalculateCRC32(data,dwSize); // Unmap and close file - UnmapViewOfFile(data); - CloseHandle(hFileMapping); + if (dwSize>0) + { + UnmapViewOfFile(data); + CloseHandle(hFileMapping); + } CloseHandle(hFile); *value=(double)crc; @@ -599,6 +626,13 @@ static AGENT_COMMAND commands[]= { "__usercnt{*}",H_UserCounter,NULL,NULL }, { "agent[avg_collector_time]",H_NumericPtr,NULL,(char *)&statAvgCollectorTime }, { "agent[max_collector_time]",H_NumericPtr,NULL,(char *)&statMaxCollectorTime }, + { "agent[accepted_requests]",H_NumericPtr,NULL,(char *)&statAcceptedRequests }, + { "agent[rejected_requests]",H_NumericPtr,NULL,(char *)&statRejectedRequests }, + { "agent[timed_out_requests]",H_NumericPtr,NULL,(char *)&statTimedOutRequests }, + { "agent[accept_errors]",H_NumericPtr,NULL,(char *)&statAcceptErrors }, + { "agent[processed_requests]",H_NumericPtr,NULL,(char *)&statProcessedRequests }, + { "agent[failed_requests]",H_NumericPtr,NULL,(char *)&statFailedRequests }, + { "agent[unsupported_requests]",H_NumericPtr,NULL,(char *)&statUnsupportedRequests }, { "cksum[*]",H_CRC32,NULL,NULL }, { "cpu_util",H_ProcUtil,NULL,(char *)0x00 }, { "cpu_util5",H_ProcUtil,NULL,(char *)0x01 }, @@ -675,16 +709,20 @@ void ProcessCommand(char *received_cmd,char *result) strcat(result,"\n"); free(strResult); } + statProcessedRequests++; break; case SYSINFO_RC_NOTSUPPORTED: strcpy(result,"ZBX_NOTSUPPORTED\n"); + statUnsupportedRequests++; break; case SYSINFO_RC_ERROR: strcpy(result,"ZBX_ERROR\n"); + statFailedRequests++; break; default: strcpy(result,"ZBX_ERROR\n"); // MSG_UNEXPECETD_IRC WriteLog(MSG_UNEXPECTED_IRC,EVENTLOG_ERROR_TYPE,"ds",iRC,received_cmd); + statFailedRequests++; break; } } diff --git a/src/zabbix_agent_win32/zabbixw32.h b/src/zabbix_agent_win32/zabbixw32.h index c7760e54..9eaf7f3b 100644 --- a/src/zabbix_agent_win32/zabbixw32.h +++ b/src/zabbix_agent_win32/zabbixw32.h @@ -42,7 +42,7 @@ #else #define DEBUG_SUFFIX #endif -#define AGENT_VERSION "1.0.0-beta8(rc5)" DEBUG_SUFFIX +#define AGENT_VERSION "1.0.0-beta8(rc6)" DEBUG_SUFFIX #define ZABBIX_SERVICE_NAME "ZabbixAgentdW32" #define ZABBIX_EVENT_SOURCE "Zabbix Win32 Agent" @@ -154,6 +154,7 @@ void ExpandAlias(char *orig,char *expanded); extern DWORD dwTlsLogPrefix; extern HANDLE eventShutdown; +extern HANDLE eventCollectorStarted; extern BOOL optStandalone; extern BOOL optUseEventLog; @@ -176,6 +177,10 @@ extern double statProcLoad5; extern double statProcLoad15; extern double statAvgCollectorTime; extern double statMaxCollectorTime; +extern double statAcceptedRequests; +extern double statRejectedRequests; +extern double statTimedOutRequests; +extern double statAcceptErrors; extern DWORD (__stdcall *imp_GetGuiResources)(HANDLE,DWORD); extern BOOL (__stdcall *imp_GetProcessIoCounters)(HANDLE,PIO_COUNTERS); |