diff options
author | alex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-10-21 14:42:51 +0000 |
---|---|---|
committer | alex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-10-21 14:42:51 +0000 |
commit | d1b525e2d465dad7ad3b54d24e94f74d5e793f24 (patch) | |
tree | 4b92ce667b90b16d40b2cc98815cb343189ca3fb /src/libs/zbxdbhigh/db.c | |
parent | c5478fa0d31ba706255749c0e4be52930cd74745 (diff) | |
download | zabbix-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.c | 77 |
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; } |