From de821d752713e82471fcb70c7c9e694decee3889 Mon Sep 17 00:00:00 2001 From: hugetoad Date: Sun, 5 Jun 2005 08:56:09 +0000 Subject: - better read loop in active.c (Alexei) git-svn-id: svn://svn.zabbix.com/trunk@1820 97f52cf1-0a1b-0410-bd0e-c28be96e8082 --- ChangeLog | 1 + create/mysql/schema.sql | 13 +++++++++++++ go | 7 +++++++ include/db.c | 1 + include/functions.c | 18 ++++++++---------- src/zabbix_agent/active.c | 37 +++++++++++++++++++++++++++++++++---- 6 files changed, 63 insertions(+), 14 deletions(-) create mode 100755 go diff --git a/ChangeLog b/ChangeLog index 6ce5d29b..c374b5a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ Changes for 1.1alpha11: + - better read loop in active.c (Alexei) - added parameter DisableActive for zabbix_agentd (Alexei) - trigger expressions may contain spaces (Alexei) - improvements for snprintf.c (Alexei) diff --git a/create/mysql/schema.sql b/create/mysql/schema.sql index c7a76dc7..e52cc88e 100644 --- a/create/mysql/schema.sql +++ b/create/mysql/schema.sql @@ -641,6 +641,19 @@ CREATE TABLE escalation_rules ( KEY (escalationid) ) type=InnoDB; +-- +-- Table structure for table 'escalation_log' +-- + +CREATE TABLE escalation_log ( + alarmid int(4) DEFAULT '0' NOT NULL, + escalationid int(4) DEFAULT '0' NOT NULL, + level int(4) DEFAULT '0' NOT NULL, + adminlevel int(4) DEFAULT '0' NOT NULL, + nextcheck int(4) DEFAULT '0' NOT NULL, + PRIMARY KEY (alarmid,escalationid) +) type=InnoDB; + -- -- Table structure for table 'hosts_templates' -- diff --git a/go b/go new file mode 100755 index 00000000..ad4bfb35 --- /dev/null +++ b/go @@ -0,0 +1,7 @@ +#!/bin/sh + +mkdir bin +autoheader +autoconf +./configure --with-mysql +make diff --git a/include/db.c b/include/db.c index f036cc79..1c6cb750 100644 --- a/include/db.c +++ b/include/db.c @@ -467,6 +467,7 @@ int add_alarm(int triggerid,int status,int clock) zabbix_log(LOG_LEVEL_DEBUG,"In add_alarm()"); + /* Latest alarm has the same status? */ if(latest_alarm(triggerid,status) == SUCCEED) { return SUCCEED; diff --git a/include/functions.c b/include/functions.c index a5ad2733..9de1cfac 100644 --- a/include/functions.c +++ b/include/functions.c @@ -1026,7 +1026,7 @@ void update_triggers(int itemid) { char sql[MAX_STRING_LEN]; char exp[MAX_STRING_LEN]; - int b; + int exp_value; int now; DB_TRIGGER trigger; DB_RESULT *result; @@ -1053,7 +1053,7 @@ void update_triggers(int itemid) trigger.value=atoi(DBget_field(result,i,5)); trigger.description=DBget_field(result,i,6); strscpy(exp, trigger.expression); - if( evaluate_expression(&b, exp) != 0 ) + if( evaluate_expression(&exp_value, exp) != 0 ) { zabbix_log( LOG_LEVEL_WARNING, "Expression [%s] cannot be evaluated.",trigger.expression); zabbix_syslog("Expression [%s] cannot be evaluated.",trigger.expression); @@ -1063,9 +1063,9 @@ void update_triggers(int itemid) /* Oprimise a little bit */ prevvalue=DBget_prev_trigger_value(trigger.triggerid); - zabbix_log( LOG_LEVEL_DEBUG, "b trigger.value prevvalue [%d] [%d] [%d]", b, trigger.value, prevvalue); + zabbix_log( LOG_LEVEL_DEBUG, "exp_value trigger.value prevvalue [%d] [%d] [%d]", exp_value, trigger.value, prevvalue); - if(TRIGGER_VALUE_TRUE == b) + if(TRIGGER_VALUE_TRUE == exp_value) { if(trigger.value != TRIGGER_VALUE_TRUE) { @@ -1081,19 +1081,17 @@ void update_triggers(int itemid) /* (DBget_prev_trigger_value(trigger.triggerid) == TRIGGER_VALUE_FALSE)*/ )) { - now = time(NULL); -/* apply_actions(trigger.triggerid,1);*/ apply_actions(&trigger,1); - + + /* Why? */ snprintf(sql,sizeof(sql)-1,"update actions set nextcheck=0 where triggerid=%d and good=0",trigger.triggerid); DBexecute(sql); update_services(trigger.triggerid, trigger.priority); } - } - if(TRIGGER_VALUE_FALSE == b) + if(TRIGGER_VALUE_FALSE == exp_value) { if(trigger.value != TRIGGER_VALUE_FALSE) { @@ -1109,9 +1107,9 @@ void update_triggers(int itemid) /* (DBget_prev_trigger_value(trigger.triggerid) == TRIGGER_VALUE_TRUE)*/ )) { -/* apply_actions(trigger.triggerid,0);*/ apply_actions(&trigger,0); + /* Why? */ snprintf(sql,sizeof(sql)-1,"update actions set nextcheck=0 where triggerid=%d and good=1",trigger.triggerid); DBexecute(sql); diff --git a/src/zabbix_agent/active.c b/src/zabbix_agent/active.c index 9cb96689..dac6cca4 100644 --- a/src/zabbix_agent/active.c +++ b/src/zabbix_agent/active.c @@ -182,9 +182,8 @@ int parse_list_of_checks(char *str) int get_active_checks(char *server, int port, char *error, int max_error_len) { int s; - int len; + int len,amount_read; char c[MAX_BUF_LEN]; - char tmp[MAX_STRING_LEN]; struct hostent *hp; @@ -258,7 +257,37 @@ int get_active_checks(char *server, int port, char *error, int max_error_len) zabbix_log(LOG_LEVEL_DEBUG, "Before read"); - while((len=read(s,tmp,MAX_BUF_LEN-1))>0) + amount_read = 0; + + do + { + len=read(s,c+amount_read,(MAX_BUF_LEN-1)-amount_read); + if (len > 0) + amount_read += len; + if(len == -1) + { + switch (errno) + { + case EINTR: + zabbix_log( LOG_LEVEL_WARNING, "Timeout while receiving data from [%s:%d]",server,port); + snprintf(error,max_error_len-1,"Timeout while receiving data from [%s:%d]",server,port); + 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:%d] [%s]",server,port,strerror(errno)); + snprintf(error,max_error_len-1,"Error while receiving data from [%s:%d] [%s]",server,port,strerror(errno)); + } + close(s); + return FAIL; + } + } + while (len > 0); + +/* while((len=read(s,tmp,MAX_BUF_LEN-1))>0) { if(len == -1) { @@ -282,7 +311,7 @@ int get_active_checks(char *server, int port, char *error, int max_error_len) } strncat(c,tmp,len); } - zabbix_log(LOG_LEVEL_DEBUG, "Read [%s]", c); + zabbix_log(LOG_LEVEL_DEBUG, "Read [%s]", c);*/ parse_list_of_checks(c); -- cgit