static gboolean afinter_source_init(LogPipe *s) { AFInterSource *self = (AFInterSource *) s; GlobalConfig *cfg = log_pipe_get_config(s); if (!log_source_init(s)) return FALSE; self->mark_freq = cfg->mark_freq; afinter_postpone_mark(self->mark_freq); self->mark_timer.expires = next_mark_target; /* post event is used by other threads and can only be unregistered if * current_afinter_source is set to NULL in a thread safe manner */ iv_event_register(&self->post); iv_event_register(&self->schedule_wakeup); afinter_source_start_watches(self); g_static_mutex_lock(&internal_msg_lock); current_internal_source = self; g_static_mutex_unlock(&internal_msg_lock); return TRUE; }
static void log_source_group_queue(LogPipe *s, LogMessage *msg, const LogPathOptions *path_options) { LogSourceGroup *self = (LogSourceGroup *) s; GlobalConfig *cfg = log_pipe_get_config(s); log_msg_set_value(msg, LM_V_SOURCE, self->name, self->name_len); if (msg->flags & LF_LOCAL) afinter_postpone_mark(cfg->mark_freq); log_pipe_queue(self->super.pipe_next, msg, path_options); (*self->processed_messages)++; }
void log_src_driver_queue_method(LogPipe *s, LogMessage *msg, const LogPathOptions *path_options, gpointer user_data) { LogSrcDriver *self = (LogSrcDriver *) s; GlobalConfig *cfg = log_pipe_get_config(s); /* $SOURCE */ if (msg->flags & LF_LOCAL) afinter_postpone_mark(cfg->mark_freq); log_msg_set_value(msg, LM_V_SOURCE, self->super.group, self->group_len); stats_counter_inc(self->super.processed_group_messages); stats_counter_inc(self->received_global_messages); log_pipe_forward_msg(s, msg, path_options); }
static void log_center_queue(LogPipe *s, LogMessage *msg, gint path_flags) { LogCenter *self = (LogCenter *) s; gboolean match, fallbacks, have_fallbacks = 1; gint ci, fi, di; (*self->received_messages)++; afinter_postpone_mark(self->cfg->mark_freq); log_msg_ref(msg); log_msg_ack_block_start(msg, log_center_ack, NULL); for (match = 0, fallbacks = 0; !match && have_fallbacks && (fallbacks <= 1); fallbacks++) { have_fallbacks = 0; for (ci = 0; ci < self->cfg->connections->len; ci++) { LogConnection *conn = (LogConnection *) g_ptr_array_index(self->cfg->connections, ci); if (!fallbacks && (conn->flags & LC_FALLBACK)) { have_fallbacks = 1; continue; } else if (fallbacks && !(conn->flags & LC_FALLBACK)) { continue; } if (!(conn->flags & LC_CATCHALL)) { /* check source */ if (!g_hash_table_lookup(conn->source_cache, msg->source_group->name->str)) { goto next_connection; } } else { /* catchall, every source matches */ ; } for (fi = 0; fi < conn->filters->len; fi++) { LogEndpoint *ep = (LogEndpoint *) g_ptr_array_index(conn->filters, fi); LogFilterRule *f; f = (LogFilterRule *) ep->ref; if (!log_filter_rule_eval(f, msg)) { goto next_connection; } } match = 1; for (di = 0; di < conn->destinations->len; di++) { LogEndpoint *ep = (LogEndpoint *) g_ptr_array_index(conn->destinations, di); LogDestGroup *dest; if (conn->flags & LC_FLOW_CONTROL) log_msg_ack_block_inc(msg); dest = (LogDestGroup *) ep->ref; log_pipe_queue(&dest->super, log_msg_ref(msg), path_flags | ((conn->flags & LC_FLOW_CONTROL) ? 0 : PF_FLOW_CTL_OFF)); (*self->queued_messages)++; } if (conn->flags & LC_FINAL) { break; } next_connection: ; } } /* our own ack */ log_msg_ack(msg); }