fluent-plugin-google-cloud 0.12.10 → 0.12.11
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/Gemfile.lock +26 -19
- data/Rakefile +6 -5
- data/fluent-plugin-google-cloud.gemspec +9 -9
- data/lib/fluent/plugin/common.rb +42 -29
- data/lib/fluent/plugin/filter_add_insert_ids.rb +1 -11
- data/lib/fluent/plugin/filter_analyze_config.rb +65 -47
- data/lib/fluent/plugin/in_object_space_dump.rb +1 -1
- data/lib/fluent/plugin/monitoring.rb +34 -23
- data/lib/fluent/plugin/out_google_cloud.rb +222 -166
- data/lib/fluent/plugin/statusz.rb +7 -9
- data/test/helper.rb +6 -0
- data/test/plugin/base_test.rb +194 -134
- data/test/plugin/constants.rb +18 -14
- data/test/plugin/test_driver.rb +2 -1
- data/test/plugin/test_filter_add_insert_ids.rb +5 -3
- data/test/plugin/test_filter_analyze_config.rb +32 -17
- data/test/plugin/test_out_google_cloud.rb +33 -21
- data/test/plugin/test_out_google_cloud_grpc.rb +35 -22
- data/test/plugin/utils.rb +8 -6
- metadata +29 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa2b2de4444cf81be485251db598ee31599684827a2c4ecef5227e1254622aa6
|
4
|
+
data.tar.gz: 0d11b11e1f6fcdbb6d712133f911c15eb968f74e020dbfa98a30cfb6e5717602
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca9bf71962b1f2f19270a278f12d4c4e4626bc8f7e0bfc235802ae24f95ae7e65f44243c6600d8f23fedbdcdd840b4fce53b3ccddb4a454806cf32286b3d7ed8
|
7
|
+
data.tar.gz: 64cf9cd901800e5ea6711356101c8a39a1310ef99c17e34fd2a3676629abc2a32ad4a60af709d57749953c14e7f6dcad5d01c14880a3e0781e09579924fe8cc7
|
data/Gemfile.lock
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-google-cloud (0.12.
|
4
|
+
fluent-plugin-google-cloud (0.12.11)
|
5
5
|
fluentd (= 1.13.3)
|
6
|
-
google-api-client (= 0.
|
6
|
+
google-api-client (= 0.44.2)
|
7
7
|
google-cloud-logging (= 1.6.6)
|
8
8
|
google-protobuf (= 3.20.0)
|
9
9
|
googleapis-common-protos (= 1.3.10)
|
10
10
|
googleauth (= 0.9.0)
|
11
11
|
grpc (= 1.45.0)
|
12
|
-
json (= 2.
|
12
|
+
json (= 2.6.3)
|
13
13
|
opencensus (= 0.5.0)
|
14
14
|
opencensus-stackdriver (= 0.4.1)
|
15
15
|
|
@@ -51,14 +51,15 @@ GEM
|
|
51
51
|
googleapis-common-protos-types (>= 1.0.4, < 2.0)
|
52
52
|
googleauth (~> 0.9)
|
53
53
|
grpc (~> 1.25)
|
54
|
-
google-api-client (0.
|
54
|
+
google-api-client (0.44.2)
|
55
55
|
addressable (~> 2.5, >= 2.5.1)
|
56
|
-
googleauth (
|
56
|
+
googleauth (~> 0.9)
|
57
57
|
httpclient (>= 2.8.1, < 3.0)
|
58
58
|
mini_mime (~> 1.0)
|
59
59
|
representable (~> 3.0)
|
60
60
|
retriable (>= 2.0, < 4.0)
|
61
|
-
|
61
|
+
rexml
|
62
|
+
signet (~> 0.12)
|
62
63
|
google-cloud-core (1.6.0)
|
63
64
|
google-cloud-env (~> 1.0)
|
64
65
|
google-cloud-errors (~> 1.0)
|
@@ -104,7 +105,7 @@ GEM
|
|
104
105
|
hashdiff (1.0.1)
|
105
106
|
http_parser.rb (0.7.0)
|
106
107
|
httpclient (2.8.3)
|
107
|
-
json (2.
|
108
|
+
json (2.6.3)
|
108
109
|
jwt (2.7.0)
|
109
110
|
memoist (0.16.2)
|
110
111
|
metaclass (0.0.4)
|
@@ -122,17 +123,17 @@ GEM
|
|
122
123
|
google-cloud-trace-v2 (~> 0.1)
|
123
124
|
opencensus (~> 0.5)
|
124
125
|
os (1.1.4)
|
125
|
-
|
126
|
+
parallel (1.22.1)
|
127
|
+
parser (3.2.1.1)
|
126
128
|
ast (~> 2.4.1)
|
127
129
|
power_assert (2.0.3)
|
128
|
-
powerpack (0.1.3)
|
129
130
|
prometheus-client (0.9.0)
|
130
131
|
quantile (~> 0.2.1)
|
131
132
|
public_suffix (5.0.1)
|
132
133
|
quantile (0.2.1)
|
133
|
-
rainbow (
|
134
|
-
rake
|
134
|
+
rainbow (3.1.1)
|
135
135
|
rake (10.5.0)
|
136
|
+
regexp_parser (2.7.0)
|
136
137
|
representable (3.2.0)
|
137
138
|
declarative (< 0.1.0)
|
138
139
|
trailblazer-option (>= 0.1.1, < 0.2.0)
|
@@ -140,12 +141,18 @@ GEM
|
|
140
141
|
retriable (3.1.2)
|
141
142
|
rexml (3.2.5)
|
142
143
|
rly (0.2.3)
|
143
|
-
rubocop (
|
144
|
-
|
145
|
-
|
146
|
-
|
144
|
+
rubocop (1.48.1)
|
145
|
+
json (~> 2.3)
|
146
|
+
parallel (~> 1.10)
|
147
|
+
parser (>= 3.2.0.0)
|
148
|
+
rainbow (>= 2.2.2, < 4.0)
|
149
|
+
regexp_parser (>= 1.8, < 3.0)
|
150
|
+
rexml (>= 3.2.5, < 4.0)
|
151
|
+
rubocop-ast (>= 1.26.0, < 2.0)
|
147
152
|
ruby-progressbar (~> 1.7)
|
148
|
-
unicode-display_width (
|
153
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
154
|
+
rubocop-ast (1.28.0)
|
155
|
+
parser (>= 3.2.1.0)
|
149
156
|
ruby-progressbar (1.13.0)
|
150
157
|
serverengine (2.3.2)
|
151
158
|
sigdump (~> 0.2.2)
|
@@ -174,10 +181,10 @@ GEM
|
|
174
181
|
trailblazer-option (0.1.2)
|
175
182
|
tzinfo (2.0.6)
|
176
183
|
concurrent-ruby (~> 1.0)
|
177
|
-
tzinfo-data (1.
|
184
|
+
tzinfo-data (1.2023.2)
|
178
185
|
tzinfo (>= 1.0.0)
|
179
186
|
uber (0.1.0)
|
180
|
-
unicode-display_width (
|
187
|
+
unicode-display_width (2.4.2)
|
181
188
|
webmock (3.6.2)
|
182
189
|
addressable (>= 2.3.6)
|
183
190
|
crack (>= 0.3.2)
|
@@ -194,7 +201,7 @@ DEPENDENCIES
|
|
194
201
|
mocha (= 1.9.0)
|
195
202
|
prometheus-client (< 0.10)
|
196
203
|
rake (= 10.5.0)
|
197
|
-
rubocop (=
|
204
|
+
rubocop (= 1.48.1)
|
198
205
|
test-unit (= 3.3.3)
|
199
206
|
webmock (= 3.6.2)
|
200
207
|
|
data/Rakefile
CHANGED
@@ -28,15 +28,16 @@ task :fix_perms do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
files.each do |file|
|
31
|
-
mode = File.stat(file).mode &
|
32
|
-
next unless mode &
|
31
|
+
mode = File.stat(file).mode & 0o777
|
32
|
+
next unless mode & 0o444 != 0o444
|
33
|
+
|
33
34
|
puts "Changing mode of #{file} from #{mode.to_s(8)} to "\
|
34
|
-
"#{(mode |
|
35
|
-
chmod mode |
|
35
|
+
"#{(mode | 0o444).to_s(8)}"
|
36
|
+
chmod mode | 0o444, file
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
40
|
desc 'Run unit tests and RuboCop to check for style violations'
|
40
|
-
task all: [
|
41
|
+
task all: %i[rubocop test fix_perms]
|
41
42
|
|
42
43
|
task default: :all
|
@@ -1,35 +1,35 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = 'fluent-plugin-google-cloud'
|
3
|
-
gem.description = <<-
|
3
|
+
gem.description = <<-DESCRIPTION
|
4
4
|
Fluentd plugins for the Stackdriver Logging API, which will make logs
|
5
5
|
viewable in the Stackdriver Logs Viewer and can optionally store them
|
6
6
|
in Google Cloud Storage and/or BigQuery.
|
7
7
|
This is an official Google Ruby gem.
|
8
|
-
|
8
|
+
DESCRIPTION
|
9
9
|
gem.summary = 'fluentd plugins for the Stackdriver Logging API'
|
10
10
|
gem.homepage =
|
11
11
|
'https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud'
|
12
12
|
gem.license = 'Apache-2.0'
|
13
|
-
gem.version = '0.12.
|
13
|
+
gem.version = '0.12.11'
|
14
14
|
gem.authors = ['Stackdriver Agents Team']
|
15
15
|
gem.email = ['stackdriver-agents@google.com']
|
16
|
-
gem.required_ruby_version = Gem::Requirement.new('>= 2.
|
16
|
+
gem.required_ruby_version = Gem::Requirement.new('>= 2.6')
|
17
17
|
|
18
18
|
gem.files = Dir['**/*'].keep_if { |file| File.file?(file) }
|
19
19
|
gem.test_files = gem.files.grep(/^(test)/)
|
20
20
|
gem.require_paths = ['lib']
|
21
21
|
|
22
|
-
#
|
22
|
+
# NOTE: In order to update the Fluentd version, please update both here and
|
23
23
|
# also the fluentd version in
|
24
24
|
# https://github.com/GoogleCloudPlatform/google-fluentd/blob/master/config/software/fluentd.rb.
|
25
25
|
gem.add_runtime_dependency 'fluentd', '1.13.3'
|
26
|
+
gem.add_runtime_dependency 'google-api-client', '0.44.2'
|
26
27
|
gem.add_runtime_dependency 'googleapis-common-protos', '1.3.10'
|
27
28
|
gem.add_runtime_dependency 'googleauth', '0.9.0'
|
28
|
-
gem.add_runtime_dependency 'google-api-client', '0.30.8'
|
29
29
|
gem.add_runtime_dependency 'google-cloud-logging', '1.6.6'
|
30
30
|
gem.add_runtime_dependency 'google-protobuf', '3.20.0'
|
31
31
|
gem.add_runtime_dependency 'grpc', '1.45.0'
|
32
|
-
gem.add_runtime_dependency 'json', '2.
|
32
|
+
gem.add_runtime_dependency 'json', '2.6.3'
|
33
33
|
gem.add_runtime_dependency 'opencensus', '0.5.0'
|
34
34
|
gem.add_runtime_dependency 'opencensus-stackdriver', '0.4.1'
|
35
35
|
|
@@ -42,9 +42,9 @@ eos
|
|
42
42
|
# initialized.
|
43
43
|
# https://github.com/googleapis/google-auth-library-ruby/issues/227
|
44
44
|
# https://github.com/farcaller/rly/issues/2
|
45
|
+
gem.add_development_dependency 'coveralls', '0.8.23'
|
45
46
|
gem.add_development_dependency 'rake', '10.5.0'
|
46
|
-
gem.add_development_dependency 'rubocop', '
|
47
|
+
gem.add_development_dependency 'rubocop', '1.48.1'
|
47
48
|
gem.add_development_dependency 'test-unit', '3.3.3'
|
48
49
|
gem.add_development_dependency 'webmock', '3.6.2'
|
49
|
-
gem.add_development_dependency 'coveralls', '0.8.23'
|
50
50
|
end
|
data/lib/fluent/plugin/common.rb
CHANGED
@@ -12,13 +12,15 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'uri'
|
16
|
+
|
15
17
|
module Common
|
16
18
|
# Constants for service names, resource types and etc.
|
17
19
|
module ServiceConstants
|
18
20
|
APPENGINE_CONSTANTS = {
|
19
21
|
service: 'appengine.googleapis.com',
|
20
22
|
resource_type: 'gae_app',
|
21
|
-
metadata_attributes: %w
|
23
|
+
metadata_attributes: %w[gae_backend_name gae_backend_version]
|
22
24
|
}.freeze
|
23
25
|
COMPUTE_CONSTANTS = {
|
24
26
|
service: 'compute.googleapis.com',
|
@@ -27,9 +29,9 @@ module Common
|
|
27
29
|
GKE_CONSTANTS = {
|
28
30
|
service: 'container.googleapis.com',
|
29
31
|
resource_type: 'gke_container',
|
30
|
-
extra_resource_labels: %w
|
31
|
-
extra_common_labels: %w
|
32
|
-
metadata_attributes: %w
|
32
|
+
extra_resource_labels: %w[namespace_id pod_id container_name],
|
33
|
+
extra_common_labels: %w[namespace_name pod_name],
|
34
|
+
metadata_attributes: %w[cluster-name cluster-location],
|
33
35
|
stream_severity_map: {
|
34
36
|
'stdout' => 'INFO',
|
35
37
|
'stderr' => 'ERROR'
|
@@ -47,12 +49,12 @@ module Common
|
|
47
49
|
DATAFLOW_CONSTANTS = {
|
48
50
|
service: 'dataflow.googleapis.com',
|
49
51
|
resource_type: 'dataflow_step',
|
50
|
-
extra_resource_labels: %w
|
52
|
+
extra_resource_labels: %w[region job_name job_id step_id]
|
51
53
|
}.freeze
|
52
54
|
DATAPROC_CONSTANTS = {
|
53
55
|
service: 'cluster.dataproc.googleapis.com',
|
54
56
|
resource_type: 'cloud_dataproc_cluster',
|
55
|
-
metadata_attributes: %w
|
57
|
+
metadata_attributes: %w[dataproc-cluster-uuid dataproc-cluster-name]
|
56
58
|
}.freeze
|
57
59
|
EC2_CONSTANTS = {
|
58
60
|
service: 'ec2.amazonaws.com',
|
@@ -61,7 +63,7 @@ module Common
|
|
61
63
|
ML_CONSTANTS = {
|
62
64
|
service: 'ml.googleapis.com',
|
63
65
|
resource_type: 'ml_job',
|
64
|
-
extra_resource_labels: %w
|
66
|
+
extra_resource_labels: %w[job_id task_name]
|
65
67
|
}.freeze
|
66
68
|
|
67
69
|
# The map between a subservice name and a resource type.
|
@@ -111,7 +113,7 @@ module Common
|
|
111
113
|
end
|
112
114
|
|
113
115
|
begin
|
114
|
-
open(
|
116
|
+
URI.open("http://#{METADATA_SERVICE_ADDR}", proxy: false) do |f|
|
115
117
|
if f.meta['metadata-flavor'] == 'Google'
|
116
118
|
@log.info 'Detected GCE platform'
|
117
119
|
return Platform::GCE
|
@@ -132,10 +134,10 @@ module Common
|
|
132
134
|
def fetch_gce_metadata(platform, metadata_path)
|
133
135
|
raise "Called fetch_gce_metadata with platform=#{platform}" unless
|
134
136
|
platform == Platform::GCE
|
137
|
+
|
135
138
|
# See https://cloud.google.com/compute/docs/metadata
|
136
|
-
open(
|
137
|
-
|
138
|
-
&:read)
|
139
|
+
URI.open("http://#{METADATA_SERVICE_ADDR}/computeMetadata/v1/#{metadata_path}",
|
140
|
+
'Metadata-Flavor' => 'Google', :proxy => false, &:read)
|
139
141
|
end
|
140
142
|
|
141
143
|
# EC2 Metadata server returns everything in one call. Store it after the
|
@@ -143,10 +145,10 @@ module Common
|
|
143
145
|
def ec2_metadata(platform)
|
144
146
|
raise "Called ec2_metadata with platform=#{platform}" unless
|
145
147
|
platform == Platform::EC2
|
148
|
+
|
146
149
|
unless @ec2_metadata
|
147
150
|
# See http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
|
148
|
-
open(
|
149
|
-
'/latest/dynamic/instance-identity/document', proxy: false) do |f|
|
151
|
+
URI.open("http://#{METADATA_SERVICE_ADDR}/latest/dynamic/instance-identity/document", proxy: false) do |f|
|
150
152
|
contents = f.read
|
151
153
|
@ec2_metadata = JSON.parse(contents)
|
152
154
|
end
|
@@ -164,6 +166,7 @@ module Common
|
|
164
166
|
missing << 'vm_id' unless vm_id
|
165
167
|
end
|
166
168
|
return if missing.empty?
|
169
|
+
|
167
170
|
raise Fluent::ConfigError,
|
168
171
|
"Unable to obtain metadata parameters: #{missing.join(' ')}"
|
169
172
|
end
|
@@ -203,15 +206,16 @@ module Common
|
|
203
206
|
# 2. If not, try to retrieve it locally.
|
204
207
|
def get_location(platform, zone, use_aws_availability_zone)
|
205
208
|
# Response format: "projects/<number>/zones/<zone>"
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
+
if platform == Platform::GCE
|
210
|
+
zone ||= fetch_gce_metadata(platform,
|
211
|
+
'instance/zone').rpartition('/')[2]
|
212
|
+
end
|
209
213
|
aws_location_key = if use_aws_availability_zone
|
210
214
|
'availabilityZone'
|
211
215
|
else
|
212
216
|
'region'
|
213
217
|
end
|
214
|
-
zone ||=
|
218
|
+
zone ||= "aws:#{ec2_metadata(platform)[aws_location_key]}" if
|
215
219
|
platform == Platform::EC2 &&
|
216
220
|
ec2_metadata(platform).key?(aws_location_key)
|
217
221
|
zone
|
@@ -222,7 +226,8 @@ module Common
|
|
222
226
|
# Create a monitored resource from type and labels.
|
223
227
|
def create_monitored_resource(type, labels)
|
224
228
|
Google::Apis::LoggingV2::MonitoredResource.new(
|
225
|
-
type: type, labels: labels.to_h
|
229
|
+
type: type, labels: labels.to_h
|
230
|
+
)
|
226
231
|
end
|
227
232
|
|
228
233
|
# Retrieve monitored resource via the legacy way.
|
@@ -231,25 +236,30 @@ module Common
|
|
231
236
|
# Metadata Agent. Thus it should be equivalent to what Metadata Agent
|
232
237
|
# returns.
|
233
238
|
def determine_agent_level_monitored_resource_via_legacy(
|
234
|
-
|
239
|
+
platform, subservice_name, detect_subservice, vm_id, zone
|
240
|
+
)
|
235
241
|
resource_type = determine_agent_level_monitored_resource_type(
|
236
|
-
platform, subservice_name, detect_subservice
|
242
|
+
platform, subservice_name, detect_subservice
|
243
|
+
)
|
237
244
|
create_monitored_resource(
|
238
245
|
resource_type,
|
239
246
|
determine_agent_level_monitored_resource_labels(
|
240
|
-
platform, resource_type, vm_id, zone
|
247
|
+
platform, resource_type, vm_id, zone
|
248
|
+
)
|
249
|
+
)
|
241
250
|
end
|
242
251
|
|
243
252
|
# Determine agent level monitored resource type.
|
244
253
|
def determine_agent_level_monitored_resource_type(
|
245
|
-
|
254
|
+
platform, subservice_name, detect_subservice
|
255
|
+
)
|
246
256
|
case platform
|
247
257
|
when Platform::OTHER
|
248
258
|
# Unknown platform will be defaulted to GCE instance.
|
249
|
-
|
259
|
+
COMPUTE_CONSTANTS[:resource_type]
|
250
260
|
|
251
261
|
when Platform::EC2
|
252
|
-
|
262
|
+
EC2_CONSTANTS[:resource_type]
|
253
263
|
|
254
264
|
when Platform::GCE
|
255
265
|
# Resource types determined by subservice_name config.
|
@@ -269,14 +279,15 @@ module Common
|
|
269
279
|
end
|
270
280
|
|
271
281
|
# GCE instance.
|
272
|
-
|
282
|
+
COMPUTE_CONSTANTS[:resource_type]
|
273
283
|
end
|
274
284
|
end
|
275
285
|
|
276
286
|
# Determine agent level monitored resource labels based on the resource
|
277
287
|
# type. Each resource type has its own labels that need to be filled in.
|
278
288
|
def determine_agent_level_monitored_resource_labels(
|
279
|
-
|
289
|
+
platform, type, vm_id, zone
|
290
|
+
)
|
280
291
|
case type
|
281
292
|
# GAE app.
|
282
293
|
when APPENGINE_CONSTANTS[:resource_type]
|
@@ -293,6 +304,7 @@ module Common
|
|
293
304
|
when COMPUTE_CONSTANTS[:resource_type]
|
294
305
|
raise "Cannot construct a #{type} resource without vm_id and zone" \
|
295
306
|
unless vm_id && zone
|
307
|
+
|
296
308
|
return {
|
297
309
|
'instance_id' => vm_id,
|
298
310
|
'zone' => zone
|
@@ -302,6 +314,7 @@ module Common
|
|
302
314
|
when GKE_CONSTANTS[:resource_type]
|
303
315
|
raise "Cannot construct a #{type} resource without vm_id and zone" \
|
304
316
|
unless vm_id && zone
|
317
|
+
|
305
318
|
return {
|
306
319
|
'instance_id' => vm_id,
|
307
320
|
'zone' => zone,
|
@@ -327,6 +340,7 @@ module Common
|
|
327
340
|
when EC2_CONSTANTS[:resource_type]
|
328
341
|
raise "Cannot construct a #{type} resource without vm_id and zone" \
|
329
342
|
unless vm_id && zone
|
343
|
+
|
330
344
|
labels = {
|
331
345
|
'instance_id' => vm_id,
|
332
346
|
'region' => zone
|
@@ -352,9 +366,8 @@ module Common
|
|
352
366
|
# Returns the project ID (as a string) on success, or nil on failure.
|
353
367
|
def self.project_id
|
354
368
|
creds = Google::Auth.get_application_default(LOGGING_SCOPE)
|
355
|
-
if creds.respond_to?(:project_id)
|
356
|
-
|
357
|
-
end
|
369
|
+
return creds.project_id if creds.respond_to?(:project_id) && creds.project_id
|
370
|
+
|
358
371
|
if creds.issuer
|
359
372
|
id = extract_project_id(creds.issuer)
|
360
373
|
return id unless id.nil?
|
@@ -65,21 +65,11 @@ module Fluent
|
|
65
65
|
@log.info "Initialized the insert ID key to #{@insert_id}."
|
66
66
|
end
|
67
67
|
|
68
|
-
def configure(conf)
|
69
|
-
super
|
70
|
-
end
|
71
|
-
|
72
|
-
def shutdown
|
73
|
-
super
|
74
|
-
end
|
75
|
-
|
76
68
|
# rubocop:disable Lint/UnusedMethodArgument
|
77
69
|
def filter(tag, time, record)
|
78
70
|
# Only generate and add an insertId field if the record is a hash and
|
79
71
|
# the insert ID field is not already set (or set to an empty string).
|
80
|
-
if record.is_a?(Hash) && record[@insert_id_key].to_s.empty?
|
81
|
-
record[@insert_id_key] = increment_insert_id
|
82
|
-
end
|
72
|
+
record[@insert_id_key] = increment_insert_id if record.is_a?(Hash) && record[@insert_id_key].to_s.empty?
|
83
73
|
record
|
84
74
|
end
|
85
75
|
# rubocop:enable Lint/UnusedMethodArgument
|