diff options
author | alex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-10-30 07:55:36 +0000 |
---|---|---|
committer | alex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-10-30 07:55:36 +0000 |
commit | 31ed55922b744e4af29a44a78fe14bb1adc92a87 (patch) | |
tree | 883782f9faf04b3a6cae4763a0586a7dc6eece05 | |
parent | 38e3509e392190853028d62f9ad05f7952405479 (diff) | |
download | zabbix-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-- | ChangeLog | 1 | ||||
-rw-r--r-- | src/libs/zbxdbhigh/db.c | 31 |
2 files changed, 23 insertions, 9 deletions
@@ -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); } |