yeller_ruby 0.1.3 → 0.1.4
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/yeller.rb +1 -0
- data/lib/yeller/client.rb +8 -2
- data/lib/yeller/rack.rb +1 -0
- data/lib/yeller/rails.rb +27 -10
- data/lib/yeller/rails/tasks.rb +7 -1
- data/lib/yeller/verify_log.rb +143 -0
- data/lib/yeller/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bc4dfe4cdd8c6603b2d69c726871777fd36f993
|
4
|
+
data.tar.gz: d20de3a957643e0104836a088b06114db1bcbfaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b2a330661919869d5aea4b0087623972efb09d0633fa614e835b60edcb54c2a5cfd5770d019b248afa916481b9ce4ad4727509be2c5d3cd80788979852d9863
|
7
|
+
data.tar.gz: e1c9d17782072e4e273b89614ae130e60ea28c8b8f373b99c891fb02ea4d9bcfb5ae1c5c7c8acb730763559ece461f05052892ac3387bdeaafb0fade10aa9537
|
data/lib/yeller.rb
CHANGED
data/lib/yeller/client.rb
CHANGED
@@ -19,12 +19,18 @@ module Yeller
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def report_with_roundtrip(serialized, error_count)
|
22
|
-
next_server.client.post("/#{@token}", serialized, {"Content-Type" => "application/json"})
|
23
|
-
|
22
|
+
response = next_server.client.post("/#{@token}", serialized, {"Content-Type" => "application/json"})
|
23
|
+
if response.code.to_i >= 200 && response.code.to_i <= 300
|
24
|
+
Yeller::VerifyLog.reported_to_api!
|
25
|
+
@reported_error ||= true
|
26
|
+
else
|
27
|
+
Yeller::VerifyLog.error_code_from_api!(response)
|
28
|
+
end
|
24
29
|
rescue StandardError => e
|
25
30
|
if error_count <= (@servers.size * 2)
|
26
31
|
report_with_roundtrip(serialized, error_count + 1)
|
27
32
|
else
|
33
|
+
Yeller::VerifyLog.exception_from_api!(e)
|
28
34
|
@error_handler.handle(e)
|
29
35
|
end
|
30
36
|
end
|
data/lib/yeller/rack.rb
CHANGED
data/lib/yeller/rails.rb
CHANGED
@@ -50,15 +50,29 @@ module Yeller
|
|
50
50
|
|
51
51
|
protected
|
52
52
|
def render_exception_with_yeller(env, exception)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
53
|
+
Yeller::VerifyLog.render_exception_with_yeller!
|
54
|
+
begin
|
55
|
+
request = ::Rack::Request.new(env)
|
56
|
+
controller = env['action_controller.instance']
|
57
|
+
|
58
|
+
if controller
|
59
|
+
params = controller.send(:params)
|
60
|
+
Yeller::Rack.report(
|
61
|
+
exception,
|
62
|
+
:url => request.url,
|
63
|
+
:location => "#{controller.class.to_s}##{params[:action]}",
|
64
|
+
:custom_data => controller._yeller_custom_data
|
65
|
+
)
|
66
|
+
else
|
67
|
+
Yeller::VerifyLog.action_controller_instance_not_in_env!
|
68
|
+
Yeller::Rack.report(
|
69
|
+
exception,
|
70
|
+
:url => request.url
|
71
|
+
)
|
72
|
+
end
|
73
|
+
rescue => e
|
74
|
+
Yeller::VerifyLog.error_reporting_rails_error!(e)
|
75
|
+
end
|
62
76
|
|
63
77
|
render_exception_without_yeller(env, exception)
|
64
78
|
end
|
@@ -71,8 +85,11 @@ module Yeller
|
|
71
85
|
|
72
86
|
config.after_initialize do
|
73
87
|
if defined?(::ActionDispatch::DebugExceptions)
|
88
|
+
Yeller::VerifyLog.monkey_patching_rails!("ActionDispatch::DebugExceptions")
|
74
89
|
::ActionDispatch::DebugExceptions.send(:include, Yeller::Rails::ActionControllerCatchingHooks)
|
75
|
-
|
90
|
+
end
|
91
|
+
if defined?(::ActionDispatch::ShowExceptions)
|
92
|
+
Yeller::VerifyLog.monkey_patching_rails!("ActionDispatch::ShowExceptions")
|
76
93
|
::ActionDispatch::ShowExceptions.send(:include, Yeller::Rails::ActionControllerCatchingHooks)
|
77
94
|
end
|
78
95
|
ActionController::Base.send(:include, Yeller::Rails::ControllerMethods)
|
data/lib/yeller/rails/tasks.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'action_controller/test_case'
|
2
2
|
namespace :yeller do
|
3
|
+
task :enable_verify_log => [] do
|
4
|
+
Yeller::VerifyLog.enable!
|
5
|
+
end
|
6
|
+
|
3
7
|
desc "verify your yeller gem installation by sending a test exception to yeller's servers"
|
4
|
-
task :verify => [:environment] do
|
8
|
+
task :verify => [:enable_verify_log, :environment] do
|
5
9
|
Dir["app/controllers/application*.rb"].each { |file| require(File.expand_path(file)) }
|
6
10
|
|
7
11
|
catcher = Yeller::Rails::ActionControllerCatchingHooks
|
@@ -29,6 +33,7 @@ namespace :yeller do
|
|
29
33
|
prepend_before_filter :verify_yeller
|
30
34
|
|
31
35
|
def verify_yeller
|
36
|
+
Yeller::VerifyLog.about_to_raise_exception_in_controller!
|
32
37
|
raise YellerVerifyException.new("verifying that yeller works")
|
33
38
|
end
|
34
39
|
|
@@ -62,6 +67,7 @@ namespace :yeller do
|
|
62
67
|
Kernel.puts "ERROR: CLIENT NOT ENABLED yeller-verification-failed enabled=#{client.enabled?} token=\"#{client.token}\""
|
63
68
|
Kernel.puts "Yeller rails client not enabled, check development_environments setting"
|
64
69
|
else
|
70
|
+
Yeller::StdoutVerifyLog.print_log!
|
65
71
|
Kernel.puts "ERROR yeller-verification-failed enabled=#{client.enabled?} token=\"#{client.token}\""
|
66
72
|
end
|
67
73
|
exit 126
|
@@ -0,0 +1,143 @@
|
|
1
|
+
module Yeller
|
2
|
+
class NoopLog
|
3
|
+
def self.monkey_patching_rails!(rails_class)
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.render_exception_with_yeller!
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.error_reporting_rails_error!(e)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.action_controller_instance_not_in_env!
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.reported_to_api!
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.error_code_from_api!(response)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.exception_from_api!(e)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.about_to_raise_exception_in_controller!
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.reporting_to_yeller_rack!
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class VerifyLog
|
32
|
+
@logger = NoopLog
|
33
|
+
|
34
|
+
def self.enable!
|
35
|
+
@logger = StdoutVerifyLog
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.monkey_patching_rails!(rails_class)
|
39
|
+
@logger.monkey_patching_rails!(rails_class)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.render_exception_with_yeller!
|
43
|
+
@logger.render_exception_with_yeller!
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.error_reporting_rails_error!(e)
|
47
|
+
@logger.error_reporting_rails_error!(e)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.action_controller_instance_not_in_env!
|
51
|
+
@logger.action_controller_instance_not_in_env!
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.reported_to_api!
|
55
|
+
@logger.reported_to_api!
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.error_code_from_api!(response)
|
59
|
+
@logger.error_code_from_api!(response)
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.exception_from_api!(e)
|
63
|
+
@logger.exception_from_api!(e)
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.about_to_raise_exception_in_controller!
|
67
|
+
@logger.about_to_raise_exception_in_controller!
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.reporting_to_yeller_rack!
|
71
|
+
@logger.reporting_to_yeller_rack!
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class StdoutVerifyLog
|
76
|
+
def self.print_log!
|
77
|
+
@log ||= []
|
78
|
+
@log.each do |line|
|
79
|
+
puts line
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.monkey_patching_rails!(rails_class)
|
84
|
+
info("monkeypatching rails #{rails_class}")
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.render_exception_with_yeller!
|
88
|
+
info("rendering exception with yeller")
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.error_reporting_rails_error!(e)
|
92
|
+
error("error reporting rails error, please contact rails@yellerapp.com with this message:\n" +
|
93
|
+
e.inspect + "\n" + e.backtrace.join("\n"))
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.action_controller_instance_not_in_env!
|
97
|
+
warn("rack env didn't contain 'action_controller.instance', which should be set from rails.\n" +
|
98
|
+
"Errors will still be logged, but they'll be missing a lot of useful information\n" +
|
99
|
+
"check that your middleware doesn't mess with that key, and please contact rails@yellerapp.com for more assistance")
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.reported_to_api!
|
103
|
+
info("reported to api successfully!")
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.error_code_from_api!(response)
|
107
|
+
error("got a non successful response from yeller's api!: #{response.code} #{response.body}" +
|
108
|
+
"\ncheck the api token is correct, and if you're still getting this error, contact rails@yellerapp.com")
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.exception_from_api!(e)
|
112
|
+
error("got an exception whilst sending the test error to yeller's api servers. Please contact rails@yellerapp.com with this message for help debugging.\n" +
|
113
|
+
e.inspect + "\n" + e.backtrace.join("\n"))
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.about_to_raise_exception_in_controller!
|
117
|
+
info("about to raise exception in fake controller")
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.reporting_to_yeller_rack!
|
121
|
+
info("reporting via Yeller::Rack")
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.info(message)
|
125
|
+
@log ||= []
|
126
|
+
@log << "yeller: #{message}"
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.warn(message)
|
130
|
+
info(red("WARNING:"))
|
131
|
+
info(red(message))
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.error(message)
|
135
|
+
info(red("ERROR DETECTED:"))
|
136
|
+
info(red(message))
|
137
|
+
end
|
138
|
+
|
139
|
+
def self.red(message)
|
140
|
+
"\033[31m#{message}\033[0m"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/lib/yeller/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yeller_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Crayford
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/yeller/rails/tasks.rb
|
72
72
|
- lib/yeller/server.rb
|
73
73
|
- lib/yeller/startup_params.rb
|
74
|
+
- lib/yeller/verify_log.rb
|
74
75
|
- lib/yeller/version.rb
|
75
76
|
- lib/yeller_ruby.rb
|
76
77
|
homepage: https://github.com/tcrayford/yeller_rubby
|