fluentd 1.12.1 → 1.12.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fluentd might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.deepsource.toml +13 -0
- data/.github/ISSUE_TEMPLATE/config.yml +2 -2
- data/.github/workflows/linux-test.yaml +36 -0
- data/.github/workflows/{build.yaml → macos-test.yaml} +8 -7
- data/.github/workflows/windows-test.yaml +35 -0
- data/.gitlab-ci.yml +41 -19
- data/CHANGELOG.md +95 -0
- data/MAINTAINERS.md +5 -2
- data/README.md +5 -2
- data/fluentd.gemspec +4 -2
- data/lib/fluent/command/bundler_injection.rb +1 -1
- data/lib/fluent/command/cat.rb +0 -1
- data/lib/fluent/command/plugin_config_formatter.rb +2 -1
- data/lib/fluent/command/plugin_generator.rb +31 -1
- data/lib/fluent/compat/parser.rb +2 -2
- data/lib/fluent/config/section.rb +1 -1
- data/lib/fluent/config/types.rb +2 -2
- data/lib/fluent/event.rb +3 -13
- data/lib/fluent/load.rb +0 -1
- data/lib/fluent/plugin/file_wrapper.rb +39 -3
- data/lib/fluent/plugin/formatter_ltsv.rb +2 -2
- data/lib/fluent/plugin/in_http.rb +1 -1
- data/lib/fluent/plugin/in_monitor_agent.rb +1 -1
- data/lib/fluent/plugin/in_tail/position_file.rb +15 -1
- data/lib/fluent/plugin/in_tail.rb +35 -15
- data/lib/fluent/plugin/out_copy.rb +18 -5
- data/lib/fluent/plugin/out_exec_filter.rb +3 -3
- data/lib/fluent/plugin/out_forward.rb +61 -28
- data/lib/fluent/plugin/output.rb +11 -9
- data/lib/fluent/plugin/parser_csv.rb +2 -2
- data/lib/fluent/plugin/parser_syslog.rb +2 -2
- data/lib/fluent/plugin/storage_local.rb +4 -4
- data/lib/fluent/plugin_helper/server.rb +4 -2
- data/lib/fluent/plugin_helper/socket_option.rb +2 -2
- data/lib/fluent/supervisor.rb +1 -1
- data/lib/fluent/time.rb +57 -1
- data/lib/fluent/version.rb +1 -1
- data/templates/new_gem/fluent-plugin.gemspec.erb +3 -3
- data/test/command/test_fluentd.rb +8 -0
- data/test/config/test_configurable.rb +1 -1
- data/test/plugin/in_tail/test_position_file.rb +58 -4
- data/test/plugin/test_file_wrapper.rb +105 -0
- data/test/plugin/test_in_exec.rb +1 -1
- data/test/plugin/test_in_tail.rb +87 -26
- data/test/plugin/test_out_copy.rb +87 -0
- data/test/plugin/test_out_forward.rb +94 -6
- data/test/plugin/test_out_http.rb +1 -1
- data/test/plugin/test_output.rb +15 -3
- data/test/plugin/test_output_as_buffered_backup.rb +2 -0
- data/test/plugin/test_parser_csv.rb +14 -0
- data/test/plugin/test_parser_syslog.rb +14 -0
- data/test/plugin_helper/service_discovery/test_manager.rb +1 -1
- data/test/plugin_helper/test_child_process.rb +5 -2
- data/test/plugin_helper/test_http_server_helper.rb +1 -1
- data/test/plugin_helper/test_server.rb +8 -2
- data/test/test_event.rb +16 -0
- data/test/test_formatter.rb +30 -0
- data/test/test_output.rb +2 -2
- data/test/test_time_parser.rb +109 -0
- metadata +31 -9
- data/.travis.yml +0 -77
- data/appveyor.yml +0 -31
data/test/plugin/test_output.rb
CHANGED
@@ -390,6 +390,18 @@ class OutputTest < Test::Unit::TestCase
|
|
390
390
|
assert { logs.none? { |log| log.include?("${chunk_id}") } }
|
391
391
|
end
|
392
392
|
|
393
|
+
test '#extract_placeholders does not log for ${chunk_id} placeholder (with @chunk_keys)' do
|
394
|
+
@i.configure(config_element('ROOT', '', {}, [config_element('buffer', 'key1')]))
|
395
|
+
tmpl = "/mypath/${chunk_id}/${key1}/tail"
|
396
|
+
t = event_time('2016-04-11 20:30:00 +0900')
|
397
|
+
v = {key1: "value1", key2: "value2"}
|
398
|
+
c = create_chunk(timekey: t, tag: 'fluentd.test.output', variables: v)
|
399
|
+
@i.log.out.logs.clear
|
400
|
+
@i.extract_placeholders(tmpl, c)
|
401
|
+
logs = @i.log.out.logs
|
402
|
+
assert { logs.none? { |log| log.include?("${chunk_id}") } }
|
403
|
+
end
|
404
|
+
|
393
405
|
test '#extract_placeholders logs warn message with not replaced key' do
|
394
406
|
@i.configure(config_element('ROOT', '', {}, [config_element('buffer', '')]))
|
395
407
|
tmpl = "/mypath/${key1}/test"
|
@@ -868,7 +880,7 @@ class OutputTest < Test::Unit::TestCase
|
|
868
880
|
test "Warn if primary type is different from secondary type and either primary or secondary has custom_format" do
|
869
881
|
o = create_output(:buffered)
|
870
882
|
mock(o.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
|
871
|
-
|
883
|
+
primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput")
|
872
884
|
|
873
885
|
o.configure(config_element('ROOT','',{},[config_element('secondary','',{'@type'=>'test', 'name' => "cool"})]))
|
874
886
|
assert_not_nil o.instance_variable_get(:@secondary)
|
@@ -877,7 +889,7 @@ class OutputTest < Test::Unit::TestCase
|
|
877
889
|
test "don't warn if primary type is the same as secondary type" do
|
878
890
|
o = Fluent::Plugin::TestOutput.new
|
879
891
|
mock(o.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
|
880
|
-
|
892
|
+
primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput" ).never
|
881
893
|
|
882
894
|
o.configure(config_element('ROOT','',{'name' => "cool2"},
|
883
895
|
[config_element('secondary','',{'@type'=>'test', 'name' => "cool"}),
|
@@ -889,7 +901,7 @@ class OutputTest < Test::Unit::TestCase
|
|
889
901
|
test "don't warn if primary type is different from secondary type and both don't have custom_format" do
|
890
902
|
o = create_output(:standard)
|
891
903
|
mock(o.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
|
892
|
-
|
904
|
+
primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput").never
|
893
905
|
|
894
906
|
o.configure(config_element('ROOT','',{},[config_element('secondary','',{'@type'=>'test', 'name' => "cool"})]))
|
895
907
|
assert_not_nil o.instance_variable_get(:@secondary)
|
@@ -173,6 +173,8 @@ class BufferedOutputBackupTest < Test::Unit::TestCase
|
|
173
173
|
waiting(5) {
|
174
174
|
target_dir = File.join(File.dirname(target_file), "*")
|
175
175
|
while Dir.glob(target_dir).size.zero?
|
176
|
+
# Avoid to lose globbed entries on Windows in busy loop
|
177
|
+
sleep 0.1 if Fluent.windows?
|
176
178
|
end
|
177
179
|
}
|
178
180
|
end
|
@@ -183,4 +183,18 @@ class CSVParserTest < ::Test::Unit::TestCase
|
|
183
183
|
# And more...
|
184
184
|
end
|
185
185
|
end
|
186
|
+
|
187
|
+
# "parser_type" config shouldn't hide Fluent::Plugin::Parser#plugin_type
|
188
|
+
# https://github.com/fluent/fluentd/issues/3296
|
189
|
+
data('normal' => :normal, 'fast' => :fast)
|
190
|
+
def test_parser_type_method(engine)
|
191
|
+
d = create_driver('keys' => '["time"]','time_key' => 'time', 'parser_type' => engine.to_s)
|
192
|
+
assert_equal(:text_per_line, d.instance.parser_type)
|
193
|
+
end
|
194
|
+
|
195
|
+
data('normal' => :normal, 'fast' => :fast)
|
196
|
+
def test_parser_engine(engine)
|
197
|
+
d = create_driver('keys' => '["time"]', 'time_key' => 'time', 'parser_engine' => engine.to_s)
|
198
|
+
assert_equal(engine, d.instance.parser_engine)
|
199
|
+
end
|
186
200
|
end
|
@@ -633,4 +633,18 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
633
633
|
end
|
634
634
|
end
|
635
635
|
end
|
636
|
+
|
637
|
+
# "parser_type" config shouldn't hide Fluent::Plugin::Parser#plugin_type
|
638
|
+
# https://github.com/fluent/fluentd/issues/3296
|
639
|
+
data('regexp' => :regexp, 'fast' => :string)
|
640
|
+
def test_parser_type_method(engine)
|
641
|
+
@parser.configure({'parser_type' => engine.to_s})
|
642
|
+
assert_equal(:text_per_line, @parser.instance.parser_type)
|
643
|
+
end
|
644
|
+
|
645
|
+
data('regexp' => :regexp, 'string' => :string)
|
646
|
+
def test_parser_engine(engine)
|
647
|
+
d = @parser.configure({'parser_engine' => engine.to_s})
|
648
|
+
assert_equal(engine, @parser.instance.parser_engine)
|
649
|
+
end
|
636
650
|
end
|
@@ -71,7 +71,7 @@ class TestServiceDiscoveryManager < ::Test::Unit::TestCase
|
|
71
71
|
test 'if new service added and deleted' do
|
72
72
|
sdm = Fluent::PluginHelper::ServiceDiscovery::Manager.new(log: $log)
|
73
73
|
t = TestSdPlugin.new
|
74
|
-
mock(Fluent::Plugin).new_sd(:sd_test, anything) { t }
|
74
|
+
mock(Fluent::Plugin).new_sd(:sd_test, parent: anything) { t }
|
75
75
|
sdm.configure([{ type: :sd_test, conf: config_element('service_discovery', '', {})}])
|
76
76
|
sdm.start
|
77
77
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require_relative '../helper'
|
2
3
|
require 'fluent/plugin_helper/child_process'
|
3
4
|
require 'fluent/plugin/base'
|
@@ -269,10 +270,12 @@ class ChildProcessTest < Test::Unit::TestCase
|
|
269
270
|
Timeout.timeout(TEST_DEADLOCK_TIMEOUT) do
|
270
271
|
ran = false
|
271
272
|
@d.child_process_execute(:t4, "ruby -e 'Signal.trap(:TERM, nil); while sleep 0.1; puts 1; STDOUT.flush rescue nil; end'", mode: [:read]) do |io|
|
272
|
-
m.lock
|
273
|
-
ran = true
|
274
273
|
begin
|
275
274
|
while line = io.readline
|
275
|
+
unless ran
|
276
|
+
m.lock
|
277
|
+
ran = true
|
278
|
+
end
|
276
279
|
ary << line
|
277
280
|
end
|
278
281
|
rescue
|
@@ -354,7 +354,7 @@ class HttpHelperTest < Test::Unit::TestCase
|
|
354
354
|
watcher.should_receive(:stop).once
|
355
355
|
end
|
356
356
|
|
357
|
-
stub(Fluent::PluginHelper::HttpServer::Server).new(anything) { server }
|
357
|
+
stub(Fluent::PluginHelper::HttpServer::Server).new(addr: anything, port: anything, logger: anything, default_app: anything) { server }
|
358
358
|
driver.http_server_create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do
|
359
359
|
# nothing
|
360
360
|
end
|
@@ -234,7 +234,13 @@ class ServerPluginHelperTest < Test::Unit::TestCase
|
|
234
234
|
assert_raise(ArgumentError.new("BUG: backlog is available for tcp/tls")) do
|
235
235
|
@d.__send__(m, :myserver, PORT, proto: proto, backlog: 500){|x| x }
|
236
236
|
end
|
237
|
-
|
237
|
+
end
|
238
|
+
|
239
|
+
data(
|
240
|
+
'server_create udp' => [:server_create, :udp],
|
241
|
+
)
|
242
|
+
test 'raise error if tcp/tls send_keepalive_packet option is specified for udp' do |(m, proto)|
|
243
|
+
assert_raise(ArgumentError.new("BUG: send_keepalive_packet is available for tcp/tls")) do
|
238
244
|
@d.__send__(m, :myserver, PORT, proto: proto, send_keepalive_packet: true){|x| x }
|
239
245
|
end
|
240
246
|
end
|
@@ -1300,7 +1306,7 @@ class ServerPluginHelperTest < Test::Unit::TestCase
|
|
1300
1306
|
|
1301
1307
|
test 'can accept all keyword arguments valid for tcp/tls server' do
|
1302
1308
|
assert_nothing_raised do
|
1303
|
-
@d.server_create_tls(:s, PORT, bind: '127.0.0.1', shared: false, resolve_name: true, linger_timeout: 10, backlog: 500, tls_options: @tls_options) do |data, conn|
|
1309
|
+
@d.server_create_tls(:s, PORT, bind: '127.0.0.1', shared: false, resolve_name: true, linger_timeout: 10, backlog: 500, tls_options: @tls_options, send_keepalive_packet: true) do |data, conn|
|
1304
1310
|
# ...
|
1305
1311
|
end
|
1306
1312
|
end
|
data/test/test_event.rb
CHANGED
@@ -401,6 +401,22 @@ module EventTest
|
|
401
401
|
i += 1
|
402
402
|
}
|
403
403
|
end
|
404
|
+
|
405
|
+
# `any?` represents an Enumerable method which calls `each` internally
|
406
|
+
test 'size_after_any' do
|
407
|
+
@es.any?
|
408
|
+
|
409
|
+
assert_equal 2, @es.size
|
410
|
+
end
|
411
|
+
|
412
|
+
# `any?` represents an Enumerable method which calls `each` internally
|
413
|
+
test 'each_after_any' do
|
414
|
+
@es.any?
|
415
|
+
|
416
|
+
count = 0
|
417
|
+
@es.each { |time, record| count += 1 }
|
418
|
+
assert_equal 2, count
|
419
|
+
end
|
404
420
|
end
|
405
421
|
|
406
422
|
class CompressedMessagePackEventStreamTest < ::Test::Unit::TestCase
|
data/test/test_formatter.rb
CHANGED
@@ -184,6 +184,36 @@ module FormatterTest
|
|
184
184
|
|
185
185
|
assert_equal("message=awesome,greeting=hello#{@newline}", formatted)
|
186
186
|
end
|
187
|
+
|
188
|
+
def record_with_tab
|
189
|
+
{'message' => "awe\tsome", 'greeting' => "hello\t"}
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_format_suppresses_tab
|
193
|
+
@formatter.configure({})
|
194
|
+
formatted = @formatter.format(tag, @time, record_with_tab)
|
195
|
+
|
196
|
+
assert_equal("message:awe some\tgreeting:hello #{@newline}", formatted)
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_format_suppresses_tab_custom_replacement
|
200
|
+
@formatter.configure(
|
201
|
+
'replacement' => 'X',
|
202
|
+
)
|
203
|
+
formatted = @formatter.format(tag, @time, record_with_tab)
|
204
|
+
|
205
|
+
assert_equal("message:aweXsome\tgreeting:helloX#{@newline}", formatted)
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_format_suppresses_custom_delimiter
|
209
|
+
@formatter.configure(
|
210
|
+
'delimiter' => 'w',
|
211
|
+
'label_delimiter' => '=',
|
212
|
+
)
|
213
|
+
formatted = @formatter.format(tag, @time, record)
|
214
|
+
|
215
|
+
assert_equal("message=a esomewgreeting=hello#{@newline}", formatted)
|
216
|
+
end
|
187
217
|
end
|
188
218
|
|
189
219
|
class CsvFormatterTest < ::Test::Unit::TestCase
|
data/test/test_output.rb
CHANGED
@@ -117,7 +117,7 @@ module FluentOutputTest
|
|
117
117
|
end
|
118
118
|
|
119
119
|
mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
|
120
|
-
|
120
|
+
primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output")
|
121
121
|
d.configure(CONFIG + %[
|
122
122
|
<secondary>
|
123
123
|
type test2
|
@@ -133,7 +133,7 @@ module FluentOutputTest
|
|
133
133
|
d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::ObjectBufferedOutput)
|
134
134
|
|
135
135
|
mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
|
136
|
-
|
136
|
+
primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output").never
|
137
137
|
d.configure(CONFIG + %[
|
138
138
|
<secondary>
|
139
139
|
type test2
|
data/test/test_time_parser.rb
CHANGED
@@ -228,4 +228,113 @@ class TimeParserTest < ::Test::Unit::TestCase
|
|
228
228
|
assert_equal_event_time(time, parser.parse("#{time.sec}.#{time.nsec}"))
|
229
229
|
end
|
230
230
|
end
|
231
|
+
|
232
|
+
sub_test_case 'MixedTimeParser fallback' do
|
233
|
+
class DummyForTimeParser
|
234
|
+
include Fluent::Configurable
|
235
|
+
include Fluent::TimeMixin::Parser
|
236
|
+
end
|
237
|
+
|
238
|
+
test 'no time_format_fallbacks failure' do
|
239
|
+
i = DummyForTimeParser.new
|
240
|
+
assert_raise(Fluent::ConfigError.new("time_type is :mixed but time_format and time_format_fallbacks is empty.")) do
|
241
|
+
i.configure(config_element('parse', '', {'time_type' => 'mixed'}))
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
test 'fallback time format failure' do
|
246
|
+
i = DummyForTimeParser.new
|
247
|
+
i.configure(config_element('parse', '',
|
248
|
+
{'time_type' => 'mixed',
|
249
|
+
'time_format_fallbacks' => ['%iso8601']}))
|
250
|
+
parser = i.time_parser_create
|
251
|
+
assert_raise(Fluent::TimeParser::TimeParseError.new("invalid time format: value = INVALID, even though fallbacks: Fluent::TimeParser")) do
|
252
|
+
parser.parse("INVALID")
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
test 'primary format is unixtime, secondary %iso8601 is used' do
|
257
|
+
i = DummyForTimeParser.new
|
258
|
+
i.configure(config_element('parse', '',
|
259
|
+
{'time_type' => 'mixed',
|
260
|
+
'time_format' => 'unixtime',
|
261
|
+
'time_format_fallbacks' => ['%iso8601']}))
|
262
|
+
parser = i.time_parser_create
|
263
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
264
|
+
assert_equal_event_time(time, parser.parse('2021-01-01T12:00:00+0900'))
|
265
|
+
end
|
266
|
+
|
267
|
+
test 'primary format is %iso8601, secondary unixtime is used' do
|
268
|
+
i = DummyForTimeParser.new
|
269
|
+
i.configure(config_element('parse', '',
|
270
|
+
{'time_type' => 'mixed',
|
271
|
+
'time_format' => '%iso8601',
|
272
|
+
'time_format_fallbacks' => ['unixtime']}))
|
273
|
+
parser = i.time_parser_create
|
274
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
275
|
+
assert_equal_event_time(time, parser.parse("#{time.sec}"))
|
276
|
+
end
|
277
|
+
|
278
|
+
test 'primary format is %iso8601, no secondary is used' do
|
279
|
+
i = DummyForTimeParser.new
|
280
|
+
i.configure(config_element('parse', '',
|
281
|
+
{'time_type' => 'mixed',
|
282
|
+
'time_format' => '%iso8601'}))
|
283
|
+
parser = i.time_parser_create
|
284
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
285
|
+
assert_equal_event_time(time, parser.parse("2021-01-01T12:00:00+0900"))
|
286
|
+
end
|
287
|
+
|
288
|
+
test 'primary format is unixtime, no secondary is used' do
|
289
|
+
i = DummyForTimeParser.new
|
290
|
+
i.configure(config_element('parse', '',
|
291
|
+
{'time_type' => 'mixed',
|
292
|
+
'time_format' => 'unixtime'}))
|
293
|
+
parser = i.time_parser_create
|
294
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
295
|
+
assert_equal_event_time(time, parser.parse("#{time.sec}"))
|
296
|
+
end
|
297
|
+
|
298
|
+
test 'primary format is %iso8601, raise error because of no appropriate secondary' do
|
299
|
+
i = DummyForTimeParser.new
|
300
|
+
i.configure(config_element('parse', '',
|
301
|
+
{'time_type' => 'mixed',
|
302
|
+
'time_format' => '%iso8601'}))
|
303
|
+
parser = i.time_parser_create
|
304
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
305
|
+
assert_raise("Fluent::TimeParser::TimeParseError: invalid time format: value = #{time.sec}, even though fallbacks: Fluent::TimeParser") do
|
306
|
+
parser.parse("#{time.sec}")
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
test 'primary format is unixtime, raise error because of no appropriate secondary' do
|
311
|
+
i = DummyForTimeParser.new
|
312
|
+
i.configure(config_element('parse', '',
|
313
|
+
{'time_type' => 'mixed',
|
314
|
+
'time_format' => 'unixtime'}))
|
315
|
+
parser = i.time_parser_create
|
316
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
317
|
+
assert_raise("Fluent::TimeParser::TimeParseError: invalid time format: value = #{time}, even though fallbacks: Fluent::NumericTimeParser") do
|
318
|
+
parser.parse("2021-01-01T12:00:00+0900")
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
test 'fallback to unixtime' do
|
323
|
+
i = DummyForTimeParser.new
|
324
|
+
i.configure(config_element('parse', '', {'time_type' => 'mixed',
|
325
|
+
'time_format_fallbacks' => ['%iso8601', 'unixtime']}))
|
326
|
+
parser = i.time_parser_create
|
327
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
328
|
+
assert_equal_event_time(Fluent::EventTime.new(time.to_i), parser.parse("#{time.sec}"))
|
329
|
+
end
|
330
|
+
|
331
|
+
test 'fallback to %iso8601' do
|
332
|
+
i = DummyForTimeParser.new
|
333
|
+
i.configure(config_element('parse', '', {'time_type' => 'mixed',
|
334
|
+
'time_format_fallbacks' => ['unixtime', '%iso8601']}))
|
335
|
+
parser = i.time_parser_create
|
336
|
+
time = event_time('2021-01-01T12:00:00+0900')
|
337
|
+
assert_equal_event_time(time, parser.parse('2021-01-01T12:00:00+0900'))
|
338
|
+
end
|
339
|
+
end
|
231
340
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluentd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.12.
|
4
|
+
version: 1.12.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -186,6 +186,26 @@ dependencies:
|
|
186
186
|
- - "<"
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: 1.0.0
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
name: webrick
|
191
|
+
requirement: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: 1.4.2
|
196
|
+
- - "<"
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: 1.8.0
|
199
|
+
type: :runtime
|
200
|
+
prerelease: false
|
201
|
+
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: 1.4.2
|
206
|
+
- - "<"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: 1.8.0
|
189
209
|
- !ruby/object:Gem::Dependency
|
190
210
|
name: rake
|
191
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,14 +268,14 @@ dependencies:
|
|
248
268
|
requirements:
|
249
269
|
- - "~>"
|
250
270
|
- !ruby/object:Gem::Version
|
251
|
-
version: '
|
271
|
+
version: '3.0'
|
252
272
|
type: :development
|
253
273
|
prerelease: false
|
254
274
|
version_requirements: !ruby/object:Gem::Requirement
|
255
275
|
requirements:
|
256
276
|
- - "~>"
|
257
277
|
- !ruby/object:Gem::Version
|
258
|
-
version: '
|
278
|
+
version: '3.0'
|
259
279
|
- !ruby/object:Gem::Dependency
|
260
280
|
name: timecop
|
261
281
|
requirement: !ruby/object:Gem::Requirement
|
@@ -350,18 +370,20 @@ executables:
|
|
350
370
|
extensions: []
|
351
371
|
extra_rdoc_files: []
|
352
372
|
files:
|
373
|
+
- ".deepsource.toml"
|
353
374
|
- ".drone.yml"
|
354
375
|
- ".github/ISSUE_TEMPLATE.md"
|
355
376
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
356
377
|
- ".github/ISSUE_TEMPLATE/config.yml"
|
357
378
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
358
379
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
359
|
-
- ".github/workflows/build.yaml"
|
360
380
|
- ".github/workflows/issue-auto-closer.yml"
|
381
|
+
- ".github/workflows/linux-test.yaml"
|
382
|
+
- ".github/workflows/macos-test.yaml"
|
361
383
|
- ".github/workflows/stale-actions.yml"
|
384
|
+
- ".github/workflows/windows-test.yaml"
|
362
385
|
- ".gitignore"
|
363
386
|
- ".gitlab-ci.yml"
|
364
|
-
- ".travis.yml"
|
365
387
|
- ADOPTERS.md
|
366
388
|
- AUTHORS
|
367
389
|
- CHANGELOG.md
|
@@ -373,7 +395,6 @@ files:
|
|
373
395
|
- MAINTAINERS.md
|
374
396
|
- README.md
|
375
397
|
- Rakefile
|
376
|
-
- appveyor.yml
|
377
398
|
- bin/fluent-binlog-reader
|
378
399
|
- bin/fluent-ca-generate
|
379
400
|
- bin/fluent-cap-ctl
|
@@ -739,6 +760,7 @@ files:
|
|
739
760
|
- test/plugin/test_buffer_memory_chunk.rb
|
740
761
|
- test/plugin/test_compressable.rb
|
741
762
|
- test/plugin/test_file_util.rb
|
763
|
+
- test/plugin/test_file_wrapper.rb
|
742
764
|
- test/plugin/test_filter.rb
|
743
765
|
- test/plugin/test_filter_grep.rb
|
744
766
|
- test/plugin/test_filter_parser.rb
|
@@ -910,8 +932,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
910
932
|
- !ruby/object:Gem::Version
|
911
933
|
version: '0'
|
912
934
|
requirements: []
|
913
|
-
|
914
|
-
rubygems_version: 2.7.6.2
|
935
|
+
rubygems_version: 3.2.5
|
915
936
|
signing_key:
|
916
937
|
specification_version: 4
|
917
938
|
summary: Fluentd event collector
|
@@ -977,6 +998,7 @@ test_files:
|
|
977
998
|
- test/plugin/test_buffer_memory_chunk.rb
|
978
999
|
- test/plugin/test_compressable.rb
|
979
1000
|
- test/plugin/test_file_util.rb
|
1001
|
+
- test/plugin/test_file_wrapper.rb
|
980
1002
|
- test/plugin/test_filter.rb
|
981
1003
|
- test/plugin/test_filter_grep.rb
|
982
1004
|
- test/plugin/test_filter_parser.rb
|
data/.travis.yml
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
|
4
|
-
# script: bundle exec rake test TESTOPTS=-v
|
5
|
-
|
6
|
-
# http://rubies.travis-ci.org/
|
7
|
-
# See here for osx_image -> OSX versions: https://docs.travis-ci.com/user/languages/objective-c
|
8
|
-
matrix:
|
9
|
-
include:
|
10
|
-
- rvm: 2.4.9
|
11
|
-
os: linux
|
12
|
-
env: USE_CAPNG=false
|
13
|
-
- rvm: 2.4.9
|
14
|
-
os: linux-ppc64le
|
15
|
-
env: USE_CAPNG=false
|
16
|
-
- rvm: 2.5.7
|
17
|
-
os: linux
|
18
|
-
env: USE_CAPNG=false
|
19
|
-
- rvm: 2.5.7
|
20
|
-
os: linux
|
21
|
-
arch: s390x
|
22
|
-
dist: xenial
|
23
|
-
env: USE_CAPNG=false
|
24
|
-
- rvm: 2.6.5
|
25
|
-
os: linux
|
26
|
-
env: USE_CAPNG=false
|
27
|
-
- rvm: 2.6.6
|
28
|
-
os: linux
|
29
|
-
env: USE_CAPNG=true
|
30
|
-
- rvm: 2.7.0
|
31
|
-
os: linux
|
32
|
-
env: USE_CAPNG=false
|
33
|
-
- rvm: ruby-head
|
34
|
-
os: linux
|
35
|
-
env: USE_CAPNG=false
|
36
|
-
- rvm: ruby-head
|
37
|
-
os: linux-ppc64le
|
38
|
-
env: USE_CAPNG=false
|
39
|
-
- rvm: 2.4.6
|
40
|
-
os: osx
|
41
|
-
osx_image: xcode8.3 # OSX 10.12
|
42
|
-
env: USE_CAPNG=false
|
43
|
-
- rvm: ruby-head
|
44
|
-
os: osx
|
45
|
-
osx_image: xcode8.3 # OSX 10.12
|
46
|
-
env: USE_CAPNG=false
|
47
|
-
allow_failures:
|
48
|
-
- rvm: 2.4.6
|
49
|
-
os: osx
|
50
|
-
osx_image: xcode8.3
|
51
|
-
env: USE_CAPNG=false
|
52
|
-
- rvm: 2.5.7
|
53
|
-
os: linux
|
54
|
-
arch: s390x
|
55
|
-
dist: xenial
|
56
|
-
env: USE_CAPNG=false
|
57
|
-
- rvm: ruby-head
|
58
|
-
env: USE_CAPNG=false
|
59
|
-
|
60
|
-
branches:
|
61
|
-
only:
|
62
|
-
- master
|
63
|
-
|
64
|
-
before_install: |
|
65
|
-
gem update --system=3.1.2
|
66
|
-
if [[ x"${USE_CAPNG}" == "xtrue" ]]; then
|
67
|
-
echo 'gem "capng_c"' >> Gemfile.local
|
68
|
-
fi
|
69
|
-
|
70
|
-
sudo: false
|
71
|
-
dist: trusty # for TLSv1.2 support
|
72
|
-
|
73
|
-
addons:
|
74
|
-
apt:
|
75
|
-
packages:
|
76
|
-
- libgmp3-dev
|
77
|
-
- libcap-ng-dev
|
data/appveyor.yml
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
version: '{build}'
|
2
|
-
|
3
|
-
# init:
|
4
|
-
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
5
|
-
|
6
|
-
install:
|
7
|
-
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
8
|
-
- ruby --version
|
9
|
-
- gem --version
|
10
|
-
# stay 0.14.0 for Windows CI until https://github.com/socketry/protocol-http2/issues/6 will be fixed
|
11
|
-
- ps: Write-Output "gem 'protocol-http2', ['<= 0.14.0']" | Out-File -FilePath Gemfile.local -Encoding default
|
12
|
-
- type Gemfile.local
|
13
|
-
- ridk.cmd exec bundle install
|
14
|
-
build: off
|
15
|
-
test_script:
|
16
|
-
- bundle exec rake test
|
17
|
-
# - bundle exec rake test TESTOPTS=-v
|
18
|
-
|
19
|
-
branches:
|
20
|
-
only:
|
21
|
-
- master
|
22
|
-
|
23
|
-
# https://www.appveyor.com/docs/installed-software/#ruby
|
24
|
-
environment:
|
25
|
-
matrix:
|
26
|
-
- ruby_version: "26-x64"
|
27
|
-
- ruby_version: "26"
|
28
|
-
- ruby_version: "25-x64"
|
29
|
-
- ruby_version: "25"
|
30
|
-
- ruby_version: "24-x64"
|
31
|
-
- ruby_version: "24"
|