fluent-plugin-google-cloud 0.6.2 → 0.6.3
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 +9 -9
- data/fluent-plugin-google-cloud-0.6.2.gem +0 -0
- data/fluent-plugin-google-cloud.gemspec +2 -2
- data/lib/fluent/plugin/out_google_cloud.rb +4 -3
- data/test/plugin/base_test.rb +3 -405
- data/test/plugin/constants.rb +424 -0
- data/test/plugin/test_out_google_cloud.rb +2 -0
- metadata +12 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0d7c7c98a69f3fa2f2c40ad70020260bf55e8be
|
4
|
+
data.tar.gz: 539deff09173b3b13fe9c226eaee60f8bd3695c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bd48380bc63a1863ddc846beaf10d47053b3c17013e5d4044bc6474383d5958cd331ed9195092b8ffbf27e9b18c8f61e98f7e3eaff23ec2ed8b3fbfdb30ac11
|
7
|
+
data.tar.gz: 7c0e134bbfa2c2b78b33727be8739c2e548f169f7b7c76a451bedea257babc82bf062c89e0020daf9426d8b47a1cf72542670e24ef73cc94782e8d9ecec86263
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-google-cloud (0.6.
|
4
|
+
fluent-plugin-google-cloud (0.6.3)
|
5
5
|
fluentd (~> 0.10)
|
6
6
|
google-api-client (~> 0.9.0)
|
7
7
|
google-cloud-logging (~> 0.23.2)
|
8
8
|
googleapis-common-protos (~> 1.3)
|
9
9
|
googleauth (~> 0.4)
|
10
|
-
grpc (~> 1.0)
|
10
|
+
grpc (~> 1.0, < 1.3)
|
11
11
|
json (~> 1.8)
|
12
12
|
|
13
13
|
GEM
|
@@ -18,13 +18,13 @@ GEM
|
|
18
18
|
ast (2.3.0)
|
19
19
|
astrolabe (1.3.1)
|
20
20
|
parser (~> 2.2)
|
21
|
-
cool.io (1.
|
21
|
+
cool.io (1.5.0)
|
22
22
|
crack (0.4.3)
|
23
23
|
safe_yaml (~> 1.0.0)
|
24
24
|
faraday (0.12.1)
|
25
25
|
multipart-post (>= 1.2, < 3)
|
26
|
-
fluentd (0.14.
|
27
|
-
cool.io (
|
26
|
+
fluentd (0.14.17)
|
27
|
+
cool.io (>= 1.4.5, < 2.0.0)
|
28
28
|
http_parser.rb (>= 0.5.1, < 0.7.0)
|
29
29
|
msgpack (>= 0.7.0, < 2.0.0)
|
30
30
|
serverengine (>= 2.0.4, < 3.0.0)
|
@@ -57,7 +57,7 @@ GEM
|
|
57
57
|
googleauth (~> 0.5.1)
|
58
58
|
grpc (~> 1.0)
|
59
59
|
rly (~> 0.2.3)
|
60
|
-
google-protobuf (3.3.0)
|
60
|
+
google-protobuf (3.3.0-universal-darwin)
|
61
61
|
googleapis-common-protos (1.3.5)
|
62
62
|
google-protobuf (~> 3.2)
|
63
63
|
grpc (~> 1.0)
|
@@ -69,7 +69,7 @@ GEM
|
|
69
69
|
multi_json (~> 1.11)
|
70
70
|
os (~> 0.9)
|
71
71
|
signet (~> 0.7)
|
72
|
-
grpc (1.2.5)
|
72
|
+
grpc (1.2.5-universal-darwin)
|
73
73
|
google-protobuf (~> 3.1)
|
74
74
|
googleauth (~> 0.5.1)
|
75
75
|
hashdiff (0.3.4)
|
@@ -125,7 +125,7 @@ GEM
|
|
125
125
|
multi_json (~> 1.10)
|
126
126
|
stackdriver-core (0.21.0)
|
127
127
|
strptime (0.1.9)
|
128
|
-
test-unit (3.2.
|
128
|
+
test-unit (3.2.4)
|
129
129
|
power_assert
|
130
130
|
thread_safe (0.3.6)
|
131
131
|
tins (1.6.0)
|
@@ -152,4 +152,4 @@ DEPENDENCIES
|
|
152
152
|
webmock (~> 1.17)
|
153
153
|
|
154
154
|
BUNDLED WITH
|
155
|
-
1.
|
155
|
+
1.15.0
|
Binary file
|
@@ -10,7 +10,7 @@ eos
|
|
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.6.
|
13
|
+
gem.version = '0.6.3'
|
14
14
|
gem.authors = ['Todd Derr', 'Alex Robinson']
|
15
15
|
gem.email = ['salty@google.com']
|
16
16
|
gem.required_ruby_version = Gem::Requirement.new('>= 2.0')
|
@@ -24,7 +24,7 @@ eos
|
|
24
24
|
gem.add_runtime_dependency 'google-api-client', '~> 0.9.0'
|
25
25
|
gem.add_runtime_dependency 'google-cloud-logging', '~> 0.23.2'
|
26
26
|
gem.add_runtime_dependency 'googleauth', '~> 0.4'
|
27
|
-
gem.add_runtime_dependency 'grpc', '~> 1.0'
|
27
|
+
gem.add_runtime_dependency 'grpc', '~> 1.0', '< 1.3'
|
28
28
|
gem.add_runtime_dependency 'json', '~> 1.8'
|
29
29
|
|
30
30
|
gem.add_development_dependency 'mocha', '~> 1.1'
|
@@ -73,7 +73,7 @@ module Fluent
|
|
73
73
|
Fluent::Plugin.register_output('google_cloud', self)
|
74
74
|
|
75
75
|
PLUGIN_NAME = 'Fluentd Google Cloud Logging plugin'
|
76
|
-
PLUGIN_VERSION = '0.6.
|
76
|
+
PLUGIN_VERSION = '0.6.3'
|
77
77
|
|
78
78
|
# Name of the the Google cloud logging write scope.
|
79
79
|
LOGGING_SCOPE = 'https://www.googleapis.com/auth/logging.write'
|
@@ -450,8 +450,9 @@ module Fluent
|
|
450
450
|
# Do this here to avoid having to repeat it for each record.
|
451
451
|
match_data = @compiled_kubernetes_tag_regexp.match(tag)
|
452
452
|
if match_data
|
453
|
-
group_resource.labels['container_name'] =
|
454
|
-
|
453
|
+
group_resource.labels['container_name'] = match_data['container_name']
|
454
|
+
group_resource.labels['namespace_id'] = match_data['namespace_name']
|
455
|
+
group_resource.labels['pod_id'] = match_data['pod_name']
|
455
456
|
%w(namespace_name pod_name).each do |field|
|
456
457
|
group_common_labels["#{CONTAINER_CONSTANTS[:service]}/#{field}"] =
|
457
458
|
match_data[field]
|
data/test/plugin/base_test.rb
CHANGED
@@ -17,9 +17,11 @@ require 'helper'
|
|
17
17
|
require 'mocha/test_unit'
|
18
18
|
require 'webmock/test_unit'
|
19
19
|
|
20
|
+
require_relative 'constants'
|
21
|
+
|
20
22
|
# Unit tests for Google Cloud Logging plugin
|
21
23
|
module BaseTest
|
22
|
-
include
|
24
|
+
include Constants
|
23
25
|
|
24
26
|
def setup
|
25
27
|
Fluent::Test.setup
|
@@ -39,410 +41,6 @@ module BaseTest
|
|
39
41
|
@logs_sent = []
|
40
42
|
end
|
41
43
|
|
42
|
-
# generic attributes
|
43
|
-
HOSTNAME = Socket.gethostname
|
44
|
-
|
45
|
-
WRITE_LOG_ENTRIES_URI = 'https://logging.googleapis.com/v2beta1/entries:write'
|
46
|
-
|
47
|
-
# attributes used for the GCE metadata service
|
48
|
-
PROJECT_ID = 'test-project-id'
|
49
|
-
ZONE = 'us-central1-b'
|
50
|
-
FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
|
51
|
-
VM_ID = '9876543210'
|
52
|
-
|
53
|
-
# attributes used for custom (overridden) configs
|
54
|
-
CUSTOM_PROJECT_ID = 'test-custom-project-id'
|
55
|
-
CUSTOM_ZONE = 'us-custom-central1-b'
|
56
|
-
CUSTOM_FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
|
57
|
-
CUSTOM_VM_ID = 'C9876543210'
|
58
|
-
CUSTOM_HOSTNAME = 'custom.hostname.org'
|
59
|
-
|
60
|
-
# attributes used for the EC2 metadata service
|
61
|
-
EC2_PROJECT_ID = 'test-ec2-project-id'
|
62
|
-
EC2_ZONE = 'us-west-2b'
|
63
|
-
EC2_PREFIXED_ZONE = 'aws:' + EC2_ZONE
|
64
|
-
EC2_VM_ID = 'i-81c16767'
|
65
|
-
EC2_ACCOUNT_ID = '123456789012'
|
66
|
-
|
67
|
-
# The formatting here matches the format used on the VM.
|
68
|
-
EC2_IDENTITY_DOCUMENT = %({
|
69
|
-
"accountId" : "#{EC2_ACCOUNT_ID}",
|
70
|
-
"availabilityZone" : "#{EC2_ZONE}",
|
71
|
-
"instanceId" : "#{EC2_VM_ID}"
|
72
|
-
})
|
73
|
-
|
74
|
-
# Managed VMs specific labels
|
75
|
-
MANAGED_VM_BACKEND_NAME = 'default'
|
76
|
-
MANAGED_VM_BACKEND_VERSION = 'guestbook2.0'
|
77
|
-
|
78
|
-
# Container Engine / Kubernetes specific labels
|
79
|
-
CONTAINER_CLUSTER_NAME = 'cluster-1'
|
80
|
-
CONTAINER_NAMESPACE_ID = '898268c8-4a36-11e5-9d81-42010af0194c'
|
81
|
-
CONTAINER_NAMESPACE_NAME = 'kube-system'
|
82
|
-
CONTAINER_POD_ID = 'cad3c3c4-4b9c-11e5-9d81-42010af0194c'
|
83
|
-
CONTAINER_POD_NAME = 'redis-master-c0l82.foo.bar'
|
84
|
-
CONTAINER_CONTAINER_NAME = 'redis'
|
85
|
-
CONTAINER_LABEL_KEY = 'component'
|
86
|
-
CONTAINER_LABEL_VALUE = 'redis-component'
|
87
|
-
CONTAINER_STREAM = 'stdout'
|
88
|
-
CONTAINER_SEVERITY = 'INFO'
|
89
|
-
# Timestamp for 1234567890 seconds and 987654321 nanoseconds since epoch
|
90
|
-
CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'
|
91
|
-
CONTAINER_SECONDS_EPOCH = 1_234_567_890
|
92
|
-
CONTAINER_NANOS = 987_654_321
|
93
|
-
|
94
|
-
# Cloud Functions specific labels
|
95
|
-
CLOUDFUNCTIONS_FUNCTION_NAME = '$My_Function.Name-@1'
|
96
|
-
CLOUDFUNCTIONS_REGION = 'us-central1'
|
97
|
-
CLOUDFUNCTIONS_EXECUTION_ID = '123-0'
|
98
|
-
CLOUDFUNCTIONS_CLUSTER_NAME = 'cluster-1'
|
99
|
-
CLOUDFUNCTIONS_NAMESPACE_NAME = 'default'
|
100
|
-
CLOUDFUNCTIONS_POD_NAME = 'd.dc.myu.uc.functionp.pc.name-a.a1.987-c0l82'
|
101
|
-
CLOUDFUNCTIONS_CONTAINER_NAME = 'worker'
|
102
|
-
|
103
|
-
# Dataflow specific labels
|
104
|
-
DATAFLOW_REGION = 'us-central1'
|
105
|
-
DATAFLOW_JOB_NAME = 'job_name_1'
|
106
|
-
DATAFLOW_JOB_ID = 'job_id_1'
|
107
|
-
DATAFLOW_STEP_ID = 'step_1'
|
108
|
-
DATAFLOW_TAG = 'dataflow.googleapis.com/worker'
|
109
|
-
|
110
|
-
# ML specific labels
|
111
|
-
ML_REGION = 'us-central1'
|
112
|
-
ML_JOB_ID = 'job_name_1'
|
113
|
-
ML_TASK_NAME = 'task_name_1'
|
114
|
-
ML_TRIAL_ID = 'trial_id_1'
|
115
|
-
ML_LOG_AREA = 'log_area_1'
|
116
|
-
ML_TAG = 'master-replica-0'
|
117
|
-
|
118
|
-
# Parameters used for authentication
|
119
|
-
AUTH_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
|
120
|
-
FAKE_AUTH_TOKEN = 'abc123'
|
121
|
-
|
122
|
-
# Information about test credentials files.
|
123
|
-
# path: Path to the credentials file.
|
124
|
-
# project_id: ID of the project, which must correspond to the file contents.
|
125
|
-
IAM_CREDENTIALS = {
|
126
|
-
path: 'test/plugin/data/iam-credentials.json',
|
127
|
-
project_id: 'fluent-test-project'
|
128
|
-
}
|
129
|
-
LEGACY_CREDENTIALS = {
|
130
|
-
path: 'test/plugin/data/credentials.json',
|
131
|
-
project_id: '847859579879'
|
132
|
-
}
|
133
|
-
INVALID_CREDENTIALS = {
|
134
|
-
path: 'test/plugin/data/invalid_credentials.json',
|
135
|
-
project_id: ''
|
136
|
-
}
|
137
|
-
|
138
|
-
# Configuration files for various test scenarios
|
139
|
-
APPLICATION_DEFAULT_CONFIG = %(
|
140
|
-
)
|
141
|
-
|
142
|
-
# rubocop:disable Metrics/LineLength
|
143
|
-
PRIVATE_KEY_CONFIG = %(
|
144
|
-
auth_method private_key
|
145
|
-
private_key_email 271661262351-ft99kc9kjro9rrihq3k2n3s2inbplu0q@developer.gserviceaccount.com
|
146
|
-
private_key_path test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
|
147
|
-
)
|
148
|
-
# rubocop:enable Metrics/LineLength
|
149
|
-
|
150
|
-
REQUIRE_VALID_TAGS_CONFIG = %(
|
151
|
-
require_valid_tags true
|
152
|
-
)
|
153
|
-
|
154
|
-
NO_METADATA_SERVICE_CONFIG = %(
|
155
|
-
use_metadata_service false
|
156
|
-
)
|
157
|
-
|
158
|
-
NO_DETECT_SUBSERVICE_CONFIG = %(
|
159
|
-
detect_subservice false
|
160
|
-
)
|
161
|
-
|
162
|
-
CUSTOM_METADATA_CONFIG = %(
|
163
|
-
project_id #{CUSTOM_PROJECT_ID}
|
164
|
-
zone #{CUSTOM_ZONE}
|
165
|
-
vm_id #{CUSTOM_VM_ID}
|
166
|
-
vm_name #{CUSTOM_HOSTNAME}
|
167
|
-
)
|
168
|
-
|
169
|
-
CONFIG_MISSING_METADATA_PROJECT_ID = %(
|
170
|
-
zone #{CUSTOM_ZONE}
|
171
|
-
vm_id #{CUSTOM_VM_ID}
|
172
|
-
)
|
173
|
-
CONFIG_MISSING_METADATA_ZONE = %(
|
174
|
-
project_id #{CUSTOM_PROJECT_ID}
|
175
|
-
vm_id #{CUSTOM_VM_ID}
|
176
|
-
)
|
177
|
-
CONFIG_MISSING_METADATA_VM_ID = %(
|
178
|
-
project_id #{CUSTOM_PROJECT_ID}
|
179
|
-
zone #{CUSTOM_ZONE}
|
180
|
-
)
|
181
|
-
CONFIG_MISSING_METADATA_ALL = %(
|
182
|
-
)
|
183
|
-
|
184
|
-
CONFIG_EC2_PROJECT_ID = %(
|
185
|
-
project_id #{EC2_PROJECT_ID}
|
186
|
-
)
|
187
|
-
|
188
|
-
CONFIG_EC2_PROJECT_ID_AND_CUSTOM_VM_ID = %(
|
189
|
-
project_id #{EC2_PROJECT_ID}
|
190
|
-
vm_id #{CUSTOM_VM_ID}
|
191
|
-
)
|
192
|
-
|
193
|
-
CONFIG_DATAFLOW = %(
|
194
|
-
subservice_name "#{DATAFLOW_CONSTANTS[:service]}"
|
195
|
-
labels {
|
196
|
-
"#{DATAFLOW_CONSTANTS[:service]}/region" : "#{DATAFLOW_REGION}",
|
197
|
-
"#{DATAFLOW_CONSTANTS[:service]}/job_name" : "#{DATAFLOW_JOB_NAME}",
|
198
|
-
"#{DATAFLOW_CONSTANTS[:service]}/job_id" : "#{DATAFLOW_JOB_ID}"
|
199
|
-
}
|
200
|
-
label_map { "step": "#{DATAFLOW_CONSTANTS[:service]}/step_id" }
|
201
|
-
)
|
202
|
-
|
203
|
-
CONFIG_ML = %(
|
204
|
-
subservice_name "#{ML_CONSTANTS[:service]}"
|
205
|
-
labels {
|
206
|
-
"#{ML_CONSTANTS[:service]}/job_id" : "#{ML_JOB_ID}",
|
207
|
-
"#{ML_CONSTANTS[:service]}/task_name" : "#{ML_TASK_NAME}",
|
208
|
-
"#{ML_CONSTANTS[:service]}/trial_id" : "#{ML_TRIAL_ID}"
|
209
|
-
}
|
210
|
-
label_map { "name": "#{ML_CONSTANTS[:service]}/job_id/log_area" }
|
211
|
-
)
|
212
|
-
|
213
|
-
# Service configurations for various services
|
214
|
-
COMPUTE_PARAMS = {
|
215
|
-
resource: {
|
216
|
-
type: COMPUTE_CONSTANTS[:resource_type],
|
217
|
-
labels: {
|
218
|
-
'instance_id' => VM_ID,
|
219
|
-
'zone' => ZONE
|
220
|
-
}
|
221
|
-
},
|
222
|
-
log_name: 'test',
|
223
|
-
project_id: PROJECT_ID,
|
224
|
-
labels: {
|
225
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
226
|
-
}
|
227
|
-
}
|
228
|
-
|
229
|
-
VMENGINE_PARAMS = {
|
230
|
-
resource: {
|
231
|
-
type: APPENGINE_CONSTANTS[:resource_type],
|
232
|
-
labels: {
|
233
|
-
'module_id' => MANAGED_VM_BACKEND_NAME,
|
234
|
-
'version_id' => MANAGED_VM_BACKEND_VERSION
|
235
|
-
}
|
236
|
-
},
|
237
|
-
log_name: "#{APPENGINE_CONSTANTS[:service]}%2Ftest",
|
238
|
-
project_id: PROJECT_ID,
|
239
|
-
labels: {
|
240
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
241
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
242
|
-
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
243
|
-
}
|
244
|
-
}
|
245
|
-
|
246
|
-
CONTAINER_TAG = "kubernetes.#{CONTAINER_POD_NAME}_" \
|
247
|
-
"#{CONTAINER_NAMESPACE_NAME}_#{CONTAINER_CONTAINER_NAME}"
|
248
|
-
|
249
|
-
CONTAINER_FROM_METADATA_PARAMS = {
|
250
|
-
resource: {
|
251
|
-
type: CONTAINER_CONSTANTS[:resource_type],
|
252
|
-
labels: {
|
253
|
-
'cluster_name' => CONTAINER_CLUSTER_NAME,
|
254
|
-
'namespace_id' => CONTAINER_NAMESPACE_ID,
|
255
|
-
'instance_id' => VM_ID,
|
256
|
-
'pod_id' => CONTAINER_POD_ID,
|
257
|
-
'container_name' => CONTAINER_CONTAINER_NAME,
|
258
|
-
'zone' => ZONE
|
259
|
-
}
|
260
|
-
},
|
261
|
-
log_name: CONTAINER_CONTAINER_NAME,
|
262
|
-
project_id: PROJECT_ID,
|
263
|
-
labels: {
|
264
|
-
"#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
|
265
|
-
CONTAINER_NAMESPACE_NAME,
|
266
|
-
"#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
|
267
|
-
"#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
|
268
|
-
"label/#{CONTAINER_LABEL_KEY}" => CONTAINER_LABEL_VALUE,
|
269
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
270
|
-
}
|
271
|
-
}
|
272
|
-
|
273
|
-
# Almost the same as from metadata, but missing namespace_id and pod_id.
|
274
|
-
CONTAINER_FROM_TAG_PARAMS = {
|
275
|
-
resource: {
|
276
|
-
type: CONTAINER_CONSTANTS[:resource_type],
|
277
|
-
labels: {
|
278
|
-
'cluster_name' => CONTAINER_CLUSTER_NAME,
|
279
|
-
'instance_id' => VM_ID,
|
280
|
-
'container_name' => CONTAINER_CONTAINER_NAME,
|
281
|
-
'zone' => ZONE
|
282
|
-
}
|
283
|
-
},
|
284
|
-
log_name: CONTAINER_CONTAINER_NAME,
|
285
|
-
project_id: PROJECT_ID,
|
286
|
-
labels: {
|
287
|
-
"#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
|
288
|
-
CONTAINER_NAMESPACE_NAME,
|
289
|
-
"#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
|
290
|
-
"#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
|
291
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
292
|
-
}
|
293
|
-
}
|
294
|
-
|
295
|
-
CLOUDFUNCTIONS_TAG = "kubernetes.#{CLOUDFUNCTIONS_POD_NAME}_" \
|
296
|
-
"#{CLOUDFUNCTIONS_NAMESPACE_NAME}_" \
|
297
|
-
"#{CLOUDFUNCTIONS_CONTAINER_NAME}"
|
298
|
-
|
299
|
-
CLOUDFUNCTIONS_PARAMS = {
|
300
|
-
resource: {
|
301
|
-
type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
|
302
|
-
labels: {
|
303
|
-
'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
|
304
|
-
'region' => CLOUDFUNCTIONS_REGION
|
305
|
-
}
|
306
|
-
},
|
307
|
-
log_name: 'cloud-functions',
|
308
|
-
project_id: PROJECT_ID,
|
309
|
-
labels: {
|
310
|
-
'execution_id' => CLOUDFUNCTIONS_EXECUTION_ID,
|
311
|
-
"#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
|
312
|
-
"#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
|
313
|
-
CLOUDFUNCTIONS_CLUSTER_NAME,
|
314
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
315
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
316
|
-
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
317
|
-
}
|
318
|
-
}
|
319
|
-
|
320
|
-
CLOUDFUNCTIONS_TEXT_NOT_MATCHED_PARAMS = {
|
321
|
-
resource: {
|
322
|
-
type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
|
323
|
-
labels: {
|
324
|
-
'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
|
325
|
-
'region' => CLOUDFUNCTIONS_REGION
|
326
|
-
}
|
327
|
-
},
|
328
|
-
log_name: 'cloud-functions',
|
329
|
-
project_id: PROJECT_ID,
|
330
|
-
labels: {
|
331
|
-
"#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
|
332
|
-
"#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
|
333
|
-
CLOUDFUNCTIONS_CLUSTER_NAME,
|
334
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
335
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
336
|
-
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
337
|
-
}
|
338
|
-
}
|
339
|
-
|
340
|
-
DATAFLOW_PARAMS = {
|
341
|
-
resource: {
|
342
|
-
type: DATAFLOW_CONSTANTS[:resource_type],
|
343
|
-
labels: {
|
344
|
-
'job_name' => DATAFLOW_JOB_NAME,
|
345
|
-
'job_id' => DATAFLOW_JOB_ID,
|
346
|
-
'step_id' => DATAFLOW_STEP_ID,
|
347
|
-
'region' => DATAFLOW_REGION
|
348
|
-
}
|
349
|
-
},
|
350
|
-
log_name: DATAFLOW_TAG,
|
351
|
-
project_id: PROJECT_ID,
|
352
|
-
labels: {
|
353
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
354
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
355
|
-
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
356
|
-
}
|
357
|
-
}
|
358
|
-
|
359
|
-
ML_PARAMS = {
|
360
|
-
resource: {
|
361
|
-
type: ML_CONSTANTS[:resource_type],
|
362
|
-
labels: {
|
363
|
-
'job_id' => ML_JOB_ID,
|
364
|
-
'task_name' => ML_TASK_NAME
|
365
|
-
}
|
366
|
-
},
|
367
|
-
log_name: ML_TAG,
|
368
|
-
project_id: PROJECT_ID,
|
369
|
-
labels: {
|
370
|
-
"#{ML_CONSTANTS[:service]}/trial_id" => ML_TRIAL_ID,
|
371
|
-
"#{ML_CONSTANTS[:service]}/job_id/log_area" => ML_LOG_AREA,
|
372
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
373
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
374
|
-
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
375
|
-
}
|
376
|
-
}
|
377
|
-
|
378
|
-
CUSTOM_PARAMS = {
|
379
|
-
resource: {
|
380
|
-
type: COMPUTE_CONSTANTS[:resource_type],
|
381
|
-
labels: {
|
382
|
-
'instance_id' => CUSTOM_VM_ID,
|
383
|
-
'zone' => CUSTOM_ZONE
|
384
|
-
}
|
385
|
-
},
|
386
|
-
log_name: 'test',
|
387
|
-
project_id: CUSTOM_PROJECT_ID,
|
388
|
-
labels: {
|
389
|
-
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => CUSTOM_HOSTNAME
|
390
|
-
}
|
391
|
-
}
|
392
|
-
|
393
|
-
EC2_PARAMS = {
|
394
|
-
resource: {
|
395
|
-
type: EC2_CONSTANTS[:resource_type],
|
396
|
-
labels: {
|
397
|
-
'instance_id' => EC2_VM_ID,
|
398
|
-
'region' => EC2_PREFIXED_ZONE,
|
399
|
-
'aws_account' => EC2_ACCOUNT_ID
|
400
|
-
}
|
401
|
-
},
|
402
|
-
log_name: 'test',
|
403
|
-
project_id: EC2_PROJECT_ID,
|
404
|
-
labels: {
|
405
|
-
"#{EC2_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
406
|
-
}
|
407
|
-
}
|
408
|
-
|
409
|
-
HTTP_REQUEST_MESSAGE = {
|
410
|
-
'requestMethod' => 'POST',
|
411
|
-
'requestUrl' => 'http://example/',
|
412
|
-
'requestSize' => 210,
|
413
|
-
'status' => 200,
|
414
|
-
'responseSize' => 65,
|
415
|
-
'userAgent' => 'USER AGENT 1.0',
|
416
|
-
'remoteIp' => '55.55.55.55',
|
417
|
-
'referer' => 'http://referer/',
|
418
|
-
'cacheHit' => true,
|
419
|
-
'cacheValidatedWithOriginServer' => true
|
420
|
-
}
|
421
|
-
|
422
|
-
# Tags and their sanitized and encoded version.
|
423
|
-
VALID_TAGS = {
|
424
|
-
'test' => 'test',
|
425
|
-
'germanß' => 'german%C3%9F',
|
426
|
-
'chinese中' => 'chinese%E4%B8%AD',
|
427
|
-
'specialCharacter/_-.' => 'specialCharacter%2F_-.',
|
428
|
-
'abc@&^$*' => 'abc%40%26%5E%24%2A',
|
429
|
-
'@&^$*' => '%40%26%5E%24%2A'
|
430
|
-
}
|
431
|
-
INVALID_TAGS = {
|
432
|
-
# Non-string tags.
|
433
|
-
123 => '123',
|
434
|
-
1.23 => '1.23',
|
435
|
-
[1, 2, 3] => '%5B1%2C%202%2C%203%5D',
|
436
|
-
{ key: 'value' } => '%7B%22key%22%3D%3E%22value%22%7D',
|
437
|
-
# Non-utf8 string tags.
|
438
|
-
"nonutf8#{[0x92].pack('C*')}" => 'nonutf8%20',
|
439
|
-
"abc#{[0x92].pack('C*')}" => 'abc%20',
|
440
|
-
"#{[0x92].pack('C*')}" => '%20',
|
441
|
-
# Empty string tag.
|
442
|
-
'' => '_'
|
443
|
-
}
|
444
|
-
ALL_TAGS = VALID_TAGS.merge(INVALID_TAGS)
|
445
|
-
|
446
44
|
# Shared tests.
|
447
45
|
|
448
46
|
def test_configure_service_account_application_default
|
@@ -0,0 +1,424 @@
|
|
1
|
+
# Copyright 2017 Google Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# Constants used by unit tests for Google Cloud Logging plugin.
|
16
|
+
module Constants
|
17
|
+
include Fluent::GoogleCloudOutput::Constants
|
18
|
+
|
19
|
+
# Generic attributes.
|
20
|
+
HOSTNAME = Socket.gethostname
|
21
|
+
|
22
|
+
# TODO(qingling128) Separate constants into different submodules.
|
23
|
+
# Attributes used for the GCE metadata service.
|
24
|
+
PROJECT_ID = 'test-project-id'
|
25
|
+
ZONE = 'us-central1-b'
|
26
|
+
FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
|
27
|
+
VM_ID = '9876543210'
|
28
|
+
|
29
|
+
# Attributes used for custom (overridden) configs.
|
30
|
+
CUSTOM_PROJECT_ID = 'test-custom-project-id'
|
31
|
+
CUSTOM_ZONE = 'us-custom-central1-b'
|
32
|
+
CUSTOM_FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
|
33
|
+
CUSTOM_VM_ID = 'C9876543210'
|
34
|
+
CUSTOM_HOSTNAME = 'custom.hostname.org'
|
35
|
+
|
36
|
+
# Attributes used for the EC2 metadata service.
|
37
|
+
EC2_PROJECT_ID = 'test-ec2-project-id'
|
38
|
+
EC2_ZONE = 'us-west-2b'
|
39
|
+
EC2_PREFIXED_ZONE = 'aws:' + EC2_ZONE
|
40
|
+
EC2_VM_ID = 'i-81c16767'
|
41
|
+
EC2_ACCOUNT_ID = '123456789012'
|
42
|
+
|
43
|
+
# The formatting here matches the format used on the VM.
|
44
|
+
EC2_IDENTITY_DOCUMENT = %({
|
45
|
+
"accountId" : "#{EC2_ACCOUNT_ID}",
|
46
|
+
"availabilityZone" : "#{EC2_ZONE}",
|
47
|
+
"instanceId" : "#{EC2_VM_ID}"
|
48
|
+
})
|
49
|
+
|
50
|
+
# Managed VMs specific labels.
|
51
|
+
MANAGED_VM_BACKEND_NAME = 'default'
|
52
|
+
MANAGED_VM_BACKEND_VERSION = 'guestbook2.0'
|
53
|
+
|
54
|
+
# Container Engine / Kubernetes specific labels.
|
55
|
+
CONTAINER_CLUSTER_NAME = 'cluster-1'
|
56
|
+
CONTAINER_NAMESPACE_ID = '898268c8-4a36-11e5-9d81-42010af0194c'
|
57
|
+
CONTAINER_NAMESPACE_NAME = 'kube-system'
|
58
|
+
CONTAINER_POD_ID = 'cad3c3c4-4b9c-11e5-9d81-42010af0194c'
|
59
|
+
CONTAINER_POD_NAME = 'redis-master-c0l82.foo.bar'
|
60
|
+
CONTAINER_CONTAINER_NAME = 'redis'
|
61
|
+
CONTAINER_LABEL_KEY = 'component'
|
62
|
+
CONTAINER_LABEL_VALUE = 'redis-component'
|
63
|
+
CONTAINER_STREAM = 'stdout'
|
64
|
+
CONTAINER_SEVERITY = 'INFO'
|
65
|
+
# Timestamp for 1234567890 seconds and 987654321 nanoseconds since epoch.
|
66
|
+
CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'
|
67
|
+
CONTAINER_SECONDS_EPOCH = 1_234_567_890
|
68
|
+
CONTAINER_NANOS = 987_654_321
|
69
|
+
|
70
|
+
# Cloud Functions specific labels.
|
71
|
+
CLOUDFUNCTIONS_FUNCTION_NAME = '$My_Function.Name-@1'
|
72
|
+
CLOUDFUNCTIONS_REGION = 'us-central1'
|
73
|
+
CLOUDFUNCTIONS_EXECUTION_ID = '123-0'
|
74
|
+
CLOUDFUNCTIONS_CLUSTER_NAME = 'cluster-1'
|
75
|
+
CLOUDFUNCTIONS_NAMESPACE_NAME = 'default'
|
76
|
+
CLOUDFUNCTIONS_POD_NAME = 'd.dc.myu.uc.functionp.pc.name-a.a1.987-c0l82'
|
77
|
+
CLOUDFUNCTIONS_CONTAINER_NAME = 'worker'
|
78
|
+
|
79
|
+
# Dataflow specific labels.
|
80
|
+
DATAFLOW_REGION = 'us-central1'
|
81
|
+
DATAFLOW_JOB_NAME = 'job_name_1'
|
82
|
+
DATAFLOW_JOB_ID = 'job_id_1'
|
83
|
+
DATAFLOW_STEP_ID = 'step_1'
|
84
|
+
DATAFLOW_TAG = 'dataflow.googleapis.com/worker'
|
85
|
+
|
86
|
+
# ML specific labels.
|
87
|
+
ML_REGION = 'us-central1'
|
88
|
+
ML_JOB_ID = 'job_name_1'
|
89
|
+
ML_TASK_NAME = 'task_name_1'
|
90
|
+
ML_TRIAL_ID = 'trial_id_1'
|
91
|
+
ML_LOG_AREA = 'log_area_1'
|
92
|
+
ML_TAG = 'master-replica-0'
|
93
|
+
|
94
|
+
# Parameters used for authentication.
|
95
|
+
AUTH_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
|
96
|
+
FAKE_AUTH_TOKEN = 'abc123'
|
97
|
+
|
98
|
+
# Information about test credentials files.
|
99
|
+
# path: Path to the credentials file.
|
100
|
+
# project_id: ID of the project, which must correspond to the file contents.
|
101
|
+
IAM_CREDENTIALS = {
|
102
|
+
path: 'test/plugin/data/iam-credentials.json',
|
103
|
+
project_id: 'fluent-test-project'
|
104
|
+
}
|
105
|
+
LEGACY_CREDENTIALS = {
|
106
|
+
path: 'test/plugin/data/credentials.json',
|
107
|
+
project_id: '847859579879'
|
108
|
+
}
|
109
|
+
INVALID_CREDENTIALS = {
|
110
|
+
path: 'test/plugin/data/invalid_credentials.json',
|
111
|
+
project_id: ''
|
112
|
+
}
|
113
|
+
|
114
|
+
# Configuration files for various test scenarios.
|
115
|
+
APPLICATION_DEFAULT_CONFIG = %(
|
116
|
+
)
|
117
|
+
|
118
|
+
# rubocop:disable Metrics/LineLength
|
119
|
+
PRIVATE_KEY_CONFIG = %(
|
120
|
+
auth_method private_key
|
121
|
+
private_key_email 271661262351-ft99kc9kjro9rrihq3k2n3s2inbplu0q@developer.gserviceaccount.com
|
122
|
+
private_key_path test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
|
123
|
+
)
|
124
|
+
# rubocop:enable Metrics/LineLength
|
125
|
+
|
126
|
+
REQUIRE_VALID_TAGS_CONFIG = %(
|
127
|
+
require_valid_tags true
|
128
|
+
)
|
129
|
+
|
130
|
+
NO_METADATA_SERVICE_CONFIG = %(
|
131
|
+
use_metadata_service false
|
132
|
+
)
|
133
|
+
|
134
|
+
NO_DETECT_SUBSERVICE_CONFIG = %(
|
135
|
+
detect_subservice false
|
136
|
+
)
|
137
|
+
|
138
|
+
CUSTOM_METADATA_CONFIG = %(
|
139
|
+
project_id #{CUSTOM_PROJECT_ID}
|
140
|
+
zone #{CUSTOM_ZONE}
|
141
|
+
vm_id #{CUSTOM_VM_ID}
|
142
|
+
vm_name #{CUSTOM_HOSTNAME}
|
143
|
+
)
|
144
|
+
|
145
|
+
CONFIG_MISSING_METADATA_PROJECT_ID = %(
|
146
|
+
zone #{CUSTOM_ZONE}
|
147
|
+
vm_id #{CUSTOM_VM_ID}
|
148
|
+
)
|
149
|
+
CONFIG_MISSING_METADATA_ZONE = %(
|
150
|
+
project_id #{CUSTOM_PROJECT_ID}
|
151
|
+
vm_id #{CUSTOM_VM_ID}
|
152
|
+
)
|
153
|
+
CONFIG_MISSING_METADATA_VM_ID = %(
|
154
|
+
project_id #{CUSTOM_PROJECT_ID}
|
155
|
+
zone #{CUSTOM_ZONE}
|
156
|
+
)
|
157
|
+
CONFIG_MISSING_METADATA_ALL = %(
|
158
|
+
)
|
159
|
+
|
160
|
+
CONFIG_EC2_PROJECT_ID = %(
|
161
|
+
project_id #{EC2_PROJECT_ID}
|
162
|
+
)
|
163
|
+
|
164
|
+
CONFIG_EC2_PROJECT_ID_AND_CUSTOM_VM_ID = %(
|
165
|
+
project_id #{EC2_PROJECT_ID}
|
166
|
+
vm_id #{CUSTOM_VM_ID}
|
167
|
+
)
|
168
|
+
|
169
|
+
CONFIG_DATAFLOW = %(
|
170
|
+
subservice_name "#{DATAFLOW_CONSTANTS[:service]}"
|
171
|
+
labels {
|
172
|
+
"#{DATAFLOW_CONSTANTS[:service]}/region" : "#{DATAFLOW_REGION}",
|
173
|
+
"#{DATAFLOW_CONSTANTS[:service]}/job_name" : "#{DATAFLOW_JOB_NAME}",
|
174
|
+
"#{DATAFLOW_CONSTANTS[:service]}/job_id" : "#{DATAFLOW_JOB_ID}"
|
175
|
+
}
|
176
|
+
label_map { "step": "#{DATAFLOW_CONSTANTS[:service]}/step_id" }
|
177
|
+
)
|
178
|
+
|
179
|
+
CONFIG_ML = %(
|
180
|
+
subservice_name "#{ML_CONSTANTS[:service]}"
|
181
|
+
labels {
|
182
|
+
"#{ML_CONSTANTS[:service]}/job_id" : "#{ML_JOB_ID}",
|
183
|
+
"#{ML_CONSTANTS[:service]}/task_name" : "#{ML_TASK_NAME}",
|
184
|
+
"#{ML_CONSTANTS[:service]}/trial_id" : "#{ML_TRIAL_ID}"
|
185
|
+
}
|
186
|
+
label_map { "name": "#{ML_CONSTANTS[:service]}/job_id/log_area" }
|
187
|
+
)
|
188
|
+
|
189
|
+
# Service configurations for various services.
|
190
|
+
COMPUTE_PARAMS = {
|
191
|
+
resource: {
|
192
|
+
type: COMPUTE_CONSTANTS[:resource_type],
|
193
|
+
labels: {
|
194
|
+
'instance_id' => VM_ID,
|
195
|
+
'zone' => ZONE
|
196
|
+
}
|
197
|
+
},
|
198
|
+
log_name: 'test',
|
199
|
+
project_id: PROJECT_ID,
|
200
|
+
labels: {
|
201
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
202
|
+
}
|
203
|
+
}
|
204
|
+
|
205
|
+
VMENGINE_PARAMS = {
|
206
|
+
resource: {
|
207
|
+
type: APPENGINE_CONSTANTS[:resource_type],
|
208
|
+
labels: {
|
209
|
+
'module_id' => MANAGED_VM_BACKEND_NAME,
|
210
|
+
'version_id' => MANAGED_VM_BACKEND_VERSION
|
211
|
+
}
|
212
|
+
},
|
213
|
+
log_name: "#{APPENGINE_CONSTANTS[:service]}%2Ftest",
|
214
|
+
project_id: PROJECT_ID,
|
215
|
+
labels: {
|
216
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
217
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
218
|
+
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
222
|
+
CONTAINER_TAG = "kubernetes.#{CONTAINER_POD_NAME}_" \
|
223
|
+
"#{CONTAINER_NAMESPACE_NAME}_#{CONTAINER_CONTAINER_NAME}"
|
224
|
+
|
225
|
+
CONTAINER_FROM_METADATA_PARAMS = {
|
226
|
+
resource: {
|
227
|
+
type: CONTAINER_CONSTANTS[:resource_type],
|
228
|
+
labels: {
|
229
|
+
'cluster_name' => CONTAINER_CLUSTER_NAME,
|
230
|
+
'namespace_id' => CONTAINER_NAMESPACE_ID,
|
231
|
+
'instance_id' => VM_ID,
|
232
|
+
'pod_id' => CONTAINER_POD_ID,
|
233
|
+
'container_name' => CONTAINER_CONTAINER_NAME,
|
234
|
+
'zone' => ZONE
|
235
|
+
}
|
236
|
+
},
|
237
|
+
log_name: CONTAINER_CONTAINER_NAME,
|
238
|
+
project_id: PROJECT_ID,
|
239
|
+
labels: {
|
240
|
+
"#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
|
241
|
+
CONTAINER_NAMESPACE_NAME,
|
242
|
+
"#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
|
243
|
+
"#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
|
244
|
+
"label/#{CONTAINER_LABEL_KEY}" => CONTAINER_LABEL_VALUE,
|
245
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
246
|
+
}
|
247
|
+
}
|
248
|
+
|
249
|
+
# Almost the same as from metadata, but namespace_id and pod_id come from
|
250
|
+
# namespace and pod names.
|
251
|
+
CONTAINER_FROM_TAG_PARAMS = {
|
252
|
+
resource: {
|
253
|
+
type: CONTAINER_CONSTANTS[:resource_type],
|
254
|
+
labels: {
|
255
|
+
'cluster_name' => CONTAINER_CLUSTER_NAME,
|
256
|
+
'namespace_id' => CONTAINER_NAMESPACE_NAME,
|
257
|
+
'instance_id' => VM_ID,
|
258
|
+
'pod_id' => CONTAINER_POD_NAME,
|
259
|
+
'container_name' => CONTAINER_CONTAINER_NAME,
|
260
|
+
'zone' => ZONE
|
261
|
+
}
|
262
|
+
},
|
263
|
+
log_name: CONTAINER_CONTAINER_NAME,
|
264
|
+
project_id: PROJECT_ID,
|
265
|
+
labels: {
|
266
|
+
"#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
|
267
|
+
CONTAINER_NAMESPACE_NAME,
|
268
|
+
"#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
|
269
|
+
"#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
|
270
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
271
|
+
}
|
272
|
+
}
|
273
|
+
|
274
|
+
CLOUDFUNCTIONS_TAG = "kubernetes.#{CLOUDFUNCTIONS_POD_NAME}_" \
|
275
|
+
"#{CLOUDFUNCTIONS_NAMESPACE_NAME}_" \
|
276
|
+
"#{CLOUDFUNCTIONS_CONTAINER_NAME}"
|
277
|
+
|
278
|
+
CLOUDFUNCTIONS_PARAMS = {
|
279
|
+
resource: {
|
280
|
+
type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
|
281
|
+
labels: {
|
282
|
+
'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
|
283
|
+
'region' => CLOUDFUNCTIONS_REGION
|
284
|
+
}
|
285
|
+
},
|
286
|
+
log_name: 'cloud-functions',
|
287
|
+
project_id: PROJECT_ID,
|
288
|
+
labels: {
|
289
|
+
'execution_id' => CLOUDFUNCTIONS_EXECUTION_ID,
|
290
|
+
"#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
|
291
|
+
"#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
|
292
|
+
CLOUDFUNCTIONS_CLUSTER_NAME,
|
293
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
294
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
295
|
+
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
296
|
+
}
|
297
|
+
}
|
298
|
+
|
299
|
+
CLOUDFUNCTIONS_TEXT_NOT_MATCHED_PARAMS = {
|
300
|
+
resource: {
|
301
|
+
type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
|
302
|
+
labels: {
|
303
|
+
'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
|
304
|
+
'region' => CLOUDFUNCTIONS_REGION
|
305
|
+
}
|
306
|
+
},
|
307
|
+
log_name: 'cloud-functions',
|
308
|
+
project_id: PROJECT_ID,
|
309
|
+
labels: {
|
310
|
+
"#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
|
311
|
+
"#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
|
312
|
+
CLOUDFUNCTIONS_CLUSTER_NAME,
|
313
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
314
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
315
|
+
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
316
|
+
}
|
317
|
+
}
|
318
|
+
|
319
|
+
DATAFLOW_PARAMS = {
|
320
|
+
resource: {
|
321
|
+
type: DATAFLOW_CONSTANTS[:resource_type],
|
322
|
+
labels: {
|
323
|
+
'job_name' => DATAFLOW_JOB_NAME,
|
324
|
+
'job_id' => DATAFLOW_JOB_ID,
|
325
|
+
'step_id' => DATAFLOW_STEP_ID,
|
326
|
+
'region' => DATAFLOW_REGION
|
327
|
+
}
|
328
|
+
},
|
329
|
+
log_name: DATAFLOW_TAG,
|
330
|
+
project_id: PROJECT_ID,
|
331
|
+
labels: {
|
332
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
333
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
334
|
+
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
335
|
+
}
|
336
|
+
}
|
337
|
+
|
338
|
+
ML_PARAMS = {
|
339
|
+
resource: {
|
340
|
+
type: ML_CONSTANTS[:resource_type],
|
341
|
+
labels: {
|
342
|
+
'job_id' => ML_JOB_ID,
|
343
|
+
'task_name' => ML_TASK_NAME
|
344
|
+
}
|
345
|
+
},
|
346
|
+
log_name: ML_TAG,
|
347
|
+
project_id: PROJECT_ID,
|
348
|
+
labels: {
|
349
|
+
"#{ML_CONSTANTS[:service]}/trial_id" => ML_TRIAL_ID,
|
350
|
+
"#{ML_CONSTANTS[:service]}/job_id/log_area" => ML_LOG_AREA,
|
351
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
|
352
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
|
353
|
+
"#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
|
354
|
+
}
|
355
|
+
}
|
356
|
+
|
357
|
+
CUSTOM_PARAMS = {
|
358
|
+
resource: {
|
359
|
+
type: COMPUTE_CONSTANTS[:resource_type],
|
360
|
+
labels: {
|
361
|
+
'instance_id' => CUSTOM_VM_ID,
|
362
|
+
'zone' => CUSTOM_ZONE
|
363
|
+
}
|
364
|
+
},
|
365
|
+
log_name: 'test',
|
366
|
+
project_id: CUSTOM_PROJECT_ID,
|
367
|
+
labels: {
|
368
|
+
"#{COMPUTE_CONSTANTS[:service]}/resource_name" => CUSTOM_HOSTNAME
|
369
|
+
}
|
370
|
+
}
|
371
|
+
|
372
|
+
EC2_PARAMS = {
|
373
|
+
resource: {
|
374
|
+
type: EC2_CONSTANTS[:resource_type],
|
375
|
+
labels: {
|
376
|
+
'instance_id' => EC2_VM_ID,
|
377
|
+
'region' => EC2_PREFIXED_ZONE,
|
378
|
+
'aws_account' => EC2_ACCOUNT_ID
|
379
|
+
}
|
380
|
+
},
|
381
|
+
log_name: 'test',
|
382
|
+
project_id: EC2_PROJECT_ID,
|
383
|
+
labels: {
|
384
|
+
"#{EC2_CONSTANTS[:service]}/resource_name" => HOSTNAME
|
385
|
+
}
|
386
|
+
}
|
387
|
+
|
388
|
+
HTTP_REQUEST_MESSAGE = {
|
389
|
+
'requestMethod' => 'POST',
|
390
|
+
'requestUrl' => 'http://example/',
|
391
|
+
'requestSize' => 210,
|
392
|
+
'status' => 200,
|
393
|
+
'responseSize' => 65,
|
394
|
+
'userAgent' => 'USER AGENT 1.0',
|
395
|
+
'remoteIp' => '55.55.55.55',
|
396
|
+
'referer' => 'http://referer/',
|
397
|
+
'cacheHit' => true,
|
398
|
+
'cacheValidatedWithOriginServer' => true
|
399
|
+
}
|
400
|
+
|
401
|
+
# Tags and their sanitized and encoded version.
|
402
|
+
VALID_TAGS = {
|
403
|
+
'test' => 'test',
|
404
|
+
'germanß' => 'german%C3%9F',
|
405
|
+
'chinese中' => 'chinese%E4%B8%AD',
|
406
|
+
'specialCharacter/_-.' => 'specialCharacter%2F_-.',
|
407
|
+
'abc@&^$*' => 'abc%40%26%5E%24%2A',
|
408
|
+
'@&^$*' => '%40%26%5E%24%2A'
|
409
|
+
}
|
410
|
+
INVALID_TAGS = {
|
411
|
+
# Non-string tags.
|
412
|
+
123 => '123',
|
413
|
+
1.23 => '1.23',
|
414
|
+
[1, 2, 3] => '%5B1%2C%202%2C%203%5D',
|
415
|
+
{ key: 'value' } => '%7B%22key%22%3D%3E%22value%22%7D',
|
416
|
+
# Non-utf8 string tags.
|
417
|
+
"nonutf8#{[0x92].pack('C*')}" => 'nonutf8%20',
|
418
|
+
"abc#{[0x92].pack('C*')}" => 'abc%20',
|
419
|
+
"#{[0x92].pack('C*')}" => '%20',
|
420
|
+
# Empty string tag.
|
421
|
+
'' => '_'
|
422
|
+
}
|
423
|
+
ALL_TAGS = VALID_TAGS.merge(INVALID_TAGS)
|
424
|
+
end
|
@@ -197,6 +197,8 @@ class GoogleCloudOutputTest < Test::Unit::TestCase
|
|
197
197
|
|
198
198
|
private
|
199
199
|
|
200
|
+
WRITE_LOG_ENTRIES_URI = 'https://logging.googleapis.com/v2beta1/entries:write'
|
201
|
+
|
200
202
|
def rename_key(hash, old_key, new_key)
|
201
203
|
hash.merge(new_key => hash[old_key]).reject { |k, _| k == old_key }
|
202
204
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-google-cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Derr
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-05-
|
12
|
+
date: 2017-05-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
@@ -88,6 +88,9 @@ dependencies:
|
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '1.0'
|
91
|
+
- - "<"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.3'
|
91
94
|
type: :runtime
|
92
95
|
prerelease: false
|
93
96
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -95,6 +98,9 @@ dependencies:
|
|
95
98
|
- - "~>"
|
96
99
|
- !ruby/object:Gem::Version
|
97
100
|
version: '1.0'
|
101
|
+
- - "<"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.3'
|
98
104
|
- !ruby/object:Gem::Dependency
|
99
105
|
name: json
|
100
106
|
requirement: !ruby/object:Gem::Requirement
|
@@ -196,10 +202,12 @@ files:
|
|
196
202
|
- LICENSE
|
197
203
|
- README.rdoc
|
198
204
|
- Rakefile
|
205
|
+
- fluent-plugin-google-cloud-0.6.2.gem
|
199
206
|
- fluent-plugin-google-cloud.gemspec
|
200
207
|
- lib/fluent/plugin/out_google_cloud.rb
|
201
208
|
- test/helper.rb
|
202
209
|
- test/plugin/base_test.rb
|
210
|
+
- test/plugin/constants.rb
|
203
211
|
- test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
|
204
212
|
- test/plugin/data/credentials.json
|
205
213
|
- test/plugin/data/iam-credentials.json
|
@@ -226,13 +234,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
226
234
|
version: '0'
|
227
235
|
requirements: []
|
228
236
|
rubyforge_project:
|
229
|
-
rubygems_version: 2.
|
237
|
+
rubygems_version: 2.6.12
|
230
238
|
signing_key:
|
231
239
|
specification_version: 4
|
232
240
|
summary: fluentd output plugin for the Stackdriver Logging API
|
233
241
|
test_files:
|
234
242
|
- test/helper.rb
|
235
243
|
- test/plugin/base_test.rb
|
244
|
+
- test/plugin/constants.rb
|
236
245
|
- test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
|
237
246
|
- test/plugin/data/credentials.json
|
238
247
|
- test/plugin/data/iam-credentials.json
|