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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d42737cc1ec35e99dd72cd70479e087239f970d8
4
- data.tar.gz: 782addb9a7232e15533ad8a7e01efaa177fadea3
3
+ metadata.gz: 1bc4dfe4cdd8c6603b2d69c726871777fd36f993
4
+ data.tar.gz: d20de3a957643e0104836a088b06114db1bcbfaf
5
5
  SHA512:
6
- metadata.gz: e2b049ad4ce727a49e41dc493a110af32abfba5a65057d7e105d159d7802db8fd328d0ac3e3a23e8641a04c4e748d57ae91df8b88ab760d1289bf4c86ba493bc
7
- data.tar.gz: e5b740b66434058f15241845ded775030713ad15553da74c33634fa91751d8f410c00917fec9ca810bb4de6292752563d1424cafcecf6482856ed7a6c77d624d
6
+ metadata.gz: 4b2a330661919869d5aea4b0087623972efb09d0633fa614e835b60edcb54c2a5cfd5770d019b248afa916481b9ce4ad4727509be2c5d3cd80788979852d9863
7
+ data.tar.gz: e1c9d17782072e4e273b89614ae130e60ea28c8b8f373b99c891fb02ea4d9bcfb5ae1c5c7c8acb730763559ece461f05052892ac3387bdeaafb0fade10aa9537
data/lib/yeller.rb CHANGED
@@ -10,6 +10,7 @@ require_relative 'yeller/server'
10
10
  require_relative 'yeller/version'
11
11
  require_relative 'yeller/startup_params'
12
12
  require_relative 'yeller/log_error_handler'
13
+ require_relative 'yeller/verify_log'
13
14
 
14
15
  if defined?(::Rails)
15
16
  require 'yeller/rails'
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
- @reported_error ||= true
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
@@ -10,6 +10,7 @@ module Yeller
10
10
  end
11
11
 
12
12
  def self.report(exception, options={})
13
+ Yeller::VerifyLog.reporting_to_yeller_rack!
13
14
  @client.report(exception, options)
14
15
  end
15
16
 
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
- controller = env['action_controller.instance']
54
- params = controller.send(:params)
55
- request = ::Rack::Request.new(env)
56
- Yeller::Rack.report(
57
- exception,
58
- :url => request.url,
59
- :location => "#{controller.class.to_s}##{params[:action]}",
60
- :custom_data => controller._yeller_custom_data
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
- elsif defined(::ActionDispatch::ShowExceptions)
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)
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Yeller
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
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.3
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-10 00:00:00.000000000 Z
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