summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-04-30 21:31:12 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-04-30 21:31:12 +0000
commit7d54eb242f408269546d2e9c48ee23ce4f58f5bf (patch)
treecd9f91213ba48b38d7cc5327f8fc001f10721f46
parent0125f92acb37efba54980b577d8d157aeca250b8 (diff)
downloadzabbix-7d54eb242f408269546d2e9c48ee23ce4f58f5bf.tar.gz
zabbix-7d54eb242f408269546d2e9c48ee23ce4f58f5bf.tar.xz
zabbix-7d54eb242f408269546d2e9c48ee23ce4f58f5bf.zip
More support for active checks.
git-svn-id: svn://svn.zabbix.com/trunk@1738 97f52cf1-0a1b-0410-bd0e-c28be96e8082
-rw-r--r--include/common.h1
-rw-r--r--include/functions.c3
-rw-r--r--misc/conf/zabbix_server.conf2
-rw-r--r--src/zabbix_agent/active.c151
-rw-r--r--src/zabbix_agent/active.h8
-rw-r--r--src/zabbix_server/trapper.c1
6 files changed, 92 insertions, 74 deletions
diff --git a/include/common.h b/include/common.h
index 06dc974a..7cb3d9e0 100644
--- a/include/common.h
+++ b/include/common.h
@@ -46,6 +46,7 @@
#else
#define MAX_STRING_LEN 4096
#endif
+#define MAX_BUF_LEN 65000
/* Item types */
#define ITEM_TYPE_ZABBIX 0
diff --git a/include/functions.c b/include/functions.c
index d434d090..c10bad26 100644
--- a/include/functions.c
+++ b/include/functions.c
@@ -2237,7 +2237,7 @@ int send_list_of_active_checks(int sockfd)
}
DBfree_result(result);
- snprintf(s,sizeof(s)-1,"%s\n","ZBX_EOF:ZBX_EOF:ZBX_EOF:ZBX_EOF:ZBX_EOF");
+ snprintf(s,sizeof(s)-1,"%s\n","ZBX_EOF");
zabbix_log( LOG_LEVEL_WARNING, "Sending [%s]", s);
if( write(sockfd,s,strlen(s)) == -1 )
{
@@ -2252,6 +2252,7 @@ int send_list_of_active_checks(int sockfd)
close(sockfd);
return FAIL;
}
+
return SUCCEED;
}
diff --git a/misc/conf/zabbix_server.conf b/misc/conf/zabbix_server.conf
index e299ac48..1a17fbce 100644
--- a/misc/conf/zabbix_server.conf
+++ b/misc/conf/zabbix_server.conf
@@ -94,4 +94,4 @@ DBUser=root
# Get rid of sockets in TIME_WAIT state
# This will set socket option SO_LINGER
-NoTimeWait=1
+# NoTimeWait=1
diff --git a/src/zabbix_agent/active.c b/src/zabbix_agent/active.c
index dfa3ed52..c58745a4 100644
--- a/src/zabbix_agent/active.c
+++ b/src/zabbix_agent/active.c
@@ -57,18 +57,69 @@
#include "stats.h"
#include "active.h"
+METRIC *metrics=NULL;
+
+void add_check(char *key, int refresh)
+{
+
+ int i;
+
+ for(i=0;;i++)
+ {
+ if(metrics[i].key == NULL)
+ {
+
+ metrics[i].key=strdup(key);
+ metrics[i].refresh=refresh;
+ metrics[i].status=ITEM_STATUS_ACTIVE;
+
+ metrics=realloc(metrics,(i+2)*sizeof(METRIC));
+ metrics[i+1].key=NULL;
+ break;
+ }
+ }
+}
+
+/* Parse list of active checks received from server */
+int parse_list_of_checks(char *str)
+{
+ char *line;
+ char *key, *refresh;
+ char *s1, *s2;
+
+ metrics=malloc(sizeof(METRIC));
+ metrics[0].key=NULL;
+
+ line=(char *)strtok_r(str,"\n",&s1);
+ while(line!=NULL)
+ {
+ zabbix_log( LOG_LEVEL_WARNING, "Parsed [%s]", line);
+
+ if(strcmp(line,"ZBX_EOF")==0) break;
+
+ key=(char *)strtok_r(line,":",&s2);
+ zabbix_log( LOG_LEVEL_WARNING, "Key [%s]", key);
+ refresh=(char *)strtok_r(NULL,":",&s2);
+ zabbix_log( LOG_LEVEL_WARNING, "Refresh [%s]", refresh);
+
+ add_check(key, atoi(refresh));
+
+ line=(char *)strtok_r(NULL,"\n",&s1);
+ }
+
+ return SUCCEED;
+}
+
int get_active_checks(char *server, int port, char *error, int max_error_len)
{
int s;
int len;
- char c[MAX_STRING_LEN];
+ char c[MAX_BUF_LEN];
struct hostent *hp;
struct sockaddr_in servaddr_in;
- struct linger ling;
-
zabbix_log( LOG_LEVEL_WARNING, "get_active_checks: host[%s] port[%d]", server, port);
servaddr_in.sin_family=AF_INET;
@@ -87,15 +138,6 @@ int get_active_checks(char *server, int port, char *error, int max_error_len)
s=socket(AF_INET,SOCK_STREAM,0);
-/* if(CONFIG_NOTIMEWAIT == 1)
- {
- ling.l_onoff=1;
- ling.l_linger=0;
- if(setsockopt(s,SOL_SOCKET,SO_LINGER,&ling,sizeof(ling))==-1)
- {
- zabbix_log(LOG_LEVEL_WARNING, "Cannot setsockopt SO_LINGER [%s]", strerror(errno));
- }
- }*/
if(s == -1)
{
zabbix_log(LOG_LEVEL_WARNING, "Cannot create socket [%s]",
@@ -145,47 +187,31 @@ int get_active_checks(char *server, int port, char *error, int max_error_len)
memset(c,0,MAX_STRING_LEN);
- for(;;)
+ zabbix_log(LOG_LEVEL_WARNING, "Reading");
+ len=read(s,c,MAX_BUF_LEN-1);
+ if(len == -1)
{
- zabbix_log(LOG_LEVEL_WARNING, "Reading");
- len=read(s,c,MAX_STRING_LEN);
- if(len == -1)
+ switch (errno)
{
- switch (errno)
- {
- case EINTR:
- zabbix_log( LOG_LEVEL_WARNING, "Timeout while receiving data from [%s]",server );
- snprintf(error,max_error_len-1,"Timeout while receiving data from [%s]",server);
- break;
- case ECONNRESET:
- zabbix_log( LOG_LEVEL_WARNING, "Connection reset by peer.");
- snprintf(error,max_error_len-1,"Connection reset by peer.");
- close(s);
- return NETWORK_ERROR;
- default:
+ case EINTR:
+ zabbix_log( LOG_LEVEL_WARNING, "Timeout while receiving data from [%s]",server );
+ snprintf(error,max_error_len-1,"Timeout while receiving data from [%s]",server);
+ break;
+ case ECONNRESET:
+ zabbix_log( LOG_LEVEL_WARNING, "Connection reset by peer.");
+ snprintf(error,max_error_len-1,"Connection reset by peer.");
+ close(s);
+ return NETWORK_ERROR;
+ default:
zabbix_log( LOG_LEVEL_WARNING, "Error while receiving data from [%s] [%s]",server, strerror(errno));
snprintf(error,max_error_len-1,"Error while receiving data from [%s] [%s]",server, strerror(errno));
- }
- close(s);
- return FAIL;
- }
- else
- {
- if(len>0)
- {
- c[len-1]=0;
- }
- zabbix_log(LOG_LEVEL_WARNING, "Read [%s]", c);
- if(strcmp(c,"ZBX_EOF") == 0)
- {
- zabbix_log( LOG_LEVEL_WARNING, "Received ZBX_EOF]");
-/* No more checks. End of file. */
- break;
- }
- // Add new check to the list
- // add_new_check(c);
- }
+ }
+ close(s);
+ return FAIL;
}
+ zabbix_log(LOG_LEVEL_WARNING, "Read [%s]", c);
+
+ parse_list_of_checks(c);
if( close(s)!=0 )
{
@@ -288,35 +314,20 @@ int send_value(char *server,int port,char *shortname,char *value)
void process_active_checks()
{
char value[MAX_STRING_LEN];
- char *metrics[]={
- "diskfree[/]",
- "disktotal[/]",
- "diskused[/]",
- "inodefree[/]",
- "inodetotal[/]",
- "memory[buffers]",
- "memory[shared]",
- "memory[cached]",
- "memory[total]",
- "system[procload]",
- "system[procload5]",
- "system[procload15]",
- "swap[free]",
- "swap[total]",
- "version[zabbix_agent]",
- NULL};
int i;
char shortname[MAX_STRING_LEN];
- i=0;
- while(metrics[i]!=NULL)
+ for(i=0;;i++)
{
- process(metrics[i], value);
- snprintf(shortname, MAX_STRING_LEN-1,"%s:%s","a0",metrics[i]);
+ if(metrics[i].key == NULL) break;
+
+ process(metrics[i].key, value);
+
+ snprintf(shortname, MAX_STRING_LEN-1,"%s:%s","a0",metrics[i].key);
+ zabbix_log( LOG_LEVEL_WARNING, "%s",shortname);
send_value("127.0.0.1",10051,shortname,value);
- i++;
}
}
diff --git a/src/zabbix_agent/active.h b/src/zabbix_agent/active.h
index 4e293862..f4c71c2b 100644
--- a/src/zabbix_agent/active.h
+++ b/src/zabbix_agent/active.h
@@ -20,7 +20,13 @@
#ifndef ZABBIX_ACTIVE_H
#define ZABBIX_ACTIVE_H
-extern int CONFIG_NOTIMEWAIT;
+#define METRIC struct metric_type
+METRIC
+{
+ char *key;
+ int refresh;
+ int status;
+};
pid_t child_active_make(int i,char *server, int port);
diff --git a/src/zabbix_server/trapper.c b/src/zabbix_server/trapper.c
index 43408c69..0e7f91d0 100644
--- a/src/zabbix_server/trapper.c
+++ b/src/zabbix_server/trapper.c
@@ -72,7 +72,6 @@ int process_trap(int sockfd,char *s)
if(strcmp(s,"ZBX_GET_ACTIVE_CHECKS") == 0)
{
ret=send_list_of_active_checks(sockfd);
- ret=send_list_of_active_checks(sockfd);
}
/* Process information sent by zabbix_sender */
else