diff options
| author | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2002-08-25 14:24:41 +0000 |
|---|---|---|
| committer | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2002-08-25 14:24:41 +0000 |
| commit | 5784b2fcc28da70b6fd6900a711b9c2265cca181 (patch) | |
| tree | d6aee57b35abb0cf1e442b1eb5b0fb14d1cf6df3 /include | |
| parent | 73524e327da20dfaebd84dada461366b1778f71a (diff) | |
| download | zabbix-5784b2fcc28da70b6fd6900a711b9c2265cca181.tar.gz zabbix-5784b2fcc28da70b6fd6900a711b9c2265cca181.tar.xz zabbix-5784b2fcc28da70b6fd6900a711b9c2265cca181.zip | |
Basic support for service availability.
git-svn-id: svn://svn.zabbix.com/trunk@464 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'include')
| -rw-r--r-- | include/db.c | 63 | ||||
| -rw-r--r-- | include/db.h | 3 | ||||
| -rw-r--r-- | include/functions.c | 17 |
3 files changed, 70 insertions, 13 deletions
diff --git a/include/db.c b/include/db.c index 867c47fc..b8ef19c4 100644 --- a/include/db.c +++ b/include/db.c @@ -354,6 +354,49 @@ int latest_alarm(int triggerid, int status) return ret; } +/* SUCCEED if latest service alarm has this status */ +/* Rewrite required to simplify logic ?*/ +int latest_service_alarm(int serviceid, int status) +{ + char sql[MAX_STRING_LEN+1]; + int clock; + DB_RESULT *result; + int ret = FAIL; + + + zabbix_log(LOG_LEVEL_DEBUG,"In latest_service_alarm()"); + + sprintf(sql,"select max(clock) from service_alarms where serviceid=%d",serviceid); + zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql); + result = DBselect(sql); + + if(DBnum_rows(result) == 0) + { + zabbix_log(LOG_LEVEL_DEBUG, "Result for MAX is empty" ); + ret = FAIL; + } + else + { + clock=atoi(DBget_field(result,0,0)); + DBfree_result(result); + + sprintf(sql,"select value from service_alarms where serviceid=%d and clock=%d",serviceid,clock); + zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql); + result = DBselect(sql); + if(DBnum_rows(result)==1) + { + if(atoi(DBget_field(result,0,0)) == status) + { + ret = SUCCEED; + } + } + } + + DBfree_result(result); + + return ret; +} + int add_alarm(int triggerid,int status,int clock) { char sql[MAX_STRING_LEN+1]; @@ -374,6 +417,26 @@ int add_alarm(int triggerid,int status,int clock) return SUCCEED; } +int DBadd_service_alarm(int serviceid,int status,int clock) +{ + char sql[MAX_STRING_LEN+1]; + + zabbix_log(LOG_LEVEL_DEBUG,"In add_service_alarm()"); + + if(latest_service_alarm(serviceid,status) == SUCCEED) + { + return SUCCEED; + } + + sprintf(sql,"insert into service_alarms(serviceid,clock,value) values(%d,%d,%d)", serviceid, clock, status); + zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql); + DBexecute(sql); + + zabbix_log(LOG_LEVEL_DEBUG,"End of add_service_alarm()"); + + return SUCCEED; +} + #ifdef IT_HELPDESK void update_problems(int triggerid, int value, int clock) { diff --git a/include/db.h b/include/db.h index 6af639ab..091735f2 100644 --- a/include/db.h +++ b/include/db.h @@ -125,14 +125,13 @@ int DBexecute( char *query ); DB_RESULT *DBselect(char *query); char *DBget_field(DB_RESULT *result, int rownum, int fieldnum); int DBnum_rows(DB_RESULT *result); -/*int DBis_empty(DB_RESULT *result);*/ int DBget_function_result(float *result,char *functionid); void 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 clock);*/ +int DBadd_service_alarm(int serviceid,int status,int clock); int DBadd_alert(int actionid, char *type, char *sendto, char *subject, char *message); void DBupdate_triggers_status_after_restart(void); int DBget_prev_trigger_value(int triggerid); diff --git a/include/functions.c b/include/functions.c index f1d0696e..3f8d578b 100644 --- a/include/functions.c +++ b/include/functions.c @@ -628,12 +628,13 @@ void update_serv(int serviceid) int i,j; int status; int serviceupid, algorithm; + int now; DB_RESULT *result,*result2; sprintf(sql,"select l.serviceupid,s.algorithm from services_links l,services s where s.serviceid=l.serviceupid and l.servicedownid=%d",serviceid); result=DBselect(sql); - status=0; + status=0; for(i=0;i<DBnum_rows(result);i++) { serviceupid=atoi(DBget_field(result,i,0)); @@ -653,9 +654,12 @@ void update_serv(int serviceid) status=atoi(DBget_field(result2,j,0)); } } + DBfree_result(result2); + + now=time(NULL); + DBadd_service_alarm(atoi(DBget_field(result,i,0)),status,now); sprintf(sql,"update services set status=%d where serviceid=%d",status,atoi(DBget_field(result,i,0))); DBexecute(sql); - DBfree_result(result2); } else { @@ -741,10 +745,6 @@ void update_triggers(int itemid) { now = time(NULL); DBupdate_trigger_value(trigger.triggerid,TRIGGER_VALUE_TRUE,now); -/* 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, now);*/ } if((trigger.value == TRIGGER_VALUE_FALSE) || @@ -769,11 +769,6 @@ void update_triggers(int itemid) { now = time(NULL); DBupdate_trigger_value(trigger.triggerid,TRIGGER_VALUE_FALSE,now); - -/* 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,now);*/ } if((trigger.value == TRIGGER_VALUE_TRUE) |
