summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-10-30 07:55:36 +0000
committeralex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-10-30 07:55:36 +0000
commit31ed55922b744e4af29a44a78fe14bb1adc92a87 (patch)
tree883782f9faf04b3a6cae4763a0586a7dc6eece05
parent38e3509e392190853028d62f9ad05f7952405479 (diff)
downloadzabbix-31ed55922b744e4af29a44a78fe14bb1adc92a87.tar.gz
zabbix-31ed55922b744e4af29a44a78fe14bb1adc92a87.tar.xz
zabbix-31ed55922b744e4af29a44a78fe14bb1adc92a87.zip
- fixed situations when latest_alarm() may return wrong value (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@3400 97f52cf1-0a1b-0410-bd0e-c28be96e8082
-rw-r--r--ChangeLog1
-rw-r--r--src/libs/zbxdbhigh/db.c31
2 files changed, 23 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index d1c8e55f..1887ce17 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
Changes for 1.3:
+ - fixed situations when latest_alarm() may return wrong value (Alexei)
- developed multitemplate system (Eugene)
- developed group permission system (Eugene)
- added processing of distributed events (Alexei)
diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c
index 6b49a490..8c39f8b0 100644
--- a/src/libs/zbxdbhigh/db.c
+++ b/src/libs/zbxdbhigh/db.c
@@ -718,15 +718,30 @@ static void get_latest_event_status(zbx_uint64_t triggerid, int *prev_status, in
char sql[MAX_STRING_LEN];
DB_RESULT result;
DB_ROW row;
+ int alarmid_max=0;
+ int alarmid_prev_max=0;
+ int value_max;
+ int value_prev_max;
+
zabbix_log(LOG_LEVEL_DEBUG,"In latest_event()");
- zbx_snprintf(sql,sizeof(sql),"select value from events where triggerid=" ZBX_FS_UI64 " order by clock desc",triggerid);
+ zbx_snprintf(sql,sizeof(sql),"select alarmid,value,clock from events where triggerid=" ZBX_FS_UI64 " order by clock desc",triggerid);
zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]", sql);
- result = DBselectN(sql,2);
- row = DBfetch(result);
+ result = DBselectN(sql,20);
- if(!row || DBis_null(row[0])==SUCCEED)
+ while((row=DBfetch(result)))
+ {
+ if(atoi(row[0])>=alarmid_max)
+ {
+ alarmid_prev_max=alarmid_max;
+ value_prev_max=value_max;
+ alarmid_max=atoi(row[0]);
+ value_max=atoi(row[1]);
+ }
+ }
+
+ if(alarmid_max == 0)
{
zabbix_log(LOG_LEVEL_DEBUG, "Result for last is empty" );
*prev_status = TRIGGER_VALUE_UNKNOWN;
@@ -734,15 +749,13 @@ static void get_latest_event_status(zbx_uint64_t triggerid, int *prev_status, in
}
else
{
+ *latest_status = value_max;
*prev_status = TRIGGER_VALUE_FALSE;
- *latest_status = atoi(row[0]);
- row = DBfetch(result);
- if(row && DBis_null(row[0]) != SUCCEED)
+ if(alarmid_prev_max != 0)
{
- *prev_status = atoi(row[0]);
+ *prev_status = value_prev_max;
}
-
}
DBfree_result(result);
}