rack_bugzscout 0.0.8 → 0.0.9

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.
Files changed (2) hide show
  1. data/lib/rack_bugzscout.rb +56 -8
  2. metadata +1 -1
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bugzscout'
3
+ require 'erb'
3
4
 
4
5
  module Rack
5
6
  # Catches all exceptions raised, and submits them to FogBugz via BugzScout.
@@ -13,6 +14,8 @@ module Rack
13
14
  @fogbugz_user = fogbugz_user
14
15
  @fogbugz_project = fogbugz_project
15
16
  @fogbugz_area = fogbugz_area
17
+
18
+ @template = ERB.new(TEMPLATE)
16
19
  end
17
20
 
18
21
  def call(env)
@@ -28,23 +31,68 @@ module Rack
28
31
  end
29
32
 
30
33
  private
34
+
35
+ def generate_report(exception, env)
36
+ FogBugz::BugzScout.submit(@fogbugz_url) do |scout|
37
+ scout.user = @fogbugz_user
38
+ scout.project = @fogbugz_project
39
+ scout.area = @fogbugz_area
40
+ scout.title = exception.to_s
41
+ scout.body = @template.result(binding)
42
+ end
43
+ end
44
+
31
45
  def send_notification(exception, env)
32
46
  # wrapping this so we can avoid sending these up the chain
33
47
  # not entirely sure that this is the right thing to do...
34
48
  begin
35
49
  if %w(staging production).include?(ENV['RACK_ENV'])
36
- FogBugz::BugzScout.submit(@fogbugz_url) do |scout|
37
- scout.user = @fogbugz_user
38
- scout.project = @fogbugz_project
39
- scout.area = @fogbugz_area
40
- scout.title = exception.class.name
41
- scout.body = exception.message
42
- end
50
+ generate_report(exception, env)
43
51
  env['bugzscout.submitted'] = true
44
52
  end
45
53
  rescue => error
46
- # maybe we ought to log something here?
54
+ # maybe we ought to log something here if things don't work out?
47
55
  end
48
56
  end
57
+
58
+ def extract_body(env)
59
+ if io = env['rack.input']
60
+ io.rewind if io.respond_to?(:rewind)
61
+ io.read
62
+ end
63
+ end
64
+
65
+ TEMPLATE = (<<-'REPORT').gsub(/^ {4}/, '')
66
+ A <%= exception.class.to_s %> occured: <%= exception.to_s %>
67
+ <% if body = extract_body(env) %>
68
+
69
+ ====================
70
+ Request Body:
71
+ ====================
72
+
73
+ <%= body.gsub(/^/, ' ') %>
74
+ <% end %>
75
+
76
+ ====================
77
+ Rack Environment:
78
+ ====================
79
+
80
+ PID: <%= $$ %>
81
+ PWD: <%= Dir.getwd %>
82
+
83
+ <%= env.to_a.
84
+ sort{|a,b| a.first <=> b.first}.
85
+ map{ |k,v| "%-25s%p" % [k+':', v] }.
86
+ join("\n ") %>
87
+
88
+ <% if exception.respond_to?(:backtrace) %>
89
+ ====================
90
+ Backtrace:
91
+ ====================
92
+
93
+ <%= exception.backtrace.join("\n ") %>
94
+ <% end %>
95
+ REPORT
96
+
49
97
  end
50
98
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack_bugzscout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Gorsuch