fluent-plugin-google-cloud 0.6.9.pre.1 → 0.6.10.pre.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -62,6 +62,17 @@ module BaseTest
62
62
  assert_equal 1, exception_count
63
63
  end
64
64
 
65
+ def test_configure_logging_api_url
66
+ setup_gce_metadata_stubs
67
+ {
68
+ APPLICATION_DEFAULT_CONFIG => DEFAULT_LOGGING_API_URL,
69
+ CUSTOM_LOGGING_API_URL_CONFIG => CUSTOM_LOGGING_API_URL
70
+ }.each do |(config, url)|
71
+ d = create_driver(config)
72
+ assert_equal url, d.instance.instance_variable_get(:@logging_api_url)
73
+ end
74
+ end
75
+
65
76
  def test_configure_custom_metadata
66
77
  setup_no_metadata_service_stubs
67
78
  d = create_driver(CUSTOM_METADATA_CONFIG)
@@ -607,10 +618,11 @@ module BaseTest
607
618
 
608
619
  def test_timestamps
609
620
  setup_gce_metadata_stubs
610
- expected_ts = []
611
- emit_index = 0
612
- setup_logging_stubs do
613
- [Time.at(123_456.789), Time.at(0), Time.now].each do |ts|
621
+ [Time.at(123_456.789), Time.at(0), Time.now].each do |ts|
622
+ expected_ts = []
623
+ emit_index = 0
624
+ setup_logging_stubs do
625
+ @logs_sent = []
614
626
  d = create_driver
615
627
  # Test the "native" fluentd timestamp as well as our nanosecond tags.
616
628
  d.emit({ 'message' => log_entry(emit_index) }, ts.to_f)
@@ -629,30 +641,31 @@ module BaseTest
629
641
  expected_ts.push(ts)
630
642
  emit_index += 1
631
643
  d.emit('message' => log_entry(emit_index),
632
- 'timestampSeconds' => "#{ts.tv_sec}",
633
- 'timestampNanos' => "#{ts.tv_nsec}")
644
+ 'timestampSeconds' => ts.tv_sec.to_s,
645
+ 'timestampNanos' => ts.tv_nsec.to_s)
634
646
  expected_ts.push(ts)
635
647
  emit_index += 1
636
648
  d.run
649
+ verify_index = 0
650
+ verify_log_entries(emit_index, COMPUTE_PARAMS) do |entry, i|
651
+ verify_default_log_entry_text(entry['textPayload'], i, entry)
652
+ assert_equal_with_default entry['timestamp']['seconds'],
653
+ expected_ts[verify_index].tv_sec, 0, entry
654
+ assert_equal_with_default \
655
+ entry['timestamp']['nanos'],
656
+ expected_ts[verify_index].tv_nsec, 0, entry do
657
+ # Fluentd v0.14 onwards supports nanosecond timestamp values.
658
+ # Added in 600 ns delta to avoid flaky tests introduced
659
+ # due to rounding error in double-precision floating-point numbers
660
+ # (to account for the missing 9 bits of precision ~ 512 ns).
661
+ # See http://wikipedia.org/wiki/Double-precision_floating-point_format.
662
+ assert_in_delta expected_ts[verify_index].tv_nsec,
663
+ entry['timestamp']['nanos'], 600, entry
664
+ end
665
+ verify_index += 1
666
+ end
637
667
  end
638
668
  end
639
- verify_index = 0
640
- verify_log_entries(emit_index, COMPUTE_PARAMS) do |entry, i|
641
- verify_default_log_entry_text(entry['textPayload'], i, entry)
642
- assert_equal_with_default entry['timestamp']['seconds'],
643
- expected_ts[verify_index].tv_sec, 0, entry
644
- assert_equal_with_default entry['timestamp']['nanos'],
645
- expected_ts[verify_index].tv_nsec, 0, entry do
646
- # Fluentd v0.14 onwards supports nanosecond timestamp values.
647
- # Added in 600 ns delta to avoid flaky tests introduced
648
- # due to rounding error in double-precision floating-point numbers
649
- # (to account for the missing 9 bits of precision ~ 512 ns).
650
- # See http://wikipedia.org/wiki/Double-precision_floating-point_format
651
- assert_in_delta expected_ts[verify_index].tv_nsec,
652
- entry['timestamp']['nanos'], 600, entry
653
- end
654
- verify_index += 1
655
- end
656
669
  end
657
670
 
658
671
  def test_malformed_timestamp
@@ -1793,6 +1806,6 @@ module BaseTest
1793
1806
  end
1794
1807
 
1795
1808
  def _undefined
1796
- fail "Method #{__callee__} is unimplemented and needs to be overridden."
1809
+ raise "Method #{__callee__} is unimplemented and needs to be overridden."
1797
1810
  end
1798
1811
  end
@@ -20,101 +20,104 @@ module Constants
20
20
 
21
21
  # Generic attributes.
22
22
  HOSTNAME = Socket.gethostname
23
+ CUSTOM_LOGGING_API_URL = 'custom.logging.googleapis.com'.freeze
23
24
 
24
25
  # TODO(qingling128) Separate constants into different submodules.
25
26
  # Attributes used for the GCE metadata service.
26
- PROJECT_ID = 'test-project-id'
27
- ZONE = 'us-central1-b'
28
- FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
29
- VM_ID = '9876543210'
27
+ PROJECT_ID = 'test-project-id'.freeze
28
+ ZONE = 'us-central1-b'.freeze
29
+ FULLY_QUALIFIED_ZONE = "projects/#{PROJECT_ID}/zones/#{ZONE}".freeze
30
+ VM_ID = '9876543210'.freeze
30
31
 
31
32
  # Attributes used for the Metadata Agent resources.
32
- METADATA_ZONE = 'us-central1-c'
33
- METADATA_VM_ID = '0123456789'
33
+ METADATA_ZONE = 'us-central1-c'.freeze
34
+ METADATA_VM_ID = '0123456789'.freeze
34
35
 
35
36
  # Attributes used for custom (overridden) configs.
36
- CUSTOM_PROJECT_ID = 'test-custom-project-id'
37
- CUSTOM_ZONE = 'us-custom-central1-b'
38
- CUSTOM_FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
39
- CUSTOM_VM_ID = 'C9876543210'
40
- CUSTOM_HOSTNAME = 'custom.hostname.org'
37
+ CUSTOM_PROJECT_ID = 'test-custom-project-id'.freeze
38
+ CUSTOM_ZONE = 'us-custom-central1-b'.freeze
39
+ CUSTOM_FULLY_QUALIFIED_ZONE = "projects/#{PROJECT_ID}/zones/#{ZONE}".freeze
40
+ CUSTOM_VM_ID = 'C9876543210'.freeze
41
+ CUSTOM_HOSTNAME = 'custom.hostname.org'.freeze
41
42
 
42
43
  # Attributes used for the EC2 metadata service.
43
- EC2_PROJECT_ID = 'test-ec2-project-id'
44
- EC2_ZONE = 'us-west-2b'
45
- EC2_PREFIXED_ZONE = 'aws:' + EC2_ZONE
46
- EC2_VM_ID = 'i-81c16767'
47
- EC2_ACCOUNT_ID = '123456789012'
44
+ EC2_PROJECT_ID = 'test-ec2-project-id'.freeze
45
+ EC2_ZONE = 'us-west-2b'.freeze
46
+ EC2_PREFIXED_ZONE = "aws:#{EC2_ZONE}".freeze
47
+ EC2_VM_ID = 'i-81c16767'.freeze
48
+ EC2_ACCOUNT_ID = '123456789012'.freeze
48
49
 
49
50
  # The formatting here matches the format used on the VM.
50
51
  EC2_IDENTITY_DOCUMENT = %({
51
52
  "accountId" : "#{EC2_ACCOUNT_ID}",
52
53
  "availabilityZone" : "#{EC2_ZONE}",
53
54
  "instanceId" : "#{EC2_VM_ID}"
54
- })
55
+ }).freeze
55
56
 
56
57
  # Managed VMs specific labels.
57
- MANAGED_VM_BACKEND_NAME = 'default'
58
- MANAGED_VM_BACKEND_VERSION = 'guestbook2.0'
58
+ MANAGED_VM_BACKEND_NAME = 'default'.freeze
59
+ MANAGED_VM_BACKEND_VERSION = 'guestbook2.0'.freeze
59
60
 
60
61
  # Docker Container labels.
61
- DOCKER_CONTAINER_ID = '0d0f03ff8d3c42688692536d1af77a28cd135c0a5c531f25a31'
62
- DOCKER_CONTAINER_NAME = 'happy_hippo'
63
- DOCKER_CONTAINER_STREAM_STDOUT = 'stdout'
64
- DOCKER_CONTAINER_STREAM_STDERR = 'stderr'
62
+ DOCKER_CONTAINER_ID =
63
+ '0d0f03ff8d3c42688692536d1af77a28cd135c0a5c531f25a31'.freeze
64
+ DOCKER_CONTAINER_NAME = 'happy_hippo'.freeze
65
+ DOCKER_CONTAINER_STREAM_STDOUT = 'stdout'.freeze
66
+ DOCKER_CONTAINER_STREAM_STDERR = 'stderr'.freeze
65
67
  # Timestamp for 1234567890 seconds and 987654321 nanoseconds since epoch.
66
- DOCKER_CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'
68
+ DOCKER_CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'.freeze
67
69
  DOCKER_CONTAINER_SECONDS_EPOCH = 1_234_567_890
68
70
  DOCKER_CONTAINER_NANOS = 987_654_321
69
71
 
70
72
  # Container Engine / Kubernetes specific labels.
71
- CONTAINER_CLUSTER_NAME = 'cluster-1'
72
- CONTAINER_NAMESPACE_ID = '898268c8-4a36-11e5-9d81-42010af0194c'
73
- CONTAINER_NAMESPACE_NAME = 'kube-system'
74
- CONTAINER_POD_ID = 'cad3c3c4-4b9c-11e5-9d81-42010af0194c'
75
- CONTAINER_POD_NAME = 'redis-master-c0l82.foo.bar'
76
- CONTAINER_CONTAINER_NAME = 'redis'
77
- CONTAINER_LABEL_KEY = 'component'
78
- CONTAINER_LABEL_VALUE = 'redis-component'
79
- CONTAINER_STREAM = 'stdout'
80
- CONTAINER_SEVERITY = 'INFO'
73
+ CONTAINER_CLUSTER_NAME = 'cluster-1'.freeze
74
+ CONTAINER_NAMESPACE_ID = '898268c8-4a36-11e5-9d81-42010af0194c'.freeze
75
+ CONTAINER_NAMESPACE_NAME = 'kube-system'.freeze
76
+ CONTAINER_POD_ID = 'cad3c3c4-4b9c-11e5-9d81-42010af0194c'.freeze
77
+ CONTAINER_POD_NAME = 'redis-master-c0l82.foo.bar'.freeze
78
+ CONTAINER_CONTAINER_NAME = 'redis'.freeze
79
+ CONTAINER_LABEL_KEY = 'component'.freeze
80
+ CONTAINER_LABEL_VALUE = 'redis-component'.freeze
81
+ CONTAINER_STREAM = 'stdout'.freeze
82
+ CONTAINER_SEVERITY = 'INFO'.freeze
81
83
  # Timestamp for 1234567890 seconds and 987654321 nanoseconds since epoch.
82
- CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'
84
+ CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'.freeze
83
85
  CONTAINER_SECONDS_EPOCH = 1_234_567_890
84
86
  CONTAINER_NANOS = 987_654_321
85
87
 
86
88
  # Cloud Functions specific labels.
87
- CLOUDFUNCTIONS_FUNCTION_NAME = '$My_Function.Name-@1'
88
- CLOUDFUNCTIONS_REGION = 'us-central1'
89
- CLOUDFUNCTIONS_EXECUTION_ID = '123-0'
90
- CLOUDFUNCTIONS_CLUSTER_NAME = 'cluster-1'
91
- CLOUDFUNCTIONS_NAMESPACE_NAME = 'default'
92
- CLOUDFUNCTIONS_POD_NAME = 'd.dc.myu.uc.functionp.pc.name-a.a1.987-c0l82'
93
- CLOUDFUNCTIONS_CONTAINER_NAME = 'worker'
89
+ CLOUDFUNCTIONS_FUNCTION_NAME = '$My_Function.Name-@1'.freeze
90
+ CLOUDFUNCTIONS_REGION = 'us-central1'.freeze
91
+ CLOUDFUNCTIONS_EXECUTION_ID = '123-0'.freeze
92
+ CLOUDFUNCTIONS_CLUSTER_NAME = 'cluster-1'.freeze
93
+ CLOUDFUNCTIONS_NAMESPACE_NAME = 'default'.freeze
94
+ CLOUDFUNCTIONS_POD_NAME =
95
+ 'd.dc.myu.uc.functionp.pc.name-a.a1.987-c0l82'.freeze
96
+ CLOUDFUNCTIONS_CONTAINER_NAME = 'worker'.freeze
94
97
 
95
98
  # Dataflow specific labels.
96
- DATAFLOW_REGION = 'us-central1'
97
- DATAFLOW_JOB_NAME = 'job_name_1'
98
- DATAFLOW_JOB_ID = 'job_id_1'
99
- DATAFLOW_STEP_ID = 'step_1'
100
- DATAFLOW_TAG = 'dataflow-worker'
99
+ DATAFLOW_REGION = 'us-central1'.freeze
100
+ DATAFLOW_JOB_NAME = 'job_name_1'.freeze
101
+ DATAFLOW_JOB_ID = 'job_id_1'.freeze
102
+ DATAFLOW_STEP_ID = 'step_1'.freeze
103
+ DATAFLOW_TAG = 'dataflow-worker'.freeze
101
104
 
102
105
  # Dataproc specific labels.
103
- DATAPROC_CLUSTER_NAME = 'test-cluster'
104
- DATAPROC_CLUSTER_UUID = '00000000-0000-0000-0000-000000000000'
105
- DATAPROC_REGION = 'unittest'
106
+ DATAPROC_CLUSTER_NAME = 'test-cluster'.freeze
107
+ DATAPROC_CLUSTER_UUID = '00000000-0000-0000-0000-000000000000'.freeze
108
+ DATAPROC_REGION = 'unittest'.freeze
106
109
 
107
110
  # ML specific labels.
108
- ML_REGION = 'us-central1'
109
- ML_JOB_ID = 'job_name_1'
110
- ML_TASK_NAME = 'task_name_1'
111
- ML_TRIAL_ID = 'trial_id_1'
112
- ML_LOG_AREA = 'log_area_1'
113
- ML_TAG = 'master-replica-0'
111
+ ML_REGION = 'us-central1'.freeze
112
+ ML_JOB_ID = 'job_name_1'.freeze
113
+ ML_TASK_NAME = 'task_name_1'.freeze
114
+ ML_TRIAL_ID = 'trial_id_1'.freeze
115
+ ML_LOG_AREA = 'log_area_1'.freeze
116
+ ML_TAG = 'master-replica-0'.freeze
114
117
 
115
118
  # Parameters used for authentication.
116
- AUTH_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
117
- FAKE_AUTH_TOKEN = 'abc123'
119
+ AUTH_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:jwt-bearer'.freeze
120
+ FAKE_AUTH_TOKEN = 'abc123'.freeze
118
121
 
119
122
  # Information about test credentials files.
120
123
  # path: Path to the credentials file.
@@ -122,97 +125,101 @@ module Constants
122
125
  IAM_CREDENTIALS = {
123
126
  path: 'test/plugin/data/iam-credentials.json',
124
127
  project_id: 'fluent-test-project'
125
- }
128
+ }.freeze
126
129
  LEGACY_CREDENTIALS = {
127
130
  path: 'test/plugin/data/credentials.json',
128
131
  project_id: '847859579879'
129
- }
132
+ }.freeze
130
133
  INVALID_CREDENTIALS = {
131
134
  path: 'test/plugin/data/invalid_credentials.json',
132
135
  project_id: ''
133
- }
136
+ }.freeze
134
137
 
135
138
  # Configuration files for various test scenarios.
136
139
  APPLICATION_DEFAULT_CONFIG = %(
137
- )
140
+ ).freeze
141
+
142
+ CUSTOM_LOGGING_API_URL_CONFIG = %(
143
+ logging_api_url #{CUSTOM_LOGGING_API_URL}
144
+ ).freeze
138
145
 
139
146
  DETECT_JSON_CONFIG = %(
140
147
  detect_json true
141
- )
148
+ ).freeze
142
149
 
143
150
  PARTIAL_SUCCESS_CONFIG = %(
144
151
  partial_success true
145
- )
152
+ ).freeze
146
153
 
147
154
  # rubocop:disable Metrics/LineLength
148
155
  PRIVATE_KEY_CONFIG = %(
149
156
  auth_method private_key
150
157
  private_key_email 271661262351-ft99kc9kjro9rrihq3k2n3s2inbplu0q@developer.gserviceaccount.com
151
158
  private_key_path test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
152
- )
159
+ ).freeze
153
160
  # rubocop:enable Metrics/LineLength
154
161
 
155
162
  REQUIRE_VALID_TAGS_CONFIG = %(
156
163
  require_valid_tags true
157
- )
164
+ ).freeze
158
165
 
159
166
  NO_METADATA_SERVICE_CONFIG = %(
160
167
  use_metadata_service false
161
- )
168
+ ).freeze
162
169
 
163
170
  NO_DETECT_SUBSERVICE_CONFIG = %(
164
171
  detect_subservice false
165
- )
172
+ ).freeze
166
173
 
167
174
  PROMETHEUS_ENABLE_CONFIG = %(
168
175
  enable_monitoring true
169
176
  monitoring_type prometheus
170
- )
177
+ ).freeze
171
178
 
172
179
  ENABLE_METADATA_AGENT_CONFIG = %(
173
180
  enable_metadata_agent true
174
- )
181
+ ).freeze
175
182
 
176
183
  DISABLE_METADATA_AGENT_CONFIG = %(
177
184
  enable_metadata_agent false
178
- )
185
+ ).freeze
179
186
 
180
187
  DOCKER_CONTAINER_CONFIG = %(
181
188
  enable_metadata_agent true
182
189
  label_map { "source": "#{DOCKER_CONSTANTS[:service]}/stream" }
183
190
  detect_json true
184
- )
191
+ ).freeze
185
192
 
186
193
  CUSTOM_METADATA_CONFIG = %(
187
194
  project_id #{CUSTOM_PROJECT_ID}
188
195
  zone #{CUSTOM_ZONE}
189
196
  vm_id #{CUSTOM_VM_ID}
190
197
  vm_name #{CUSTOM_HOSTNAME}
191
- )
198
+ ).freeze
192
199
 
193
200
  CONFIG_MISSING_METADATA_PROJECT_ID = %(
194
201
  zone #{CUSTOM_ZONE}
195
202
  vm_id #{CUSTOM_VM_ID}
196
- )
203
+ ).freeze
197
204
  CONFIG_MISSING_METADATA_ZONE = %(
198
205
  project_id #{CUSTOM_PROJECT_ID}
199
206
  vm_id #{CUSTOM_VM_ID}
200
- )
207
+ ).freeze
201
208
  CONFIG_MISSING_METADATA_VM_ID = %(
202
209
  project_id #{CUSTOM_PROJECT_ID}
203
210
  zone #{CUSTOM_ZONE}
204
- )
211
+ ).freeze
205
212
  CONFIG_MISSING_METADATA_ALL = %(
206
- )
213
+ ).freeze
207
214
 
208
215
  CONFIG_EC2_PROJECT_ID = %(
209
216
  project_id #{EC2_PROJECT_ID}
210
- )
217
+ ).freeze
211
218
 
212
219
  CONFIG_EC2_PROJECT_ID_AND_CUSTOM_VM_ID = %(
213
220
  project_id #{EC2_PROJECT_ID}
214
221
  vm_id #{CUSTOM_VM_ID}
215
- )
222
+ ).freeze
216
223
 
217
224
  CONFIG_DATAFLOW = %(
218
225
  subservice_name "#{DATAFLOW_CONSTANTS[:service]}"
@@ -222,7 +229,7 @@ module Constants
222
229
  "#{DATAFLOW_CONSTANTS[:service]}/job_id" : "#{DATAFLOW_JOB_ID}"
223
230
  }
224
231
  label_map { "step": "#{DATAFLOW_CONSTANTS[:service]}/step_id" }
225
- )
232
+ ).freeze
226
233
 
227
234
  CONFIG_ML = %(
228
235
  subservice_name "#{ML_CONSTANTS[:service]}"
@@ -232,11 +239,11 @@ module Constants
232
239
  "#{ML_CONSTANTS[:service]}/trial_id" : "#{ML_TRIAL_ID}"
233
240
  }
234
241
  label_map { "name": "#{ML_CONSTANTS[:service]}/job_id/log_area" }
235
- )
242
+ ).freeze
236
243
 
237
244
  CONFIG_CUSTOM_TRACE_KEY_SPECIFIED = %(
238
245
  trace_key custom_trace_key
239
- )
246
+ ).freeze
240
247
 
241
248
  # Service configurations for various services.
242
249
 
@@ -254,7 +261,7 @@ module Constants
254
261
  labels: {
255
262
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
256
263
  }
257
- }
264
+ }.freeze
258
265
  COMPUTE_PARAMS_WITH_METADATA_VM_ID_AND_ZONE = COMPUTE_PARAMS.merge(
259
266
  resource: COMPUTE_PARAMS[:resource].merge(
260
267
  labels: {
@@ -262,7 +269,7 @@ module Constants
262
269
  'zone' => METADATA_ZONE
263
270
  }
264
271
  )
265
- )
272
+ ).freeze
266
273
 
267
274
  # GAE.
268
275
  VMENGINE_PARAMS = {
@@ -280,11 +287,12 @@ module Constants
280
287
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
281
288
  "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
282
289
  }
283
- }
290
+ }.freeze
284
291
 
285
292
  # GKE Container.
286
- CONTAINER_TAG = "kubernetes.#{CONTAINER_POD_NAME}_" \
287
- "#{CONTAINER_NAMESPACE_NAME}_#{CONTAINER_CONTAINER_NAME}"
293
+ CONTAINER_TAG =
294
+ "kubernetes.#{CONTAINER_POD_NAME}_#{CONTAINER_NAMESPACE_NAME}_" \
295
+ "#{CONTAINER_CONTAINER_NAME}".freeze
288
296
 
289
297
  CONTAINER_FROM_METADATA_PARAMS = {
290
298
  resource: {
@@ -308,7 +316,7 @@ module Constants
308
316
  "label/#{CONTAINER_LABEL_KEY}" => CONTAINER_LABEL_VALUE,
309
317
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
310
318
  }
311
- }
319
+ }.freeze
312
320
 
313
321
  # Almost the same as from metadata, but namespace_id and pod_id come from
314
322
  # namespace and pod names.
@@ -333,7 +341,7 @@ module Constants
333
341
  "#{GKE_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
334
342
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
335
343
  }
336
- }
344
+ }.freeze
337
345
 
338
346
  CONTAINER_FROM_APPLICATION_PARAMS = {
339
347
  resource: {
@@ -352,7 +360,7 @@ module Constants
352
360
  labels: {
353
361
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
354
362
  }
355
- }
363
+ }.freeze
356
364
 
357
365
  # Docker Container.
358
366
  DOCKER_CONTAINER_PARAMS = {
@@ -368,18 +376,19 @@ module Constants
368
376
  labels: {
369
377
  "#{DOCKER_CONSTANTS[:service]}/stream" => DOCKER_CONTAINER_STREAM_STDOUT
370
378
  }
371
- }
379
+ }.freeze
372
380
  DOCKER_CONTAINER_PARAMS_STREAM_STDERR = DOCKER_CONTAINER_PARAMS.merge(
373
381
  labels: DOCKER_CONTAINER_PARAMS[:labels].merge(
374
382
  "#{DOCKER_CONSTANTS[:service]}/stream" => DOCKER_CONTAINER_STREAM_STDERR
375
383
  )
376
- )
377
- DOCKER_CONTAINER_PARAMS_NO_STREAM = DOCKER_CONTAINER_PARAMS.merge(labels: {})
384
+ ).freeze
385
+ DOCKER_CONTAINER_PARAMS_NO_STREAM =
386
+ DOCKER_CONTAINER_PARAMS.merge(labels: {}).freeze
378
387
 
379
388
  # Cloud Functions.
380
389
  CLOUDFUNCTIONS_TAG = "kubernetes.#{CLOUDFUNCTIONS_POD_NAME}_" \
381
390
  "#{CLOUDFUNCTIONS_NAMESPACE_NAME}_" \
382
- "#{CLOUDFUNCTIONS_CONTAINER_NAME}"
391
+ "#{CLOUDFUNCTIONS_CONTAINER_NAME}".freeze
383
392
 
384
393
  CLOUDFUNCTIONS_PARAMS = {
385
394
  resource: {
@@ -400,7 +409,7 @@ module Constants
400
409
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
401
410
  "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
402
411
  }
403
- }
412
+ }.freeze
404
413
 
405
414
  CLOUDFUNCTIONS_TEXT_NOT_MATCHED_PARAMS = {
406
415
  resource: {
@@ -420,7 +429,7 @@ module Constants
420
429
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
421
430
  "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
422
431
  }
423
- }
432
+ }.freeze
424
433
 
425
434
  # Cloud Dataflow.
426
435
  DATAFLOW_PARAMS = {
@@ -440,7 +449,7 @@ module Constants
440
449
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
441
450
  "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
442
451
  }
443
- }
452
+ }.freeze
444
453
 
445
454
  # Cloud Dataproc.
446
455
  DATAPROC_PARAMS = {
@@ -459,7 +468,7 @@ module Constants
459
468
  "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
460
469
  "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
461
470
  }
462
- }
471
+ }.freeze
463
472
 
464
473
  # Cloud ML.
465
474
  ML_PARAMS = {
@@ -479,7 +488,7 @@ module Constants
479
488
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
480
489
  "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
481
490
  }
482
- }
491
+ }.freeze
483
492
 
484
493
  CUSTOM_PARAMS = {
485
494
  resource: {
@@ -494,7 +503,7 @@ module Constants
494
503
  labels: {
495
504
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => CUSTOM_HOSTNAME
496
505
  }
497
- }
506
+ }.freeze
498
507
 
499
508
  EC2_PARAMS = {
500
509
  resource: {
@@ -510,7 +519,7 @@ module Constants
510
519
  labels: {
511
520
  "#{EC2_CONSTANTS[:service]}/resource_name" => HOSTNAME
512
521
  }
513
- }
522
+ }.freeze
514
523
 
515
524
  HTTP_REQUEST_MESSAGE = {
516
525
  'requestMethod' => 'POST',
@@ -523,24 +532,24 @@ module Constants
523
532
  'referer' => 'http://referer/',
524
533
  'cacheHit' => true,
525
534
  'cacheValidatedWithOriginServer' => true
526
- }
535
+ }.freeze
527
536
 
528
537
  SOURCE_LOCATION_MESSAGE = {
529
538
  'file' => 'source/file',
530
539
  'function' => 'my_function',
531
540
  'line' => 18
532
- }
541
+ }.freeze
533
542
 
534
543
  OPERATION_MESSAGE = {
535
544
  'id' => 'op_id',
536
545
  'producer' => 'my/app',
537
546
  'last' => true
538
- }
547
+ }.freeze
539
548
 
540
549
  CUSTOM_LABELS_MESSAGE = {
541
550
  'customKey' => 'value'
542
- }
543
- CONFLICTING_LABEL_KEY = "#{COMPUTE_CONSTANTS[:service]}/resource_name"
551
+ }.freeze
552
+ CONFLICTING_LABEL_KEY = "#{COMPUTE_CONSTANTS[:service]}/resource_name".freeze
544
553
 
545
554
  # Tags and their sanitized and encoded version.
546
555
  VALID_TAGS = {
@@ -550,7 +559,7 @@ module Constants
550
559
  'specialCharacter/_-.' => 'specialCharacter%2F_-.',
551
560
  'abc@&^$*' => 'abc%40%26%5E%24%2A',
552
561
  '@&^$*' => '%40%26%5E%24%2A'
553
- }
562
+ }.freeze
554
563
  INVALID_TAGS = {
555
564
  # Non-string tags.
556
565
  123 => '123',
@@ -560,10 +569,10 @@ module Constants
560
569
  # Non-utf8 string tags.
561
570
  "nonutf8#{[0x92].pack('C*')}" => 'nonutf8%20',
562
571
  "abc#{[0x92].pack('C*')}" => 'abc%20',
563
- "#{[0x92].pack('C*')}" => '%20',
572
+ [0x92].pack('C*') => '%20',
564
573
  # Empty string tag.
565
574
  '' => '_'
566
- }
575
+ }.freeze
567
576
  ALL_TAGS = VALID_TAGS.merge(INVALID_TAGS)
568
577
 
569
578
  # Stub value for Monitored resources from Metadata Agent.
@@ -601,7 +610,7 @@ module Constants
601
610
  'zone' => ZONE
602
611
  }
603
612
  }.to_json
604
- }
613
+ }.freeze
605
614
 
606
615
  PARTIAL_SUCCESS_RESPONSE_BODY = {
607
616
  'error' => {