fluent-plugin-parser 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -43,6 +43,15 @@ If you want original attribute-data pair in re-emitted message, specify 'reserve
43
43
  reserve_data yes
44
44
  </match>
45
45
 
46
+ Format 'json' is also supported:
47
+
48
+ <match raw.sales.*>
49
+ type parser
50
+ tag sales
51
+ format json
52
+ key_name sales
53
+ </match>
54
+
46
55
  ### DeparserOutput
47
56
 
48
57
  To build CSV from field 'store','item','num', as field 'csv', without raw data:
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |gem|
3
3
  gem.name = "fluent-plugin-parser"
4
- gem.version = "0.1.1"
4
+ gem.version = "0.1.2"
5
5
  gem.authors = ["TAGOMORI Satoshi"]
6
6
  gem.email = ["tagomoris@gmail.com"]
7
7
  gem.description = %q{fluentd plugin to parse single field, or to combine log structure into single field}
@@ -67,6 +67,8 @@ class FluentExt::TextParser
67
67
  end
68
68
 
69
69
  return time, record
70
+ rescue Yajl::ParseError
71
+ return nil, nil
70
72
  end
71
73
  end
72
74
 
@@ -58,11 +58,15 @@ class Fluent::ParserOutput < Fluent::Output
58
58
  t,values = if value
59
59
  @parser.parse(value)
60
60
  else
61
- [nil, {}]
61
+ [nil, nil]
62
62
  end
63
63
  t ||= time
64
- record.update(values)
65
- Fluent::Engine.emit(tag, t, record)
64
+ r = if values
65
+ record.merge(values)
66
+ else
67
+ record
68
+ end
69
+ Fluent::Engine.emit(tag, t, r)
66
70
  }
67
71
  else
68
72
  es.each {|time,record|
@@ -70,10 +74,12 @@ class Fluent::ParserOutput < Fluent::Output
70
74
  t,values = if value
71
75
  @parser.parse(value)
72
76
  else
73
- [nil, {}]
77
+ [nil, nil]
74
78
  end
75
79
  t ||= time
76
- Fluent::Engine.emit(tag, t, values)
80
+ if values
81
+ Fluent::Engine.emit(tag, t, values)
82
+ end
77
83
  }
78
84
  end
79
85
  chain.next
@@ -118,5 +118,75 @@ class ParserOutputTest < Test::Unit::TestCase
118
118
  assert_equal '3', second[2]['x']
119
119
  assert_equal '4', second[2]['y']
120
120
  assert_equal '20120402182100', second[2]['t']
121
+
122
+ d3 = create_driver(%[
123
+ tag parsed
124
+ key_name data
125
+ format /^(?<x>[0-9])(?<y>[0-9]) (?<t>.+)$/
126
+ ], 'test.in')
127
+ time = Time.parse("2012-04-02 18:20:59").to_i
128
+ d3.run do
129
+ d3.emit({'data' => '12 20120402182059'}, time)
130
+ d3.emit({'data' => '34 20120402182100'}, time)
131
+ d3.emit({'data' => 'xy 20120402182101'}, time)
132
+ end
133
+ emits = d3.emits
134
+ assert_equal 2, emits.length
135
+
136
+ d3x = create_driver(%[
137
+ tag parsed
138
+ key_name data
139
+ format /^(?<x>\d)(?<y>\d) (?<t>.+)$/
140
+ reserve_data yes
141
+ ], 'test.in')
142
+ time = Time.parse("2012-04-02 18:20:59").to_i
143
+ d3x.run do
144
+ d3x.emit({'data' => '12 20120402182059'}, time)
145
+ d3x.emit({'data' => '34 20120402182100'}, time)
146
+ d3x.emit({'data' => 'xy 20120402182101'}, time)
147
+ end
148
+ emits = d3x.emits
149
+ assert_equal 3, emits.length
150
+
151
+ d4 = create_driver(%[
152
+ tag parsed
153
+ key_name data
154
+ format json
155
+ ], 'test.in')
156
+ time = Time.parse("2012-04-02 18:20:59").to_i
157
+ d4.run do
158
+ d4.emit({'data' => '{"xxx":"first","yyy":"second"}', 'xxx' => 'x', 'yyy' => 'y'}, time)
159
+ d4.emit({'data' => 'foobar', 'xxx' => 'x', 'yyy' => 'y'}, time)
160
+ end
161
+ emits = d4.emits
162
+ assert_equal 1, emits.length
163
+
164
+ d4x = create_driver(%[
165
+ tag parsed
166
+ key_name data
167
+ format json
168
+ reserve_data yes
169
+ ], 'test.in')
170
+ time = Time.parse("2012-04-02 18:20:59").to_i
171
+ d4x.run do
172
+ d4x.emit({'data' => '{"xxx":"first","yyy":"second"}', 'xxx' => 'x', 'yyy' => 'y'}, time)
173
+ d4x.emit({'data' => 'foobar', 'xxx' => 'x', 'yyy' => 'y'}, time)
174
+ end
175
+ emits = d4x.emits
176
+ assert_equal 2, emits.length
177
+
178
+ first = emits[0]
179
+ assert_equal 'parsed', first[0]
180
+ assert_equal time, first[1]
181
+ assert_equal '{"xxx":"first","yyy":"second"}', first[2]['data']
182
+ assert_equal 'first', first[2]['xxx']
183
+ assert_equal 'second', first[2]['yyy']
184
+
185
+ second = emits[1]
186
+ assert_equal 'parsed', second[0]
187
+ assert_equal time, second[1]
188
+ assert_equal 'foobar', second[2]['data']
189
+ assert_equal 'x', second[2]['xxx']
190
+ assert_equal 'y', second[2]['yyy']
121
191
  end
122
192
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: