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.
- data/ChangeLog +9 -0
- data/README.rdoc +4 -1
- data/fluentd.gemspec +1 -0
- data/lib/fluent/input.rb +1 -1
- data/lib/fluent/load.rb +1 -0
- data/lib/fluent/log.rb +84 -9
- data/lib/fluent/output.rb +6 -2
- data/lib/fluent/parser.rb +9 -5
- data/lib/fluent/plugin/in_debug_agent.rb +1 -1
- data/lib/fluent/plugin/in_exec.rb +3 -3
- data/lib/fluent/plugin/in_forward.rb +14 -13
- data/lib/fluent/plugin/in_gc_stat.rb +7 -6
- data/lib/fluent/plugin/in_http.rb +17 -7
- data/lib/fluent/plugin/in_monitor_agent.rb +1 -1
- data/lib/fluent/plugin/in_object_space.rb +8 -7
- data/lib/fluent/plugin/in_status.rb +7 -6
- data/lib/fluent/plugin/in_stream.rb +14 -13
- data/lib/fluent/plugin/in_syslog.rb +17 -15
- data/lib/fluent/plugin/in_tail.rb +46 -19
- data/lib/fluent/plugin/out_copy.rb +1 -1
- data/lib/fluent/plugin/out_exec_filter.rb +14 -13
- data/lib/fluent/plugin/out_forward.rb +16 -15
- data/lib/fluent/plugin/out_roundrobin.rb +5 -1
- data/lib/fluent/plugin/out_stdout.rb +1 -0
- data/lib/fluent/version.rb +1 -1
- data/test/output.rb +61 -0
- data/test/parser.rb +7 -0
- data/test/plugin/in_http.rb +29 -1
- metadata +66 -27
- checksums.yaml +0 -7
@@ -37,7 +37,7 @@ module Fluent
|
|
37
37
|
unless type
|
38
38
|
raise ConfigError, "Missing 'type' parameter on <store> directive"
|
39
39
|
end
|
40
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
323
|
-
|
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
|
-
|
328
|
+
@log.error "exec_filter process unexpectedly exited.", :command=>@command, :ecode=>stat.to_i
|
328
329
|
unless @respawns == 0
|
329
|
-
|
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
|
-
|
389
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
126
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
45
|
+
log.debug "adding store type=#{type.dump}, weight=#{weight}"
|
42
46
|
|
43
47
|
output = Plugin.new_output(type)
|
44
48
|
output.configure(e)
|
data/lib/fluent/version.rb
CHANGED
data/test/output.rb
CHANGED
@@ -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
|
data/test/parser.rb
CHANGED
@@ -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
|
data/test/plugin/in_http.rb
CHANGED
@@ -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.
|
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:
|
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:
|
330
|
+
rubygems_version: 1.8.23
|
292
331
|
signing_key:
|
293
|
-
specification_version:
|
332
|
+
specification_version: 3
|
294
333
|
summary: Fluentd event collector
|
295
334
|
test_files:
|
296
335
|
- test/config.rb
|