failbot 2.5.2 → 2.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/failbot.rb +23 -22
- data/lib/failbot/haystack.rb +4 -0
- data/lib/failbot/version.rb +1 -1
- data/lib/failbot/waiter_backend.rb +21 -0
- metadata +6 -6
- data/lib/failbot/thread_local_variable.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bae1044f6d88c6617750ffe63b606591880ebe5132d9714d2e4c9534e309962
|
4
|
+
data.tar.gz: b1d80185dae5e664c049ed38583d25086d3659f517826c38912974d93fed32a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8114032ca98920f4b902447d1b3c69b28ea6bfe14b52d8b1f431d0537295d5c565d9d8a17540afa72f00f439023bc711291542baa2044ada4cd6f547e9506c35
|
7
|
+
data.tar.gz: f0040811958da514da048dd38af5de2cfd3978d6f036dc78c19b6080991b02bf69cca5b79f684ecc3a8c5b3885b577ecf77116fca445439f7ecfa06fbe5a3452
|
data/lib/failbot.rb
CHANGED
@@ -3,6 +3,7 @@ require 'digest/md5'
|
|
3
3
|
require 'logger'
|
4
4
|
require 'socket'
|
5
5
|
require "time"
|
6
|
+
require "timeout"
|
6
7
|
require "date"
|
7
8
|
require "uri"
|
8
9
|
|
@@ -25,8 +26,7 @@ module Failbot
|
|
25
26
|
autoload :HTTPBackend, 'failbot/http_backend'
|
26
27
|
autoload :MemoryBackend, 'failbot/memory_backend'
|
27
28
|
autoload :JSONBackend, 'failbot/json_backend'
|
28
|
-
|
29
|
-
autoload :ThreadLocalVariable, 'failbot/thread_local_variable'
|
29
|
+
autoload :WaiterBackend, 'failbot/waiter_backend'
|
30
30
|
|
31
31
|
# Public: Set an instrumenter to be called when exceptions are reported.
|
32
32
|
#
|
@@ -46,6 +46,9 @@ module Failbot
|
|
46
46
|
#
|
47
47
|
attr_accessor :instrumenter
|
48
48
|
|
49
|
+
# prevent recursive calls to Failbot.report!
|
50
|
+
attr_accessor :already_reporting
|
51
|
+
|
49
52
|
# Root directory of the project's source. Used to clean up stack traces if the exception format supports it
|
50
53
|
|
51
54
|
def source_root=(str)
|
@@ -134,16 +137,9 @@ module Failbot
|
|
134
137
|
return setup_deprecated(settings)
|
135
138
|
end
|
136
139
|
|
137
|
-
|
138
|
-
|
139
|
-
else
|
140
|
-
{ 'server' => hostname }
|
141
|
-
end
|
142
|
-
|
143
|
-
@thread_local_context = ::Failbot::ThreadLocalVariable.new do
|
144
|
-
[initial_context]
|
140
|
+
if default_context.respond_to?(:to_hash) && !default_context.to_hash.empty?
|
141
|
+
context[0] = default_context.to_hash
|
145
142
|
end
|
146
|
-
@thread_local_already_reporting = ::Failbot::ThreadLocalVariable.new { false }
|
147
143
|
|
148
144
|
populate_context_from_settings(settings)
|
149
145
|
|
@@ -151,6 +147,8 @@ module Failbot
|
|
151
147
|
case (name = settings["FAILBOT_BACKEND"])
|
152
148
|
when "memory"
|
153
149
|
Failbot::MemoryBackend.new
|
150
|
+
when "waiter"
|
151
|
+
Failbot::WaiterBackend.new
|
154
152
|
when "file"
|
155
153
|
Failbot::FileBackend.new(settings["FAILBOT_BACKEND_FILE_PATH"])
|
156
154
|
when "http"
|
@@ -165,6 +163,11 @@ module Failbot
|
|
165
163
|
|
166
164
|
@raise_errors = !settings["FAILBOT_RAISE"].to_s.empty?
|
167
165
|
@report_errors = settings["FAILBOT_REPORT"] != "0"
|
166
|
+
@enable_timeout = false
|
167
|
+
if settings.key?("FAILBOT_TIMEOUT_MS")
|
168
|
+
@timeout_seconds = settings["FAILBOT_TIMEOUT_MS"].to_f / 1000
|
169
|
+
@enable_timeout = (@timeout_seconds != 0.0)
|
170
|
+
end
|
168
171
|
|
169
172
|
# allows overriding the 'app' value to send to single haystack bucket.
|
170
173
|
# used primarily on ghe.io.
|
@@ -185,7 +188,7 @@ module Failbot
|
|
185
188
|
# hashes are condensed down into one and included in the next report. Don't
|
186
189
|
# mess with this structure directly - use the #push and #pop methods.
|
187
190
|
def context
|
188
|
-
@
|
191
|
+
@context ||= [{'server' => hostname}]
|
189
192
|
end
|
190
193
|
|
191
194
|
# Add info to be sent in the next failbot report, should one occur.
|
@@ -209,7 +212,7 @@ module Failbot
|
|
209
212
|
|
210
213
|
# Reset the context stack to a pristine state.
|
211
214
|
def reset!
|
212
|
-
@
|
215
|
+
@context = [context[0]]
|
213
216
|
end
|
214
217
|
|
215
218
|
# Loops through the stack of contexts and deletes the given key if it exists.
|
@@ -351,7 +354,13 @@ module Failbot
|
|
351
354
|
"report_status" => "error",
|
352
355
|
}
|
353
356
|
begin
|
354
|
-
|
357
|
+
if @enable_timeout
|
358
|
+
Timeout.timeout(@timeout_seconds) do
|
359
|
+
backend.report(data)
|
360
|
+
end
|
361
|
+
else
|
362
|
+
backend.report(data)
|
363
|
+
end
|
355
364
|
instrumentation_data["report_status"] = "success"
|
356
365
|
rescue Object => i
|
357
366
|
log_failure("reporting", data, e, i)
|
@@ -487,14 +496,6 @@ module Failbot
|
|
487
496
|
@hostname ||= Socket.gethostname
|
488
497
|
end
|
489
498
|
|
490
|
-
def already_reporting=(bool)
|
491
|
-
@thread_local_already_reporting.value = bool
|
492
|
-
end
|
493
|
-
|
494
|
-
def already_reporting
|
495
|
-
@thread_local_already_reporting.value
|
496
|
-
end
|
497
|
-
|
498
499
|
private
|
499
500
|
|
500
501
|
# Internal: Publish an event to the instrumenter
|
data/lib/failbot/haystack.rb
CHANGED
data/lib/failbot/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Failbot
|
2
|
+
class WaiterBackend
|
3
|
+
# This backend waits a configured amount of time before returning. This is
|
4
|
+
# intended be used to test timeouts. Delay is the number of seconds to wait.
|
5
|
+
|
6
|
+
attr_reader :reports
|
7
|
+
def initialize(delay = 5)
|
8
|
+
@delay = delay
|
9
|
+
@reports = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def report(data)
|
13
|
+
@reports << data
|
14
|
+
sleep(@delay)
|
15
|
+
end
|
16
|
+
|
17
|
+
def ping
|
18
|
+
# nop
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: failbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "@rtomayko"
|
8
8
|
- "@atmos"
|
9
9
|
- "@sr"
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-08-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -106,13 +106,13 @@ files:
|
|
106
106
|
- lib/failbot/middleware.rb
|
107
107
|
- lib/failbot/resque_failure_backend.rb
|
108
108
|
- lib/failbot/sensitive_data_scrubber.rb
|
109
|
-
- lib/failbot/thread_local_variable.rb
|
110
109
|
- lib/failbot/version.rb
|
110
|
+
- lib/failbot/waiter_backend.rb
|
111
111
|
homepage: http://github.com/github/failbot#readme
|
112
112
|
licenses:
|
113
113
|
- MIT
|
114
114
|
metadata: {}
|
115
|
-
post_install_message:
|
115
|
+
post_install_message:
|
116
116
|
rdoc_options: []
|
117
117
|
require_paths:
|
118
118
|
- lib
|
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
128
|
version: '0'
|
129
129
|
requirements: []
|
130
130
|
rubygems_version: 3.0.3
|
131
|
-
signing_key:
|
131
|
+
signing_key:
|
132
132
|
specification_version: 4
|
133
133
|
summary: Deliver exceptions to Haystack
|
134
134
|
test_files: []
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Failbot
|
2
|
-
# Public: A simplified implementation of [`::Concurrent::ThreadLocalVar`](https://github.com/ruby-concurrency/concurrent-ruby/blob/7dc6eb04142f008ffa79a59c125669c6fcbb85a8/lib/concurrent-ruby/concurrent/atomic/thread_local_var.rb)
|
3
|
-
#
|
4
|
-
# Why not just use `concurrent-ruby`? We wanted to minimize external dependencies to avoid conflicts with gems already installed with `github/github`.
|
5
|
-
#
|
6
|
-
class ThreadLocalVariable
|
7
|
-
def initialize(&block)
|
8
|
-
@default_block = block || proc {}
|
9
|
-
@key = "_thread_local_variable##{object_id}"
|
10
|
-
end
|
11
|
-
|
12
|
-
def value
|
13
|
-
if Thread.current.key?(@key)
|
14
|
-
Thread.current[@key]
|
15
|
-
else
|
16
|
-
Thread.current[@key] = @default_block.call
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def value=(val)
|
21
|
-
Thread.current[@key] = val
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|