void afamqp_dd_set_routing_key(LogDriver *d, const gchar *routing_key) { AMQPDestDriver *self = (AMQPDestDriver *) d; log_template_compile(self->routing_key_template, routing_key, NULL); }
void afsql_dd_set_table(LogDriver *s, const gchar *table) { AFSqlDestDriver *self = (AFSqlDestDriver *) s; log_template_compile(self->table, table, NULL); }
static gboolean tf_graphite_prepare(LogTemplateFunction *self, gpointer s, LogTemplate *parent, gint argc, gchar *argv[], GError **error) { TFGraphiteState *state = (TFGraphiteState *)s; ValuePairsTransformSet *vpts; if (!tf_graphite_parse_command_line_arguments(state, &argc, &argv, parent)) return FALSE; if (!state->timestamp_template) { state->timestamp_template = log_template_new(parent->cfg, "graphite_timestamp_template"); log_template_compile(state->timestamp_template, "$R_UNIXTIME", NULL); } state->vp = value_pairs_new_from_cmdline (parent->cfg, argc, argv, error); if (!state->vp) return FALSE; /* Always replace a leading dot with an underscore. */ vpts = value_pairs_transform_set_new(".*"); value_pairs_transform_set_add_func(vpts, value_pairs_new_transform_replace_prefix(".", "_")); value_pairs_add_transforms(state->vp, vpts); return TRUE; }
gboolean tf_cond_prepare(LogTemplateFunction *self, LogTemplate *parent, gint argc, gchar *argv[], gpointer *state, GDestroyNotify *state_destroy, GError **error) { TFCondState *args; CfgLexer *lexer; gint i; g_return_val_if_fail(error == NULL || *error == NULL, FALSE); args = g_malloc0(sizeof(TFCondState) + (argc - 1) * sizeof(LogTemplate *)); args->argc = argc - 1; lexer = cfg_lexer_new_buffer(argv[0], strlen(argv[0])); if (!cfg_run_parser(parent->cfg, lexer, &filter_expr_parser, (gpointer *) &args->filter, NULL)) { g_set_error(error, LOG_TEMPLATE_ERROR, LOG_TEMPLATE_ERROR_COMPILE, "Error parsing conditional filter expression"); goto error; } for (i = 1; i < argc; i++) { args->argv[i - 1] = log_template_new(parent->cfg, NULL); log_template_set_escape(args->argv[i - 1], TRUE); if (!log_template_compile(args->argv[i - 1], argv[i], error)) goto error; } *state = args; *state_destroy = (GDestroyNotify) tf_cond_free_state; return TRUE; error: tf_cond_free_state(args); return FALSE; }
gboolean tf_simple_func_prepare(LogTemplateFunction *self, gpointer s, LogTemplate *parent, gint argc, gchar *argv[], GError **error) { TFSimpleFuncState *state = (TFSimpleFuncState *) s; gint i; g_return_val_if_fail(error == NULL || *error == NULL, FALSE); state->argv = g_malloc(sizeof(LogTemplate *) * (argc - 1)); /* NOTE: the argv argument con tains the function name as argv[0], * but the LogTemplate array doesn't. Thus the index is shifted by * one. */ for (i = 0; i < argc - 1; i++) { state->argv[i] = log_template_new(parent->cfg, NULL); log_template_set_escape(state->argv[i], parent->escape); if (!log_template_compile(state->argv[i], argv[i + 1], error)) goto error; } state->argc = argc - 1; return TRUE; error: return FALSE; }
void afamqp_dd_set_body(LogDriver *d, const gchar *body) { AMQPDestDriver *self = (AMQPDestDriver *) d; if (!self->body_template) self->body_template = log_template_new(configuration, NULL); log_template_compile(self->body_template, body, NULL); }
void afstomp_dd_set_body(LogDriver *d, const gchar *body) { STOMPDestDriver *self = (STOMPDestDriver *) d; GlobalConfig *cfg = log_pipe_get_config((LogPipe *)d); if (!self->body_template) self->body_template = log_template_new(cfg, NULL); log_template_compile(self->body_template, body, NULL); }
static gboolean tf_graphite_set_timestamp(const gchar *option_name, const gchar *value, gpointer data, GError **error) { TFGraphiteArgumentsUserData *args = (TFGraphiteArgumentsUserData *) data; args->state->timestamp_template = log_template_new(args->cfg, "graphite_timestamp_template"); log_template_compile(args->state->timestamp_template, value, NULL); return TRUE; };
static gboolean riemann_worker_init(LogPipe *s) { RiemannDestDriver *self = (RiemannDestDriver *)s; GlobalConfig *cfg = log_pipe_get_config(s); if (!log_dest_driver_init_method(s)) return FALSE; log_template_options_init(&self->template_options, cfg); if (!self->server) self->server = g_strdup("127.0.0.1"); if (self->port == -1) self->port = 5555; if (!self->fields.host) { self->fields.host = log_template_new(cfg, NULL); log_template_compile(self->fields.host, "${HOST}", NULL); } if (!self->fields.service) { self->fields.service = log_template_new(cfg, NULL); log_template_compile(self->fields.service, "${PROGRAM}", NULL); } _value_pairs_always_exclude_properties(self); if (self->event.batch_size_max <= 0) self->event.batch_size_max = 1; self->event.list = (riemann_event_t **)malloc (sizeof (riemann_event_t *) * self->event.batch_size_max); msg_verbose("Initializing Riemann destination", evt_tag_str("driver", self->super.super.super.id), evt_tag_str("server", self->server), evt_tag_int("port", self->port), NULL); return log_threaded_dest_driver_start(s); }
int testcase_replace(const gchar *log, const gchar *re, gchar *replacement, const gchar *expected_result, const gint matcher_flags, LogMatcher *m) { LogMessage *msg; LogTemplate *r; gchar *result; gssize length; gchar buf[1024]; gssize msglen; NVHandle nonasciiz = log_msg_get_value_handle("NON-ASCIIZ"); const gchar *value; GSockAddr *sa; sa = g_sockaddr_inet_new("10.10.10.10", 1010); msg = log_msg_new(log, strlen(log), sa, &parse_options); g_sockaddr_unref(sa); /* NOTE: we test how our matchers cope with non-zero terminated values. We don't change message_len, only the value */ g_snprintf(buf, sizeof(buf), "%sAAAAAAAAAAAA", log_msg_get_value(msg, LM_V_MESSAGE, &msglen)); log_msg_set_value(msg, log_msg_get_value_handle("MESSAGE2"), buf, -1); /* add a non-zero terminated indirect value which contains the whole message */ log_msg_set_value_indirect(msg, nonasciiz, log_msg_get_value_handle("MESSAGE2"), 0, 0, msglen); log_matcher_set_flags(m, matcher_flags); log_matcher_compile(m, re); r = log_template_new(configuration, NULL); log_template_compile(r, replacement, NULL); NVTable *nv_table = nv_table_ref(msg->payload); value = log_msg_get_value(msg, nonasciiz, &msglen); result = log_matcher_replace(m, msg, nonasciiz, value, msglen, r, &length); value = log_msg_get_value(msg, nonasciiz, &msglen); nv_table_unref(nv_table); if (strncmp(result ? result : value, expected_result, result ? length : msglen) != 0) { fprintf(stderr, "Testcase failure. pattern=%s, result=%.*s, expected=%s\n", re, (gint) length, result ? result : value, expected_result); exit(1); } g_free(result); log_template_unref(r); log_matcher_unref(m); log_msg_unref(msg); return 0; }
gboolean synthetic_message_add_value_template_string(SyntheticMessage *self, GlobalConfig *cfg, const gchar *name, const gchar *value, GError **error) { LogTemplate *value_template; gboolean result = FALSE; /* NOTE: we shouldn't use the name property for LogTemplate structs, see the comment at log_template_set_name() */ value_template = log_template_new(cfg, name); if (log_template_compile(value_template, value, error)) { synthetic_message_add_value_template(self, name, value_template); result = TRUE; } log_template_unref(value_template); return result; }
void test_pattern(const gchar *pattern, const gchar *rule, gboolean match) { gboolean result; LogMessage *msg = log_msg_new_empty(); static LogTemplate *templ; GString *res = g_string_sized_new(128); static TimeZoneInfo *tzinfo = NULL; PDBInput input; if (!tzinfo) tzinfo = time_zone_info_new(NULL); if (!templ) { templ = log_template_new(configuration, "dummy"); log_template_compile(templ, "$TEST", NULL); } log_msg_set_value(msg, LM_V_HOST, MYHOST, strlen(MYHOST)); log_msg_set_value(msg, LM_V_PROGRAM, "test", strlen(MYHOST)); log_msg_set_value(msg, LM_V_MESSAGE, pattern, strlen(pattern)); result = pattern_db_process(patterndb, PDB_INPUT_WRAP_MESSAGE(&input, msg)); log_template_format(templ, msg, NULL, LTZ_LOCAL, 0, NULL, res); if (strcmp(res->str, pattern) == 0) { test_msg("Rule: '%s' Value '%s' is inserted into $TEST res:(%s)\n", rule, pattern, res->str); } if ((match && !result) || (!match && result)) { test_fail("FAIL: Value '%s' is %smatching for pattern '%s' \n", rule, !!result ? "" : "not ", pattern); } else { test_msg("Value '%s' is %smatching for pattern '%s' \n", rule, !!result ? "" : "not ", pattern); } g_string_free(res, TRUE); log_msg_unref(msg); }
static gboolean _compile_selector_template(AddContextualDataTemplateSelector *self) { GError *error = NULL; if (!self->selector_template_string) { msg_error("No selector set."); return FALSE; } if (!log_template_compile(self->selector_template, self->selector_template_string, &error)) { msg_error("Failed to compile template", evt_tag_str("template", self->selector_template_string), evt_tag_str("error", error->message)); return FALSE; } return TRUE; }