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

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.
@@ -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' => {