<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="generator" content="Osso Notes">
    <title></title></head>
<body>
<p>----- Original message -----
<br>&gt; Since we have type hints available, lets use them! This adds support
<br>&gt; for 32- and 64-bit integers, datetime and boolean types (along with
<br>&gt; the already existing string type, of course) for the mongodb
<br>&gt; destination.
<br>&gt; 
<br>&gt; Signed-off-by: Gergely Nagy &lt;<a href="mailto:algernon@balabit.hu">algernon@balabit.hu</a>&gt;
<br>&gt; ---
<br>&gt;&nbsp; &#32;modules/afmongodb/afmongodb.c |&nbsp; &nbsp; &#32;46
<br>&gt; ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45
<br>&gt; insertions(+), 1 deletion(-)
<br>&gt; 
<br>&gt; diff --git a/modules/afmongodb/afmongodb.c
<br>&gt; b/modules/afmongodb/afmongodb.c index 5230d8f..ea9c002 100644
<br>&gt; --- a/modules/afmongodb/afmongodb.c
<br>&gt; +++ b/modules/afmongodb/afmongodb.c
<br>&gt; @@ -22,6 +22,7 @@
<br>&gt;&nbsp; &nbsp; &#32;*/
<br>&gt;&nbsp; &#32;
<br>&gt;&nbsp; &#32;#include &lt;time.h&gt;
<br>&gt; +#include &lt;stdlib.h&gt;
<br>&gt;&nbsp; &#32;
<br>&gt;&nbsp; &#32;#include "afmongodb.h"
<br>&gt;&nbsp; &#32;#include "afmongodb-parser.h"
<br>&gt; @@ -369,7 +370,50 @@ afmongodb_vp_process_value(const gchar *name, const
<br>&gt; gchar *prefix,&nbsp; &nbsp; &#32;else
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;o = (bson *)user_data;
<br>&gt;&nbsp; &#32;
<br>&gt; -&nbsp; &#32;bson_append_string (o, name, value, -1);
<br>&gt; +&nbsp; &#32;switch (type)
<br>&gt; +&nbsp; &nbsp; &nbsp; &#32;{
<br>&gt; +&nbsp; &nbsp; &nbsp; &#32;case TEMPLATE_TYPE_BOOLEAN:
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;{
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;if (value[0] == 'T' || value[0] == 't' || value[0] == '1')
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;bson_append_boolean (o, name, TRUE);
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;else
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;bson_append_boolean (o, name, FALSE);
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;break;
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;}
<br>&gt; +&nbsp; &nbsp; &nbsp; &#32;case TEMPLATE_TYPE_INT32:
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;{
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;gchar *endptr;
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;gint32 i = (gint32)strtoul(value, &amp;endptr, 10);
<br>&gt; +
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;if (endptr[0] == '\0')
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;bson_append_int32 (o, name, i);
<br>&gt; +
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;break;
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;}
<br>
<br>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.
<br>
<br>&gt; +&nbsp; &nbsp; &nbsp; &#32;case TEMPLATE_TYPE_INT64:
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;{
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;gchar *endptr;
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;gint64 i = (gint64)strtoul(value, &amp;endptr, 10);
<br>
<br>strtoll?
<br>
<br>&gt; +
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;if (endptr[0] == '\0')
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;bson_append_int64 (o, name, i);
<br>&gt; +
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;break;
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;}
<br>&gt; +&nbsp; &nbsp; &nbsp; &#32;case TEMPLATE_TYPE_DATETIME:
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;{
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;gchar *endptr;
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;gint64 i = (gint64)strtoul(value, &amp;endptr, 10) * 1000;
<br>&gt; +
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;if (endptr[0] == '\0')
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;bson_append_utc_datetime (o, name, i);
<br>&gt; +
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;break;
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;}
<br>
<br>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.
<br>
<br>&gt; +&nbsp; &nbsp; &nbsp; &#32;default:
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;bson_append_string (o, name, value, -1);
<br>&gt; +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;break;
<br>&gt; +&nbsp; &nbsp; &nbsp; &#32;}
<br>&gt;&nbsp; &#32;
<br>&gt;&nbsp; &nbsp; &nbsp; &#32;return FALSE;
<br>&gt;&nbsp; &#32;}
<br>&gt; -- 
<br>&gt; 1.7.10.4
<br>&gt; 
<br>&gt; 
<br>&gt; ______________________________________________________________________________
<br>&gt; Member info: <a href="https://lists.balabit.hu/mailman/listinfo/syslog-ng">https://lists.balabit.hu/mailman/listinfo/syslog-ng</a>
<br>&gt; Documentation:
<br>&gt; <a href="http://www.balabit.com/support/documentation/?product=syslog-ng">http://www.balabit.com/support/documentation/?product=syslog-ng</a> FAQ:
<br>&gt; <a href="http://www.balabit.com/wiki/syslog-ng-faq">http://www.balabit.com/wiki/syslog-ng-faq</a>
<br>&gt; 
<br><br></p>
</body>
</html>