google-cloud-error_reporting 0.25.0 → 0.26.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.
- checksums.yaml +4 -4
- data/lib/google/cloud/error_reporting.rb +26 -9
- data/lib/google/cloud/error_reporting/async_error_reporter.rb +124 -0
- data/lib/google/cloud/error_reporting/middleware.rb +4 -2
- data/lib/google/cloud/error_reporting/v1beta1/error_group_service_client_config.json +1 -3
- data/lib/google/cloud/error_reporting/v1beta1/error_stats_service_client_config.json +1 -3
- data/lib/google/cloud/error_reporting/v1beta1/report_errors_service_client_config.json +1 -3
- data/lib/google/cloud/error_reporting/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95eeb57ecd15fd08ecd122259beaefb06afc9eab
|
4
|
+
data.tar.gz: d77c448cde21c23c922fcd0c456618723fe6ed2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07d4e2e0e62f24b647d026014198c593edba2c6b3e187995102095d69147ef09917b9087907a912c96f7ca12c24c5ce9a5a661d732944da48332b8e1bf6c4dfd
|
7
|
+
data.tar.gz: 2610858723c8d1aa8fc18dc138f7c4ee549e3d82f6334b078bd9a4fb6b3cc858b8b21ea1321d07ca85fe841d722d591f3ce1b781ee8cddfdc6ed589c487a274b
|
@@ -14,6 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
require "google-cloud-error_reporting"
|
17
|
+
require "google/cloud/error_reporting/async_error_reporter"
|
17
18
|
require "google/cloud/error_reporting/project"
|
18
19
|
require "google/cloud/error_reporting/middleware"
|
19
20
|
require "stackdriver/core"
|
@@ -213,26 +214,42 @@ module Google
|
|
213
214
|
# @param [String] service_version A version identifier for running
|
214
215
|
# service.
|
215
216
|
#
|
216
|
-
def self.report exception, service_name: nil, service_version: nil
|
217
|
+
def self.report exception, service_name: nil, service_version: nil
|
217
218
|
return if Google::Cloud.configure.use_error_reporting == false
|
218
219
|
|
220
|
+
service_name ||= configure.service_name ||
|
221
|
+
Project.default_service_name
|
222
|
+
service_version ||= configure.service_version ||
|
223
|
+
Project.default_service_version
|
224
|
+
|
225
|
+
error_event = ErrorEvent.from_exception(exception).tap do |event|
|
226
|
+
event.service_name = service_name
|
227
|
+
event.service_version = service_version
|
228
|
+
end
|
229
|
+
|
230
|
+
yield error_event if block_given?
|
231
|
+
|
232
|
+
default_client.report error_event
|
233
|
+
end
|
234
|
+
|
235
|
+
##
|
236
|
+
# @private Create a private client to
|
237
|
+
def self.default_client
|
219
238
|
unless @@default_client
|
220
239
|
project_id = configure.project_id ||
|
221
240
|
Google::Cloud.configure.project_id
|
222
241
|
keyfile = configure.keyfile ||
|
223
242
|
Google::Cloud.configure.keyfile
|
224
243
|
|
225
|
-
@@default_client = new
|
244
|
+
@@default_client = AsyncErrorReporter.new(
|
245
|
+
new(project: project_id, keyfile: keyfile)
|
246
|
+
)
|
226
247
|
end
|
227
248
|
|
228
|
-
|
229
|
-
service_version ||= configure.service_version
|
230
|
-
|
231
|
-
@@default_client.report_exception exception,
|
232
|
-
service_name: service_name,
|
233
|
-
service_version: service_version,
|
234
|
-
&block
|
249
|
+
@@default_client
|
235
250
|
end
|
251
|
+
|
252
|
+
private_class_method :default_client
|
236
253
|
end
|
237
254
|
end
|
238
255
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# Copyright 2016 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
|
+
|
16
|
+
require "stackdriver/core/async_actor"
|
17
|
+
|
18
|
+
|
19
|
+
module Google
|
20
|
+
module Cloud
|
21
|
+
module ErrorReporting
|
22
|
+
##
|
23
|
+
# # AsyncErrorReporter
|
24
|
+
#
|
25
|
+
# @private Used by {Google::Cloud::ErrorReporting} and
|
26
|
+
# {Google::Cloud::ErrorReporting::Middleware} to asynchronously submit
|
27
|
+
# error events to Stackdriver Error Reporting service when used in
|
28
|
+
# Ruby applications.
|
29
|
+
class AsyncErrorReporter
|
30
|
+
include Stackdriver::Core::AsyncActor
|
31
|
+
|
32
|
+
##
|
33
|
+
# @private Default maximum backlog size for the job queue
|
34
|
+
DEFAULT_MAX_QUEUE_SIZE = 1000
|
35
|
+
|
36
|
+
##
|
37
|
+
# The {Google::Cloud::ErrorReporting::Project} object to submit events
|
38
|
+
# with.
|
39
|
+
attr_accessor :error_reporting
|
40
|
+
|
41
|
+
##
|
42
|
+
# The max number of items the queue holds
|
43
|
+
attr_accessor :max_queue_size
|
44
|
+
|
45
|
+
##
|
46
|
+
# @private Construct a new instance of AsyncErrorReporter
|
47
|
+
def initialize error_reporting, max_queue_size = DEFAULT_MAX_QUEUE_SIZE
|
48
|
+
super()
|
49
|
+
@error_reporting = error_reporting
|
50
|
+
@max_queue_size = max_queue_size
|
51
|
+
@queue = []
|
52
|
+
@queue_resource = new_cond
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Add the error event to the queue. Signal the child thread an item
|
57
|
+
# has been added.
|
58
|
+
def report error_event
|
59
|
+
async_start
|
60
|
+
|
61
|
+
synchronize do
|
62
|
+
@queue.push error_event
|
63
|
+
@queue_resource.broadcast
|
64
|
+
|
65
|
+
retries = 0
|
66
|
+
while @max_queue_size && @queue.size > @max_queue_size
|
67
|
+
retries += 1
|
68
|
+
@queue_resource.wait 1
|
69
|
+
|
70
|
+
# Drop early queue entries when have waited long enough.
|
71
|
+
@queue.pop while @queue.size > @max_queue_size && retries > 3
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
##
|
77
|
+
# @private Callback fucntion for AsyncActor module to run the async
|
78
|
+
# job in a loop
|
79
|
+
def run_backgrounder
|
80
|
+
error_event = wait_next_item
|
81
|
+
return if error_event.nil?
|
82
|
+
begin
|
83
|
+
error_reporting.report error_event
|
84
|
+
rescue => e
|
85
|
+
@last_exception = e
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
##
|
90
|
+
# @private Callback function when the async actor thread state changes
|
91
|
+
def on_async_state_change
|
92
|
+
synchronize do
|
93
|
+
@queue_resource.broadcast
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
##
|
100
|
+
# @private The the next item from the reporter queue. If there are
|
101
|
+
# no more item, it blocks the reporter thread until an item is
|
102
|
+
# enqueued
|
103
|
+
def wait_next_item
|
104
|
+
synchronize do
|
105
|
+
@queue_resource.wait_while do
|
106
|
+
async_suspended? || (async_running? && @queue.empty?)
|
107
|
+
end
|
108
|
+
@queue.pop
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
##
|
113
|
+
# @private Override the #backgrounder_stoppable? method from AsyncActor
|
114
|
+
# module. The actor can be gracefully stopped when queue is
|
115
|
+
# empty.
|
116
|
+
def backgrounder_stoppable?
|
117
|
+
synchronize do
|
118
|
+
@queue.empty?
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -52,8 +52,10 @@ module Google
|
|
52
52
|
|
53
53
|
@error_reporting =
|
54
54
|
error_reporting ||
|
55
|
-
ErrorReporting.new(
|
56
|
-
|
55
|
+
ErrorReporting::AsyncErrorReporter.new(
|
56
|
+
ErrorReporting.new(project: configuration.project_id,
|
57
|
+
keyfile: configuration.keyfile)
|
58
|
+
)
|
57
59
|
|
58
60
|
# Set module default client to reuse the same client. Update module
|
59
61
|
# configuration parameters.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-error_reporting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.26.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Google Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-cloud-core
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: google-gax
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,6 +205,7 @@ files:
|
|
205
205
|
- README.md
|
206
206
|
- lib/google-cloud-error_reporting.rb
|
207
207
|
- lib/google/cloud/error_reporting.rb
|
208
|
+
- lib/google/cloud/error_reporting/async_error_reporter.rb
|
208
209
|
- lib/google/cloud/error_reporting/credentials.rb
|
209
210
|
- lib/google/cloud/error_reporting/error_event.rb
|
210
211
|
- lib/google/cloud/error_reporting/middleware.rb
|