summaryrefslogtreecommitdiffstats
path: root/src/zabbix_agent_win32
diff options
context:
space:
mode:
authorsauros <sauros@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2003-01-24 15:15:43 +0000
committersauros <sauros@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2003-01-24 15:15:43 +0000
commitaa8cb9dde7a3e4c5e9b74c6cc38aecd63d913de1 (patch)
tree26f232eceda7fefab44871cd2081741f2c3e0a94 /src/zabbix_agent_win32
parent4c3c487681ffd4c369b2bd781aa0b16f9a87dd10 (diff)
downloadzabbix-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-xsrc/zabbix_agent_win32/Debug/ZabbixW32.exebin315468 -> 315468 bytes
-rw-r--r--src/zabbix_agent_win32/README31
-rwxr-xr-xsrc/zabbix_agent_win32/Release/ZabbixW32.exebin102400 -> 102400 bytes
-rw-r--r--src/zabbix_agent_win32/collect.cpp3
-rw-r--r--src/zabbix_agent_win32/comm.cpp20
-rw-r--r--src/zabbix_agent_win32/log.cpp24
-rw-r--r--src/zabbix_agent_win32/main.cpp6
-rw-r--r--src/zabbix_agent_win32/messages.mc2
-rw-r--r--src/zabbix_agent_win32/sysinfo.cpp122
-rw-r--r--src/zabbix_agent_win32/zabbixw32.h7
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
index fd31109b..48d27102 100755
--- a/src/zabbix_agent_win32/Debug/ZabbixW32.exe
+++ b/src/zabbix_agent_win32/Debug/ZabbixW32.exe
Binary files differ
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
index 3c6a31e9..e48c17c6 100755
--- a/src/zabbix_agent_win32/Release/ZabbixW32.exe
+++ b/src/zabbix_agent_win32/Release/ZabbixW32.exe
Binary files differ
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);