[syslog-ng] [PATCH 0/3] Type hinting

Gergely Nagy algernon at balabit.hu
Thu Nov 15 18:24:15 CET 2012


The patches that will follow this overview implement type-hinting
support into LogTemplate and value-pairs(), then extend the mongodb
destination and format-json to use these hints.

In the end, we'll do things like:

mongodb(value-pairs(scope("selected-macros", "nv-pairs")
                    pair("DATE", datetime("$UNIXTIME"))
                    pair("PID", int("$PID"))
                    pair(".bool", boolean("true"))));

And this will use the appropriate types when inserting into mongodb.

The $(format-json) template function works similarly:

template("$(format-json --scope selected-macros,nv-pairs
                        DATE=datetime($UNIXTIME)
                        PID=int($PID)
                        .bool=boolean(TRUE))\n");

I tried to make the code as performant as possible, there are no extra
allocations performed, and in case there is no casting to perform,
it's just an extra integer comparsion. It can be tweaked further, if
so need be, but for now, I'm happy with the results.

Nevertheless, there are a couple of things I'm not entirely satisfied
with (namely, abusing the ScratchBuffers to store the type hint on the
first byte; or the way the value-pairs CLI interface parses type
hints), and I will fix them in the coming days.

While using this isn't the most convenient thing ever, and setting
default types is not possible from within drivers (technically, it is,
but it's awkward), it's a step in the right direction. Once nvpairs
gains proper type support, that'll make things a whole lot sweeter!

This - and any future updates - are available from my
feature/3.4/templates/cast-typehints branch.



More information about the syslog-ng mailing list