/****************************************************************************** * * * Function: update_triggers * * * * Purpose: re-calculate and updates values of triggers related to the item * * * * Parameters: itemid - item to update trigger values for * * * * Return value: * * * * Author: Alexei Vladishev * * * * Comments: * * * ******************************************************************************/ void update_triggers(zbx_uint64_t itemid) { char *exp; char error[MAX_STRING_LEN]; int exp_value; DB_TRIGGER trigger; DB_RESULT result; DB_ROW row; zabbix_log( LOG_LEVEL_DEBUG, "In update_triggers [itemid:" ZBX_FS_UI64 "]", itemid); result = DBselect("select distinct t.triggerid,t.expression,t.description,t.url,t.comments,t.status,t.value,t.priority,t.type from triggers t,functions f,items i where i.status<>%d and i.itemid=f.itemid and t.status=%d and f.triggerid=t.triggerid and f.itemid=" ZBX_FS_UI64, ITEM_STATUS_NOTSUPPORTED, TRIGGER_STATUS_ENABLED, itemid); while((row=DBfetch(result))) { ZBX_STR2UINT64(trigger.triggerid,row[0]); strscpy(trigger.expression,row[1]); strscpy(trigger.description,row[2]); trigger.url = row[3]; trigger.comments = row[4]; trigger.status = atoi(row[5]); trigger.value = atoi(row[6]); trigger.priority = atoi(row[7]); trigger.type = atoi(row[8]); exp = strdup(trigger.expression); if( evaluate_expression(&exp_value, &exp, &trigger, error, sizeof(error)) != 0 ) { zabbix_log(LOG_LEVEL_WARNING, "Expression [%s] for item [" ZBX_FS_UI64 "][%s] cannot be evaluated: %s", trigger.expression, itemid, zbx_host_key_string(itemid), error); zabbix_syslog("Expression [%s] for item [" ZBX_FS_UI64 "][%s] cannot be evaluated: %s", trigger.expression, itemid, zbx_host_key_string(itemid), error); /* DBupdate_trigger_value(&trigger, exp_value, time(NULL), error);*//* We shouldn't update triggervalue if expressions failed */ } else { DBupdate_trigger_value(&trigger, exp_value, time(NULL), NULL); } zbx_free(exp); } DBfree_result(result); zabbix_log( LOG_LEVEL_DEBUG, "End update_triggers [" ZBX_FS_UI64 "]", itemid); }
static void update_triggers_status_to_unknown(zbx_uint64_t hostid, int now, char *reason) { const char *__function_name = "update_triggers_status_to_unknown"; DB_RESULT result; DB_ROW row; zbx_uint64_t triggerid; int trigger_type, trigger_value; const char *trigger_error; zabbix_log(LOG_LEVEL_DEBUG, "In %s() hostid:" ZBX_FS_UI64, __function_name, hostid); result = DBselect( "select distinct t.triggerid,t.type,t.value,t.error" " from hosts h,items i,functions f,triggers t" " where h.hostid=i.hostid" " and i.itemid=f.itemid" " and f.triggerid=t.triggerid" " and t.status=%d" " and i.status=%d" " and not i.key_ like '%s'" " and not i.key_ like '%s%%'" " and h.hostid=" ZBX_FS_UI64, TRIGGER_STATUS_ENABLED, ITEM_STATUS_ACTIVE, SERVER_STATUS_KEY, SERVER_ICMPPING_KEY, hostid); while (NULL != (row = DBfetch(result))) { ZBX_STR2UINT64(triggerid, row[0]); trigger_type = atoi(row[1]); trigger_value = atoi(row[2]); trigger_error = row[3]; DBupdate_trigger_value(triggerid, trigger_type, trigger_value, trigger_error, TRIGGER_VALUE_UNKNOWN, now, reason); } DBfree_result(result); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }