yeller_ruby 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69148c3deef072819ef088784bbab18ba78499ff
4
- data.tar.gz: dcb6d17d8c297cc968ea8915f562200498af1003
3
+ metadata.gz: 698ad55a6a18513724ff97a0896585191a3a579f
4
+ data.tar.gz: bb09b021ef217c667c2b5978563c852e76d6cc78
5
5
  SHA512:
6
- metadata.gz: 1a5e13ea29a5fb9b3385f50201fe2776d8ca105b5f75ce4b0a589e176a24e339c21caa0015330bf7215e1a1ef9f4618a5ee39749efc3308cc5efd45b1aa1cd90
7
- data.tar.gz: a63d64093d5e56edc5b773829e1024edc835fac1341bd213991c78b393323e9f65e8bb92e08cad52198b548b6b9d907f4c2cb7acd2bb1ecdd6462e69ef9bd63e
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
- def initialize(servers, token, startup_params, error_handler)
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
@@ -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 token=(token)
42
- @token = token
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 servers
50
- @servers
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 startup_params
54
- @startup_params
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
- def self.format(exception, options={})
6
- new(exception, options).to_hash
5
+
6
+ class IdentityBacktraceFilter
7
+ def filter(trace)
8
+ trace
9
+ end
7
10
  end
8
11
 
9
- attr_reader :type, :options
12
+ def self.format(exception, backtrace_filter=IdentityBacktraceFilter.new, options={})
13
+ new(exception, backtrace_filter, options).to_hash
14
+ end
10
15
 
11
- def initialize(exception, options)
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
- :params => request.params,
35
- :session => env.fetch('rack.session', {}),
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
- ::Rails.logger.info("yeller: caught exception")
23
- Yeller::Rack.rescue_rack_exception(exception, env)
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)
@@ -1,3 +1,3 @@
1
1
  module Yeller
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
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.1
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-05-04 00:00:00.000000000 Z
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