summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbuild/win32/project/zabbix_agentd.dsp4
-rwxr-xr-xinclude/perfmon.h11
-rw-r--r--include/sysinfo.h4
-rw-r--r--src/libs/zbxsysinfo/common/common.c87
-rw-r--r--src/libs/zbxsysinfo/common/system.c8
-rwxr-xr-xsrc/libs/zbxsysinfo/win32/uptime.c9
-rwxr-xr-xsrc/libs/zbxsysinfo/win32/win32.c2
-rwxr-xr-xsrc/libs/zbxwin32/service.c5
-rw-r--r--src/zabbix_agent/active.c36
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;
}