yeller_ruby 0.0.1 → 0.0.2
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/backtrace_filter.rb +21 -0
- data/lib/yeller/client.rb +5 -2
- data/lib/yeller/configuration.rb +31 -14
- data/lib/yeller/exception_formatter.rb +15 -5
- data/lib/yeller/rack.rb +2 -4
- data/lib/yeller/rails.rb +12 -9
- data/lib/yeller/version.rb +1 -1
- data/lib/yeller.rb +2 -0
- 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: 698ad55a6a18513724ff97a0896585191a3a579f
|
4
|
+
data.tar.gz: bb09b021ef217c667c2b5978563c852e76d6cc78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75f14d12c0b974cf5ce2d8263156f82c23670f1b1c18a7ccf5d2d5ffc075f440054f1662bae8cc85fae934e6caf844249a04cbb56625c26ee492a6a3e6e319d5
|
7
|
+
data.tar.gz: 649cd6159cca96897695bf596a191116cc1ddf455d955b58c90db6c35d0d8808504819d4ae6c56f01311b84a497564c84fb05b9f9b085e4a7bf5d7e53cd76a4d
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Yeller
|
2
|
+
class BacktraceFilter
|
3
|
+
attr_reader :filters
|
4
|
+
def initialize(filters)
|
5
|
+
@filters = filters
|
6
|
+
end
|
7
|
+
|
8
|
+
def filter(trace)
|
9
|
+
trace.map do |frame|
|
10
|
+
[filter_filename(frame[0]), frame[1], frame[2]]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def filter_filename(filename)
|
15
|
+
filters.each do |filter|
|
16
|
+
filename.gsub!(filter[0], filter[1])
|
17
|
+
end
|
18
|
+
filename
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/yeller/client.rb
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
module Yeller
|
2
2
|
class Client
|
3
|
-
|
3
|
+
attr_reader :backtrace_filter
|
4
|
+
|
5
|
+
def initialize(servers, token, startup_params, backtrace_filter, error_handler)
|
4
6
|
@servers = servers
|
5
7
|
@last_server = rand(servers.size)
|
6
8
|
@startup_params = startup_params
|
7
9
|
@token = token
|
8
10
|
@error_handler = error_handler
|
11
|
+
@backtrace_filter = backtrace_filter
|
9
12
|
end
|
10
13
|
|
11
14
|
def report(exception, options={})
|
12
|
-
hash = ExceptionFormatter.format(exception, options)
|
15
|
+
hash = ExceptionFormatter.format(exception, backtrace_filter, options)
|
13
16
|
serialized = JSON.dump(@startup_params.merge(hash))
|
14
17
|
report_with_roundtrip(serialized, 0)
|
15
18
|
end
|
data/lib/yeller/configuration.rb
CHANGED
@@ -2,6 +2,7 @@ require_relative 'server'
|
|
2
2
|
|
3
3
|
module Yeller
|
4
4
|
class Configuration
|
5
|
+
attr_reader :token, :servers, :startup_params, :error_handler, :project_root
|
5
6
|
DEFAULT_SERVERS = [
|
6
7
|
Yeller::SecureServer.new("collector1.yellerapp.com", 443),
|
7
8
|
Yeller::SecureServer.new("collector2.yellerapp.com", 443),
|
@@ -30,6 +31,17 @@ module Yeller
|
|
30
31
|
@servers << Yeller::Server.new(host, port)
|
31
32
|
end
|
32
33
|
|
34
|
+
def backtrace_filters
|
35
|
+
filters = []
|
36
|
+
if defined?(Gem)
|
37
|
+
Gem.path.each do |gem_path|
|
38
|
+
filters << [gem_path, 'GEM_ROOT']
|
39
|
+
end
|
40
|
+
end
|
41
|
+
filters << [project_root, 'PROJECT_ROOT']
|
42
|
+
filters
|
43
|
+
end
|
44
|
+
|
33
45
|
def environment=(new_environment)
|
34
46
|
@startup_params[:"application-environment"] = new_environment
|
35
47
|
end
|
@@ -38,28 +50,33 @@ module Yeller
|
|
38
50
|
@startup_params[:host] = new_host
|
39
51
|
end
|
40
52
|
|
41
|
-
def
|
42
|
-
@
|
43
|
-
end
|
44
|
-
|
45
|
-
def token
|
46
|
-
@token
|
53
|
+
def project_root=(new_project_root)
|
54
|
+
@project_root = new_project_root
|
47
55
|
end
|
48
56
|
|
49
|
-
def
|
50
|
-
@
|
57
|
+
def project_root
|
58
|
+
return @project_root if @project_root
|
59
|
+
if defined?(::Rails)
|
60
|
+
if ::Rails.respond_to?(:root)
|
61
|
+
::Rails.root.to_s
|
62
|
+
elsif defined?(::RAILS_ROOT)
|
63
|
+
::RAILS_ROOT
|
64
|
+
end
|
65
|
+
else
|
66
|
+
Dir.pwd
|
67
|
+
end
|
51
68
|
end
|
52
69
|
|
53
|
-
def
|
54
|
-
@
|
55
|
-
end
|
56
|
-
|
57
|
-
def error_handler
|
58
|
-
@error_handler
|
70
|
+
def token=(token)
|
71
|
+
@token = token
|
59
72
|
end
|
60
73
|
|
61
74
|
def error_handler=(new_error_handler)
|
62
75
|
@error_handler = new_error_handler
|
63
76
|
end
|
77
|
+
|
78
|
+
def project_root=(new_project_root)
|
79
|
+
@project_root = new_project_root
|
80
|
+
end
|
64
81
|
end
|
65
82
|
end
|
@@ -2,17 +2,26 @@ module Yeller
|
|
2
2
|
class ExceptionFormatter
|
3
3
|
BACKTRACE_FORMAT = %r{^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in `([^']+)')?$}.freeze
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
class IdentityBacktraceFilter
|
7
|
+
def filter(trace)
|
8
|
+
trace
|
9
|
+
end
|
7
10
|
end
|
8
11
|
|
9
|
-
|
12
|
+
def self.format(exception, backtrace_filter=IdentityBacktraceFilter.new, options={})
|
13
|
+
new(exception, backtrace_filter, options).to_hash
|
14
|
+
end
|
10
15
|
|
11
|
-
|
16
|
+
attr_reader :type, :options, :backtrace_filter
|
17
|
+
|
18
|
+
def initialize(exception, backtrace_filter, options)
|
12
19
|
@type = exception.class.name
|
13
20
|
@message = exception.message
|
14
21
|
@backtrace = exception.backtrace
|
15
22
|
@options = options
|
23
|
+
|
24
|
+
@backtrace_filter = backtrace_filter
|
16
25
|
end
|
17
26
|
|
18
27
|
def message
|
@@ -23,10 +32,11 @@ module Yeller
|
|
23
32
|
def formatted_backtrace
|
24
33
|
return [] unless @backtrace
|
25
34
|
|
26
|
-
@backtrace.map do |line|
|
35
|
+
original_trace = @backtrace.map do |line|
|
27
36
|
_, file, number, method = line.match(BACKTRACE_FORMAT).to_a
|
28
37
|
[file, number, method]
|
29
38
|
end
|
39
|
+
backtrace_filter.filter(original_trace)
|
30
40
|
end
|
31
41
|
|
32
42
|
def to_hash
|
data/lib/yeller/rack.rb
CHANGED
@@ -25,16 +25,14 @@ module Yeller
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.rescue_rack_exception(exception, env)
|
28
|
-
::Rails.logger.info("sending exception to yeller")
|
29
28
|
request = ::Rack::Request.new(env)
|
30
29
|
Yeller::Rack.report(
|
31
30
|
exception,
|
32
31
|
:url => request.url,
|
33
32
|
:custom_data => {
|
34
|
-
|
35
|
-
|
33
|
+
:params => request.params,
|
34
|
+
:session => env.fetch('rack.session', {}),
|
36
35
|
})
|
37
|
-
::Rails.logger.info("sent exception to yeller")
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
data/lib/yeller/rails.rb
CHANGED
@@ -19,11 +19,19 @@ module Yeller
|
|
19
19
|
|
20
20
|
protected
|
21
21
|
def render_exception_with_yeller(env, exception)
|
22
|
-
|
23
|
-
|
22
|
+
controller = env['action_controller.instance']
|
23
|
+
params = controller.send(:params)
|
24
|
+
request = ::Rack::Request.new(env)
|
25
|
+
Yeller::Rack.report(
|
26
|
+
exception,
|
27
|
+
:url => request.url,
|
28
|
+
:location => "#{controller.class.to_s}##{params[:action]}",
|
29
|
+
:custom_data => {
|
30
|
+
:params => params,
|
31
|
+
:session => env.fetch('rack.session', {})
|
32
|
+
})
|
33
|
+
|
24
34
|
render_exception_without_yeller(env, exception)
|
25
|
-
rescue Exception => e
|
26
|
-
::Rails.logger.info("exception whilst handling exception: #{e} #{e.class} #{e.backtrace.join("\n")}")
|
27
35
|
end
|
28
36
|
end
|
29
37
|
|
@@ -32,11 +40,6 @@ module Yeller
|
|
32
40
|
app.config.middleware.insert 0, "Yeller::Rack"
|
33
41
|
end
|
34
42
|
|
35
|
-
initializer "yeller.action_controller" do
|
36
|
-
ActiveSupport.on_load :action_controller do
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
43
|
config.after_initialize do
|
41
44
|
if defined?(::ActionDispatch::DebugExceptions)
|
42
45
|
::ActionDispatch::DebugExceptions.send(:include, Yeller::Rails::ActionControllerCatchingHooks)
|
data/lib/yeller/version.rb
CHANGED
data/lib/yeller.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'yajl/json_gem'
|
3
3
|
|
4
|
+
require_relative 'yeller/backtrace_filter'
|
4
5
|
require_relative 'yeller/client'
|
5
6
|
require_relative 'yeller/configuration'
|
6
7
|
require_relative 'yeller/exception_formatter'
|
@@ -21,6 +22,7 @@ module Yeller
|
|
21
22
|
config.servers,
|
22
23
|
config.token,
|
23
24
|
Yeller::StartupParams.defaults(config.startup_params),
|
25
|
+
Yeller::BacktraceFilter.new(config.backtrace_filters),
|
24
26
|
config.error_handler
|
25
27
|
)
|
26
28
|
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.0.
|
4
|
+
version: 0.0.2
|
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
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,6 +60,7 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- lib/yeller.rb
|
63
|
+
- lib/yeller/backtrace_filter.rb
|
63
64
|
- lib/yeller/client.rb
|
64
65
|
- lib/yeller/configuration.rb
|
65
66
|
- lib/yeller/exception_formatter.rb
|