fluentd 0.10.42 → 0.10.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

@@ -37,7 +37,7 @@ module Fluent
37
37
  unless type
38
38
  raise ConfigError, "Missing 'type' parameter on <store> directive"
39
39
  end
40
- $log.debug "adding store type=#{type.dump}"
40
+ log.debug "adding store type=#{type.dump}"
41
41
 
42
42
  output = Plugin.new_output(type)
43
43
  output.configure(e)
@@ -114,7 +114,7 @@ module Fluent
114
114
  @time_format_proc = Proc.new {|time| time.to_s }
115
115
  end
116
116
  elsif @in_time_format
117
- $log.warn "in_time_format effects nothing when in_time_key is not specified: #{conf}"
117
+ log.warn "in_time_format effects nothing when in_time_key is not specified: #{conf}"
118
118
  end
119
119
 
120
120
  if @out_time_key
@@ -124,7 +124,7 @@ module Fluent
124
124
  @time_parse_proc = Proc.new {|str| str.to_i }
125
125
  end
126
126
  elsif @out_time_format
127
- $log.warn "out_time_format effects nothing when out_time_key is not specified: #{conf}"
127
+ log.warn "out_time_format effects nothing when out_time_key is not specified: #{conf}"
128
128
  end
129
129
 
130
130
  if @remove_prefix
@@ -180,7 +180,7 @@ module Fluent
180
180
  @rr = 0
181
181
  begin
182
182
  @num_children.times do
183
- c = ChildProcess.new(@parser, @respawns)
183
+ c = ChildProcess.new(@parser, @respawns, log)
184
184
  c.start(@command)
185
185
  @children << c
186
186
  end
@@ -192,7 +192,7 @@ module Fluent
192
192
 
193
193
  def before_shutdown
194
194
  super
195
- $log.debug "out_exec_filter#before_shutdown called"
195
+ log.debug "out_exec_filter#before_shutdown called"
196
196
  @children.each {|c|
197
197
  c.finished = true
198
198
  }
@@ -238,13 +238,14 @@ module Fluent
238
238
  class ChildProcess
239
239
  attr_accessor :finished
240
240
 
241
- def initialize(parser,respawns=0)
241
+ def initialize(parser, respawns=0, log = $log)
242
242
  @pid = nil
243
243
  @thread = nil
244
244
  @parser = parser
245
245
  @respawns = respawns
246
246
  @mutex = Mutex.new
247
247
  @finished = nil
248
+ @log = log
248
249
  end
249
250
 
250
251
  def start(command)
@@ -289,7 +290,7 @@ module Fluent
289
290
  chunk.write_to(@io)
290
291
  rescue Errno::EPIPE => e
291
292
  # Broken pipe (child process unexpectedly exited)
292
- $log.warn "exec_filter Broken pipe, child process maybe exited.", :command => @command
293
+ @log.warn "exec_filter Broken pipe, child process maybe exited.", :command => @command
293
294
  if try_respawn
294
295
  retry # retry chunk#write_to with child respawned
295
296
  else
@@ -312,21 +313,21 @@ module Fluent
312
313
 
313
314
  @respawns -= 1 if @respawns > 0
314
315
  end
315
- $log.warn "exec_filter child process successfully respawned.", :command => @command, :respawns => @respawns
316
+ @log.warn "exec_filter child process successfully respawned.", :command => @command, :respawns => @respawns
316
317
  true
317
318
  end
318
319
 
319
320
  def run
320
321
  @parser.call(@io)
321
322
  rescue
322
- $log.error "exec_filter thread unexpectedly failed with an error.", :command=>@command, :error=>$!.to_s
323
- $log.warn_backtrace $!.backtrace
323
+ @log.error "exec_filter thread unexpectedly failed with an error.", :command=>@command, :error=>$!.to_s
324
+ @log.warn_backtrace $!.backtrace
324
325
  ensure
325
326
  pid, stat = Process.waitpid2(@pid)
326
327
  unless @finished
327
- $log.error "exec_filter process unexpectedly exited.", :command=>@command, :ecode=>stat.to_i
328
+ @log.error "exec_filter process unexpectedly exited.", :command=>@command, :ecode=>stat.to_i
328
329
  unless @respawns == 0
329
- $log.warn "exec_filter child process will respawn for next input data (respawns #{@respawns})."
330
+ @log.warn "exec_filter child process will respawn for next input data (respawns #{@respawns})."
330
331
  end
331
332
  end
332
333
  end
@@ -385,8 +386,8 @@ module Fluent
385
386
 
386
387
  rescue
387
388
  if @suppress_error_log_interval == 0 || Time.now.to_i > @next_log_time
388
- $log.error "exec_filter failed to emit", :error=>$!.to_s, :error_class=>$!.class.to_s, :record=>Yajl.dump(record)
389
- $log.warn_backtrace $!.backtrace
389
+ log.error "exec_filter failed to emit", :error=>$!.to_s, :error_class=>$!.class.to_s, :record=>Yajl.dump(record)
390
+ log.warn_backtrace $!.backtrace
390
391
  @next_log_time = Time.now.to_i + @suppress_error_log_interval
391
392
  end
392
393
  end
@@ -54,7 +54,7 @@ module Fluent
54
54
 
55
55
  # backward compatibility
56
56
  if host = conf['host']
57
- $log.warn "'host' option in forward output is obsoleted. Use '<server> host xxx </server>' instead."
57
+ log.warn "'host' option in forward output is obsoleted. Use '<server> host xxx </server>' instead."
58
58
  port = conf['port']
59
59
  port = port ? port.to_i : DEFAULT_LISTEN_PORT
60
60
  e = conf.add_element('server')
@@ -83,8 +83,8 @@ module Fluent
83
83
 
84
84
  failure = FailureDetector.new(@heartbeat_interval, @hard_timeout, Time.now.to_i.to_f)
85
85
  @nodes << Node.new(name, host, port, weight, standby, failure,
86
- @phi_threshold, recover_sample_size, @expire_dns_cache)
87
- $log.info "adding forwarding server '#{name}'", :host=>host, :port=>port, :weight=>weight
86
+ @phi_threshold, recover_sample_size, @expire_dns_cache, log)
87
+ log.info "adding forwarding server '#{name}'", :host=>host, :port=>port, :weight=>weight
88
88
  }
89
89
  end
90
90
 
@@ -122,8 +122,8 @@ module Fluent
122
122
  def run
123
123
  @loop.run
124
124
  rescue
125
- $log.error "unexpected error", :error=>$!.to_s
126
- $log.error_backtrace
125
+ log.error "unexpected error", :error=>$!.to_s
126
+ log.error_backtrace
127
127
  end
128
128
 
129
129
  def write_objects(tag, chunk)
@@ -167,13 +167,13 @@ module Fluent
167
167
  lost_weight += n.weight
168
168
  end
169
169
  }
170
- $log.debug "rebuilding weight array", :lost_weight=>lost_weight
170
+ log.debug "rebuilding weight array", :lost_weight=>lost_weight
171
171
 
172
172
  if lost_weight > 0
173
173
  standby_nodes.each {|n|
174
174
  if n.available?
175
175
  regular_nodes << n
176
- $log.warn "using standby node #{n.host}:#{n.port}", :weight=>n.weight
176
+ log.warn "using standby node #{n.host}:#{n.port}", :weight=>n.weight
177
177
  lost_weight -= n.weight
178
178
  break if lost_weight <= 0
179
179
  end
@@ -279,7 +279,7 @@ module Fluent
279
279
  rebuild_weight_array
280
280
  end
281
281
  begin
282
- #$log.trace "sending heartbeat #{n.host}:#{n.port} on #{@heartbeat_type}"
282
+ #log.trace "sending heartbeat #{n.host}:#{n.port} on #{@heartbeat_type}"
283
283
  if @heartbeat_type == :tcp
284
284
  send_heartbeat_tcp(n)
285
285
  else
@@ -287,7 +287,7 @@ module Fluent
287
287
  end
288
288
  rescue Errno::EAGAIN, Errno::EWOULDBLOCK, Errno::EINTR
289
289
  # TODO log
290
- $log.debug "failed to send heartbeat packet to #{n.host}:#{n.port}", :error=>$!.to_s
290
+ log.debug "failed to send heartbeat packet to #{n.host}:#{n.port}", :error=>$!.to_s
291
291
  end
292
292
  }
293
293
  end
@@ -317,7 +317,7 @@ module Fluent
317
317
  def on_heartbeat(sockaddr, msg)
318
318
  port, host = Socket.unpack_sockaddr_in(sockaddr)
319
319
  if node = @nodes.find {|n| n.sockaddr == sockaddr }
320
- #$log.trace "heartbeat from '#{node.name}'", :host=>node.host, :port=>node.port
320
+ #log.trace "heartbeat from '#{node.name}'", :host=>node.host, :port=>node.port
321
321
  if node.heartbeat
322
322
  rebuild_weight_array
323
323
  end
@@ -326,7 +326,7 @@ module Fluent
326
326
 
327
327
  class Node
328
328
  def initialize(name, host, port, weight, standby, failure,
329
- phi_threshold, recover_sample_size, expire_dns_cache)
329
+ phi_threshold, recover_sample_size, expire_dns_cache, log)
330
330
  @name = name
331
331
  @host = host
332
332
  @port = port
@@ -337,6 +337,7 @@ module Fluent
337
337
  @recover_sample_size = recover_sample_size
338
338
  @expire_dns_cache = expire_dns_cache
339
339
  @available = true
340
+ @log = log
340
341
 
341
342
  @resolved_host = nil
342
343
  @resolved_time = 0
@@ -393,7 +394,7 @@ module Fluent
393
394
  end
394
395
 
395
396
  if @failure.hard_timeout?(now)
396
- $log.warn "detached forwarding server '#{@name}'", :host=>@host, :port=>@port, :hard_timeout=>true
397
+ @log.warn "detached forwarding server '#{@name}'", :host=>@host, :port=>@port, :hard_timeout=>true
397
398
  @available = false
398
399
  @resolved_host = nil # expire cached host
399
400
  @failure.clear
@@ -403,7 +404,7 @@ module Fluent
403
404
  phi = @failure.phi(now)
404
405
  #$log.trace "phi '#{@name}'", :host=>@host, :port=>@port, :phi=>phi
405
406
  if phi > @phi_threshold
406
- $log.warn "detached forwarding server '#{@name}'", :host=>@host, :port=>@port, :phi=>phi
407
+ @log.warn "detached forwarding server '#{@name}'", :host=>@host, :port=>@port, :phi=>phi
407
408
  @available = false
408
409
  @resolved_host = nil # expire cached host
409
410
  @failure.clear
@@ -416,10 +417,10 @@ module Fluent
416
417
  def heartbeat(detect=true)
417
418
  now = Time.now.to_f
418
419
  @failure.add(now)
419
- #$log.trace "heartbeat from '#{@name}'", :host=>@host, :port=>@port, :available=>@available, :sample_size=>@failure.sample_size
420
+ #@log.trace "heartbeat from '#{@name}'", :host=>@host, :port=>@port, :available=>@available, :sample_size=>@failure.sample_size
420
421
  if detect && !@available && @failure.sample_size > @recover_sample_size
421
422
  @available = true
422
- $log.warn "recovered forwarding server '#{@name}'", :host=>@host, :port=>@port
423
+ @log.warn "recovered forwarding server '#{@name}'", :host=>@host, :port=>@port
423
424
  return true
424
425
  else
425
426
  return nil
@@ -20,6 +20,8 @@ module Fluent
20
20
  Plugin.register_output('roundrobin', self)
21
21
 
22
22
  def initialize
23
+ super
24
+
23
25
  @outputs = []
24
26
  @weights = []
25
27
  end
@@ -28,6 +30,8 @@ module Fluent
28
30
  attr_accessor :rand_seed
29
31
 
30
32
  def configure(conf)
33
+ super
34
+
31
35
  conf.elements.select {|e|
32
36
  e.name == 'store'
33
37
  }.each {|e|
@@ -38,7 +42,7 @@ module Fluent
38
42
 
39
43
  weight = e['weight']
40
44
  weight = weight ? weight.to_i : 1
41
- $log.debug "adding store type=#{type.dump}, weight=#{weight}"
45
+ log.debug "adding store type=#{type.dump}, weight=#{weight}"
42
46
 
43
47
  output = Plugin.new_output(type)
44
48
  output.configure(e)
@@ -34,6 +34,7 @@ module Fluent
34
34
  raise ConfigError, "stdout output output_type should be 'json' or 'hash'"
35
35
  end
36
36
  end
37
+
37
38
  def configure(conf)
38
39
  super
39
40
  @output_proc = OUTPUT_PROCS[@output_type]
@@ -1,5 +1,5 @@
1
1
  module Fluent
2
2
 
3
- VERSION = '0.10.42'
3
+ VERSION = '0.10.43'
4
4
 
5
5
  end
@@ -51,5 +51,66 @@ module FluentOutputTest
51
51
  d.instance.retry_limit.times { d.instance.instance_variable_get(:@error_history) << Engine.now }
52
52
  assert_equal 4, d.instance.calc_retry_wait
53
53
  end
54
+
55
+ def create_mock_driver(conf=CONFIG)
56
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
57
+ attr_accessor :submit_flush_threads
58
+
59
+ def start_mock
60
+ @started = false
61
+ start
62
+ # ensure OutputThread to start successfully
63
+ submit_flush
64
+ sleep 0.5
65
+ while !@started
66
+ submit_flush
67
+ sleep 0.5
68
+ end
69
+ end
70
+
71
+ def try_flush
72
+ @started = true
73
+ @submit_flush_threads ||= {}
74
+ @submit_flush_threads[Thread.current] ||= 0
75
+ @submit_flush_threads[Thread.current] += 1
76
+ end
77
+
78
+ def write(chunk)
79
+ chunk.read
80
+ end
81
+ end.configure(conf)
82
+ end
83
+
84
+ def test_submit_flush_target
85
+ # default
86
+ d = create_mock_driver
87
+ d.instance.start_mock
88
+ assert_equal 0, d.instance.instance_variable_get('@writer_current_position')
89
+ d.instance.submit_flush
90
+ assert_equal 0, d.instance.instance_variable_get('@writer_current_position')
91
+ d.instance.submit_flush
92
+ assert_equal 0, d.instance.instance_variable_get('@writer_current_position')
93
+ d.instance.submit_flush
94
+ assert_equal 0, d.instance.instance_variable_get('@writer_current_position')
95
+ d.instance.submit_flush
96
+ assert_equal 0, d.instance.instance_variable_get('@writer_current_position')
97
+ d.instance.shutdown
98
+ assert_equal 1, d.instance.submit_flush_threads.size
99
+
100
+ # num_threads 4
101
+ d = create_mock_driver(CONFIG + %[num_threads 4])
102
+ d.instance.start
103
+ assert_equal 0, d.instance.instance_variable_get('@writer_current_position')
104
+ d.instance.submit_flush
105
+ assert_equal 1, d.instance.instance_variable_get('@writer_current_position')
106
+ d.instance.submit_flush
107
+ assert_equal 2, d.instance.instance_variable_get('@writer_current_position')
108
+ d.instance.submit_flush
109
+ assert_equal 3, d.instance.instance_variable_get('@writer_current_position')
110
+ d.instance.submit_flush
111
+ assert_equal 0, d.instance.instance_variable_get('@writer_current_position')
112
+ d.instance.shutdown
113
+ assert (d.instance.submit_flush_threads.size > 1), "fails if only one thread works to submit flush"
114
+ end
54
115
  end
55
116
  end
@@ -64,6 +64,13 @@ module ParserTest
64
64
  internal_test_case(TextParser::RegexpParser.new(Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!), 'time_format'=>"%d/%b/%Y:%H:%M:%S %z", 'types'=>'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer'))
65
65
  end
66
66
 
67
+ def test_call_with_configure
68
+ # Specify conf by configure method instaed of intializer
69
+ parser = TextParser::RegexpParser.new(Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!))
70
+ parser.configure('time_format'=>"%d/%b/%Y:%H:%M:%S %z", 'types'=>'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer')
71
+ internal_test_case(parser)
72
+ end
73
+
67
74
  def test_call_with_typed_and_name_separator
68
75
  internal_test_case(TextParser::RegexpParser.new(Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!), 'time_format'=>"%d/%b/%Y:%H:%M:%S %z", 'types'=>'user|string,date|time|%d/%b/%Y:%H:%M:%S %z,flag|bool,path|array,code|float,size|integer', 'types_label_delimiter'=>'|'))
69
76
  end
@@ -25,6 +25,7 @@ class HttpInputTest < Test::Unit::TestCase
25
25
  assert_equal '127.0.0.1', d.instance.bind
26
26
  assert_equal 10*1024*1024, d.instance.body_size_limit
27
27
  assert_equal 5, d.instance.keepalive_timeout
28
+ assert_equal false, d.instance.add_http_headers
28
29
  end
29
30
 
30
31
  def test_time
@@ -58,6 +59,30 @@ class HttpInputTest < Test::Unit::TestCase
58
59
  assert_equal "200", res.code
59
60
  }
60
61
  end
62
+
63
+ d.emit_streams.each { |tag, es|
64
+ assert !include_http_header?(es.first[1])
65
+ }
66
+ end
67
+
68
+ def test_json_with_add_http_headers
69
+ d = create_driver(CONFIG + "add_http_headers true")
70
+
71
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
72
+
73
+ records = [["tag1", time, {"a"=>1}], ["tag2", time, {"a"=>2}]]
74
+
75
+ d.run do
76
+ records.each {|tag,time,record|
77
+ res = post("/#{tag}", {"json"=>record.to_json, "time"=>time.to_s})
78
+ assert_equal "200", res.code
79
+
80
+ }
81
+ end
82
+
83
+ d.emit_streams.each { |tag, es|
84
+ assert include_http_header?(es.first[1])
85
+ }
61
86
  end
62
87
 
63
88
  def test_application_json
@@ -101,5 +126,8 @@ class HttpInputTest < Test::Unit::TestCase
101
126
  req.set_form_data(params)
102
127
  http.request(req)
103
128
  end
104
- end
105
129
 
130
+ def include_http_header?(record)
131
+ record.keys.find { |header| header.start_with?('HTTP_') }
132
+ end
133
+ end
metadata CHANGED
@@ -1,32 +1,34 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluentd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.42
4
+ version: 0.10.43
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Sadayuki Furuhashi
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-12-25 00:00:00.000000000 Z
12
+ date: 2014-02-03 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: msgpack
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: 0.4.4
20
- - - '!='
22
+ - - ! '!='
21
23
  - !ruby/object:Gem::Version
22
24
  version: 0.5.0
23
- - - '!='
25
+ - - ! '!='
24
26
  - !ruby/object:Gem::Version
25
27
  version: 0.5.1
26
- - - '!='
28
+ - - ! '!='
27
29
  - !ruby/object:Gem::Version
28
30
  version: 0.5.2
29
- - - '!='
31
+ - - ! '!='
30
32
  - !ruby/object:Gem::Version
31
33
  version: 0.5.3
32
34
  - - <
@@ -35,20 +37,21 @@ dependencies:
35
37
  type: :runtime
36
38
  prerelease: false
37
39
  version_requirements: !ruby/object:Gem::Requirement
40
+ none: false
38
41
  requirements:
39
- - - '>='
42
+ - - ! '>='
40
43
  - !ruby/object:Gem::Version
41
44
  version: 0.4.4
42
- - - '!='
45
+ - - ! '!='
43
46
  - !ruby/object:Gem::Version
44
47
  version: 0.5.0
45
- - - '!='
48
+ - - ! '!='
46
49
  - !ruby/object:Gem::Version
47
50
  version: 0.5.1
48
- - - '!='
51
+ - - ! '!='
49
52
  - !ruby/object:Gem::Version
50
53
  version: 0.5.2
51
- - - '!='
54
+ - - ! '!='
52
55
  - !ruby/object:Gem::Version
53
56
  version: 0.5.3
54
57
  - - <
@@ -57,20 +60,23 @@ dependencies:
57
60
  - !ruby/object:Gem::Dependency
58
61
  name: json
59
62
  requirement: !ruby/object:Gem::Requirement
63
+ none: false
60
64
  requirements:
61
- - - '>='
65
+ - - ! '>='
62
66
  - !ruby/object:Gem::Version
63
67
  version: 1.4.3
64
68
  type: :runtime
65
69
  prerelease: false
66
70
  version_requirements: !ruby/object:Gem::Requirement
71
+ none: false
67
72
  requirements:
68
- - - '>='
73
+ - - ! '>='
69
74
  - !ruby/object:Gem::Version
70
75
  version: 1.4.3
71
76
  - !ruby/object:Gem::Dependency
72
77
  name: yajl-ruby
73
78
  requirement: !ruby/object:Gem::Requirement
79
+ none: false
74
80
  requirements:
75
81
  - - ~>
76
82
  - !ruby/object:Gem::Version
@@ -78,6 +84,7 @@ dependencies:
78
84
  type: :runtime
79
85
  prerelease: false
80
86
  version_requirements: !ruby/object:Gem::Requirement
87
+ none: false
81
88
  requirements:
82
89
  - - ~>
83
90
  - !ruby/object:Gem::Version
@@ -85,6 +92,7 @@ dependencies:
85
92
  - !ruby/object:Gem::Dependency
86
93
  name: cool.io
87
94
  requirement: !ruby/object:Gem::Requirement
95
+ none: false
88
96
  requirements:
89
97
  - - ~>
90
98
  - !ruby/object:Gem::Version
@@ -92,6 +100,7 @@ dependencies:
92
100
  type: :runtime
93
101
  prerelease: false
94
102
  version_requirements: !ruby/object:Gem::Requirement
103
+ none: false
95
104
  requirements:
96
105
  - - ~>
97
106
  - !ruby/object:Gem::Version
@@ -99,6 +108,7 @@ dependencies:
99
108
  - !ruby/object:Gem::Dependency
100
109
  name: http_parser.rb
101
110
  requirement: !ruby/object:Gem::Requirement
111
+ none: false
102
112
  requirements:
103
113
  - - ~>
104
114
  - !ruby/object:Gem::Version
@@ -106,64 +116,89 @@ dependencies:
106
116
  type: :runtime
107
117
  prerelease: false
108
118
  version_requirements: !ruby/object:Gem::Requirement
119
+ none: false
109
120
  requirements:
110
121
  - - ~>
111
122
  - !ruby/object:Gem::Version
112
123
  version: 0.5.1
124
+ - !ruby/object:Gem::Dependency
125
+ name: sigdump
126
+ requirement: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 0.2.2
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ~>
138
+ - !ruby/object:Gem::Version
139
+ version: 0.2.2
113
140
  - !ruby/object:Gem::Dependency
114
141
  name: rake
115
142
  requirement: !ruby/object:Gem::Requirement
143
+ none: false
116
144
  requirements:
117
- - - '>='
145
+ - - ! '>='
118
146
  - !ruby/object:Gem::Version
119
147
  version: 0.9.2
120
148
  type: :development
121
149
  prerelease: false
122
150
  version_requirements: !ruby/object:Gem::Requirement
151
+ none: false
123
152
  requirements:
124
- - - '>='
153
+ - - ! '>='
125
154
  - !ruby/object:Gem::Version
126
155
  version: 0.9.2
127
156
  - !ruby/object:Gem::Dependency
128
157
  name: parallel_tests
129
158
  requirement: !ruby/object:Gem::Requirement
159
+ none: false
130
160
  requirements:
131
- - - '>='
161
+ - - ! '>='
132
162
  - !ruby/object:Gem::Version
133
163
  version: 0.15.3
134
164
  type: :development
135
165
  prerelease: false
136
166
  version_requirements: !ruby/object:Gem::Requirement
167
+ none: false
137
168
  requirements:
138
- - - '>='
169
+ - - ! '>='
139
170
  - !ruby/object:Gem::Version
140
171
  version: 0.15.3
141
172
  - !ruby/object:Gem::Dependency
142
173
  name: rr
143
174
  requirement: !ruby/object:Gem::Requirement
175
+ none: false
144
176
  requirements:
145
- - - '>='
177
+ - - ! '>='
146
178
  - !ruby/object:Gem::Version
147
179
  version: 1.0.0
148
180
  type: :development
149
181
  prerelease: false
150
182
  version_requirements: !ruby/object:Gem::Requirement
183
+ none: false
151
184
  requirements:
152
- - - '>='
185
+ - - ! '>='
153
186
  - !ruby/object:Gem::Version
154
187
  version: 1.0.0
155
188
  - !ruby/object:Gem::Dependency
156
189
  name: timecop
157
190
  requirement: !ruby/object:Gem::Requirement
191
+ none: false
158
192
  requirements:
159
- - - '>='
193
+ - - ! '>='
160
194
  - !ruby/object:Gem::Version
161
195
  version: 0.3.0
162
196
  type: :development
163
197
  prerelease: false
164
198
  version_requirements: !ruby/object:Gem::Requirement
199
+ none: false
165
200
  requirements:
166
- - - '>='
201
+ - - ! '>='
167
202
  - !ruby/object:Gem::Version
168
203
  version: 0.3.0
169
204
  description: Fluentd is an event collector system. It is a generalized version of
@@ -271,26 +306,30 @@ files:
271
306
  - test/scripts/exec_script.rb
272
307
  homepage: http://fluentd.org/
273
308
  licenses: []
274
- metadata: {}
275
309
  post_install_message:
276
310
  rdoc_options: []
277
311
  require_paths:
278
312
  - lib
279
313
  required_ruby_version: !ruby/object:Gem::Requirement
314
+ none: false
280
315
  requirements:
281
- - - '>='
316
+ - - ! '>='
282
317
  - !ruby/object:Gem::Version
283
318
  version: 1.9.2
284
319
  required_rubygems_version: !ruby/object:Gem::Requirement
320
+ none: false
285
321
  requirements:
286
- - - '>='
322
+ - - ! '>='
287
323
  - !ruby/object:Gem::Version
288
324
  version: '0'
325
+ segments:
326
+ - 0
327
+ hash: -936965180993264578
289
328
  requirements: []
290
329
  rubyforge_project:
291
- rubygems_version: 2.0.3
330
+ rubygems_version: 1.8.23
292
331
  signing_key:
293
- specification_version: 4
332
+ specification_version: 3
294
333
  summary: Fluentd event collector
295
334
  test_files:
296
335
  - test/config.rb