summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-06-05 08:56:09 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-06-05 08:56:09 +0000
commitde821d752713e82471fcb70c7c9e694decee3889 (patch)
treec7b4ec42cbe26738df878ed27b857662ea8fe718
parent5e8d328bf66fd5144d6ce765ef1928f8abdf7e8a (diff)
downloadzabbix-de821d752713e82471fcb70c7c9e694decee3889.tar.gz
zabbix-de821d752713e82471fcb70c7c9e694decee3889.tar.xz
zabbix-de821d752713e82471fcb70c7c9e694decee3889.zip
- better read loop in active.c (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@1820 97f52cf1-0a1b-0410-bd0e-c28be96e8082
-rw-r--r--ChangeLog1
-rw-r--r--create/mysql/schema.sql13
-rwxr-xr-xgo7
-rw-r--r--include/db.c1
-rw-r--r--include/functions.c18
-rw-r--r--src/zabbix_agent/active.c37
6 files changed, 63 insertions, 14 deletions
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
@@ -642,6 +642,19 @@ CREATE TABLE escalation_rules (
) 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);