----- Original message -----
Since we have type hints available, lets use them! This adds support for 32- and 64-bit integers, datetime and boolean types (along with the already existing string type, of course) for the mongodb destination.
Signed-off-by: Gergely Nagy <algernon@balabit.hu> --- modules/afmongodb/afmongodb.c | 46 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/modules/afmongodb/afmongodb.c b/modules/afmongodb/afmongodb.c index 5230d8f..ea9c002 100644 --- a/modules/afmongodb/afmongodb.c +++ b/modules/afmongodb/afmongodb.c @@ -22,6 +22,7 @@ */ #include <time.h> +#include <stdlib.h> #include "afmongodb.h" #include "afmongodb-parser.h" @@ -369,7 +370,50 @@ afmongodb_vp_process_value(const gchar *name, const gchar *prefix, else o = (bson *)user_data; - bson_append_string (o, name, value, -1); + switch (type) + { + case TEMPLATE_TYPE_BOOLEAN: + { + if (value[0] == 'T' || value[0] == 't' || value[0] == '1') + bson_append_boolean (o, name, TRUE); + else + bson_append_boolean (o, name, FALSE); + break; + } + case TEMPLATE_TYPE_INT32: + { + gchar *endptr; + gint32 i = (gint32)strtoul(value, &endptr, 10); + + if (endptr[0] == '\0') + bson_append_int32 (o, name, i); + + break; + }
are you sure it's a good idea to drop data for invalid formats? i'd have added as strings in this case. this applies to all cases.
+ case TEMPLATE_TYPE_INT64: + { + gchar *endptr; + gint64 i = (gint64)strtoul(value, &endptr, 10);
strtoll?
+ + if (endptr[0] == '\0') + bson_append_int64 (o, name, i); + + break; + } + case TEMPLATE_TYPE_DATETIME: + { + gchar *endptr; + gint64 i = (gint64)strtoul(value, &endptr, 10) * 1000; + + if (endptr[0] == '\0') + bson_append_utc_datetime (o, name, i); + + break; + }
we might need to support a format with broken-down timestamp. an iso stamp might easily be formatted using a template, and the log message may carry such date in its payload.
+ default: + bson_append_string (o, name, value, -1); + break; + } return FALSE; } -- 1.7.10.4
______________________________________________________________________________ Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng Documentation: http://www.balabit.com/support/documentation/?product=syslog-ng FAQ: http://www.balabit.com/wiki/syslog-ng-faq