google-cloud-logging 1.5.7 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +40 -0
  3. data/CONTRIBUTING.md +1 -1
  4. data/lib/google-cloud-logging.rb +7 -5
  5. data/lib/google/cloud/logging.rb +22 -8
  6. data/lib/google/cloud/logging/async_writer.rb +308 -187
  7. data/lib/google/cloud/logging/convert.rb +15 -9
  8. data/lib/google/cloud/logging/entry.rb +43 -13
  9. data/lib/google/cloud/logging/entry/source_location.rb +3 -3
  10. data/lib/google/cloud/logging/errors.rb +101 -0
  11. data/lib/google/cloud/logging/log/list.rb +1 -1
  12. data/lib/google/cloud/logging/logger.rb +6 -4
  13. data/lib/google/cloud/logging/middleware.rb +24 -11
  14. data/lib/google/cloud/logging/project.rb +38 -15
  15. data/lib/google/cloud/logging/rails.rb +56 -5
  16. data/lib/google/cloud/logging/resource.rb +1 -1
  17. data/lib/google/cloud/logging/service.rb +42 -32
  18. data/lib/google/cloud/logging/v2/config_service_v2_client.rb +1 -1
  19. data/lib/google/cloud/logging/v2/credentials.rb +1 -1
  20. data/lib/google/cloud/logging/v2/doc/google/api/distribution.rb +1 -37
  21. data/lib/google/cloud/logging/v2/doc/google/api/label.rb +1 -1
  22. data/lib/google/cloud/logging/v2/doc/google/api/metric.rb +1 -13
  23. data/lib/google/cloud/logging/v2/doc/google/api/monitored_resource.rb +1 -1
  24. data/lib/google/cloud/logging/v2/doc/google/logging/type/http_request.rb +1 -1
  25. data/lib/google/cloud/logging/v2/doc/google/logging/v2/log_entry.rb +1 -1
  26. data/lib/google/cloud/logging/v2/doc/google/logging/v2/logging.rb +1 -12
  27. data/lib/google/cloud/logging/v2/doc/google/logging/v2/logging_config.rb +1 -1
  28. data/lib/google/cloud/logging/v2/doc/google/logging/v2/logging_metrics.rb +1 -1
  29. data/lib/google/cloud/logging/v2/doc/google/protobuf/any.rb +1 -1
  30. data/lib/google/cloud/logging/v2/doc/google/protobuf/duration.rb +1 -1
  31. data/lib/google/cloud/logging/v2/doc/google/protobuf/empty.rb +1 -1
  32. data/lib/google/cloud/logging/v2/doc/google/protobuf/field_mask.rb +1 -1
  33. data/lib/google/cloud/logging/v2/doc/google/protobuf/struct.rb +1 -1
  34. data/lib/google/cloud/logging/v2/doc/google/protobuf/timestamp.rb +1 -1
  35. data/lib/google/cloud/logging/v2/logging_service_v2_client.rb +1 -1
  36. data/lib/google/cloud/logging/v2/logging_service_v2_client_config.json +1 -1
  37. data/lib/google/cloud/logging/v2/metrics_service_v2_client.rb +1 -1
  38. data/lib/google/cloud/logging/version.rb +1 -1
  39. metadata +5 -4
@@ -30,8 +30,12 @@ module Google
30
30
  # {Google::Cloud::Logging::Logger} instance to be used by the Rails
31
31
  # application.
32
32
  #
33
- # The Middleware is only added when certain conditions are met. See
34
- # {use_logging?} for details.
33
+ # The middleware is loaded only when certain conditions are met. These
34
+ # conditions are when the configuration
35
+ # `Google::Cloud.configure.use_logging` (also available as
36
+ # `Rails.application.config.google_cloud.use_logging` for a Rails
37
+ # application) is set to `true`, or, if the configuration is left unset
38
+ # but `Rails.env.production?` is `true`.
35
39
  #
36
40
  # When loaded, the {Google::Cloud::Logging::Middleware} will be inserted
37
41
  # before the `Rails::Rack::Logger Middleware`, which allows it to set the
@@ -66,16 +70,59 @@ module Google
66
70
  log_name = Logging.configure.log_name
67
71
  labels = Logging.configure.labels
68
72
 
69
- logging = Google::Cloud::Logging.new project_id: project_id,
73
+ logging = Google::Cloud::Logging.new project_id: project_id,
70
74
  credentials: credentials
71
75
  resource =
72
76
  Logging::Middleware.build_monitored_resource resource_type,
73
77
  resource_labels
74
78
 
75
- app.config.logger = logging.logger log_name, resource, labels
79
+ Middleware.logger = logging.logger log_name, resource, labels
80
+ # Set the default Rails logger
81
+ if Logging.configure.set_default_logger_on_rails_init
82
+ set_default_logger
83
+ end
84
+ init_callback = -> { set_default_logger }
76
85
  app.middleware.insert_before Rails::Rack::Logger,
77
86
  Google::Cloud::Logging::Middleware,
78
- logger: app.config.logger
87
+ logger: Middleware.logger,
88
+ on_init: init_callback
89
+ end
90
+
91
+ ##
92
+ # This should be called once the application determines that it is safe
93
+ # to start background threads and open gRPC connections. It informs the
94
+ # middleware system that it is safe to use Google Cloud Logging. This is
95
+ # called during Rails initialization when the
96
+ # `set_default_logger_on_rails_init` configuration is set.
97
+ #
98
+ # Generally, this matters if the application forks worker processes;
99
+ # this method should be called only after workers are forked, since
100
+ # threads and network connections interact badly with fork. For example,
101
+ # when running Puma in [clustered
102
+ # mode](https://github.com/puma/puma#clustered-mode), this method should
103
+ # be called in an `on_worker_boot` block.
104
+ #
105
+ # If the application does no forking, this method can be called any time
106
+ # early in the application initialization process. Or by setting the
107
+ # `set_default_logger_on_rails_init` configuration.
108
+ #
109
+ # If the `set_default_logger_on_rails_init` configuration is not set,
110
+ # and {Railtie.set_default_logger} is not called in a post-fork hook,
111
+ # the default Rails logger object will not be set to use the Google
112
+ # Cloud Logging Logger object. For best results, an application should
113
+ # call this method at the appropriate time, such as a post-fork hook.
114
+ #
115
+ def self.set_default_logger
116
+ return if Middleware.logger.nil?
117
+ return if Rails.logger.is_a? Google::Cloud::Logging::Logger
118
+
119
+ # configure the Middleware logger to use the same settings as Rails
120
+ Middleware.logger.level = Rails.logger.level
121
+ # TODO: are there more settings to be set here?
122
+
123
+ # Replace the Rails default logger
124
+ Rails.application.config.logger = Middleware.logger
125
+ Rails.logger = Middleware.logger
79
126
  end
80
127
 
81
128
  ##
@@ -132,6 +179,10 @@ module Google
132
179
  log_config.monitored_resource.type
133
180
  config.monitored_resource.labels ||=
134
181
  log_config.monitored_resource.labels.to_h
182
+ if config.set_default_logger_on_rails_init.nil?
183
+ config.set_default_logger_on_rails_init = \
184
+ log_config.set_default_logger_on_rails_init
185
+ end
135
186
  end
136
187
  end
137
188
 
@@ -65,7 +65,7 @@ module Google
65
65
  def to_grpc
66
66
  return nil if empty?
67
67
  Google::Api::MonitoredResource.new(
68
- type: type,
68
+ type: type,
69
69
  labels: Hash[labels.map { |k, v| [String(k), String(v)] }]
70
70
  )
71
71
  end
@@ -40,11 +40,11 @@ module Google
40
40
  return mocked_logging if mocked_logging
41
41
  @logging ||= \
42
42
  V2::LoggingServiceV2Client.new(
43
- credentials: credentials,
44
- timeout: timeout,
43
+ credentials: credentials,
44
+ timeout: timeout,
45
45
  client_config: client_config,
46
- lib_name: "gccl",
47
- lib_version: Google::Cloud::Logging::VERSION
46
+ lib_name: "gccl",
47
+ lib_version: Google::Cloud::Logging::VERSION
48
48
  )
49
49
  end
50
50
  attr_accessor :mocked_logging
@@ -53,11 +53,11 @@ module Google
53
53
  return mocked_sinks if mocked_sinks
54
54
  @sinks ||= \
55
55
  V2::ConfigServiceV2Client.new(
56
- credentials: credentials,
57
- timeout: timeout,
56
+ credentials: credentials,
57
+ timeout: timeout,
58
58
  client_config: client_config,
59
- lib_name: "gccl",
60
- lib_version: Google::Cloud::Logging::VERSION
59
+ lib_name: "gccl",
60
+ lib_version: Google::Cloud::Logging::VERSION
61
61
  )
62
62
  end
63
63
  attr_accessor :mocked_sinks
@@ -66,11 +66,11 @@ module Google
66
66
  return mocked_metrics if mocked_metrics
67
67
  @metrics ||= \
68
68
  V2::MetricsServiceV2Client.new(
69
- credentials: credentials,
70
- timeout: timeout,
69
+ credentials: credentials,
70
+ timeout: timeout,
71
71
  client_config: client_config,
72
- lib_name: "gccl",
73
- lib_version: Google::Cloud::Logging::VERSION
72
+ lib_name: "gccl",
73
+ lib_version: Google::Cloud::Logging::VERSION
74
74
  )
75
75
  end
76
76
  attr_accessor :mocked_metrics
@@ -83,8 +83,10 @@ module Google
83
83
  resource_names = ["projects/#{@project}"] if resource_names.empty?
84
84
  call_opts = default_options
85
85
  if token
86
- call_opts = Google::Gax::CallOptions.new(kwargs: default_headers,
87
- page_token: token)
86
+ call_opts = Google::Gax::CallOptions.new(
87
+ kwargs: default_headers,
88
+ page_token: token
89
+ )
88
90
  end
89
91
 
90
92
  execute do
@@ -117,13 +119,15 @@ module Google
117
119
  parent = resource || "projects/#{@project}"
118
120
  call_opts = default_options
119
121
  if token
120
- call_opts = Google::Gax::CallOptions.new(kwargs: default_headers,
121
- page_token: token)
122
+ call_opts = Google::Gax::CallOptions.new(
123
+ kwargs: default_headers,
124
+ page_token: token
125
+ )
122
126
  end
123
127
 
124
128
  execute do
125
129
  paged_enum = logging.list_logs parent, page_size: max,
126
- options: call_opts
130
+ options: call_opts
127
131
  paged_enum.page.response
128
132
  end
129
133
  end
@@ -137,8 +141,10 @@ module Google
137
141
  def list_resource_descriptors token: nil, max: nil
138
142
  call_opts = default_options
139
143
  if token
140
- call_opts = Google::Gax::CallOptions.new(kwargs: default_headers,
141
- page_token: token)
144
+ call_opts = Google::Gax::CallOptions.new(
145
+ kwargs: default_headers,
146
+ page_token: token
147
+ )
142
148
  end
143
149
 
144
150
  execute do
@@ -150,8 +156,10 @@ module Google
150
156
  def list_sinks token: nil, max: nil
151
157
  call_opts = default_options
152
158
  if token
153
- call_opts = Google::Gax::CallOptions.new(kwargs: default_headers,
154
- page_token: token)
159
+ call_opts = Google::Gax::CallOptions.new(
160
+ kwargs: default_headers,
161
+ page_token: token
162
+ )
155
163
  end
156
164
 
157
165
  execute do
@@ -169,7 +177,7 @@ module Google
169
177
  execute do
170
178
  sinks.create_sink project_path, sink,
171
179
  unique_writer_identity: unique_writer_identity,
172
- options: default_options
180
+ options: default_options
173
181
  end
174
182
  end
175
183
 
@@ -187,7 +195,7 @@ module Google
187
195
  execute do
188
196
  sinks.update_sink sink_path(name), sink,
189
197
  unique_writer_identity: unique_writer_identity,
190
- options: default_options
198
+ options: default_options
191
199
  end
192
200
  end
193
201
 
@@ -200,8 +208,10 @@ module Google
200
208
  def list_metrics token: nil, max: nil
201
209
  call_opts = default_options
202
210
  if token
203
- call_opts = Google::Gax::CallOptions.new(kwargs: default_headers,
204
- page_token: token)
211
+ call_opts = Google::Gax::CallOptions.new(
212
+ kwargs: default_headers,
213
+ page_token: token
214
+ )
205
215
  end
206
216
 
207
217
  execute do
@@ -248,6 +258,13 @@ module Google
248
258
  end
249
259
  end
250
260
 
261
+ def log_path log_name
262
+ return nil if log_name.nil?
263
+ return log_name if log_name.empty?
264
+ return log_name if log_name.to_s.include? "/"
265
+ "#{project_path}/logs/#{log_name}"
266
+ end
267
+
251
268
  def inspect
252
269
  "#{self.class}(#{@project})"
253
270
  end
@@ -258,13 +275,6 @@ module Google
258
275
  "projects/#{@project}"
259
276
  end
260
277
 
261
- def log_path log_name
262
- return nil if log_name.nil?
263
- return log_name if log_name.empty?
264
- return log_name if log_name.to_s.include? "/"
265
- "#{project_path}/logs/#{log_name}"
266
- end
267
-
268
278
  def sink_path sink_name
269
279
  return sink_name if sink_name.to_s.include? "/"
270
280
  "#{project_path}/sinks/#{sink_name}"
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -78,15 +78,6 @@ module Google
78
78
  # @return [Array<Google::Api::Distribution::Exemplar>]
79
79
  # Must be in increasing order of `value` field.
80
80
  class Distribution
81
- # The range of the population values.
82
- # @!attribute [rw] min
83
- # @return [Float]
84
- # The minimum of the population values.
85
- # @!attribute [rw] max
86
- # @return [Float]
87
- # The maximum of the population values.
88
- class Range; end
89
-
90
81
  # `BucketOptions` describes the bucket boundaries used to create a histogram
91
82
  # for the distribution. The buckets can be in a linear sequence, an
92
83
  # exponential sequence, or each bucket can be specified explicitly.
@@ -168,33 +159,6 @@ module Google
168
159
  # The values must be monotonically increasing.
169
160
  class Explicit; end
170
161
  end
171
-
172
- # Exemplars are example points that may be used to annotate aggregated
173
- # distribution values. They are metadata that gives information about a
174
- # particular value added to a Distribution bucket, such as a trace ID that
175
- # was active when a value was added. They may contain further information,
176
- # such as a example values and timestamps, origin, etc.
177
- # @!attribute [rw] value
178
- # @return [Float]
179
- # Value of the exemplar point. This value determines to which bucket the
180
- # exemplar belongs.
181
- # @!attribute [rw] timestamp
182
- # @return [Google::Protobuf::Timestamp]
183
- # The observation (sampling) time of the above value.
184
- # @!attribute [rw] attachments
185
- # @return [Array<Google::Protobuf::Any>]
186
- # Contextual information about the example value. Examples are:
187
- #
188
- # Trace ID: type.googleapis.com/google.devtools.cloudtrace.v1.Trace
189
- #
190
- # Literal string: type.googleapis.com/google.protobuf.StringValue
191
- #
192
- # Labels dropped during aggregation:
193
- # type.googleapis.com/google.monitoring.v3.DroppedLabels
194
- #
195
- # There may be only a single attachment of any given message type in a
196
- # single exemplar, and this is enforced by the system.
197
- class Exemplar; end
198
162
  end
199
163
  end
200
164
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -189,17 +189,5 @@ module Google
189
189
  MONEY = 6
190
190
  end
191
191
  end
192
-
193
- # A specific metric, identified by specifying values for all of the
194
- # labels of a {Google::Api::MetricDescriptor `MetricDescriptor`}.
195
- # @!attribute [rw] type
196
- # @return [String]
197
- # An existing metric type, see {Google::Api::MetricDescriptor}.
198
- # For example, `custom.googleapis.com/invoice/paid/amount`.
199
- # @!attribute [rw] labels
200
- # @return [Hash{String => String}]
201
- # The set of label values that uniquely identify this metric. All
202
- # labels listed in the `MetricDescriptor` must be assigned values.
203
- class Metric; end
204
192
  end
205
193
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -112,17 +112,6 @@ module Google
112
112
  # empty
113
113
  class WriteLogEntriesResponse; end
114
114
 
115
- # Error details for WriteLogEntries with partial success.
116
- # @!attribute [rw] log_entry_errors
117
- # @return [Hash{Integer => Google::Rpc::Status}]
118
- # When `WriteLogEntriesRequest.partial_success` is true, records the error
119
- # status for entries that were not written due to a permanent error, keyed
120
- # by the entry's zero-based index in `WriteLogEntriesRequest.entries`.
121
- #
122
- # Failed requests for which no entries are written will not include
123
- # per-entry errors.
124
- class WriteLogEntriesPartialErrors; end
125
-
126
115
  # The parameters to `ListLogEntries`.
127
116
  # @!attribute [rw] project_ids
128
117
  # @return [Array<String>]
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Google LLC
1
+ # Copyright 2019 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.