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.
- checksums.yaml +4 -4
- data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +50 -0
- data/.github/DISCUSSION_TEMPLATE/q-a.yml +47 -0
- data/.github/workflows/test-ruby-head.yml +31 -0
- data/.github/workflows/test.yml +3 -3
- data/CHANGELOG.md +42 -0
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/fluentd.gemspec +9 -1
- data/lib/fluent/command/binlog_reader.rb +1 -1
- data/lib/fluent/config/configure_proxy.rb +2 -2
- data/lib/fluent/config/types.rb +1 -1
- data/lib/fluent/configurable.rb +2 -2
- data/lib/fluent/counter/mutex_hash.rb +1 -1
- data/lib/fluent/fluent_log_event_router.rb +0 -2
- data/lib/fluent/plugin/buf_file.rb +1 -1
- data/lib/fluent/plugin/buffer/file_chunk.rb +1 -1
- data/lib/fluent/plugin/buffer/file_single_chunk.rb +2 -3
- data/lib/fluent/plugin/filter_parser.rb +26 -8
- data/lib/fluent/plugin/in_http.rb +18 -53
- data/lib/fluent/plugin/in_tail.rb +34 -2
- data/lib/fluent/plugin/out_http.rb +125 -13
- data/lib/fluent/plugin/owned_by_mixin.rb +0 -1
- data/lib/fluent/plugin/parser_json.rb +22 -5
- data/lib/fluent/plugin/parser_msgpack.rb +24 -3
- data/lib/fluent/plugin_helper/metrics.rb +2 -2
- data/lib/fluent/registry.rb +6 -6
- data/lib/fluent/test/output_test.rb +1 -1
- data/lib/fluent/unique_id.rb +1 -1
- data/lib/fluent/version.rb +1 -1
- data/test/log/test_console_adapter.rb +10 -3
- data/test/plugin/data/log_numeric/01.log +0 -0
- data/test/plugin/data/log_numeric/02.log +0 -0
- data/test/plugin/data/log_numeric/12.log +0 -0
- data/test/plugin/data/log_numeric/14.log +0 -0
- data/test/plugin/test_in_http.rb +23 -1
- data/test/plugin/test_in_tail.rb +141 -0
- data/test/plugin/test_out_http.rb +128 -0
- data/test/plugin/test_owned_by.rb +0 -1
- data/test/plugin/test_parser_json.rb +106 -0
- data/test/plugin/test_parser_msgpack.rb +127 -0
- data/test/plugin/test_storage.rb +0 -1
- data/test/plugin_helper/test_child_process.rb +4 -4
- 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
|
data/test/plugin/test_storage.rb
CHANGED
@@ -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 = (
|
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 +=
|
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 =
|
649
|
-
mytmpdir =
|
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.
|
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-
|
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.
|
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.
|
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
|