Fluent::Mixin::TypeConverter
Overview
Fluentd mixin plugin to provides type conversion function as like as in_tail plugin. It acts calling Fluent::TextParser::TypeConverter as mixin. It will let you get easy to implement type conversion for your own plugins.
Function
It supportes these type conversion.
- string
- integer
- float
- bool
- time
- array
Option Parameters
types_delimiter
- [default]
,
- [default]
types_label_delimiter
- [default]
:
- [default]
Configuration
Adding this mixin plugin, it will enabled to use these type conversion in your plugins.
# input plugin example
<source>
@type foo_bar
tag test.message
# type conversion with this rule before emit.
types member_id:int,temperature:float
</source>
# output plugin example
<match test.foo>
@type foo_bar
tag test.message
# type conversion with this rule before emit.
types member_id:int,temperature:float
</match>
Another examples are written in unit test.
Usage
1. edit gemspec
add dependency for .gemspec file like below. For more detail, see gemspec example
spec.add_runtime_dependency "fluent-mixin-type-converter"
2. activate fluent-mixin-type-converter for your plugin
It is the instruction in the case of adding fluent-plugin-foobar
.
$ cd fluent-plugin-foobar
$ vim fluent-plugin-foobar.gemspec # edit gemspec
$ bundle install --path vendor/bundle # or just type `bundle install`
3. edit your plugin to implement
It is a quick guide to enable your plugin to use TypeConverter Mixin.
The key points of basic implmentation is just like below.
- add
require 'fluent/mixin/type_converter'
at the top of source - in the case of output plugin, add
include Fluent::HandleTagNameMixin
(recommend)
this is required if you will use kind of 'remove_tag_prefix' option together - add
include Fluent::Mixin::TypeConverter
in intput/output class after HandleTagNameMixin - add
emit_tag = tag.dup
andfilter_record(emit_tag, time, record)
beforeEngine.emit
implement example for input plugin
require 'fluent/mixin/type_converter'
module Fluent
class FooBarInput < Fluent::Input
Plugin.register_input('foo_bar', self)
# ...snip...
include Fluent::Mixin::TypeConverter
config_param :types, :string, :default => nil
config_param :types_delimiter, :string, :default => ','
config_param :types_label_delimiter, :string, :default => ':'
# ...snip...
def (tag, )
emit_tag = tag.dup
filter_record(emit_tag, Engine.now, )
router.emit(emit_tag, Engine.now, )
end
# ...snip...
end
end
implement example for output plugin
require 'fluent/mixin/type_converter'
class Fluent
class FooBarOutput < Fluent::Output
Fluent::Plugin.register_output('foo_bar', self)
# ...snip...
include Fluent::Mixin::TypeConverter
config_param :types, :string, :default => nil
config_param :types_delimiter, :string, :default => ','
config_param :types_label_delimiter, :string, :default => ':'
# ...snip...
def emit(tag, es, chain)
es.each do |time, record|
emit_tag = tag.dup
filter_record(emit_tag, time, record)
Fluent::Engine.emit(emit_tag, time, record)
end
chain.next
end
# ...snip...
end
end
Case Study
These cool plugins are using this mixin!
TODO
Pull requests are very welcome!!
Copyright
Copyright © 2014- Kentaro Yoshida (@yoshi_ken)
License
Apache License, Version 2.0