summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-06-21 18:41:45 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-06-21 18:41:45 +0000
commit7b8199f4bbc932f3d72c6c67e4205c8ef4aed704 (patch)
tree26e77b279bc27c922ac51ca644bec5f790912441 /include
parent043dbb70cbc557bbc5f70a74453e506546148963 (diff)
- status of triggers changes if host/item status has been changed (Alexei)
- status of triggers is set correctly even if zabbix is restarted (Alexei) git-svn-id: svn://svn.zabbix.com/trunk@412 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'include')
-rw-r--r--include/db.c78
-rw-r--r--include/db.h6
-rw-r--r--include/functions.c4
3 files changed, 68 insertions, 20 deletions
diff --git a/include/db.c b/include/db.c
index 2e75c08b..c5c4e939 100644
--- a/include/db.c
+++ b/include/db.c
@@ -267,9 +267,8 @@ int latest_alarm(int triggerid, int status)
return ret;
}
-int DBadd_alarm(int triggerid, int status)
+int DBadd_alarm(int triggerid,int status,int clock)
{
- int now;
char sql[MAX_STRING_LEN+1];
zabbix_log(LOG_LEVEL_DEBUG,"In add_alarm()");
@@ -279,8 +278,7 @@ int DBadd_alarm(int triggerid, int status)
return SUCCEED;
}
- now=time(NULL);
- sprintf(sql,"insert into alarms(triggerid,clock,value) values(%d,%d,%d)",triggerid,now,status);
+ sprintf(sql,"insert into alarms(triggerid,clock,value) values(%d,%d,%d)", triggerid, clock, status);
zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql);
DBexecute(sql);
@@ -289,12 +287,12 @@ int DBadd_alarm(int triggerid, int status)
return SUCCEED;
}
-int update_trigger_value(int triggerid,int value)
+int update_trigger_value(int triggerid,int value,int clock)
{
char sql[MAX_STRING_LEN+1];
zabbix_log(LOG_LEVEL_DEBUG,"In update_trigger_value()");
- DBadd_alarm(triggerid,value);
+ DBadd_alarm(triggerid,value,clock);
sprintf(sql,"update triggers set value=%d where triggerid=%d",value,triggerid);
zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql);
@@ -304,7 +302,7 @@ int update_trigger_value(int triggerid,int value)
return SUCCEED;
}
-int update_triggers_status_to_unknown(int hostid)
+int update_triggers_status_to_unknown(int hostid,int clock)
{
int i;
char sql[MAX_STRING_LEN+1];
@@ -328,7 +326,7 @@ int update_triggers_status_to_unknown(int hostid)
for(i=0;i<DBnum_rows(result);i++)
{
triggerid=atoi(DBget_field(result,i,0));
- update_trigger_value(triggerid,TRIGGER_VALUE_UNKNOWN);
+ update_trigger_value(triggerid,TRIGGER_VALUE_UNKNOWN,clock);
}
DBfree_result(result);
@@ -337,11 +335,61 @@ int update_triggers_status_to_unknown(int hostid)
return SUCCEED;
}
-int DBupdate_host_status(int hostid,int status)
+int DBupdate_triggers_status_after_restart(void)
{
- DB_RESULT *result;
+ int i;
char sql[MAX_STRING_LEN+1];
+ int triggerid, lastchange;
int now;
+
+ DB_RESULT *result;
+ DB_RESULT *result2;
+
+ zabbix_log(LOG_LEVEL_DEBUG,"In DBupdate_triggers_after_restart()");
+
+ now=time(NULL);
+
+ sprintf(sql,"select distinct t.triggerid from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and i.nextcheck+i.delay<%d",now);
+ zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql);
+ result = DBselect(sql);
+
+ if( DBis_empty(result) == SUCCEED )
+ {
+ zabbix_log(LOG_LEVEL_DEBUG, "No triggers to update");
+ DBfree_result(result);
+ return FAIL;
+ }
+
+ for(i=0;i<DBnum_rows(result);i++)
+ {
+ triggerid=atoi(DBget_field(result,i,0));
+
+ sprintf(sql,"select min(i.nextcheck+i.delay) from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and i.nextcheck<>0 and t.triggerid=%d and i.status<>%d",triggerid,ITEM_STATUS_TRAPPED);
+ zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql);
+ result2 = DBselect(sql);
+ if( DBis_empty(result2) == SUCCEED )
+ {
+ zabbix_log(LOG_LEVEL_DEBUG, "No triggers to update (2)");
+ DBfree_result(result2);
+ continue;
+ }
+
+ lastchange=atoi(DBget_field(result2,0,0));
+ DBfree_result(result2);
+
+ update_trigger_value(triggerid,TRIGGER_VALUE_UNKNOWN,lastchange);
+ }
+
+ DBfree_result(result);
+ zabbix_log(LOG_LEVEL_DEBUG,"End of DBupdate_triggers_after_restart()");
+
+ return SUCCEED;
+}
+
+int DBupdate_host_status(int hostid,int status,int clock)
+{
+ DB_RESULT *result;
+ char sql[MAX_STRING_LEN+1];
int disable_until;
zabbix_log(LOG_LEVEL_DEBUG,"In update_host_status()");
@@ -357,14 +405,12 @@ int DBupdate_host_status(int hostid,int status)
return FAIL;
}
- now=time(NULL);
-
disable_until = atoi(DBget_field(result,0,1));
if(status == atoi(DBget_field(result,0,0)))
{
if((status==HOST_STATUS_UNREACHABLE)
- &&(now+DELAY_ON_NETWORK_FAILURE>disable_until) )
+ &&(clock+DELAY_ON_NETWORK_FAILURE>disable_until) )
{
}
else
@@ -391,13 +437,13 @@ int DBupdate_host_status(int hostid,int status)
}
else if(status==HOST_STATUS_UNREACHABLE)
{
- if(disable_until+DELAY_ON_NETWORK_FAILURE>now)
+ if(disable_until+DELAY_ON_NETWORK_FAILURE>clock)
{
sprintf(sql,"update hosts set status=%d,disable_until=disable_until+%d where hostid=%d",HOST_STATUS_UNREACHABLE,DELAY_ON_NETWORK_FAILURE,hostid);
}
else
{
- sprintf(sql,"update hosts set status=%d,disable_until=%d where hostid=%d",HOST_STATUS_UNREACHABLE,now+DELAY_ON_NETWORK_FAILURE,hostid);
+ sprintf(sql,"update hosts set status=%d,disable_until=%d where hostid=%d",HOST_STATUS_UNREACHABLE,clock+DELAY_ON_NETWORK_FAILURE,hostid);
}
zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql);
DBexecute(sql);
@@ -408,7 +454,7 @@ int DBupdate_host_status(int hostid,int status)
return FAIL;
}
- update_triggers_status_to_unknown(hostid);
+ update_triggers_status_to_unknown(hostid,clock);
zabbix_log(LOG_LEVEL_DEBUG,"End of update_host_status()");
return SUCCEED;
diff --git a/include/db.h b/include/db.h
index 571519f4..19a6e0d5 100644
--- a/include/db.h
+++ b/include/db.h
@@ -112,11 +112,13 @@ int DBnum_rows(DB_RESULT *result);
int DBis_empty(DB_RESULT *result);
int DBget_function_result(float *result,char *functionid);
-int DBupdate_host_status(int hostid,int status);
+int DBupdate_host_status(int hostid,int status,int clock);
int DBupdate_item_status_to_notsupported(int itemid);
int DBadd_history(int itemid, double value);
int DBadd_history_str(int itemid, char *value);
-int DBadd_alarm(int triggerid, int status);
+int DBadd_alarm(int triggerid, int status,int clock);
int DBadd_alert(int actionid, char *type, char *sendto, char *subject, char *message);
+int DBupdate_triggers_status_after_restart(void);
+
#endif
diff --git a/include/functions.c b/include/functions.c
index 731efa4c..27523d6c 100644
--- a/include/functions.c
+++ b/include/functions.c
@@ -659,7 +659,7 @@ void update_triggers( int suckers, int flag, int sucker_num, int lastclock )
sprintf(sql,"update triggers set value=%d, lastchange=%d where triggerid=%d",TRIGGER_VALUE_TRUE,now,trigger.triggerid);
DBexecute(sql);
- DBadd_alarm(trigger.triggerid, TRIGGER_VALUE_TRUE);
+ DBadd_alarm(trigger.triggerid, TRIGGER_VALUE_TRUE, now);
}
if(trigger.value == TRIGGER_VALUE_FALSE)
{
@@ -681,7 +681,7 @@ void update_triggers( int suckers, int flag, int sucker_num, int lastclock )
sprintf(sql,"update triggers set value=%d, lastchange=%d where triggerid=%d",TRIGGER_VALUE_FALSE,now,trigger.triggerid);
DBexecute(sql);
- DBadd_alarm(trigger.triggerid, TRIGGER_VALUE_FALSE);
+ DBadd_alarm(trigger.triggerid, TRIGGER_VALUE_FALSE,now);
}
if(trigger.value == TRIGGER_VALUE_TRUE)