google-cloud-logging 1.2.3 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +5 -5
  2. data/lib/google-cloud-logging.rb +13 -10
  3. data/lib/google/cloud/logging.rb +41 -17
  4. data/lib/google/cloud/logging/async_writer.rb +5 -2
  5. data/lib/google/cloud/logging/credentials.rb +31 -15
  6. data/lib/google/cloud/logging/entry.rb +13 -0
  7. data/lib/google/cloud/logging/entry/http_request.rb +35 -12
  8. data/lib/google/cloud/logging/logger.rb +14 -0
  9. data/lib/google/cloud/logging/middleware.rb +1 -1
  10. data/lib/google/cloud/logging/project.rb +55 -8
  11. data/lib/google/cloud/logging/rails.rb +1 -1
  12. data/lib/google/cloud/logging/service.rb +8 -27
  13. data/lib/google/cloud/logging/v2/config_service_v2_client.rb +360 -93
  14. data/lib/google/cloud/logging/v2/config_service_v2_client_config.json +43 -8
  15. data/lib/google/cloud/logging/v2/doc/google/api/distribution.rb +172 -0
  16. data/lib/google/cloud/logging/v2/doc/google/api/metric.rb +187 -0
  17. data/lib/google/cloud/logging/v2/doc/google/api/monitored_resource.rb +4 -4
  18. data/lib/google/cloud/logging/v2/doc/google/logging/type/http_request.rb +4 -1
  19. data/lib/google/cloud/logging/v2/doc/google/logging/v2/log_entry.rb +13 -6
  20. data/lib/google/cloud/logging/v2/doc/google/logging/v2/logging.rb +55 -21
  21. data/lib/google/cloud/logging/v2/doc/google/logging/v2/logging_config.rb +185 -23
  22. data/lib/google/cloud/logging/v2/doc/google/logging/v2/logging_metrics.rb +89 -5
  23. data/lib/google/cloud/logging/v2/doc/google/protobuf/any.rb +12 -2
  24. data/lib/google/cloud/logging/v2/doc/google/protobuf/duration.rb +14 -1
  25. data/lib/google/cloud/logging/v2/doc/google/protobuf/field_mask.rb +223 -0
  26. data/lib/google/cloud/logging/v2/doc/google/protobuf/timestamp.rb +26 -1
  27. data/lib/google/cloud/logging/v2/doc/overview.rb +67 -0
  28. data/lib/google/cloud/logging/v2/logging_service_v2_client.rb +116 -91
  29. data/lib/google/cloud/logging/v2/logging_service_v2_client_config.json +12 -11
  30. data/lib/google/cloud/logging/v2/metrics_service_v2_client.rb +87 -76
  31. data/lib/google/cloud/logging/v2/metrics_service_v2_client_config.json +9 -8
  32. data/lib/google/cloud/logging/version.rb +1 -1
  33. metadata +11 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 055747223efbea95c51a675309d4d35050ab8b18
4
- data.tar.gz: 7255d083b277697741232f86fa4b08c89cbe5989
2
+ SHA256:
3
+ metadata.gz: 64d96c3d7c2e3e65da43168f7769ab9d4cf8a56f789d7cdc6c53e09bc62ae262
4
+ data.tar.gz: 9d49322540e7bbdcc2cb80f4277c8aa190c6ad4321ddcbf4365b2b9239e5a242
5
5
  SHA512:
6
- metadata.gz: 32e392f48a2abe8ec52428f56157ce9a2fee76ef0483ea33f2bb17c9cd1c957b1d595af3fb503d6130727b6c135e2debb72472007eb1f82a82ab287041a0a65b
7
- data.tar.gz: 55f318c0491a69100b394c1de617b67335f7a5e270edde3e5956d27dbf056f9507cb0642e9735c7659d8e457f8b91c9c7c254acb3a19f266cc9699889a245503
6
+ metadata.gz: 272469c7d46c8afce6bfb28c84174bea9ab2a0ea8fe8d7200a9ce8dd37c2c3f83825c42897bcae8e967b679f7ff3c9ed88d46bfad1510e725873f4139cf77889
7
+ data.tar.gz: 2631db81f9ccec5255b67f9d52e69be34493703df39bd7a575c8d6f8e45808d2de7d5fa0d1d3155b2b42ee3a46c8f60f97779e270a0c8e98fbc9682e51bc2ebd
@@ -13,9 +13,9 @@
13
13
  # limitations under the License.
14
14
 
15
15
  ##
16
- # This file is here to be autorequired by bundler, so that the .logging and
17
- # #logging methods can be available, but the library and all dependencies won't
18
- # be loaded until required and used.
16
+ # This file is here to be autorequired by bundler, so that the
17
+ # Google::Cloud.logging and Google::Cloud#logging methods can be available, but
18
+ # the library and all dependencies won't be loaded until required and used.
19
19
 
20
20
 
21
21
  gem "google-cloud-core"
@@ -75,10 +75,12 @@ module Google
75
75
  # For more information on connecting to Google Cloud see the [Authentication
76
76
  # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
77
77
  #
78
- # @param [String] project Project identifier for the Stackdriver Logging
79
- # service you are connecting to.
80
- # @param [String, Hash] keyfile Keyfile downloaded from Google Cloud. If
81
- # file path the file must be readable.
78
+ # @param [String] project_id Project identifier for the Stackdriver Logging
79
+ # service you are connecting to. If not present, the default project for
80
+ # the credentials is used.
81
+ # @param [String, Hash, Google::Auth::Credentials] credentials The path to
82
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
83
+ # Google::Auth::Credentials object. (See {Logging::Credentials})
82
84
  # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
83
85
  # set of resources and operations that the connection can access. See
84
86
  # [Using OAuth 2.0 to Access Google
@@ -103,10 +105,11 @@ module Google
103
105
  # puts "[#{e.timestamp}] #{e.log_name} #{e.payload.inspect}"
104
106
  # end
105
107
  #
106
- def self.logging project = nil, keyfile = nil, scope: nil, timeout: nil,
107
- client_config: nil
108
+ def self.logging project_id = nil, credentials = nil, scope: nil,
109
+ timeout: nil, client_config: nil
108
110
  require "google/cloud/logging"
109
- Google::Cloud::Logging.new project: project, keyfile: keyfile,
111
+ Google::Cloud::Logging.new project_id: project_id,
112
+ credentials: credentials,
110
113
  scope: scope, timeout: timeout,
111
114
  client_config: client_config
112
115
  end
@@ -222,6 +222,23 @@ module Google
222
222
  # logging.write_entries entry
223
223
  # ```
224
224
  #
225
+ # To write a JSON payload to the log, simply pass a hash argument:
226
+ #
227
+ # ```ruby
228
+ # require "google/cloud/logging"
229
+ #
230
+ # logging = Google::Cloud::Logging.new
231
+ #
232
+ # entry = logging.entry
233
+ # entry.payload = { "stats" => { "a" => 8, "b" => 12.5} }
234
+ # entry.log_name = "my_app_log"
235
+ # entry.resource.type = "gae_app"
236
+ # entry.resource.labels[:module_id] = "1"
237
+ # entry.resource.labels[:version_id] = "20150925t173233"
238
+ #
239
+ # logging.write_entries entry
240
+ # ```
241
+ #
225
242
  # If you write a collection of log entries, you can provide the log name,
226
243
  # resource, and/or labels hash to be used for all of the entries, and omit
227
244
  # these values from the individual entries.
@@ -274,7 +291,8 @@ module Google
274
291
  # async.write_entries [entry1, entry2],
275
292
  # log_name: "my_app_log",
276
293
  # resource: resource,
277
- # labels: labels
294
+ # labels: labels,
295
+ # partial_success: true
278
296
  # ```
279
297
  #
280
298
  # ### Creating a Ruby Logger implementation
@@ -343,10 +361,12 @@ module Google
343
361
  # [Authentication
344
362
  # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
345
363
  #
346
- # @param [String] project Project identifier for the Stackdriver Logging
347
- # service.
348
- # @param [String, Hash] keyfile Keyfile downloaded from Google Cloud. If
349
- # file path the file must be readable.
364
+ # @param [String] project_id Project identifier for the Stackdriver
365
+ # Logging service you are connecting to. If not present, the default
366
+ # project for the credentials is used.
367
+ # @param [String, Hash, Google::Auth::Credentials] credentials The path to
368
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
369
+ # Google::Auth::Credentials object. (See {Logging::Credentials})
350
370
  # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling
351
371
  # the set of resources and operations that the connection can access.
352
372
  # See [Using OAuth 2.0 to Access Google
@@ -358,6 +378,9 @@ module Google
358
378
  # @param [Integer] timeout Default timeout to use in requests. Optional.
359
379
  # @param [Hash] client_config A hash of values to override the default
360
380
  # behavior of the API client. Optional.
381
+ # @param [String] project Alias for the `project_id` argument. Deprecated.
382
+ # @param [String] keyfile Alias for the `credentials` argument.
383
+ # Deprecated.
361
384
  #
362
385
  # @return [Google::Cloud::Logging::Project]
363
386
  #
@@ -371,20 +394,21 @@ module Google
371
394
  # puts "[#{e.timestamp}] #{e.log_name} #{e.payload.inspect}"
372
395
  # end
373
396
  #
374
- def self.new project: nil, keyfile: nil, scope: nil, timeout: nil,
375
- client_config: nil
376
- project ||= Google::Cloud::Logging::Project.default_project
377
- project = project.to_s # Always cast to a string
378
- fail ArgumentError, "project is missing" if project.empty?
397
+ def self.new project_id: nil, credentials: nil, scope: nil, timeout: nil,
398
+ client_config: nil, project: nil, keyfile: nil
399
+ project_id ||= (project || Logging::Project.default_project_id)
400
+ project_id = project_id.to_s # Always cast to a string
401
+ fail ArgumentError, "project_id is missing" if project_id.empty?
379
402
 
380
- credentials =
381
- Google::Cloud::Logging::Credentials.credentials_with_scope keyfile,
382
- scope
403
+ credentials ||= (keyfile || Logging::Credentials.default(scope: scope))
404
+ unless credentials.is_a? Google::Auth::Credentials
405
+ credentials = Logging::Credentials.new credentials, scope: scope
406
+ end
383
407
 
384
- Google::Cloud::Logging::Project.new(
385
- Google::Cloud::Logging::Service.new(
386
- project, credentials, timeout: timeout,
387
- client_config: client_config))
408
+ Logging::Project.new(
409
+ Logging::Service.new(
410
+ project_id, credentials, timeout: timeout,
411
+ client_config: client_config))
388
412
  end
389
413
 
390
414
  ##
@@ -96,11 +96,13 @@ module Google
96
96
 
97
97
  ##
98
98
  # @private Creates a new AsyncWriter instance.
99
- def initialize logging, max_queue_size = DEFAULT_MAX_QUEUE_SIZE
99
+ def initialize logging, max_queue_size = DEFAULT_MAX_QUEUE_SIZE,
100
+ partial_success = false
100
101
  super()
101
102
 
102
103
  @logging = logging
103
104
  @max_queue_size = max_queue_size
105
+ @partial_success = partial_success
104
106
  @queue_resource = new_cond
105
107
  @queue = []
106
108
  @queue_size = 0
@@ -335,7 +337,8 @@ module Google
335
337
  queue_item.entries,
336
338
  log_name: queue_item.log_name,
337
339
  resource: queue_item.resource,
338
- labels: queue_item.labels
340
+ labels: queue_item.labels,
341
+ partial_success: @partial_success
339
342
  )
340
343
  rescue => e
341
344
  # Ignore any exceptions thrown from the background thread, but
@@ -13,28 +13,44 @@
13
13
  # limitations under the License.
14
14
 
15
15
 
16
- require "google/cloud/credentials"
16
+ require "googleauth"
17
17
 
18
18
  module Google
19
19
  module Cloud
20
20
  module Logging
21
21
  ##
22
- # @private Represents the OAuth 2.0 signing logic for Logging.
23
- class Credentials < Google::Cloud::Credentials
22
+ # # Credentials
23
+ #
24
+ # Represents the authentication and authorization used to connect to the
25
+ # Stackdriver Logging API.
26
+ #
27
+ # @example
28
+ # require "google/cloud/logging"
29
+ #
30
+ # keyfile = "/path/to/keyfile.json"
31
+ # creds = Google::Cloud::Logging::Credentials.new keyfile
32
+ #
33
+ # logging = Google::Cloud::Logging.new(
34
+ # project_id: "my-project",
35
+ # credentials: creds
36
+ # )
37
+ #
38
+ # logging.project_id #=> "my-project"
39
+ #
40
+ class Credentials < Google::Auth::Credentials
24
41
  SCOPE = ["https://www.googleapis.com/auth/logging.admin"]
25
- PATH_ENV_VARS = %w(LOGGING_KEYFILE GOOGLE_CLOUD_KEYFILE GCLOUD_KEYFILE)
26
- JSON_ENV_VARS = %w(LOGGING_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON
42
+ PATH_ENV_VARS = %w(LOGGING_CREDENTIALS
43
+ LOGGING_KEYFILE
44
+ GOOGLE_CLOUD_CREDENTIALS
45
+ GOOGLE_CLOUD_KEYFILE
46
+ GCLOUD_KEYFILE)
47
+ JSON_ENV_VARS = %w(LOGGING_CREDENTIALS_JSON
48
+ LOGGING_KEYFILE_JSON
49
+ GOOGLE_CLOUD_CREDENTIALS_JSON
50
+ GOOGLE_CLOUD_KEYFILE_JSON
27
51
  GCLOUD_KEYFILE_JSON)
28
-
29
- ##
30
- # @private Create credentials with given scope and/or keyfile
31
- def self.credentials_with_scope keyfile, scope = nil
32
- if keyfile.nil?
33
- default(scope: scope)
34
- else
35
- new(keyfile, scope: scope)
36
- end
37
- end
52
+ DEFAULT_PATHS = \
53
+ ["~/.config/gcloud/application_default_credentials.json"]
38
54
  end
39
55
  end
40
56
  end
@@ -57,6 +57,19 @@ module Google
57
57
  #
58
58
  # logging.write_entries entry
59
59
  #
60
+ # @example Provide a hash to write a JSON payload to the log:
61
+ # require "google/cloud/logging"
62
+ #
63
+ # logging = Google::Cloud::Logging.new
64
+ #
65
+ # payload = { "stats" => { "a" => 8, "b" => 12.5} }
66
+ # entry = logging.entry payload: payload, log_name: "my_app_log"
67
+ # entry.resource.type = "gae_app"
68
+ # entry.resource.labels[:module_id] = "1"
69
+ # entry.resource.labels[:version_id] = "20150925t173233"
70
+ #
71
+ # logging.write_entries entry
72
+ #
60
73
  class Entry
61
74
  ##
62
75
  # Create a new Entry instance. The {#resource} attribute is
@@ -33,7 +33,30 @@ module Google
33
33
  ##
34
34
  # The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`.
35
35
  # (String)
36
- attr_accessor :method
36
+ attr_accessor :request_method
37
+
38
+ ##
39
+ # @overload method()
40
+ # Deprecated. Use {#request_method} instead.
41
+ #
42
+ # The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`,
43
+ # `"POST"`. (String)
44
+ def method *args
45
+ # Call Object#method when args are present.
46
+ return super unless args.empty?
47
+
48
+ request_method
49
+ end
50
+
51
+ ##
52
+ # @overload method()
53
+ # Deprecated. Use {#request_method=} instead.
54
+ #
55
+ # The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`,
56
+ # `"POST"`. (String)
57
+ def method= new_request_method
58
+ self.request_method = new_request_method
59
+ end
37
60
 
38
61
  ##
39
62
  # The URL. The scheme (http, https), the host name, the path and the
@@ -107,7 +130,7 @@ module Google
107
130
  def to_grpc
108
131
  return nil if empty?
109
132
  Google::Logging::Type::HttpRequest.new(
110
- request_method: method.to_s,
133
+ request_method: request_method.to_s,
111
134
  request_url: url.to_s,
112
135
  request_size: size.to_i,
113
136
  status: status.to_i,
@@ -126,16 +149,16 @@ module Google
126
149
  def self.from_grpc grpc
127
150
  return new if grpc.nil?
128
151
  new.tap do |h|
129
- h.method = grpc.request_method
130
- h.url = grpc.request_url
131
- h.size = grpc.request_size
132
- h.status = grpc.status
133
- h.response_size = grpc.response_size
134
- h.user_agent = grpc.user_agent
135
- h.remote_ip = grpc.remote_ip
136
- h.referer = grpc.referer
137
- h.cache_hit = grpc.cache_hit
138
- h.validated = grpc.cache_validated_with_origin_server
152
+ h.request_method = grpc.request_method
153
+ h.url = grpc.request_url
154
+ h.size = grpc.request_size
155
+ h.status = grpc.status
156
+ h.response_size = grpc.response_size
157
+ h.user_agent = grpc.user_agent
158
+ h.remote_ip = grpc.remote_ip
159
+ h.referer = grpc.referer
160
+ h.cache_hit = grpc.cache_hit
161
+ h.validated = grpc.cache_validated_with_origin_server
139
162
  end
140
163
  end
141
164
  end
@@ -36,6 +36,20 @@ module Google
36
36
  # logger = logging.logger "my_app_log", resource, env: :production
37
37
  # logger.info "Job started."
38
38
  #
39
+ # @example Provide a hash to write a JSON payload to the log:
40
+ # require "google/cloud/logging"
41
+ #
42
+ # logging = Google::Cloud::Logging.new
43
+ #
44
+ # resource = logging.resource "gae_app",
45
+ # module_id: "1",
46
+ # version_id: "20150925t173233"
47
+ #
48
+ # logger = logging.logger "my_app_log", resource, env: :production
49
+ #
50
+ # payload = { "stats" => { "a" => 8, "b" => 12.5} }
51
+ # logger.info payload
52
+ #
39
53
  class Logger
40
54
  ##
41
55
  # A RequestInfo represents data about the request being handled by the
@@ -270,7 +270,7 @@ module Google
270
270
  # Fallback to default configuration values if not defined already
271
271
  def init_default_config
272
272
  configuration.project_id ||= Cloud.configure.project_id ||
273
- Logging::Project.default_project
273
+ Logging::Project.default_project_id
274
274
  configuration.keyfile ||= Cloud.configure.keyfile
275
275
  configuration.log_name ||= DEFAULT_LOG_NAME
276
276
  configuration.log_name_map ||= DEFAULT_LOG_NAME_MAP
@@ -66,19 +66,20 @@ module Google
66
66
  # require "google/cloud/logging"
67
67
  #
68
68
  # logging = Google::Cloud::Logging.new(
69
- # project: "my-project",
70
- # keyfile: "/path/to/keyfile.json"
69
+ # project_id: "my-project",
70
+ # credentials: "/path/to/keyfile.json"
71
71
  # )
72
72
  #
73
- # logging.project #=> "my-project"
73
+ # logging.project_id #=> "my-project"
74
74
  #
75
- def project
75
+ def project_id
76
76
  service.project
77
77
  end
78
+ alias_method :project, :project_id
78
79
 
79
80
  ##
80
81
  # @private Default project.
81
- def self.default_project
82
+ def self.default_project_id
82
83
  ENV["LOGGING_PROJECT"] ||
83
84
  ENV["GOOGLE_CLOUD_PROJECT"] ||
84
85
  ENV["GCLOUD_PROJECT"] ||
@@ -203,6 +204,16 @@ module Google
203
204
  #
204
205
  # logging.write_entries entry
205
206
  #
207
+ # @example Provide a hash to write a JSON payload to the log:
208
+ # require "google/cloud/logging"
209
+ #
210
+ # logging = Google::Cloud::Logging.new
211
+ #
212
+ # payload = { "stats" => { "a" => 8, "b" => 12.5} }
213
+ # entry = logging.entry severity: :INFO, payload: payload
214
+ #
215
+ # logging.write_entries entry
216
+ #
206
217
  def entry log_name: nil, resource: nil, timestamp: nil, severity: nil,
207
218
  insert_id: nil, labels: nil, payload: nil
208
219
  e = Entry.new
@@ -238,6 +249,10 @@ module Google
238
249
  # items that are added to the `labels` field of each log entry in
239
250
  # `entries`, except when a log entry specifies its own `key:value`
240
251
  # item with the same key. See also {Entry#labels=}.
252
+ # @param [Boolean] partial_success Whether valid entries should be
253
+ # written even if some other entries fail due to INVALID_ARGUMENT or
254
+ # PERMISSION_DENIED errors when communicating to the Stackdriver
255
+ # Logging API.
241
256
  #
242
257
  # @return [Boolean] Returns `true` if the entries were written.
243
258
  #
@@ -254,6 +269,22 @@ module Google
254
269
  #
255
270
  # logging.write_entries entry
256
271
  #
272
+ # @example Provide a hash to write a JSON payload to the log:
273
+ # require "google/cloud/logging"
274
+ #
275
+ # logging = Google::Cloud::Logging.new
276
+ #
277
+ # payload = { "stats" => { "a" => 8, "b" => 12.5} }
278
+ #
279
+ # entry = logging.entry payload: payload,
280
+ # log_name: "my_app_log"
281
+ # entry.resource.type = "gae_app"
282
+ # entry.resource.labels[:module_id] = "1"
283
+ # entry.resource.labels[:version_id] = "20150925t173233"
284
+ #
285
+ # logging.write_entries entry
286
+ #
287
+ #
257
288
  # @example Optionally pass log name, resource, and labels for entries.
258
289
  # require "google/cloud/logging"
259
290
  #
@@ -270,13 +301,15 @@ module Google
270
301
  # logging.write_entries [entry1, entry2],
271
302
  # log_name: "my_app_log",
272
303
  # resource: resource,
273
- # labels: labels
304
+ # labels: labels,
305
+ # partial_success: true
274
306
  #
275
- def write_entries entries, log_name: nil, resource: nil, labels: nil
307
+ def write_entries entries, log_name: nil, resource: nil, labels: nil,
308
+ partial_success: nil
276
309
  ensure_service!
277
310
  service.write_entries Array(entries).map(&:to_grpc),
278
311
  log_name: log_name, resource: resource,
279
- labels: labels
312
+ labels: labels, partial_success: partial_success
280
313
  true
281
314
  end
282
315
 
@@ -380,6 +413,20 @@ module Google
380
413
  # logger = logging.logger "my_app_log", resource, env: :production
381
414
  # logger.info "Job started."
382
415
  #
416
+ # @example Provide a hash to write a JSON payload to the log:
417
+ # require "google/cloud/logging"
418
+ #
419
+ # logging = Google::Cloud::Logging.new
420
+ #
421
+ # resource = logging.resource "gae_app",
422
+ # module_id: "1",
423
+ # version_id: "20150925t173233"
424
+ #
425
+ # logger = logging.logger "my_app_log", resource, env: :production
426
+ #
427
+ # payload = { "stats" => { "a" => 8, "b" => 12.5} }
428
+ # logger.info payload
429
+ #
383
430
  def logger log_name, resource, labels = {}
384
431
  Logger.new shared_async_writer, log_name, resource, labels
385
432
  end