fluent-plugin-mongo 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6208365e5862e84db04e62061f822324bc6ce1f82ebb8b9b0c3cb6ed230d983e
4
- data.tar.gz: 2c45c015dd0fc2cf98e3b309ec4d96865762ed6bf6e534d316f5c6b214c55fcb
3
+ metadata.gz: fc300a11be780d8b3ea62e71db08393171fad3625d1d9259cb65a7abe11f9e5e
4
+ data.tar.gz: db12f19c83ae360e9720c41a2d64c3ce8bd65487d554ed2e416277d0f158b311
5
5
  SHA512:
6
- metadata.gz: 046b7463bad7a1be9aae5f2a20991656392e32a4693de753aa0c5010f269d8708e0a2c085b5809408b17c5114aeff534e5cafe5b2527453a07f6707227bcbd15
7
- data.tar.gz: 42d7e9a95afeb58709422a13e0e90a911a6e32b8d972e26982496b5e90c106db83eb7d5b06d6c775a4f16a92569f10f2e82764a26d20c1c061408ad2bee89cb9
6
+ metadata.gz: c105cf4d712af0524a554b072f86a2af2cfc5485825db24f47dcd47cc850628cfeb08af8f7db4337aefc7342b2325e35698707db22aa0e595d786a6d72317320
7
+ data.tar.gz: '08454ce8638ee2bf64d1f6ae2d6adfd0632ed43ad47667558b9ee00dccb54a12d8fbac31c0b8032bd69598752a442bac02e7425e2ccd649754d7c48df1723b8b'
@@ -0,0 +1,49 @@
1
+ name: Test
2
+ on:
3
+ push:
4
+ branches: [master]
5
+ pull_request:
6
+ branches: [master]
7
+ jobs:
8
+ build:
9
+ runs-on: ${{ matrix.os }}
10
+ continue-on-error: ${{ matrix.experimental }}
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ ruby: [ '3.1', '3.0', '2.7', '2.6' ]
15
+ mongodb-version: ['5.0', '4.4', '4.2', '4.0']
16
+ os:
17
+ - ubuntu-latest
18
+ experimental: [false]
19
+ include:
20
+ - ruby: head
21
+ os: ubuntu-latest
22
+ experimental: true
23
+ mongodb-version: '4.0'
24
+ - ruby: head
25
+ os: ubuntu-latest
26
+ experimental: true
27
+ mongodb-version: '4.2'
28
+ - ruby: head
29
+ os: ubuntu-latest
30
+ experimental: true
31
+ mongodb-version: '4.4'
32
+
33
+ name: Ruby ${{ matrix.ruby }} and MongoDB ${{ matrix.mongodb-version }} on ${{ matrix.os }}
34
+ steps:
35
+ - uses: actions/checkout@v2
36
+ - uses: ruby/setup-ruby@v1
37
+ with:
38
+ ruby-version: ${{ matrix.ruby }}
39
+ - name: Start MongoDB
40
+ uses: supercharge/mongodb-github-action@1.3.0
41
+ with:
42
+ mongodb-version: ${{ matrix.mongodb-version }}
43
+ - name: unit testing
44
+ env:
45
+ CI: true
46
+ run: |
47
+ gem install bundler rake
48
+ bundle install --jobs 4 --retry 3
49
+ bundle exec rake test
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ Release 1.6.0 - 2022/07/15
2
+
3
+ * Update mongo gem dependency
4
+ * out_mongo: Add object_id_keys parameter to convert string to Mongo ObjectId
5
+
1
6
  Release 1.5.0 - 2020/11/26
2
7
 
3
8
  * out_mongo: Support nested fields in date_keys
data/README.rdoc CHANGED
@@ -59,6 +59,10 @@ Use _mongo_ type in match.
59
59
  # eg: updated_at: "2020-02-01T08:22:23.780Z" or updated_at: 1580546457010
60
60
  date_keys updated_at
61
61
 
62
+ # Specify id fields in record to use MongoDB's BSON ObjectID (Optional) default: nil
63
+ # eg: my_id: "507f1f77bcf86cd799439011"
64
+ object_id_keys my_id
65
+
62
66
  # Other buffer configurations here
63
67
  </match>
64
68
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.0
1
+ 1.6.0
@@ -17,10 +17,11 @@ Gem::Specification.new do |gem|
17
17
  gem.require_paths = ['lib']
18
18
 
19
19
  gem.add_dependency "fluentd", [">= 0.14.22", "< 2"]
20
- gem.add_runtime_dependency "mongo", "~> 2.6.0"
20
+ gem.add_runtime_dependency "mongo", ">= 2.15.0", "< 2.19.0"
21
21
  gem.add_development_dependency "rake", ">= 0.9.2"
22
22
  gem.add_development_dependency "simplecov", ">= 0.5.4"
23
23
  gem.add_development_dependency "rr", ">= 1.0.0"
24
24
  gem.add_development_dependency "test-unit", ">= 3.0.0"
25
- gem.add_development_dependency "timecop", "~> 0.8.0"
25
+ gem.add_development_dependency "timecop", "~> 0.9.4"
26
+ gem.add_development_dependency "webrick", ">= 1.7.0"
26
27
  end
@@ -43,7 +43,8 @@ module Fluent::Plugin
43
43
  config_param :date_keys, :array, default: nil
44
44
  desc "Specify if the fields in date_keys are of type Integer or Float"
45
45
  config_param :parse_string_number_date, :bool, default: false
46
-
46
+ desc "Specify keys to use MongoDB's ObjectId"
47
+ config_param :object_id_keys, :array, default: nil
47
48
 
48
49
  # tag mapping mode
49
50
  desc "Use tag_mapped mode"
@@ -78,7 +79,8 @@ module Fluent::Plugin
78
79
  @nodes = nil
79
80
  @client_options = {}
80
81
  @collection_options = {capped: false}
81
- @accessors = {}
82
+ @date_accessors = {}
83
+ @object_id_accessors = {}
82
84
  end
83
85
 
84
86
  # Following limits are heuristic. BSON is sometimes bigger than MessagePack and JSON.
@@ -164,10 +166,16 @@ module Fluent::Plugin
164
166
 
165
167
  if @date_keys
166
168
  @date_keys.each { |field_name|
167
- @accessors[field_name.to_s] = record_accessor_create(field_name)
169
+ @date_accessors[field_name.to_s] = record_accessor_create(field_name)
168
170
  }
169
171
  log.debug "Setup record accessor for every date key"
170
172
  end
173
+ if @object_id_keys
174
+ @object_id_keys.each { |field_name|
175
+ @object_id_accessors[field_name.to_s] = record_accessor_create(field_name)
176
+ }
177
+ log.debug "Setup record accessor for every object_id key"
178
+ end
171
179
  end
172
180
 
173
181
  def start
@@ -214,6 +222,7 @@ module Fluent::Plugin
214
222
  records = []
215
223
  time_key = @inject_config.time_key if @inject_config
216
224
  date_keys = @date_keys
225
+ object_id_keys = @object_id_keys
217
226
 
218
227
  tag = chunk.metadata.tag
219
228
  chunk.msgpack_each {|time, record|
@@ -222,7 +231,7 @@ module Fluent::Plugin
222
231
  record[time_key] = Time.at(time || record[time_key]) if time_key
223
232
 
224
233
  if date_keys
225
- @accessors.each_pair { |date_key, date_key_accessor|
234
+ @date_accessors.each_pair { |date_key, date_key_accessor|
226
235
  begin
227
236
  date_value = date_key_accessor.call(record)
228
237
  case date_value
@@ -265,6 +274,18 @@ module Fluent::Plugin
265
274
  end
266
275
  }
267
276
  end
277
+ if object_id_keys
278
+ @object_id_accessors.each_pair { |object_id_key, object_id_key_accessor|
279
+ begin
280
+ object_id_value = object_id_key_accessor.call(record)
281
+ value_to_set = BSON::ObjectId(object_id_value)
282
+ object_id_key_accessor.set(record, value_to_set)
283
+ rescue BSON::ObjectId::Invalid
284
+ log.warn "Failed to parse '#{object_id_key}' field. Expected object_id types are String: #{object_id_value}"
285
+ object_id_key_accessor.set(record, nil)
286
+ end
287
+ }
288
+ end
268
289
  records << record
269
290
  }
270
291
  records
@@ -517,4 +517,95 @@ class MongoOutputTest < ::Test::Unit::TestCase
517
517
  assert_nil actual_documents.first['updated_at']['time']
518
518
  end
519
519
  end
520
+
521
+ sub_test_case 'object_id_keys' do
522
+ setup do
523
+ @my_id_str = "507f1f77bcf86cd799439011"
524
+ end
525
+
526
+ def emit_date_documents(d)
527
+ time = event_time("2011-01-02 13:14:15 UTC")
528
+ d.feed(time, {'a' => 1, my_id: @my_id_str})
529
+ time
530
+ end
531
+
532
+ def emit_invalid_date_documents(d)
533
+ time = event_time("2011-01-02 13:14:15 UTC")
534
+ d.feed(time, {'a' => 1, my_id: "Invalid ObjectId String"})
535
+ time
536
+ end
537
+
538
+ def emit_nested_date_documents(d)
539
+ time = event_time("2011-01-02 13:14:15 UTC")
540
+ d.feed(time, {'a' => 1, my_id: { 'id': @my_id_str}})
541
+ time
542
+ end
543
+
544
+ def emit_nested_invalid_date_documents(d)
545
+ time = event_time("2011-01-02 13:14:15 UTC")
546
+ d.feed(time, {'a' => 1, 'my_id': { 'id': "Invalid ObjectId String"}})
547
+ time
548
+ end
549
+
550
+ def test_write_with_object_id_keys
551
+ d = create_driver(default_config + %[
552
+ object_id_keys my_id
553
+ ])
554
+
555
+ d.run(default_tag: 'test') do
556
+ emit_date_documents(d)
557
+ end
558
+
559
+ actual_documents = get_documents
560
+ object_id_key = d.instance.object_id_keys.first
561
+ actual_documents.each_with_index { |doc, i|
562
+ assert_equal(i + 1, doc['a'])
563
+ assert doc[object_id_key].is_a?(BSON::ObjectId)
564
+ }
565
+ end
566
+
567
+ def test_write_with_parsed_object_id_key_invalid_string
568
+ d = create_driver(default_config + %[
569
+ object_id_keys my_id
570
+ ])
571
+
572
+ d.run(default_tag: 'test') do
573
+ emit_invalid_date_documents(d)
574
+ end
575
+ actual_documents = get_documents
576
+ assert_nil actual_documents.first['my_id']
577
+ end
578
+
579
+ def test_write_with_date_nested_keys
580
+ d = create_driver(default_config + %[
581
+ replace_dot_in_key_with _
582
+ replace_dollar_in_key_with _
583
+ object_id_keys $.my_id.id
584
+ ])
585
+
586
+ d.run(default_tag: 'test') do
587
+ emit_nested_date_documents(d)
588
+ end
589
+
590
+ actual_documents = get_documents
591
+ actual_documents.each_with_index { |doc, i|
592
+ assert_equal(i + 1, doc['a'])
593
+ assert doc['my_id']['id'].is_a?(BSON::ObjectId)
594
+ }
595
+ end
596
+
597
+ def test_write_with_parsed_date_nested_key_invalid_string
598
+ d = create_driver(default_config + %[
599
+ replace_dot_in_key_with _
600
+ replace_dollar_in_key_with _
601
+ object_id_keys $.my_id.id
602
+ ])
603
+
604
+ d.run(default_tag: 'test') do
605
+ emit_nested_invalid_date_documents(d)
606
+ end
607
+ actual_documents = get_documents
608
+ assert_nil actual_documents.first['my_id']['id']
609
+ end
610
+ end
520
611
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro Nakagawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-26 00:00:00.000000000 Z
11
+ date: 2022-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -34,16 +34,22 @@ dependencies:
34
34
  name: mongo
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 2.15.0
40
+ - - "<"
38
41
  - !ruby/object:Gem::Version
39
- version: 2.6.0
42
+ version: 2.19.0
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
45
48
  - !ruby/object:Gem::Version
46
- version: 2.6.0
49
+ version: 2.15.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: 2.19.0
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: rake
49
55
  requirement: !ruby/object:Gem::Requirement
@@ -106,14 +112,28 @@ dependencies:
106
112
  requirements:
107
113
  - - "~>"
108
114
  - !ruby/object:Gem::Version
109
- version: 0.8.0
115
+ version: 0.9.4
110
116
  type: :development
111
117
  prerelease: false
112
118
  version_requirements: !ruby/object:Gem::Requirement
113
119
  requirements:
114
120
  - - "~>"
115
121
  - !ruby/object:Gem::Version
116
- version: 0.8.0
122
+ version: 0.9.4
123
+ - !ruby/object:Gem::Dependency
124
+ name: webrick
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 1.7.0
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 1.7.0
117
137
  description: MongoDB plugin for Fluentd
118
138
  email: repeatedly@gmail.com
119
139
  executables:
@@ -121,6 +141,7 @@ executables:
121
141
  extensions: []
122
142
  extra_rdoc_files: []
123
143
  files:
144
+ - ".github/workflows/linux.yml"
124
145
  - ".gitignore"
125
146
  - ".travis.yml"
126
147
  - AUTHORS
@@ -159,12 +180,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
180
  - !ruby/object:Gem::Version
160
181
  version: '0'
161
182
  requirements: []
162
- rubygems_version: 3.0.3
183
+ rubygems_version: 3.3.5
163
184
  signing_key:
164
185
  specification_version: 4
165
186
  summary: MongoDB plugin for Fluentd
166
- test_files:
167
- - test/helper.rb
168
- - test/plugin/test_in_mongo_tail.rb
169
- - test/plugin/test_out_mongo.rb
170
- - test/plugin/test_out_mongo_replset.rb
187
+ test_files: []