static void remove_client(int i) { shutdown(clis[i].fd, 2); close(clis[i].fd); if (clis[i].ident_string) free(clis[i].ident_string); if (clis[i].pending_code) free(clis[i].pending_code); free_event_info(clis[i].first_event); log_trace("removed client"); clin--; for (; i < clin; i++) clis[i] = clis[i + 1]; }
static void execute_escalation(DB_ESCALATION *escalation) { const char *__function_name = "execute_escalation"; DB_RESULT result; DB_ROW row; DB_ACTION action; DB_EVENT event; char *error = NULL; int source = (-1); zabbix_log(LOG_LEVEL_DEBUG, "In %s() escalationid:" ZBX_FS_UI64 " status:%s", __function_name, escalation->escalationid, zbx_escalation_status_string(escalation->status)); result = DBselect("select source from events where eventid=" ZBX_FS_UI64, escalation->eventid); if (NULL == (row = DBfetch(result))) error = zbx_dsprintf(error, "event [" ZBX_FS_UI64 "] deleted.", escalation->eventid); else source = atoi(row[0]); DBfree_result(result); if (NULL == error && EVENT_SOURCE_TRIGGERS == source) { /* trigger disabled? */ result = DBselect("select description,status from triggers where triggerid=" ZBX_FS_UI64, escalation->triggerid); if (NULL == (row = DBfetch(result))) error = zbx_dsprintf(error, "trigger [" ZBX_FS_UI64 "] deleted.", escalation->triggerid); else if (TRIGGER_STATUS_DISABLED == atoi(row[1])) error = zbx_dsprintf(error, "trigger '%s' disabled.", row[0]); DBfree_result(result); } if (NULL == error && EVENT_SOURCE_TRIGGERS == source) { /* item disabled? */ result = DBselect( "select i.name" " from items i,functions f,triggers t" " where i.itemid=f.itemid" " and f.triggerid=t.triggerid" " and t.triggerid=" ZBX_FS_UI64 " and i.status=%d", escalation->triggerid, ITEM_STATUS_DISABLED); if (NULL != (row = DBfetch(result))) error = zbx_dsprintf(error, "item '%s' disabled.", row[0]); DBfree_result(result); } if (NULL == error && EVENT_SOURCE_TRIGGERS == source) { /* host disabled? */ result = DBselect( "select h.host" " 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.triggerid=" ZBX_FS_UI64 " and h.status=%d", escalation->triggerid, HOST_STATUS_NOT_MONITORED); if (NULL != (row = DBfetch(result))) error = zbx_dsprintf(error, "host '%s' disabled.", row[0]); DBfree_result(result); } switch (escalation->status) { case ESCALATION_STATUS_ACTIVE: result = DBselect( "select actionid,eventsource,esc_period,def_shortdata,def_longdata," "recovery_msg,status,name" " from actions" " where actionid=" ZBX_FS_UI64, escalation->actionid); break; case ESCALATION_STATUS_RECOVERY: result = DBselect( "select actionid,eventsource,esc_period,r_shortdata,r_longdata,recovery_msg," "status,name" " from actions" " where actionid=" ZBX_FS_UI64, escalation->actionid); break; default: THIS_SHOULD_NEVER_HAPPEN; return; } if (NULL != (row = DBfetch(result))) { memset(&action, 0, sizeof(action)); ZBX_STR2UINT64(action.actionid, row[0]); action.eventsource = atoi(row[1]); action.esc_period = atoi(row[2]); action.shortdata = row[3]; action.recovery_msg = atoi(row[5]); if (ACTION_STATUS_ACTIVE != atoi(row[6])) error = zbx_dsprintf(error, "action '%s' disabled.", row[7]); if (NULL != error) { action.longdata = zbx_dsprintf(action.longdata, "NOTE: Escalation cancelled: %s\n%s", error, row[4]); } else action.longdata = row[4]; switch (escalation->status) { case ESCALATION_STATUS_ACTIVE: if (SUCCEED == get_event_info(escalation->eventid, &event)) execute_operations(escalation, &event, &action); free_event_info(&event); break; case ESCALATION_STATUS_RECOVERY: if (SUCCEED == get_event_info(escalation->r_eventid, &event)) process_recovery_msg(escalation, &event, &action); free_event_info(&event); break; default: break; } if (NULL != error) zbx_free(action.longdata); } else error = zbx_dsprintf(error, "action [" ZBX_FS_UI64 "] deleted", escalation->actionid); DBfree_result(result); if (NULL != error) { escalation->status = ESCALATION_STATUS_COMPLETED; zabbix_log(LOG_LEVEL_WARNING, "escalation cancelled: %s", error); zbx_free(error); } zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
static void execute_escalation(DB_ESCALATION *escalation) { DB_RESULT result; DB_ROW row; DB_ACTION action; DB_EVENT event; char *error = NULL; int source; result = DBselect("select source from events where eventid=" ZBX_FS_UI64, escalation->eventid); if (NULL == (row = DBfetch(result))) error = zbx_dsprintf(error, "Event [" ZBX_FS_UI64 "] deleted.", escalation->eventid); else source = atoi(row[0]); DBfree_result(result); if (NULL == error && EVENT_SOURCE_TRIGGERS == source) { /* Trigger disabled? */ result = DBselect("select description,status from triggers where triggerid=" ZBX_FS_UI64, escalation->triggerid); if (NULL == (row = DBfetch(result))) error = zbx_dsprintf(error, "Trigger [" ZBX_FS_UI64 "] deleted.", escalation->triggerid); else if (TRIGGER_STATUS_DISABLED == atoi(row[1])) error = zbx_dsprintf(error, "Trigger '%s' disabled.", row[0]); DBfree_result(result); } if (NULL == error && EVENT_SOURCE_TRIGGERS == source) { /* Item disabled? */ result = DBselect("select i.description from items i,functions f,triggers t" " where t.triggerid=" ZBX_FS_UI64 " and f.triggerid=t.triggerid" " and i.itemid=f.itemid and i.status=%d", escalation->triggerid, ITEM_STATUS_DISABLED); if (NULL != (row = DBfetch(result))) error = zbx_dsprintf(error, "Item '%s' disabled.", row[0]); DBfree_result(result); } if (NULL == error && EVENT_SOURCE_TRIGGERS == source) { /* Host disabled? */ result = DBselect("select h.host from hosts h,items i,functions f,triggers t" " where t.triggerid=" ZBX_FS_UI64 " and t.triggerid=f.triggerid" " and f.itemid=i.itemid and i.hostid=h.hostid and h.status=%d", escalation->triggerid, HOST_STATUS_NOT_MONITORED); if (NULL != (row = DBfetch(result))) error = zbx_dsprintf(error, "Host '%s' disabled.", row[0]); DBfree_result(result); } switch (escalation->status) { case ESCALATION_STATUS_ACTIVE: result = DBselect("select actionid,eventsource,esc_period,def_shortdata,def_longdata,recovery_msg,status,name" " from actions where actionid=" ZBX_FS_UI64, escalation->actionid); break; case ESCALATION_STATUS_RECOVERY: result = DBselect("select actionid,eventsource,esc_period,r_shortdata,r_longdata,recovery_msg,status,name" " from actions where actionid=" ZBX_FS_UI64, escalation->actionid); break; default: /* Never reached */ return; } if (NULL != (row = DBfetch(result))) { memset(&action, 0, sizeof(action)); ZBX_STR2UINT64(action.actionid, row[0]); action.eventsource = atoi(row[1]); action.esc_period = atoi(row[2]); action.shortdata = strdup(row[3]); action.recovery_msg = atoi(row[5]); if (ACTION_STATUS_ACTIVE != atoi(row[6])) error = zbx_dsprintf(error, "Action '%s' disabled.", row[7]); if (NULL != error) action.longdata = zbx_dsprintf(action.longdata, "NOTE: Escalation cancelled: %s\n%s", error, row[4]); else action.longdata = strdup(row[4]); switch (escalation->status) { case ESCALATION_STATUS_ACTIVE: if (SUCCEED == get_event_info(escalation->eventid, &event)) { substitute_macros(&event, &action, NULL, &action.shortdata); substitute_macros(&event, &action, NULL, &action.longdata); execute_operations(escalation, &event, &action); } free_event_info(&event); break; case ESCALATION_STATUS_RECOVERY: if (SUCCEED == get_event_info(escalation->r_eventid, &event)) { substitute_macros(&event, &action, escalation, &action.shortdata); substitute_macros(&event, &action, escalation, &action.longdata); process_recovery_msg(escalation, &event, &action); } free_event_info(&event); break; default: break; } zbx_free(action.shortdata); zbx_free(action.longdata); } else error = zbx_dsprintf(error, "Action [" ZBX_FS_UI64 "] deleted", escalation->actionid); DBfree_result(result); if (NULL != error) { escalation->status = ESCALATION_STATUS_COMPLETED; zabbix_log(LOG_LEVEL_WARNING, "Escalation cancelled: %s", error); zbx_free(error); } }