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 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