fluentd 1.16.5-x64-mingw32 → 1.17.0-x64-mingw32

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +50 -0
  3. data/.github/DISCUSSION_TEMPLATE/q-a.yml +47 -0
  4. data/.github/workflows/test-ruby-head.yml +31 -0
  5. data/.github/workflows/test.yml +3 -3
  6. data/CHANGELOG.md +42 -0
  7. data/README.md +1 -1
  8. data/Rakefile +1 -1
  9. data/fluentd.gemspec +9 -1
  10. data/lib/fluent/command/binlog_reader.rb +1 -1
  11. data/lib/fluent/config/configure_proxy.rb +2 -2
  12. data/lib/fluent/config/types.rb +1 -1
  13. data/lib/fluent/configurable.rb +2 -2
  14. data/lib/fluent/counter/mutex_hash.rb +1 -1
  15. data/lib/fluent/fluent_log_event_router.rb +0 -2
  16. data/lib/fluent/plugin/buf_file.rb +1 -1
  17. data/lib/fluent/plugin/buffer/file_chunk.rb +1 -1
  18. data/lib/fluent/plugin/buffer/file_single_chunk.rb +2 -3
  19. data/lib/fluent/plugin/filter_parser.rb +26 -8
  20. data/lib/fluent/plugin/in_http.rb +18 -53
  21. data/lib/fluent/plugin/in_tail.rb +34 -2
  22. data/lib/fluent/plugin/out_http.rb +125 -13
  23. data/lib/fluent/plugin/owned_by_mixin.rb +0 -1
  24. data/lib/fluent/plugin/parser_json.rb +22 -5
  25. data/lib/fluent/plugin/parser_msgpack.rb +24 -3
  26. data/lib/fluent/plugin_helper/metrics.rb +2 -2
  27. data/lib/fluent/registry.rb +6 -6
  28. data/lib/fluent/test/output_test.rb +1 -1
  29. data/lib/fluent/unique_id.rb +1 -1
  30. data/lib/fluent/version.rb +1 -1
  31. data/test/log/test_console_adapter.rb +10 -3
  32. data/test/plugin/data/log_numeric/01.log +0 -0
  33. data/test/plugin/data/log_numeric/02.log +0 -0
  34. data/test/plugin/data/log_numeric/12.log +0 -0
  35. data/test/plugin/data/log_numeric/14.log +0 -0
  36. data/test/plugin/test_in_http.rb +23 -1
  37. data/test/plugin/test_in_tail.rb +141 -0
  38. data/test/plugin/test_out_http.rb +128 -0
  39. data/test/plugin/test_owned_by.rb +0 -1
  40. data/test/plugin/test_parser_json.rb +106 -0
  41. data/test/plugin/test_parser_msgpack.rb +127 -0
  42. data/test/plugin/test_storage.rb +0 -1
  43. data/test/plugin_helper/test_child_process.rb +4 -4
  44. metadata +101 -4
@@ -7,6 +7,7 @@ require 'webrick/https'
7
7
  require 'net/http'
8
8
  require 'uri'
9
9
  require 'json'
10
+ require 'aws-sdk-core'
10
11
 
11
12
  # WEBrick's ProcHandler doesn't handle PUT by default
12
13
  module WEBrick::HTTPServlet
@@ -390,6 +391,97 @@ class HTTPOutputTest < Test::Unit::TestCase
390
391
  end
391
392
  end
392
393
 
394
+
395
+ sub_test_case 'aws sigv4 auth' do
396
+ setup do
397
+ @@fake_aws_credentials = Aws::Credentials.new(
398
+ 'fakeaccess',
399
+ 'fakesecret',
400
+ 'fake session token'
401
+ )
402
+ end
403
+
404
+ def server_port
405
+ 19883
406
+ end
407
+
408
+ def test_aws_sigv4_sts_role_arn
409
+ stub(Aws::AssumeRoleCredentials).new do |credentials_provider|
410
+ stub(credentials_provider).credentials {
411
+ @@fake_aws_credentials
412
+ }
413
+ credentials_provider
414
+ end
415
+
416
+ d = create_driver(config + %[
417
+ <auth>
418
+ method aws_sigv4
419
+ aws_service someservice
420
+ aws_region my-region-1
421
+ aws_role_arn arn:aws:iam::123456789012:role/MyRole
422
+ </auth>
423
+ ])
424
+ d.run(default_tag: 'test.http') do
425
+ test_events.each { |event|
426
+ d.feed(event)
427
+ }
428
+ end
429
+
430
+ result = @@result
431
+ assert_equal 'POST', result.method
432
+ assert_equal 'application/x-ndjson', result.content_type
433
+ assert_equal test_events, result.data
434
+ assert_not_empty result.headers
435
+ assert_not_nil result.headers['authorization']
436
+ assert_match /AWS4-HMAC-SHA256 Credential=[a-zA-Z0-9]*\/\d+\/my-region-1\/someservice\/aws4_request/, result.headers['authorization']
437
+ assert_match /SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-security-token/, result.headers['authorization']
438
+ assert_equal @@fake_aws_credentials.session_token, result.headers['x-amz-security-token']
439
+ assert_not_nil result.headers['x-amz-content-sha256']
440
+ assert_not_empty result.headers['x-amz-content-sha256']
441
+ assert_not_nil result.headers['x-amz-security-token']
442
+ assert_not_empty result.headers['x-amz-security-token']
443
+ assert_not_nil result.headers['x-amz-date']
444
+ assert_not_empty result.headers['x-amz-date']
445
+ end
446
+
447
+ def test_aws_sigv4_no_role
448
+ stub(Aws::CredentialProviderChain).new do |provider_chain|
449
+ stub(provider_chain).resolve {
450
+ @@fake_aws_credentials
451
+ }
452
+ provider_chain
453
+ end
454
+ d = create_driver(config + %[
455
+ <auth>
456
+ method aws_sigv4
457
+ aws_service someservice
458
+ aws_region my-region-1
459
+ </auth>
460
+ ])
461
+ d.run(default_tag: 'test.http') do
462
+ test_events.each { |event|
463
+ d.feed(event)
464
+ }
465
+ end
466
+
467
+ result = @@result
468
+ assert_equal 'POST', result.method
469
+ assert_equal 'application/x-ndjson', result.content_type
470
+ assert_equal test_events, result.data
471
+ assert_not_empty result.headers
472
+ assert_not_nil result.headers['authorization']
473
+ assert_match /AWS4-HMAC-SHA256 Credential=[a-zA-Z0-9]*\/\d+\/my-region-1\/someservice\/aws4_request/, result.headers['authorization']
474
+ assert_match /SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-security-token/, result.headers['authorization']
475
+ assert_equal @@fake_aws_credentials.session_token, result.headers['x-amz-security-token']
476
+ assert_not_nil result.headers['x-amz-content-sha256']
477
+ assert_not_empty result.headers['x-amz-content-sha256']
478
+ assert_not_nil result.headers['x-amz-security-token']
479
+ assert_not_empty result.headers['x-amz-security-token']
480
+ assert_not_nil result.headers['x-amz-date']
481
+ assert_not_empty result.headers['x-amz-date']
482
+ end
483
+ end
484
+
393
485
  sub_test_case 'HTTPS' do
394
486
  def server_port
395
487
  19882
@@ -426,4 +518,40 @@ class HTTPOutputTest < Test::Unit::TestCase
426
518
  assert_not_empty result.headers
427
519
  end
428
520
  end
521
+
522
+ sub_test_case 'connection_reuse' do
523
+ def server_port
524
+ 19883
525
+ end
526
+
527
+ def test_connection_recreation
528
+ d = create_driver(%[
529
+ endpoint http://127.0.0.1:#{server_port}/test
530
+ reuse_connections true
531
+ ])
532
+
533
+ d.run(default_tag: 'test.http', shutdown: false) do
534
+ d.feed(test_events[0])
535
+ end
536
+
537
+ data = @@result.data
538
+
539
+ # Restart server to simulate connection loss
540
+ @@http_server_thread.kill
541
+ @@http_server_thread.join
542
+ @@http_server_thread = Thread.new do
543
+ run_http_server
544
+ end
545
+
546
+ d.run(default_tag: 'test.http') do
547
+ d.feed(test_events[1])
548
+ end
549
+
550
+ result = @@result
551
+ assert_equal 'POST', result.method
552
+ assert_equal 'application/x-ndjson', result.content_type
553
+ assert_equal test_events, data.concat(result.data)
554
+ assert_not_empty result.headers
555
+ end
556
+ end
429
557
  end
@@ -26,7 +26,6 @@ class OwnedByMixinTest < Test::Unit::TestCase
26
26
 
27
27
  assert_equal parent.object_id, child.owner.object_id
28
28
 
29
- assert child.instance_eval{ @_plugin_id_configured }
30
29
  assert_equal 'my_parent_id', child.instance_eval{ @_plugin_id }
31
30
 
32
31
  assert_equal Fluent::Log::LEVEL_TRACE, child.log.level
@@ -135,4 +135,110 @@ class JsonParserTest < ::Test::Unit::TestCase
135
135
  end
136
136
  end
137
137
  end
138
+
139
+ sub_test_case "various record pattern" do
140
+ data("Only string", { record: '"message"', expected: [nil] }, keep: true)
141
+ data("Only string without quotation", { record: "message", expected: [nil] }, keep: true)
142
+ data("Only number", { record: "0", expected: [nil] }, keep: true)
143
+ data(
144
+ "Array of Hash",
145
+ {
146
+ record: '[{"k1": 1}, {"k2": 2}]',
147
+ expected: [{"k1" => 1}, {"k2" => 2}]
148
+ },
149
+ keep: true,
150
+ )
151
+ data(
152
+ "Array of both Hash and invalid",
153
+ {
154
+ record: '[{"k1": 1}, "string", {"k2": 2}, 0]',
155
+ expected: [{"k1" => 1}, nil, {"k2" => 2}, nil]
156
+ },
157
+ keep: true,
158
+ )
159
+ data(
160
+ "Array of all invalid",
161
+ {
162
+ record: '["string", 0, [{"k": 0}]]',
163
+ expected: [nil, nil, nil]
164
+ },
165
+ keep: true,
166
+ )
167
+
168
+ def test_oj(data)
169
+ parsed_records = []
170
+ @parser.configure("json_parser" => "oj")
171
+ @parser.instance.parse(data[:record]) { |time, record|
172
+ parsed_records.append(record)
173
+ }
174
+ assert_equal(data[:expected], parsed_records)
175
+ end
176
+
177
+ def test_yajl(data)
178
+ parsed_records = []
179
+ @parser.configure("json_parser" => "yajl")
180
+ @parser.instance.parse(data[:record]) { |time, record|
181
+ parsed_records.append(record)
182
+ }
183
+ assert_equal(data[:expected], parsed_records)
184
+ end
185
+
186
+ def test_json(json)
187
+ parsed_records = []
188
+ @parser.configure("json_parser" => "json")
189
+ @parser.instance.parse(data[:record]) { |time, record|
190
+ parsed_records.append(record)
191
+ }
192
+ assert_equal(data[:expected], parsed_records)
193
+ end
194
+ end
195
+
196
+ # This becomes NoMethodError if a non-Hash object is passed to convert_values.
197
+ # https://github.com/fluent/fluentd/issues/4100
198
+ sub_test_case "execute_convert_values with null_empty_string" do
199
+ data("Only string", { record: '"message"', expected: [nil] }, keep: true)
200
+ data(
201
+ "Hash",
202
+ {
203
+ record: '{"k1": 1, "k2": ""}',
204
+ expected: [{"k1" => 1, "k2" => nil}]
205
+ },
206
+ keep: true,
207
+ )
208
+ data(
209
+ "Array of Hash",
210
+ {
211
+ record: '[{"k1": 1}, {"k2": ""}]',
212
+ expected: [{"k1" => 1}, {"k2" => nil}]
213
+ },
214
+ keep: true,
215
+ )
216
+
217
+ def test_oj(data)
218
+ parsed_records = []
219
+ @parser.configure("json_parser" => "oj", "null_empty_string" => true)
220
+ @parser.instance.parse(data[:record]) { |time, record|
221
+ parsed_records.append(record)
222
+ }
223
+ assert_equal(data[:expected], parsed_records)
224
+ end
225
+
226
+ def test_yajl(data)
227
+ parsed_records = []
228
+ @parser.configure("json_parser" => "yajl", "null_empty_string" => true)
229
+ @parser.instance.parse(data[:record]) { |time, record|
230
+ parsed_records.append(record)
231
+ }
232
+ assert_equal(data[:expected], parsed_records)
233
+ end
234
+
235
+ def test_json(json)
236
+ parsed_records = []
237
+ @parser.configure("json_parser" => "json", "null_empty_string" => true)
238
+ @parser.instance.parse(data[:record]) { |time, record|
239
+ parsed_records.append(record)
240
+ }
241
+ assert_equal(data[:expected], parsed_records)
242
+ end
243
+ end
138
244
  end
@@ -0,0 +1,127 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/parser'
3
+ require 'fluent/plugin/parser_msgpack'
4
+
5
+ class MessagePackParserTest < ::Test::Unit::TestCase
6
+ def setup
7
+ Fluent::Test.setup
8
+ end
9
+
10
+ def create_driver(conf)
11
+ Fluent::Test::Driver::Parser.new(Fluent::Plugin::MessagePackParser).configure(conf)
12
+ end
13
+
14
+ sub_test_case "simple setting" do
15
+ data(
16
+ "Normal Hash",
17
+ {
18
+ input: "\x82\xA7message\xADHello msgpack\xA3numd",
19
+ expected: [{"message" => "Hello msgpack", "num" => 100}]
20
+ },
21
+ keep: true
22
+ )
23
+ data(
24
+ "Array of multiple Hash",
25
+ {
26
+ input: "\x92\x81\xA7message\xA3foo\x81\xA7message\xA3bar",
27
+ expected: [{"message"=>"foo"}, {"message"=>"bar"}]
28
+ },
29
+ keep: true
30
+ )
31
+ data(
32
+ "String",
33
+ {
34
+ # "Hello msgpack".to_msgpack
35
+ input: "\xADHello msgpack",
36
+ expected: [nil]
37
+ },
38
+ keep: true
39
+ )
40
+ data(
41
+ "Array of String",
42
+ {
43
+ # ["foo", "bar"].to_msgpack
44
+ input: "\x92\xA3foo\xA3bar",
45
+ expected: [nil, nil]
46
+ },
47
+ keep: true
48
+ )
49
+ data(
50
+ "Array of String and Hash",
51
+ {
52
+ # ["foo", {message: "bar"}].to_msgpack
53
+ input: "\x92\xA3foo\x81\xA7message\xA3bar",
54
+ expected: [nil, {"message"=>"bar"}]
55
+ },
56
+ keep: true
57
+ )
58
+
59
+ def test_parse(data)
60
+ parsed_records = []
61
+ create_driver("").instance.parse(data[:input]) do |time, record|
62
+ parsed_records.append(record)
63
+ end
64
+ assert_equal(data[:expected], parsed_records)
65
+ end
66
+
67
+ def test_parse_io(data)
68
+ parsed_records = []
69
+ StringIO.open(data[:input]) do |io|
70
+ create_driver("").instance.parse_io(io) do |time, record|
71
+ parsed_records.append(record)
72
+ end
73
+ end
74
+ assert_equal(data[:expected], parsed_records)
75
+ end
76
+ end
77
+
78
+ # This becomes NoMethodError if a non-Hash object is passed to convert_values.
79
+ # https://github.com/fluent/fluentd/issues/4100
80
+ sub_test_case "execute_convert_values with null_empty_string" do
81
+ data(
82
+ "Normal hash",
83
+ {
84
+ # {message: "foo", empty: ""}.to_msgpack
85
+ input: "\x82\xA7message\xA3foo\xA5empty\xA0",
86
+ expected: [{"message" => "foo", "empty" => nil}]
87
+ },
88
+ keep: true
89
+ )
90
+ data(
91
+ "Array of multiple Hash",
92
+ {
93
+ # [{message: "foo", empty: ""}, {message: "bar", empty: ""}].to_msgpack
94
+ input: "\x92\x82\xA7message\xA3foo\xA5empty\xA0\x82\xA7message\xA3bar\xA5empty\xA0",
95
+ expected: [{"message"=>"foo", "empty" => nil}, {"message"=>"bar", "empty" => nil}]
96
+ },
97
+ keep: true
98
+ )
99
+ data(
100
+ "String",
101
+ {
102
+ # "Hello msgpack".to_msgpack
103
+ input: "\xADHello msgpack",
104
+ expected: [nil]
105
+ },
106
+ keep: true
107
+ )
108
+
109
+ def test_parse(data)
110
+ parsed_records = []
111
+ create_driver("null_empty_string").instance.parse(data[:input]) do |time, record|
112
+ parsed_records.append(record)
113
+ end
114
+ assert_equal(data[:expected], parsed_records)
115
+ end
116
+
117
+ def test_parse_io(data)
118
+ parsed_records = []
119
+ StringIO.open(data[:input]) do |io|
120
+ create_driver("null_empty_string").instance.parse_io(io) do |time, record|
121
+ parsed_records.append(record)
122
+ end
123
+ end
124
+ assert_equal(data[:expected], parsed_records)
125
+ end
126
+ end
127
+ end
@@ -68,7 +68,6 @@ class StorageTest < Test::Unit::TestCase
68
68
 
69
69
  assert_equal 'mytest', s.owner.system_config.process_name
70
70
  assert_equal '1', s.instance_eval{ @_plugin_id }
71
- assert_equal true, s.instance_eval{ @_plugin_id_configured }
72
71
  end
73
72
 
74
73
  test 'does NOT have features for high-performance/high-consistent storages' do
@@ -569,7 +569,7 @@ class ChildProcessTest < Test::Unit::TestCase
569
569
  unless Fluent.windows?
570
570
  test 'can specify subprocess name' do
571
571
  io = IO.popen([["cat", "caaaaaaaaaaat"], '-'])
572
- process_naming_enabled = (open("|ps opid,cmd"){|_io| _io.readlines }.count{|line| line.include?("caaaaaaaaaaat") } > 0)
572
+ process_naming_enabled = (IO.popen(["ps", "opid,cmd"]){|_io| _io.readlines }.count{|line| line.include?("caaaaaaaaaaat") } > 0)
573
573
  Process.kill(:TERM, io.pid) rescue nil
574
574
  io.close rescue nil
575
575
 
@@ -586,7 +586,7 @@ class ChildProcessTest < Test::Unit::TestCase
586
586
  m.lock
587
587
  ran = true
588
588
  pids << @d.child_process_id
589
- proc_lines += open("|ps opid,cmd"){|_io| _io.readlines }
589
+ proc_lines += IO.popen(["ps", "opid,cmd"]){|_io| _io.readlines }
590
590
  m.unlock
591
591
  readio.read
592
592
  end
@@ -645,8 +645,8 @@ class ChildProcessTest < Test::Unit::TestCase
645
645
  unless Fluent.windows?
646
646
  test 'can change working directory' do
647
647
  # check my real /tmp directory (for mac)
648
- cmd = %[|ruby -e 'Dir.chdir("/tmp"); puts Dir.pwd']
649
- mytmpdir = open(cmd){|io| io.read.chomp }
648
+ cmd = ['ruby', '-e', 'Dir.chdir("/tmp"); puts Dir.pwd']
649
+ mytmpdir = IO.popen(cmd){|io| io.read.chomp }
650
650
 
651
651
  m = Mutex.new
652
652
  str = nil
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.16.5
4
+ version: 1.17.0
5
5
  platform: x64-mingw32
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-27 00:00:00.000000000 Z
11
+ date: 2024-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -200,6 +200,48 @@ dependencies:
200
200
  - - "~>"
201
201
  - !ruby/object:Gem::Version
202
202
  version: '1.4'
203
+ - !ruby/object:Gem::Dependency
204
+ name: base64
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '0.2'
210
+ type: :runtime
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: '0.2'
217
+ - !ruby/object:Gem::Dependency
218
+ name: csv
219
+ requirement: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - "~>"
222
+ - !ruby/object:Gem::Version
223
+ version: '3.2'
224
+ type: :runtime
225
+ prerelease: false
226
+ version_requirements: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - "~>"
229
+ - !ruby/object:Gem::Version
230
+ version: '3.2'
231
+ - !ruby/object:Gem::Dependency
232
+ name: drb
233
+ requirement: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: '2.2'
238
+ type: :runtime
239
+ prerelease: false
240
+ version_requirements: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: '2.2'
203
245
  - !ruby/object:Gem::Dependency
204
246
  name: win32-service
205
247
  requirement: !ruby/object:Gem::Requirement
@@ -416,6 +458,48 @@ dependencies:
416
458
  - - ">="
417
459
  - !ruby/object:Gem::Version
418
460
  version: 0.50.0
461
+ - !ruby/object:Gem::Dependency
462
+ name: aws-sigv4
463
+ requirement: !ruby/object:Gem::Requirement
464
+ requirements:
465
+ - - "~>"
466
+ - !ruby/object:Gem::Version
467
+ version: '1.8'
468
+ type: :development
469
+ prerelease: false
470
+ version_requirements: !ruby/object:Gem::Requirement
471
+ requirements:
472
+ - - "~>"
473
+ - !ruby/object:Gem::Version
474
+ version: '1.8'
475
+ - !ruby/object:Gem::Dependency
476
+ name: aws-sdk-core
477
+ requirement: !ruby/object:Gem::Requirement
478
+ requirements:
479
+ - - "~>"
480
+ - !ruby/object:Gem::Version
481
+ version: '3.191'
482
+ type: :development
483
+ prerelease: false
484
+ version_requirements: !ruby/object:Gem::Requirement
485
+ requirements:
486
+ - - "~>"
487
+ - !ruby/object:Gem::Version
488
+ version: '3.191'
489
+ - !ruby/object:Gem::Dependency
490
+ name: rexml
491
+ requirement: !ruby/object:Gem::Requirement
492
+ requirements:
493
+ - - "~>"
494
+ - !ruby/object:Gem::Version
495
+ version: '3.2'
496
+ type: :development
497
+ prerelease: false
498
+ version_requirements: !ruby/object:Gem::Requirement
499
+ requirements:
500
+ - - "~>"
501
+ - !ruby/object:Gem::Version
502
+ version: '3.2'
419
503
  description: Fluentd is an open source data collector designed to scale and simplify
420
504
  log management. It can collect, process and ship many kinds of data in near real-time.
421
505
  email:
@@ -435,12 +519,15 @@ extensions: []
435
519
  extra_rdoc_files: []
436
520
  files:
437
521
  - ".deepsource.toml"
522
+ - ".github/DISCUSSION_TEMPLATE/q-a-japanese.yml"
523
+ - ".github/DISCUSSION_TEMPLATE/q-a.yml"
438
524
  - ".github/ISSUE_TEMPLATE.md"
439
525
  - ".github/ISSUE_TEMPLATE/bug_report.yml"
440
526
  - ".github/ISSUE_TEMPLATE/config.yml"
441
527
  - ".github/ISSUE_TEMPLATE/feature_request.yml"
442
528
  - ".github/PULL_REQUEST_TEMPLATE.md"
443
529
  - ".github/workflows/stale-actions.yml"
530
+ - ".github/workflows/test-ruby-head.yml"
444
531
  - ".github/workflows/test.yml"
445
532
  - ".gitignore"
446
533
  - ADOPTERS.md
@@ -812,6 +899,10 @@ files:
812
899
  - test/plugin/data/log/foo/bar.log
813
900
  - test/plugin/data/log/foo/bar2
814
901
  - test/plugin/data/log/test.log
902
+ - test/plugin/data/log_numeric/01.log
903
+ - test/plugin/data/log_numeric/02.log
904
+ - test/plugin/data/log_numeric/12.log
905
+ - test/plugin/data/log_numeric/14.log
815
906
  - test/plugin/data/sd_file/config
816
907
  - test/plugin/data/sd_file/config.json
817
908
  - test/plugin/data/sd_file/config.yaml
@@ -896,6 +987,7 @@ files:
896
987
  - test/plugin/test_parser_csv.rb
897
988
  - test/plugin/test_parser_json.rb
898
989
  - test/plugin/test_parser_labeled_tsv.rb
990
+ - test/plugin/test_parser_msgpack.rb
899
991
  - test/plugin/test_parser_multiline.rb
900
992
  - test/plugin/test_parser_nginx.rb
901
993
  - test/plugin/test_parser_none.rb
@@ -1005,14 +1097,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
1005
1097
  requirements:
1006
1098
  - - ">="
1007
1099
  - !ruby/object:Gem::Version
1008
- version: '2.4'
1100
+ version: '2.7'
1009
1101
  required_rubygems_version: !ruby/object:Gem::Requirement
1010
1102
  requirements:
1011
1103
  - - ">="
1012
1104
  - !ruby/object:Gem::Version
1013
1105
  version: '0'
1014
1106
  requirements: []
1015
- rubygems_version: 3.4.19
1107
+ rubygems_version: 3.4.13
1016
1108
  signing_key:
1017
1109
  specification_version: 4
1018
1110
  summary: Fluentd event collector
@@ -1055,6 +1147,10 @@ test_files:
1055
1147
  - test/plugin/data/log/foo/bar.log
1056
1148
  - test/plugin/data/log/foo/bar2
1057
1149
  - test/plugin/data/log/test.log
1150
+ - test/plugin/data/log_numeric/01.log
1151
+ - test/plugin/data/log_numeric/02.log
1152
+ - test/plugin/data/log_numeric/12.log
1153
+ - test/plugin/data/log_numeric/14.log
1058
1154
  - test/plugin/data/sd_file/config
1059
1155
  - test/plugin/data/sd_file/config.json
1060
1156
  - test/plugin/data/sd_file/config.yaml
@@ -1139,6 +1235,7 @@ test_files:
1139
1235
  - test/plugin/test_parser_csv.rb
1140
1236
  - test/plugin/test_parser_json.rb
1141
1237
  - test/plugin/test_parser_labeled_tsv.rb
1238
+ - test/plugin/test_parser_msgpack.rb
1142
1239
  - test/plugin/test_parser_multiline.rb
1143
1240
  - test/plugin/test_parser_nginx.rb
1144
1241
  - test/plugin/test_parser_none.rb