fluentd 1.12.2 → 1.13.2

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.

Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.yaml +69 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.yaml +38 -0
  4. data/.github/workflows/linux-test.yaml +1 -1
  5. data/.github/workflows/windows-test.yaml +19 -3
  6. data/.gitlab-ci.yml +19 -19
  7. data/CHANGELOG.md +153 -0
  8. data/CONTRIBUTING.md +2 -2
  9. data/MAINTAINERS.md +1 -1
  10. data/README.md +8 -5
  11. data/bin/fluentd +8 -1
  12. data/example/counter.conf +1 -1
  13. data/fluentd.gemspec +4 -3
  14. data/lib/fluent/command/cat.rb +19 -3
  15. data/lib/fluent/command/fluentd.rb +1 -2
  16. data/lib/fluent/command/plugin_generator.rb +42 -2
  17. data/lib/fluent/config.rb +1 -1
  18. data/lib/fluent/config/section.rb +5 -0
  19. data/lib/fluent/config/types.rb +15 -0
  20. data/lib/fluent/config/v1_parser.rb +3 -2
  21. data/lib/fluent/env.rb +2 -1
  22. data/lib/fluent/log.rb +1 -0
  23. data/lib/fluent/oj_options.rb +62 -0
  24. data/lib/fluent/plugin/file_wrapper.rb +49 -4
  25. data/lib/fluent/plugin/formatter.rb +1 -0
  26. data/lib/fluent/plugin/formatter_json.rb +9 -7
  27. data/lib/fluent/plugin/in_http.rb +10 -0
  28. data/lib/fluent/plugin/in_tail.rb +150 -39
  29. data/lib/fluent/plugin/in_tail/position_file.rb +15 -1
  30. data/lib/fluent/plugin/out_forward.rb +14 -33
  31. data/lib/fluent/plugin/output.rb +11 -9
  32. data/lib/fluent/plugin/parser_csv.rb +2 -2
  33. data/lib/fluent/plugin/parser_json.rb +2 -3
  34. data/lib/fluent/plugin/parser_syslog.rb +2 -2
  35. data/lib/fluent/plugin/service_discovery.rb +0 -15
  36. data/lib/fluent/plugin/storage_local.rb +1 -1
  37. data/lib/fluent/plugin_helper/http_server/router.rb +1 -1
  38. data/lib/fluent/plugin_helper/server.rb +4 -2
  39. data/lib/fluent/plugin_helper/service_discovery.rb +39 -1
  40. data/lib/fluent/plugin_helper/service_discovery/manager.rb +11 -5
  41. data/lib/fluent/plugin_helper/socket_option.rb +2 -2
  42. data/lib/fluent/supervisor.rb +15 -0
  43. data/lib/fluent/system_config.rb +14 -0
  44. data/lib/fluent/test/driver/storage.rb +30 -0
  45. data/lib/fluent/version.rb +1 -1
  46. data/templates/new_gem/fluent-plugin.gemspec.erb +3 -3
  47. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  48. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  49. data/test/command/test_cat.rb +99 -0
  50. data/test/command/test_plugin_generator.rb +2 -1
  51. data/test/config/test_section.rb +9 -0
  52. data/test/config/test_system_config.rb +46 -0
  53. data/test/config/test_types.rb +7 -0
  54. data/test/plugin/in_tail/test_io_handler.rb +4 -4
  55. data/test/plugin/in_tail/test_position_file.rb +54 -0
  56. data/test/plugin/out_forward/test_connection_manager.rb +0 -6
  57. data/test/plugin/test_file_wrapper.rb +115 -0
  58. data/test/plugin/test_in_forward.rb +59 -83
  59. data/test/plugin/test_in_http.rb +58 -40
  60. data/test/plugin/test_in_syslog.rb +66 -56
  61. data/test/plugin/test_in_tail.rb +329 -10
  62. data/test/plugin/test_in_tcp.rb +45 -32
  63. data/test/plugin/test_in_udp.rb +47 -33
  64. data/test/plugin/test_out_forward.rb +138 -105
  65. data/test/plugin/test_out_stream.rb +18 -8
  66. data/test/plugin/test_output.rb +15 -3
  67. data/test/plugin/test_output_as_buffered_backup.rb +2 -0
  68. data/test/plugin/test_parser_csv.rb +14 -0
  69. data/test/plugin/test_parser_syslog.rb +14 -0
  70. data/test/plugin_helper/http_server/test_route.rb +1 -1
  71. data/test/plugin_helper/service_discovery/test_manager.rb +1 -1
  72. data/test/plugin_helper/test_child_process.rb +1 -1
  73. data/test/plugin_helper/test_http_server_helper.rb +34 -27
  74. data/test/plugin_helper/test_server.rb +144 -139
  75. data/test/plugin_helper/test_service_discovery.rb +74 -14
  76. data/test/plugin_helper/test_socket.rb +16 -9
  77. data/test/test_config.rb +2 -1
  78. data/test/test_event_time.rb +2 -2
  79. data/test/test_oj_options.rb +55 -0
  80. data/test/test_output.rb +2 -2
  81. data/test/test_supervisor.rb +35 -0
  82. metadata +19 -9
  83. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  84. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -23
@@ -17,6 +17,24 @@ class ServiceDiscoveryHelper < Test::Unit::TestCase
17
17
  end
18
18
  end
19
19
 
20
+ class DummyPlugin < Fluent::Plugin::TestBase
21
+ helpers :service_discovery
22
+
23
+ def configure(conf)
24
+ super
25
+ service_discovery_configure(:service_discovery_helper_test, static_default_service_directive: 'node')
26
+ end
27
+
28
+ def select_service(&block)
29
+ service_discovery_select_service(&block)
30
+ end
31
+
32
+ # Make these mehtod public
33
+ def discovery_manager
34
+ super
35
+ end
36
+ end
37
+
20
38
  setup do
21
39
  @sd_file_dir = File.expand_path('../plugin/data/sd_file', __dir__)
22
40
 
@@ -33,7 +51,7 @@ class ServiceDiscoveryHelper < Test::Unit::TestCase
33
51
  end
34
52
  end
35
53
 
36
- test 'start discovery manager' do
54
+ test 'support calling #service_discovery_create_manager and #discovery_manager from plugin' do
37
55
  d = @d = Dummy.new
38
56
 
39
57
  d.service_discovery_create_manager(
@@ -55,13 +73,30 @@ class ServiceDiscoveryHelper < Test::Unit::TestCase
55
73
  assert_equal 1234, services[0].port
56
74
  end
57
75
 
58
- test 'call timer_execute if dynamic configuration' do
59
- d = @d = Dummy.new
76
+ test 'start discovery manager' do
77
+ d = @d = DummyPlugin.new
60
78
 
61
- d.service_discovery_create_manager(
62
- :service_discovery_helper_test,
63
- configurations: [{ type: :file, conf: config_element('file_config', '', { 'path' => File.join(@sd_file_dir, 'config.yml') }) }],
64
- )
79
+ services = [config_element('service', '', { 'host' => '127.0.0.1', 'port' => '1234' })]
80
+ d.configure(config_element('root', '', {}, [config_element('service_discovery', '', {'@type' => 'static'}, services)]))
81
+
82
+ assert_true !!d.discovery_manager
83
+
84
+ mock.proxy(d.discovery_manager).start.once
85
+ mock.proxy(d).timer_execute(:service_discovery_helper_test, anything).never
86
+
87
+ d.start
88
+ d.event_loop_wait_until_start
89
+
90
+ assert_equal 1, d.discovery_manager.services.size
91
+ d.select_service do |serv|
92
+ assert_equal "127.0.0.1", serv.host
93
+ assert_equal 1234, serv.port
94
+ end
95
+ end
96
+
97
+ test 'call timer_execute if dynamic configuration' do
98
+ d = @d = DummyPlugin.new
99
+ d.configure(config_element('root', '', {}, [config_element('service_discovery', '', { '@type' => 'file', 'path' => File.join(@sd_file_dir, 'config.yml' )})]))
65
100
 
66
101
  assert_true !!d.discovery_manager
67
102
  mock.proxy(d.discovery_manager).start.once
@@ -71,25 +106,22 @@ class ServiceDiscoveryHelper < Test::Unit::TestCase
71
106
  end
72
107
 
73
108
  test 'exits service discovery instances without any errors' do
74
- d = @d = Dummy.new
109
+ d = @d = DummyPlugin.new
75
110
  mockv = flexmock('dns_resolver', getaddress: '127.0.0.1')
76
111
  .should_receive(:getresources)
77
112
  .and_return([Resolv::DNS::Resource::IN::SRV.new(1, 10, 8081, 'service1.example.com')])
78
113
  .mock
79
114
  mock(Resolv::DNS).new { mockv }
80
115
 
81
- d.service_discovery_create_manager(
82
- :service_discovery_helper_test2,
83
- configurations: [{ type: :srv, conf: config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com' }) }],
84
- )
116
+ d.configure(config_element('root', '', {}, [config_element('service_discovery', '', { '@type' => 'srv', 'service' => 'service1', 'hostname' => 'example.com' })]))
85
117
 
86
118
  assert_true !!d.discovery_manager
87
119
  mock.proxy(d.discovery_manager).start.once
88
- mock(d).timer_execute(:service_discovery_helper_test2, anything).once
120
+ mock(d).timer_execute(:service_discovery_helper_test, anything).once
89
121
 
90
122
  # To avoid claring `@logs` during `terminate` step
91
123
  # https://github.com/fluent/fluentd/blob/bc78d889f93dad8c2a4e0ad1ca802546185dacba/lib/fluent/test/log.rb#L33
92
- mock(d.log).reset.twice
124
+ mock(d.log).reset.times(3)
93
125
 
94
126
  d.start
95
127
  d.event_loop_wait_until_start
@@ -102,4 +134,32 @@ class ServiceDiscoveryHelper < Test::Unit::TestCase
102
134
 
103
135
  assert_false(d.log.out.logs.any? { |e| e.match?(/thread doesn't exit correctly/) })
104
136
  end
137
+
138
+ test 'static service discovery will be configured automatically when default service directive is specified' do
139
+ d = @d = DummyPlugin.new
140
+
141
+ nodes = [
142
+ config_element('node', '', { 'host' => '192.168.0.1', 'port' => '24224' }),
143
+ config_element('node', '', { 'host' => '192.168.0.2', 'port' => '24224' })
144
+ ]
145
+ d.configure(config_element('root', '', {}, nodes))
146
+
147
+ assert_true !!d.discovery_manager
148
+
149
+ mock.proxy(d.discovery_manager).start.once
150
+ mock.proxy(d).timer_execute(:service_discovery_helper_test, anything).never
151
+
152
+ d.start
153
+ d.event_loop_wait_until_start
154
+
155
+ assert_equal 2, d.discovery_manager.services.size
156
+ d.select_service do |serv|
157
+ assert_equal "192.168.0.1", serv.host
158
+ assert_equal 24224, serv.port
159
+ end
160
+ d.select_service do |serv|
161
+ assert_equal "192.168.0.2", serv.host
162
+ assert_equal 24224, serv.port
163
+ end
164
+ end
105
165
  end
@@ -6,17 +6,24 @@ require 'socket'
6
6
  require 'openssl'
7
7
 
8
8
  class SocketHelperTest < Test::Unit::TestCase
9
- PORT = unused_port
10
9
  CERT_DIR = File.expand_path(File.dirname(__FILE__) + '/data/cert/without_ca')
11
10
  CA_CERT_DIR = File.expand_path(File.dirname(__FILE__) + '/data/cert/with_ca')
12
11
  CERT_CHAINS_DIR = File.expand_path(File.dirname(__FILE__) + '/data/cert/cert_chains')
13
12
 
13
+ def setup
14
+ @port = unused_port
15
+ end
16
+
17
+ def teardown
18
+ @port = nil
19
+ end
20
+
14
21
  class SocketHelperTestPlugin < Fluent::Plugin::TestBase
15
22
  helpers :socket
16
23
  end
17
24
 
18
25
  class EchoTLSServer
19
- def initialize(host = '127.0.0.1', port = PORT, cert_path: nil, private_key_path: nil, ca_path: nil)
26
+ def initialize(port, host: '127.0.0.1', cert_path: nil, private_key_path: nil, ca_path: nil)
20
27
  server = TCPServer.open(host, port)
21
28
  ctx = OpenSSL::SSL::SSLContext.new
22
29
  ctx.cert = OpenSSL::X509::Certificate.new(File.open(cert_path)) if cert_path
@@ -91,8 +98,8 @@ class SocketHelperTest < Test::Unit::TestCase
91
98
  cert_path = File.join(CERT_DIR, 'cert.pem')
92
99
  private_key_path = File.join(CERT_DIR, 'cert-key.pem')
93
100
 
94
- EchoTLSServer.new(cert_path: cert_path, private_key_path: private_key_path).start do
95
- client = SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', PORT, verify_fqdn: false, cert_paths: [cert_path])
101
+ EchoTLSServer.new(@port, cert_path: cert_path, private_key_path: private_key_path).start do
102
+ client = SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', @port, verify_fqdn: false, cert_paths: [cert_path])
96
103
  client.write('hello')
97
104
  assert_equal 'hello', client.readpartial(100)
98
105
  client.close
@@ -105,8 +112,8 @@ class SocketHelperTest < Test::Unit::TestCase
105
112
 
106
113
  ca_cert_path = File.join(CA_CERT_DIR, 'ca-cert.pem')
107
114
 
108
- EchoTLSServer.new(cert_path: cert_path, private_key_path: private_key_path).start do
109
- client = SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', PORT, verify_fqdn: false, cert_paths: [ca_cert_path])
115
+ EchoTLSServer.new(@port, cert_path: cert_path, private_key_path: private_key_path).start do
116
+ client = SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', @port, verify_fqdn: false, cert_paths: [ca_cert_path])
110
117
  client.write('hello')
111
118
  assert_equal 'hello', client.readpartial(100)
112
119
  client.close
@@ -121,8 +128,8 @@ class SocketHelperTest < Test::Unit::TestCase
121
128
  client_cert_path = File.join(CERT_CHAINS_DIR, 'cert.pem')
122
129
  client_private_key_path = File.join(CERT_CHAINS_DIR, 'cert-key.pem')
123
130
 
124
- EchoTLSServer.new(cert_path: cert_path, private_key_path: private_key_path, ca_path: client_ca_cert_path).start do
125
- client = SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', PORT, verify_fqdn: false, cert_path: client_cert_path, private_key_path: client_private_key_path, cert_paths: [cert_path])
131
+ EchoTLSServer.new(@port, cert_path: cert_path, private_key_path: private_key_path, ca_path: client_ca_cert_path).start do
132
+ client = SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', @port, verify_fqdn: false, cert_path: client_cert_path, private_key_path: client_private_key_path, cert_paths: [cert_path])
126
133
  client.write('hello')
127
134
  assert_equal 'hello', client.readpartial(100)
128
135
  client.close
@@ -133,7 +140,7 @@ class SocketHelperTest < Test::Unit::TestCase
133
140
  cert_path = File.expand_path(File.dirname(__FILE__) + '/data/cert/empty.pem')
134
141
 
135
142
  assert_raise Fluent::ConfigError do
136
- SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', PORT, cert_path: cert_path)
143
+ SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', @port, cert_path: cert_path)
137
144
  end
138
145
  end
139
146
  end
data/test/test_config.rb CHANGED
@@ -160,7 +160,8 @@ class ConfigTest < Test::Unit::TestCase
160
160
  prepare_config
161
161
  opts = {
162
162
  :config_path => "#{TMP_DIR}/config_test_1.conf",
163
- :inline_config => "<source>\n type http\n port 2222\n </source>"
163
+ :inline_config => "<source>\n type http\n port 2222\n </source>",
164
+ :use_v1_config => false
164
165
  }
165
166
  assert_nothing_raised do
166
167
  Fluent::Supervisor.new(opts)
@@ -64,8 +64,8 @@ class EventTimeTest < Test::Unit::TestCase
64
64
 
65
65
  test 'Oj.dump' do
66
66
  time = Fluent::EventTime.new(100)
67
- require 'fluent/env'
68
- Oj.default_options = Fluent::DEFAULT_OJ_OPTIONS
67
+ require 'fluent/oj_options'
68
+ Fluent::OjOptions.load_env
69
69
  assert_equal('{"time":100}', Oj.dump({'time' => time}))
70
70
  assert_equal('["tag",100,{"key":"value"}]', Oj.dump(["tag", time, {"key" => "value"}], mode: :compat))
71
71
  end
@@ -0,0 +1,55 @@
1
+ require_relative 'helper'
2
+ require 'fluent/test'
3
+ require 'fluent/oj_options'
4
+
5
+ class OjOptionsTest < ::Test::Unit::TestCase
6
+ begin
7
+ require 'oj'
8
+ @@oj_is_avaibale = true
9
+ rescue LoadError
10
+ @@oj_is_avaibale = false
11
+ end
12
+
13
+ setup do
14
+ @orig_env = {}
15
+ ENV.each do |key, value|
16
+ @orig_env[key] = value if key.start_with?("FLUENT_OJ_OPTION_")
17
+ end
18
+ end
19
+
20
+ teardown do
21
+ ENV.delete_if { |key| key.start_with?("FLUENT_OJ_OPTION_") }
22
+ @orig_env.each { |key, value| ENV[key] = value }
23
+ end
24
+
25
+ test "available?" do
26
+ assert_equal(@@oj_is_avaibale, Fluent::OjOptions.available?)
27
+ end
28
+
29
+ sub_test_case "set by environment variable" do
30
+ test "when no env vars set, returns default options" do
31
+ ENV.delete_if { |key| key.start_with?("FLUENT_OJ_OPTION_") }
32
+ defaults = Fluent::OjOptions::DEFAULTS
33
+ assert_equal(defaults, Fluent::OjOptions.load_env)
34
+ assert_equal(defaults, Oj.default_options.slice(*defaults.keys)) if @@oj_is_avaibale
35
+ end
36
+
37
+ test "valid env var passed with valid value, default is overridden" do
38
+ ENV["FLUENT_OJ_OPTION_BIGDECIMAL_LOAD"] = ":bigdecimal"
39
+ assert_equal(:bigdecimal, Fluent::OjOptions.load_env[:bigdecimal_load])
40
+ assert_equal(:bigdecimal, Oj.default_options[:bigdecimal_load]) if @@oj_is_avaibale
41
+ end
42
+
43
+ test "valid env var passed with invalid value, default is not overriden" do
44
+ ENV["FLUENT_OJ_OPTION_BIGDECIMAL_LOAD"] = ":conor"
45
+ assert_equal(:float, Fluent::OjOptions.load_env[:bigdecimal_load])
46
+ assert_equal(:float, Oj.default_options[:bigdecimal_load]) if @@oj_is_avaibale
47
+ end
48
+
49
+ test "invalid env var passed, nothing done with it" do
50
+ ENV["FLUENT_OJ_OPTION_CONOR"] = ":conor"
51
+ assert_equal(nil, Fluent::OjOptions.load_env[:conor])
52
+ assert_equal(nil, Oj.default_options[:conor]) if @@oj_is_avaibale
53
+ end
54
+ end
55
+ end
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
- { primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output" })
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
- { primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output" }).never
136
+ primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output").never
137
137
  d.configure(CONFIG + %[
138
138
  <secondary>
139
139
  type test2
@@ -7,6 +7,7 @@ require_relative 'test_plugin_classes'
7
7
  require 'net/http'
8
8
  require 'uri'
9
9
  require 'fileutils'
10
+ require 'tempfile'
10
11
 
11
12
  if Fluent.windows?
12
13
  require 'win32/event'
@@ -489,6 +490,40 @@ class SupervisorTest < ::Test::Unit::TestCase
489
490
  assert_equal 10, $log.out.instance_variable_get(:@shift_size)
490
491
  end
491
492
 
493
+ sub_test_case "system log rotation" do
494
+ def parse_text(text)
495
+ basepath = File.expand_path(File.dirname(__FILE__) + '/../../')
496
+ Fluent::Config.parse(text, '(test)', basepath, true).elements.find { |e| e.name == 'system' }
497
+ end
498
+
499
+ def test_override_default_log_rotate
500
+ Tempfile.open do |file|
501
+ config = parse_text(<<-EOS)
502
+ <system>
503
+ <log>
504
+ rotate_age 3
505
+ rotate_size 300
506
+ </log>
507
+ </system>
508
+ EOS
509
+ file.puts(config)
510
+ file.flush
511
+ opts = Fluent::Supervisor.default_options.merge(
512
+ log_path: "#{TMP_DIR}/test.log", config_path: file.path
513
+ )
514
+ sv = Fluent::Supervisor.new(opts)
515
+
516
+ log = sv.instance_variable_get(:@log)
517
+ log.init(:standalone, 0)
518
+ logger = $log.instance_variable_get(:@logger)
519
+
520
+ assert_equal([3, 300],
521
+ [logger.instance_variable_get(:@rotate_age),
522
+ logger.instance_variable_get(:@rotate_size)])
523
+ end
524
+ end
525
+ end
526
+
492
527
  def test_inline_config
493
528
  omit 'this feature is deprecated. see https://github.com/fluent/fluentd/issues/2711'
494
529
 
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.2
4
+ version: 1.13.2
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-03-29 00:00:00.000000000 Z
11
+ date: 2021-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -107,7 +107,7 @@ dependencies:
107
107
  version: 0.5.1
108
108
  - - "<"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.7.0
110
+ version: 0.8.0
111
111
  type: :runtime
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
@@ -117,7 +117,7 @@ dependencies:
117
117
  version: 0.5.1
118
118
  - - "<"
119
119
  - !ruby/object:Gem::Version
120
- version: 0.7.0
120
+ version: 0.8.0
121
121
  - !ruby/object:Gem::Dependency
122
122
  name: sigdump
123
123
  requirement: !ruby/object:Gem::Requirement
@@ -268,14 +268,14 @@ dependencies:
268
268
  requirements:
269
269
  - - "~>"
270
270
  - !ruby/object:Gem::Version
271
- version: '1.0'
271
+ version: '3.0'
272
272
  type: :development
273
273
  prerelease: false
274
274
  version_requirements: !ruby/object:Gem::Requirement
275
275
  requirements:
276
276
  - - "~>"
277
277
  - !ruby/object:Gem::Version
278
- version: '1.0'
278
+ version: '3.0'
279
279
  - !ruby/object:Gem::Dependency
280
280
  name: timecop
281
281
  requirement: !ruby/object:Gem::Requirement
@@ -373,9 +373,9 @@ files:
373
373
  - ".deepsource.toml"
374
374
  - ".drone.yml"
375
375
  - ".github/ISSUE_TEMPLATE.md"
376
- - ".github/ISSUE_TEMPLATE/bug_report.md"
376
+ - ".github/ISSUE_TEMPLATE/bug_report.yaml"
377
377
  - ".github/ISSUE_TEMPLATE/config.yml"
378
- - ".github/ISSUE_TEMPLATE/feature_request.md"
378
+ - ".github/ISSUE_TEMPLATE/feature_request.yaml"
379
379
  - ".github/PULL_REQUEST_TEMPLATE.md"
380
380
  - ".github/workflows/issue-auto-closer.yml"
381
381
  - ".github/workflows/linux-test.yaml"
@@ -519,6 +519,7 @@ files:
519
519
  - lib/fluent/match.rb
520
520
  - lib/fluent/mixin.rb
521
521
  - lib/fluent/msgpack_factory.rb
522
+ - lib/fluent/oj_options.rb
522
523
  - lib/fluent/output.rb
523
524
  - lib/fluent/output_chain.rb
524
525
  - lib/fluent/parser.rb
@@ -664,6 +665,7 @@ files:
664
665
  - lib/fluent/test/driver/multi_output.rb
665
666
  - lib/fluent/test/driver/output.rb
666
667
  - lib/fluent/test/driver/parser.rb
668
+ - lib/fluent/test/driver/storage.rb
667
669
  - lib/fluent/test/driver/test_event_router.rb
668
670
  - lib/fluent/test/filter_test.rb
669
671
  - lib/fluent/test/formatter_test.rb
@@ -689,12 +691,14 @@ files:
689
691
  - templates/new_gem/lib/fluent/plugin/input.rb.erb
690
692
  - templates/new_gem/lib/fluent/plugin/output.rb.erb
691
693
  - templates/new_gem/lib/fluent/plugin/parser.rb.erb
694
+ - templates/new_gem/lib/fluent/plugin/storage.rb.erb
692
695
  - templates/new_gem/test/helper.rb.erb
693
696
  - templates/new_gem/test/plugin/test_filter.rb.erb
694
697
  - templates/new_gem/test/plugin/test_formatter.rb.erb
695
698
  - templates/new_gem/test/plugin/test_input.rb.erb
696
699
  - templates/new_gem/test/plugin/test_output.rb.erb
697
700
  - templates/new_gem/test/plugin/test_parser.rb.erb
701
+ - templates/new_gem/test/plugin/test_storage.rb.erb
698
702
  - templates/plugin_config_formatter/param.md-compact.erb
699
703
  - templates/plugin_config_formatter/param.md-table.erb
700
704
  - templates/plugin_config_formatter/param.md.erb
@@ -702,6 +706,7 @@ files:
702
706
  - test/command/test_binlog_reader.rb
703
707
  - test/command/test_ca_generate.rb
704
708
  - test/command/test_cap_ctl.rb
709
+ - test/command/test_cat.rb
705
710
  - test/command/test_ctl.rb
706
711
  - test/command/test_fluentd.rb
707
712
  - test/command/test_plugin_config_formatter.rb
@@ -760,6 +765,7 @@ files:
760
765
  - test/plugin/test_buffer_memory_chunk.rb
761
766
  - test/plugin/test_compressable.rb
762
767
  - test/plugin/test_file_util.rb
768
+ - test/plugin/test_file_wrapper.rb
763
769
  - test/plugin/test_filter.rb
764
770
  - test/plugin/test_filter_grep.rb
765
771
  - test/plugin/test_filter_parser.rb
@@ -897,6 +903,7 @@ files:
897
903
  - test/test_match.rb
898
904
  - test/test_mixin.rb
899
905
  - test/test_msgpack_factory.rb
906
+ - test/test_oj_options.rb
900
907
  - test/test_output.rb
901
908
  - test/test_plugin.rb
902
909
  - test/test_plugin_classes.rb
@@ -931,7 +938,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
931
938
  - !ruby/object:Gem::Version
932
939
  version: '0'
933
940
  requirements: []
934
- rubygems_version: 3.2.3
941
+ rubygems_version: 3.1.6
935
942
  signing_key:
936
943
  specification_version: 4
937
944
  summary: Fluentd event collector
@@ -939,6 +946,7 @@ test_files:
939
946
  - test/command/test_binlog_reader.rb
940
947
  - test/command/test_ca_generate.rb
941
948
  - test/command/test_cap_ctl.rb
949
+ - test/command/test_cat.rb
942
950
  - test/command/test_ctl.rb
943
951
  - test/command/test_fluentd.rb
944
952
  - test/command/test_plugin_config_formatter.rb
@@ -997,6 +1005,7 @@ test_files:
997
1005
  - test/plugin/test_buffer_memory_chunk.rb
998
1006
  - test/plugin/test_compressable.rb
999
1007
  - test/plugin/test_file_util.rb
1008
+ - test/plugin/test_file_wrapper.rb
1000
1009
  - test/plugin/test_filter.rb
1001
1010
  - test/plugin/test_filter_grep.rb
1002
1011
  - test/plugin/test_filter_parser.rb
@@ -1134,6 +1143,7 @@ test_files:
1134
1143
  - test/test_match.rb
1135
1144
  - test/test_mixin.rb
1136
1145
  - test/test_msgpack_factory.rb
1146
+ - test/test_oj_options.rb
1137
1147
  - test/test_output.rb
1138
1148
  - test/test_plugin.rb
1139
1149
  - test/test_plugin_classes.rb