static gboolean afmongodb_worker_insert (MongoDBDestDriver *self) { gboolean success; guint8 *oid; LogMessage *msg; LogPathOptions path_options = LOG_PATH_OPTIONS_INIT; afmongodb_dd_connect(self, TRUE); success = log_queue_pop_head(self->queue, &msg, &path_options, FALSE, FALSE); if (!success) return TRUE; msg_set_context(msg); bson_reset (self->bson); oid = mongo_util_oid_new_with_time (self->last_msg_stamp, self->seq_num); bson_append_oid (self->bson, "_id", oid); g_free (oid); value_pairs_walk(self->vp, afmongodb_vp_obj_start, afmongodb_vp_process_value, afmongodb_vp_obj_end, msg, self->seq_num, self->bson); bson_finish (self->bson); if (!mongo_sync_cmd_insert_n(self->conn, self->ns, 1, (const bson **)&self->bson)) { msg_error("Network error while inserting into MongoDB", evt_tag_int("time_reopen", self->time_reopen), NULL); success = FALSE; } msg_set_context(NULL); if (success) { stats_counter_inc(self->stored_messages); step_sequence_number(&self->seq_num); log_msg_ack(msg, &path_options); log_msg_unref(msg); } else { log_queue_push_head(self->queue, msg, &path_options); } return success; }
static gboolean tf_json_append(GString *result, ValuePairs *vp, LogMessage *msg, const LogTemplateOptions *template_options) { json_state_t state; state.need_comma = FALSE; state.buffer = result; state.template_options = template_options; return value_pairs_walk(vp, tf_json_obj_start, tf_json_value, tf_json_obj_end, msg, 0, template_options, &state); }
void test_value_pairs_walk_prefix_data(GlobalConfig *cfg) { ValuePairs *vp; LogMessage *msg; const char* value = "value"; log_template_options_init(&template_options, cfg); msg_format_options_init(&parse_options, cfg); vp = value_pairs_new(); value_pairs_add_glob_pattern(vp, "root.*", TRUE); msg = log_msg_new("test", 4, NULL, &parse_options); log_msg_set_value_by_name(msg, "root.test.alma", value, strlen(value)); log_msg_set_value_by_name(msg, "root.test.korte", value, strlen(value)); value_pairs_walk(vp, test_vp_obj_start, test_vp_value, test_vp_obj_stop, msg, 0, LTZ_LOCAL, &template_options, NULL); value_pairs_unref(vp); log_msg_unref(msg); };
static worker_insert_result_t afmongodb_worker_insert (LogThrDestDriver *s, LogMessage *msg) { MongoDBDestDriver *self = (MongoDBDestDriver *)s; gboolean success; gboolean drop_silently = self->template_options.on_error & ON_ERROR_SILENT; if (!afmongodb_dd_connect(self, TRUE)) return WORKER_INSERT_RESULT_NOT_CONNECTED; bson_reset (self->bson); success = value_pairs_walk(self->vp, afmongodb_vp_obj_start, afmongodb_vp_process_value, afmongodb_vp_obj_end, msg, self->super.seq_num, LTZ_SEND, &self->template_options, self); bson_finish (self->bson); if (!success) { if (!drop_silently) { msg_error("Failed to format message for MongoDB, dropping message", evt_tag_value_pairs("message", self->vp, msg, self->super.seq_num, LTZ_SEND, &self->template_options), evt_tag_str("driver", self->super.super.super.id), NULL); } return WORKER_INSERT_RESULT_DROP; } else { msg_debug("Outgoing message to MongoDB destination", evt_tag_value_pairs("message", self->vp, msg, self->super.seq_num, LTZ_SEND, &self->template_options), evt_tag_str("driver", self->super.super.super.id), NULL); if (!mongo_sync_cmd_insert_n(self->conn, self->ns, 1, (const bson **)&self->bson)) { msg_error("Network error while inserting into MongoDB", evt_tag_int("time_reopen", self->super.time_reopen), evt_tag_str("reason", mongo_sync_conn_get_last_error(self->conn)), evt_tag_str("driver", self->super.super.super.id), NULL); success = FALSE; } } if (!success && (errno == ENOTCONN)) return WORKER_INSERT_RESULT_NOT_CONNECTED; if (!success) return WORKER_INSERT_RESULT_ERROR; return WORKER_INSERT_RESULT_SUCCESS; }