diff options
-rwxr-xr-x | build/win32/project/zabbix_agentd.dsp | 4 | ||||
-rwxr-xr-x | include/perfmon.h | 11 | ||||
-rw-r--r-- | include/sysinfo.h | 4 | ||||
-rw-r--r-- | src/libs/zbxsysinfo/common/common.c | 87 | ||||
-rw-r--r-- | src/libs/zbxsysinfo/common/system.c | 8 | ||||
-rwxr-xr-x | src/libs/zbxsysinfo/win32/uptime.c | 9 | ||||
-rwxr-xr-x | src/libs/zbxsysinfo/win32/win32.c | 2 | ||||
-rwxr-xr-x | src/libs/zbxwin32/service.c | 5 | ||||
-rw-r--r-- | src/zabbix_agent/active.c | 36 |
9 files changed, 101 insertions, 65 deletions
diff --git a/build/win32/project/zabbix_agentd.dsp b/build/win32/project/zabbix_agentd.dsp index 2a93766a..bd77b291 100755 --- a/build/win32/project/zabbix_agentd.dsp +++ b/build/win32/project/zabbix_agentd.dsp @@ -909,6 +909,10 @@ SOURCE=..\..\..\src\libs\zbxsysinfo\win32\net.c # End Source File # Begin Source File +SOURCE=..\..\..\src\libs\zbxsysinfo\win32\pdhmon.c +# End Source File +# Begin Source File + SOURCE=..\..\..\src\libs\zbxsysinfo\win32\proc.c # End Source File # Begin Source File diff --git a/include/perfmon.h b/include/perfmon.h index 32cb6248..9ff8218b 100755 --- a/include/perfmon.h +++ b/include/perfmon.h @@ -43,16 +43,17 @@ struct perfcounter { struct perfcounter *next; - DWORD pdhIndex; - char name[MAX_PERFCOUNTER_NAME_LEN]; /* must be caracter array! if you want to rewrite */ - /* to dinacal memory allocation CHECK for usage */ - /* of sizeof function */ + unsigned long pdhIndex; + char name[MAX_PERFCOUNTER_NAME_LEN]; + /* must be caracter array! if you want to rewrite */ + /* to dinacal memory allocation CHECK for usage */ + /* of sizeof function */ }; typedef struct perfcounter PERFCOUNTER; extern PERFCOUNTER *PerfCounterList; -char *GetCounterName(DWORD index); +char *GetCounterName(unsigned long index); #endif /* ZABBIX_PERFMON_H */ diff --git a/include/sysinfo.h b/include/sysinfo.h index c36c9d28..f6ef95d2 100644 --- a/include/sysinfo.h +++ b/include/sysinfo.h @@ -123,4 +123,8 @@ int WEB_PAGE_GET(const char *cmd, const char *param, unsigned flags, AGENT_RESUL int WEB_PAGE_PERF(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result); int WEB_PAGE_REGEXP(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result); +#if defined(WIN32) +int PERF_MONITOR(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result); +#endif + #endif diff --git a/src/libs/zbxsysinfo/common/common.c b/src/libs/zbxsysinfo/common/common.c index d54179f3..0636ca82 100644 --- a/src/libs/zbxsysinfo/common/common.c +++ b/src/libs/zbxsysinfo/common/common.c @@ -23,6 +23,8 @@ #include "alias.h" #include "md5.h" #include "log.h" +#include "zbxsock.h" +#include "cfg.h" ZBX_METRIC *commands=NULL; extern ZBX_METRIC parameters_specific[]; @@ -1152,7 +1154,6 @@ int EXECUTE_STR(const char *cmd, const char *param, unsigned flags, AGENT_RESULT init_result(result); - strsncpy(command, param, MAX_STRING_LEN); memset(cmd_result, 0, MAX_STRING_LEN); #if defined(WIN32) @@ -1186,6 +1187,8 @@ int EXECUTE_STR(const char *cmd, const char *param, unsigned flags, AGENT_RESULT si.hStdOutput = hOutput; si.hStdError = GetStdHandle(STD_ERROR_HANDLE); + zbx_snprintf(command, sizeof(command), "cmd /C \"%s\"", param); + /* Create new process */ if (!CreateProcess(NULL,command,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) { @@ -1207,6 +1210,7 @@ int EXECUTE_STR(const char *cmd, const char *param, unsigned flags, AGENT_RESULT cmd_result[len] = '\0'; #else /* not WIN32 */ + strsncpy(command, param, sizeof(command)); if(0 == (f = popen(command,"r"))) { @@ -1426,73 +1430,84 @@ int RUN_COMMAND(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_OK; } -int forward_request(char *proxy, char *command, int port, unsigned flags, AGENT_RESULT *result) + + +/***************************************/ +/***** !!! NOT USED FUNCTION !!! *******/ +/***************************************/ + +static int forward_request(char *proxy, char *command, int port, unsigned flags, AGENT_RESULT *result) { -#ifdef TODO /* TODO !!! */ - char *haddr; - char c[1024]; - - int s; - struct sockaddr_in addr; - int addrlen; + ZBX_SOCKET s; + ZBX_SOCKADDR servaddr_in; - struct hostent *host; + struct hostent *hp; + + char buf[MAX_BUF_LEN]; + + int len; assert(result); init_result(result); - host = gethostbyname(proxy); - if(host == NULL) + if(NULL == (hp = gethostbyname(proxy)) ) { +#ifdef HAVE_HSTRERROR + zabbix_log( LOG_LEVEL_DEBUG,"gethostbyname() failed for proxy '%s' [%s]", proxy, (char*)hstrerror((int)h_errno)); +#else + zabbix_log( LOG_LEVEL_DEBUG,"gethostbyname() failed for proxy '%s' [%s]", proxy, strerror_from_system(h_errno)); +#endif SET_MSG_RESULT(result, strdup("ZBX_NETWORK_ERROR")); return SYSINFO_RET_FAIL; } - haddr=host->h_addr; + memset(&servaddr_in, 0, sizeof(ZBX_SOCKADDR)); - addrlen = sizeof(addr); - memset(&addr, 0, addrlen); - addr.sin_port = htons(port); - addr.sin_family = AF_INET; - bcopy(haddr, (void *) &addr.sin_addr.s_addr, 4); + servaddr_in.sin_family = AF_INET; + servaddr_in.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr; + servaddr_in.sin_port = htons(port); - s = socket(AF_INET, SOCK_STREAM, 0); - if (s == -1) + if(INVALID_SOCKET == (s = socket(AF_INET,SOCK_STREAM,0))) { - close(s); + zabbix_log( LOG_LEVEL_DEBUG, "Error in socket() [%s:%u] [%s]",proxy, port, strerror_from_system(errno)); SET_MSG_RESULT(result, strdup("ZBX_NOTSUPPORTED")); return SYSINFO_RET_FAIL; } - if (connect(s, (struct sockaddr *) &addr, addrlen) == -1) + + if(SOCKET_ERROR == connect(s,(struct sockaddr *)&servaddr_in,sizeof(ZBX_SOCKADDR))) { - close(s); + zabbix_log( LOG_LEVEL_WARNING, "Error in connect() [%s:%u] [%s]",proxy, port, strerror_from_system(errno)); + zbx_sock_close(s); SET_MSG_RESULT(result, strdup("ZBX_NETWORK_ERROR")); return SYSINFO_RET_FAIL; } - if(write(s,command,strlen(command)) == -1) + + if(SOCKET_ERROR == zbx_sock_write(s, command, strlen(command))) { - close(s); + zabbix_log( LOG_LEVEL_DEBUG, "Error during sending [%s:%u] [%s]",proxy, port, strerror_from_system(errno)); + zbx_sock_close(s); SET_MSG_RESULT(result, strdup("ZBX_NETWORK_ERROR")); return SYSINFO_RET_FAIL; - } + } - memset(&c, 0, 1024); - if(read(s, c, 1024) == -1) + memset(buf, 0, sizeof(buf)); + + if(SOCKET_ERROR == (len = zbx_sock_read(s, buf, sizeof(buf)-1, CONFIG_TIMEOUT))) { - close(s); + zabbix_log( LOG_LEVEL_DEBUG, "Error in reading() [%s:%u] [%s]",proxy, port, strerror_from_system(errno)); + zbx_sock_close(s); SET_MSG_RESULT(result, strdup("ZBX_ERROR")); return SYSINFO_RET_FAIL; } - close(s); + + zbx_sock_close(s); - SET_STR_RESULT(result, strdup(c)); - return SYSINFO_RET_OK; -#endif /* TODO */ + SET_STR_RESULT(result, strdup(buf)); - return SYSINFO_RET_FAIL; + return SYSINFO_RET_OK; } @@ -2118,6 +2133,10 @@ int SYSTEM_UNUM(const char *cmd, const char *param, unsigned flags, AGENT_RE init_result(result); +#ifdef TODO +#error Realize function!!! +#endif /* todo */ + return EXECUTE_INT(cmd, "who|wc -l", flags, result); } diff --git a/src/libs/zbxsysinfo/common/system.c b/src/libs/zbxsysinfo/common/system.c index a6443822..339b274c 100644 --- a/src/libs/zbxsysinfo/common/system.c +++ b/src/libs/zbxsysinfo/common/system.c @@ -43,6 +43,10 @@ int SYSTEM_UNAME(const char *cmd, const char *param, unsigned flags, AGENT_R init_result(result); +#ifdef TODO +#error Realize function!!! +#endif /* todo */ + return EXECUTE_STR(cmd, "uname -a", flags, result); } @@ -52,6 +56,10 @@ int SYSTEM_HOSTNAME(const char *cmd, const char *param, unsigned flags, AGEN init_result(result); +#ifdef TODO +#error Realize function!!! +#endif /* todo */ + return EXECUTE_STR(cmd, "hostname", flags, result); } diff --git a/src/libs/zbxsysinfo/win32/uptime.c b/src/libs/zbxsysinfo/win32/uptime.c index d93182a2..40031705 100755 --- a/src/libs/zbxsysinfo/win32/uptime.c +++ b/src/libs/zbxsysinfo/win32/uptime.c @@ -18,15 +18,16 @@ **/ #include "config.h" +#include "perfmon.h" #include "common.h" #include "sysinfo.h" int SYSTEM_UPTIME(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { -#ifdef TODO -#error Realize function!!! -#endif /* todo */ + char counter_path[MAX_COUNTER_PATH]; - return SYSINFO_RET_FAIL; + zbx_snprintf(counter_path, sizeof(counter_path), "\\%s\\%s",GetCounterName(PCI_SYSTEM),GetCounterName(PCI_SYSTEM_UP_TIME)); + + return PERF_MONITOR(cmd, counter_path, flags, result); } diff --git a/src/libs/zbxsysinfo/win32/win32.c b/src/libs/zbxsysinfo/win32/win32.c index 8d9e2d16..558754fe 100755 --- a/src/libs/zbxsysinfo/win32/win32.c +++ b/src/libs/zbxsysinfo/win32/win32.c @@ -75,5 +75,7 @@ ZBX_METRIC parameters_specific[]= {"system.uptime", 0, SYSTEM_UPTIME, 0, 0}, {"system.users.num", 0, SYSTEM_UNUM, 0, 0}, + {"perf_counter", CF_USEUPARAM, PERF_MONITOR, 0, "\\Processor(_Total)\\% Processor Time"}, + {0} }; diff --git a/src/libs/zbxwin32/service.c b/src/libs/zbxwin32/service.c index 887c8922..d1021c91 100755 --- a/src/libs/zbxwin32/service.c +++ b/src/libs/zbxwin32/service.c @@ -89,7 +89,6 @@ static VOID WINAPI ServiceCtrlHandler(DWORD ctrlCode) static VOID WINAPI ServiceEntry(DWORD argc,LPTSTR *argv) { WSADATA sockInfo; - char counterPath[MAX_COUNTER_PATH * 2 + 50]; serviceHandle = RegisterServiceCtrlHandler(ZABBIX_SERVICE_NAME, ServiceCtrlHandler); @@ -107,10 +106,6 @@ static VOID WINAPI ServiceEntry(DWORD argc,LPTSTR *argv) /* Initialize Windows Sockets API */ WSAStartup(0x0002,&sockInfo); - /* Internal command aliases */ - zbx_snprintf(counterPath, sizeof(counterPath), "perf_counter[\\%s\\%s]",GetCounterName(PCI_SYSTEM),GetCounterName(PCI_SYSTEM_UP_TIME)); - add_alias("system.uptime",counterPath); - /* Now service is running */ serviceStatus.dwCurrentState = SERVICE_RUNNING; serviceStatus.dwWaitHint = 0; diff --git a/src/zabbix_agent/active.c b/src/zabbix_agent/active.c index 1db29967..8e162511 100644 --- a/src/zabbix_agent/active.c +++ b/src/zabbix_agent/active.c @@ -236,7 +236,7 @@ static int get_active_checks(char *server, unsigned short port, char *error, int { ZBX_SOCKET s; - ZBX_SOCKADDR servaddr_in; + ZBX_SOCKADDR servaddr_in; struct hostent *hp; @@ -248,21 +248,22 @@ static int get_active_checks(char *server, unsigned short port, char *error, int zabbix_log( LOG_LEVEL_DEBUG, "get_active_checks('%s',%u)", server, port); - servaddr_in.sin_family = AF_INET; if(NULL == (hp = gethostbyname(server)) ) { #ifdef HAVE_HSTRERROR zbx_snprintf(error, max_error_len,"gethostbyname() failed for server '%s' [%s]", server, (char*)hstrerror((int)h_errno)); #else - zbx_snprintf(error, max_error_len,"gethostbyname() failed for server '%s' [%d]", server, h_errno); + zbx_snprintf(error, max_error_len,"gethostbyname() failed for server '%s' [%s]", server, strerror_from_system(h_errno)); #endif zabbix_log( LOG_LEVEL_WARNING, error); return NETWORK_ERROR; } - servaddr_in.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr; + memset(&servaddr_in, 0, sizeof(ZBX_SOCKADDR)); - servaddr_in.sin_port = htons(port); + servaddr_in.sin_family = AF_INET; + servaddr_in.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr; + servaddr_in.sin_port = htons(port); if(INVALID_SOCKET == (s = socket(AF_INET,SOCK_STREAM,0))) { @@ -282,7 +283,7 @@ static int get_active_checks(char *server, unsigned short port, char *error, int zbx_snprintf(error,max_error_len,"No route to host [%s:%u]",server,port); break; default: - zbx_snprintf(error,max_error_len,"Cannot connect to [%s:%u] [%s]",server,port,strerror(errno)); + zbx_snprintf(error,max_error_len,"Cannot connect to [%s:%u] [%s]",server,port,strerror_from_system(errno)); break; } zabbix_log(LOG_LEVEL_WARNING, error); @@ -301,7 +302,7 @@ static int get_active_checks(char *server, unsigned short port, char *error, int zbx_snprintf(error,max_error_len,"Timeout while sending data to [%s:%u]",server,port); break; default: - zbx_snprintf(error,max_error_len,"Error while sending data to [%s:%u] [%s]",server,port,strerror(errno)); + zbx_snprintf(error,max_error_len,"Error while sending data to [%s:%u] [%s]",server,port,strerror_from_system(errno)); break; } zabbix_log(LOG_LEVEL_WARNING, error); @@ -330,7 +331,7 @@ static int get_active_checks(char *server, unsigned short port, char *error, int zbx_snprintf(error,max_error_len,"Connection reset by peer."); break; default: - zbx_snprintf(error,max_error_len,"Error while receiving data from [%s:%u] [%s]",server,port,strerror(errno)); + zbx_snprintf(error,max_error_len,"Error while receiving data from [%s:%u] [%s]",server,port,strerror_from_system(errno)); break; } zabbix_log( LOG_LEVEL_WARNING, error); @@ -365,12 +366,13 @@ static int send_value(char *server,unsigned short port,char *host, char *key,cha if( NULL == (hp = gethostbyname(server)) ) { #ifdef HAVE_HSTRERROR - zabbix_log( LOG_LEVEL_WARNING, "gethostbyname() failed for server '%s' [%d]", server, (char*)hstrerror((int)h_errno)); + zabbix_log( LOG_LEVEL_WARNING, "gethostbyname() failed for server '%s' [%s]", server, (char*)hstrerror((int)h_errno)); #else - zabbix_log( LOG_LEVEL_WARNING, "gethostbyname() failed for server '%s' [%d]", server, h_errno); + zabbix_log( LOG_LEVEL_WARNING, "gethostbyname() failed for server '%s' [%s]", server, strerror_from_system(h_errno)); #endif return FAIL; } + memset(&servaddr_in, 0, sizeof(ZBX_SOCKADDR)); servaddr_in.sin_family = AF_INET; servaddr_in.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr; @@ -378,17 +380,17 @@ static int send_value(char *server,unsigned short port,char *host, char *key,cha if(INVALID_SOCKET == (s = socket(AF_INET,SOCK_STREAM,0))) { - zabbix_log( LOG_LEVEL_WARNING, "Error in socket() [%s:%u] [%s]",server, port, strerror(errno)); + zabbix_log( LOG_LEVEL_WARNING, "Error in socket() [%s:%u] [%s]",server, port, strerror_from_system(errno)); return FAIL; } - myaddr_in.sin_family = AF_INET; - myaddr_in.sin_port=0; - myaddr_in.sin_addr.s_addr=INADDR_ANY; + myaddr_in.sin_family = AF_INET; + myaddr_in.sin_addr.s_addr = INADDR_ANY; + myaddr_in.sin_port = 0; if(SOCKET_ERROR == connect(s,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in))) { - zabbix_log( LOG_LEVEL_WARNING, "Error in connect() [%s:%u] [%s]",server, port, strerror(errno)); + zabbix_log( LOG_LEVEL_WARNING, "Error in connect() [%s:%u] [%s]",server, port, strerror_from_system(errno)); zbx_sock_close(s); return FAIL; } @@ -399,7 +401,7 @@ static int send_value(char *server,unsigned short port,char *host, char *key,cha if(SOCKET_ERROR == zbx_sock_write(s, buf, strlen(buf))) { - zabbix_log( LOG_LEVEL_WARNING, "Error during sending [%s:%u] [%s]",server, port, strerror(errno)); + zabbix_log( LOG_LEVEL_WARNING, "Error during sending [%s:%u] [%s]",server, port, strerror_from_system(errno)); zbx_sock_close(s); return FAIL; } @@ -408,7 +410,7 @@ static int send_value(char *server,unsigned short port,char *host, char *key,cha if(SOCKET_ERROR == (len = zbx_sock_read(s, buf, sizeof(buf)-1, CONFIG_TIMEOUT))) { - zabbix_log( LOG_LEVEL_WARNING, "Error in recvfrom() [%s:%u] [%s]",server, port, strerror(errno)); + zabbix_log( LOG_LEVEL_WARNING, "Error in recvfrom() [%s:%u] [%s]",server, port, strerror_from_system(errno)); zbx_sock_close(s); return FAIL; } |