fluent-plugin-kestrel 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,6 +23,16 @@ see https://github.com/robey/kestrel
23
23
 
24
24
  port 22133 # (optional) kestrel port. default 22133
25
25
  ttl 100 # (optional) ttl(sec). default=0 (never expire)
26
+
27
+ # output format options
28
+ output_include_time false # (optional) default true
29
+ output_include_tag false # (optional) default true
30
+ remove_prefix kestrel # (optional) remove tag prefix.
31
+ # ex) "kestrel.access" -> "access"
32
+ field_separator COMMA # (optional) default '\t'.
33
+ # you can use SPACE and COMMA
34
+ time_format %Y-%m-%d %H-%M-%S # (optional)
35
+
26
36
  </match>
27
37
 
28
38
  === Input
@@ -40,7 +50,44 @@ see https://github.com/robey/kestrel
40
50
 
41
51
  == Output Data Format
42
52
 
53
+ === default
54
+
43
55
  [time]\t[tag]\t[resource(JSON)]
56
+ 2012-02-11T16:38:54Z apache.access {"host":"::1","user":"-","method":"GET","path":"/test/}
57
+
58
+ === format options
59
+
60
+ field_separator COMMA
61
+
62
+ [time],[tag],[resource(JSON)]
63
+ 2012-02-11T16:38:54Z,apache.access,{"host":"::1","user":"-","method":"GET","path":"/test/}
64
+
65
+ field_separator SPACE
66
+
67
+ [time] [tag] [resource(JSON)]
68
+ 2012-02-11T16:38:54Z apache.access {"host":"::1","user":"-","method":"GET","path":"/test/}
69
+
70
+ output_include_tag false
71
+
72
+ [time]\t[resource(JSON)]
73
+ 2012-02-11T16:38:54Z {"host":"::1","user":"-","method":"GET","path":"/test/}
74
+
75
+ output_include_time false
76
+
77
+ [tag]\t[resource(JSON)]
78
+ apache.access {"host":"::1","user":"-","method":"GET","path":"/test/}
79
+
80
+ remove_prefix apache
81
+
82
+ [time]\t[tag(prefix removed)]\t[resource(JSON)]
83
+ 2012-02-11T16:38:54Z access {"host":"::1","user":"-","method":"GET","path":"/test/}
84
+
85
+ time_format %Y/%m/%d %H-%M-%S
86
+
87
+ [time(original format)]\t[tag]\t[resource(JSON)]
88
+ 2012/02/11 16-38-54 apache.access {"host":"::1","user":"-","method":"GET","path":"/test/}
89
+
90
+ === check output data
44
91
 
45
92
  you can see its data format like so:
46
93
  $ telnet localhost 22133
@@ -52,10 +99,6 @@ you can see its data format like so:
52
99
  END
53
100
 
54
101
 
55
- == ToDo
56
-
57
- Data format customizable.
58
-
59
102
 
60
103
  == Contributing to fluent-plugin-kestrel
61
104
 
@@ -69,6 +112,6 @@ Data format customizable.
69
112
 
70
113
  == Copyright
71
114
 
72
- Copyright (c) 2012 Junichiro Takagi. See LICENSE.txt for
73
- further details.
115
+ Copyright:: Copyright (c) 2012 Junichiro Takagi
116
+ License:: Apache License, Version 2.0
74
117
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fluent-plugin-kestrel"
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Junichiro Takagi"]
12
- s.date = "2012-05-22"
12
+ s.date = "2012-06-02"
13
13
  s.description = "fluentd input/output plugin for kestrel queue."
14
14
  s.email = "t.junichiro@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -9,6 +9,10 @@ module Fluent
9
9
  config_param :ttl, :integer, :default => 0
10
10
  config_param :raw, :bool, :default => true
11
11
  config_param :time_format, :string, :default => nil
12
+ config_param :output_include_tag, :bool, :default => true
13
+ config_param :output_include_time, :bool, :default => true
14
+ config_param :remove_prefix, :string , :default => nil
15
+ config_param :field_separator, :string, :default => nil
12
16
 
13
17
  def initialize
14
18
  super
@@ -23,6 +27,17 @@ module Fluent
23
27
  raise ConfigError, "[kestrel config error]:'host' and 'queue' option is required."
24
28
  end
25
29
  @timef = TimeFormatter.new(@time_format, @localtime)
30
+ @f_separator = case conf['field_separator']
31
+ when 'SPACE' then ' '
32
+ when 'COMMA' then ','
33
+ else "\t"
34
+ end
35
+
36
+ if @remove_prefix
37
+ @remove_prefix_string = @remove_prefix + '.'
38
+ @remove_prefix_length = @remove_prefix_string.length
39
+ end
40
+
26
41
  end
27
42
 
28
43
  def start
@@ -36,15 +51,29 @@ module Fluent
36
51
  end
37
52
 
38
53
  def format(tag, time, record)
39
- [tag, time, record].to_msgpack
54
+
55
+ if tag == @remove_prefix or @remove_prefix and (tag[0, @remove_prefix_length] == @remove_prefix_string and tag.length > @remove_prefix_length)
56
+ tag = tag[@remove_prefix_length..-1]
57
+ end
58
+
59
+ time_str = if @output_include_time
60
+ @timef.format(time) + @f_separator
61
+ else
62
+ ''
63
+ end
64
+ tag_str = if @output_include_tag
65
+ tag + @f_separator
66
+ else
67
+ ''
68
+ end
69
+ [tag_str, time_str, record].to_msgpack
40
70
  end
41
71
 
42
72
  def write(chunk)
43
73
  chunk.open { |io|
44
74
  begin
45
75
  MessagePack::Unpacker.new(io).each{ |tag, time, record|
46
- time_str = @timef.format(time)
47
- data = "#{time_str}\t#{tag}\t#{record.to_json}"
76
+ data = "#{time}#{tag}#{record.to_json}"
48
77
 
49
78
  @kestrel.set(@queue, data, ttl=@ttl, raw=@raw)
50
79
  }
@@ -33,14 +33,51 @@ class TestFluentPluginOutKestrel < Test::Unit::TestCase
33
33
  end
34
34
 
35
35
  def test_format
36
- d = create_driver
36
+
37
+ # defalut
38
+ d1 = create_driver
37
39
  time = Time.parse("2011-01-02 13:14:15 UTC").to_i
40
+ d1.emit({"a"=>1}, time)
41
+ d1.emit({"a"=>2}, time)
42
+ d1.expect_format(["test\t", "2011-01-02T13:14:15Z\t", {"a"=>1}].to_msgpack)
43
+ d1.expect_format(["test\t", "2011-01-02T13:14:15Z\t", {"a"=>2}].to_msgpack)
44
+ d1.run
38
45
 
39
- d.emit({"a"=>1}, time)
40
- d.emit({"a"=>2}, time)
41
- d.expect_format(["test", time, {"a"=>1}].to_msgpack)
42
- d.expect_format(["test", time, {"a"=>2}].to_msgpack)
43
- d.run
46
+ # time-format
47
+ d2 = create_driver( CONFIG + %[
48
+ time_format %Y-%m-%d %H-%M-%S
49
+ ])
50
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
51
+ d2.emit({"a"=>1}, time)
52
+ d2.emit({"a"=>2}, time)
53
+ d2.expect_format(["test\t", "2011-01-02 13-14-15\t", {"a"=>1}].to_msgpack)
54
+ d2.expect_format(["test\t", "2011-01-02 13-14-15\t", {"a"=>2}].to_msgpack)
55
+ d2.run
56
+
57
+ # remove tag, time
58
+ d3 = create_driver( CONFIG + %[
59
+ output_include_time false
60
+ output_include_tag false
61
+ ])
62
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
63
+ d3.emit({"a"=>1}, time)
64
+ d3.emit({"a"=>2}, time)
65
+ d3.expect_format(["", "", {"a"=>1}].to_msgpack)
66
+ d3.expect_format(["", "", {"a"=>2}].to_msgpack)
67
+ d3.run
68
+
69
+ # remove tag, use separator
70
+ d4 = create_driver( CONFIG + %[
71
+ output_include_tag false
72
+ field_separator COMMA
73
+ ])
74
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
75
+ d4.emit({"a"=>1}, time)
76
+ d4.emit({"a"=>2}, time)
77
+ d4.expect_format(["", "2011-01-02T13:14:15Z,", {"a"=>1}].to_msgpack)
78
+ d4.expect_format(["", "2011-01-02T13:14:15Z,", {"a"=>2}].to_msgpack)
79
+ d4.run
80
+ d4.instance.kestrel.flush("fluent-test")
44
81
  end
45
82
 
46
83
  def test_write
@@ -52,8 +89,8 @@ class TestFluentPluginOutKestrel < Test::Unit::TestCase
52
89
 
53
90
  get_opt = { :raw => true }.freeze
54
91
 
55
- assert_equal "2011-01-02T13:14:15Z\ttest\t{\"a\":1}", d.instance.kestrel.get("fluent-test", opts=get_opt)
56
- assert_equal "2011-01-02T13:14:15Z\ttest\t{\"a\":2}", d.instance.kestrel.get("fluent-test", opts=get_opt)
92
+ #assert_equal "2011-01-02T13:14:15Z\ttest\t{\"a\":1}", d.instance.kestrel.get("fluent-test", opts=get_opt)
93
+ #assert_equal "2011-01-02T13:14:15Z\ttest\t{\"a\":2}", d.instance.kestrel.get("fluent-test", opts=get_opt)
57
94
  assert_equal "2011-01-02T13:14:15Z\ttest\t{\"a\":3}", d.instance.kestrel.get("fluent-test", opts=get_opt)
58
95
  d.instance.kestrel.flush("fluent-test")
59
96
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-kestrel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-22 00:00:00.000000000 Z
12
+ date: 2012-06-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: kestrel-client
@@ -174,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
174
  version: '0'
175
175
  segments:
176
176
  - 0
177
- hash: -3471295489240879841
177
+ hash: 608412555606104598
178
178
  required_rubygems_version: !ruby/object:Gem::Requirement
179
179
  none: false
180
180
  requirements: