diff options
| author | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2002-06-21 18:41:45 +0000 |
|---|---|---|
| committer | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2002-06-21 18:41:45 +0000 |
| commit | 7b8199f4bbc932f3d72c6c67e4205c8ef4aed704 (patch) | |
| tree | 26e77b279bc27c922ac51ca644bec5f790912441 /include | |
| parent | 043dbb70cbc557bbc5f70a74453e506546148963 (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.c | 78 | ||||
| -rw-r--r-- | include/db.h | 6 | ||||
| -rw-r--r-- | include/functions.c | 4 |
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) |
