summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-08-25 14:24:41 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-08-25 14:24:41 +0000
commit5784b2fcc28da70b6fd6900a711b9c2265cca181 (patch)
treed6aee57b35abb0cf1e442b1eb5b0fb14d1cf6df3 /include
parent73524e327da20dfaebd84dada461366b1778f71a (diff)
downloadzabbix-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.c63
-rw-r--r--include/db.h3
-rw-r--r--include/functions.c17
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)