summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxdbhigh/db.c
diff options
context:
space:
mode:
authoralex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-10-21 14:42:51 +0000
committeralex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-10-21 14:42:51 +0000
commitd1b525e2d465dad7ad3b54d24e94f74d5e793f24 (patch)
tree4b92ce667b90b16d40b2cc98815cb343189ca3fb /src/libs/zbxdbhigh/db.c
parentc5478fa0d31ba706255749c0e4be52930cd74745 (diff)
downloadzabbix-d1b525e2d465dad7ad3b54d24e94f74d5e793f24.tar.gz
zabbix-d1b525e2d465dad7ad3b54d24e94f74d5e793f24.tar.xz
zabbix-d1b525e2d465dad7ad3b54d24e94f74d5e793f24.zip
- [DEV-44] more flexible generation of trigger events (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@4882 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxdbhigh/db.c')
-rw-r--r--src/libs/zbxdbhigh/db.c77
1 files changed, 37 insertions, 40 deletions
diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c
index 4e239544..3403dd5e 100644
--- a/src/libs/zbxdbhigh/db.c
+++ b/src/libs/zbxdbhigh/db.c
@@ -539,6 +539,10 @@ int DBupdate_trigger_value(DB_TRIGGER *trigger, int new_value, int now, char *re
DB_EVENT event;
int event_last_status;
int event_prev_status;
+ int update_status;
+
+ if(trigger->triggerid == 100100000000002)
+ zabbix_set_log_level(LOG_LEVEL_DEBUG);
if(reason==NULL)
{
@@ -558,10 +562,21 @@ int DBupdate_trigger_value(DB_TRIGGER *trigger, int new_value, int now, char *re
reason);
}
+ switch(trigger->type)
+ {
+ case TRIGGER_TYPE_MULTIPLE_TRUE:
+ update_status = (trigger->value != new_value) || (new_value == TRIGGER_VALUE_TRUE);
+ update_status = update_status && trigger_dependent(trigger->triggerid) == FAIL;
+ break;
+ case TRIGGER_TYPE_NORMAL:
+ default:
+ update_status = (trigger->value != new_value && trigger_dependent(trigger->triggerid) == FAIL);
+ break;
+ }
/* New trigger value differs from current one AND ...*/
/* ... Do not update status if there are dependencies with status TRUE*/
- if(trigger->value != new_value && trigger_dependent(trigger->triggerid) == FAIL)
+ if(update_status)
{
get_latest_event_status(trigger->triggerid, &event_prev_status, &event_last_status);
@@ -572,7 +587,8 @@ int DBupdate_trigger_value(DB_TRIGGER *trigger, int new_value, int now, char *re
new_value);
/* New trigger status is NOT equal to previous one, update trigger */
- if(trigger->value != new_value)
+ if(trigger->value != new_value ||
+ (trigger->type == TRIGGER_TYPE_MULTIPLE_TRUE && new_value == TRIGGER_VALUE_TRUE))
{
zabbix_log(LOG_LEVEL_DEBUG,"Updating trigger");
if(reason==NULL)
@@ -593,50 +609,30 @@ int DBupdate_trigger_value(DB_TRIGGER *trigger, int new_value, int now, char *re
}
/* The lastest event has the same status, do not generate new one */
- if(event_last_status != new_value)
+ /* Generate also UNKNOWN events, We are not interested in prev trigger value here. */
+ if(event_last_status != new_value ||
+ (trigger->type == TRIGGER_TYPE_MULTIPLE_TRUE && new_value == TRIGGER_VALUE_TRUE)
+ )
{
-/* if( ((trigger->value == TRIGGER_VALUE_TRUE) && (new_value == TRIGGER_VALUE_FALSE)) ||
- ((trigger->value == TRIGGER_VALUE_FALSE) && (new_value == TRIGGER_VALUE_TRUE)) ||
- ((event_last_status == TRIGGER_VALUE_FALSE) && (trigger->value == TRIGGER_VALUE_UNKNOWN) && (new_value == TRIGGER_VALUE_TRUE)) ||
- ((event_last_status == TRIGGER_VALUE_TRUE) && (trigger->value == TRIGGER_VALUE_UNKNOWN) && (new_value == TRIGGER_VALUE_FALSE)) ||
- ((event_prev_status == TRIGGER_VALUE_UNKNOWN) && (event_last_status == TRIGGER_VALUE_UNKNOWN) && (trigger->value == TRIGGER_VALUE_UNKNOWN) && (new_value == TRIGGER_VALUE_TRUE)) ||
- ((event_prev_status == TRIGGER_VALUE_FALSE) && (event_last_status == TRIGGER_VALUE_UNKNOWN) && (trigger->value == TRIGGER_VALUE_UNKNOWN) && (new_value == TRIGGER_VALUE_TRUE)) ||
- ((event_prev_status == TRIGGER_VALUE_TRUE) && (event_last_status == TRIGGER_VALUE_UNKNOWN) && (trigger->value == TRIGGER_VALUE_UNKNOWN) && (new_value == TRIGGER_VALUE_FALSE))
- )*/
-
- /* Generate also UNKNOWN events, We are not interested in prev trigger value here. */
- if(event_last_status != new_value)
-/* if( ((event_last_status == TRIGGER_VALUE_FALSE) && (new_value != TRIGGER_VALUE_FALSE)) ||
- ((event_last_status == TRIGGER_VALUE_TRUE) && (new_value != TRIGGER_VALUE_TRUE)) ||
- ((event_prev_status == TRIGGER_VALUE_UNKNOWN) && (event_last_status == TRIGGER_VALUE_UNKNOWN) && (new_value != TRIGGER_VALUE_UNKNOWN)) ||
- ((event_prev_status == TRIGGER_VALUE_FALSE) && (event_last_status == TRIGGER_VALUE_UNKNOWN) &&(new_value == TRIGGER_VALUE_TRUE)) ||
- ((event_prev_status == TRIGGER_VALUE_TRUE) && (event_last_status == TRIGGER_VALUE_UNKNOWN) && (trigger->value == TRIGGER_VALUE_UNKNOWN) && (new_value == TRIGGER_VALUE_FALSE))
- )*/
+ /* Preparing event for processing */
+ memset(&event,0,sizeof(DB_EVENT));
+ event.eventid = 0;
+ event.source = EVENT_SOURCE_TRIGGERS;
+ event.object = EVENT_OBJECT_TRIGGER;
+ event.objectid = trigger->triggerid;
+ event.clock = now;
+ event.value = new_value;
+ event.acknowledged = 0;
+
+ /* Processing event */
+ if(process_event(&event) == SUCCEED)
{
- /* Preparing event for processing */
- memset(&event,0,sizeof(DB_EVENT));
- event.eventid = 0;
- event.source = EVENT_SOURCE_TRIGGERS;
- event.object = EVENT_OBJECT_TRIGGER;
- event.objectid = trigger->triggerid;
- event.clock = now;
- event.value = new_value;
- event.acknowledged = 0;
-
- /* Processing event */
- if(process_event(&event) == SUCCEED)
- {
- zabbix_log(LOG_LEVEL_DEBUG,"Event processed OK");
- }
- else
- {
- ret = FAIL;
- zabbix_log(LOG_LEVEL_WARNING,"Event processed not OK");
- }
+ zabbix_log(LOG_LEVEL_DEBUG,"Event processed OK");
}
else
{
ret = FAIL;
+ zabbix_log(LOG_LEVEL_WARNING,"Event processed not OK");
}
}
else
@@ -656,6 +652,7 @@ int DBupdate_trigger_value(DB_TRIGGER *trigger, int new_value, int now, char *re
ret = FAIL;
}
zabbix_log(LOG_LEVEL_DEBUG,"End update_trigger_value()");
+ zabbix_set_log_level(LOG_LEVEL_WARNING);
return ret;
}