safely 0.2.0 → 0.3.0

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.
data/CHANGES CHANGED
@@ -1,4 +1,12 @@
1
- 0.1 (WIP)
1
+ 0.3 2011-05-07
2
+
3
+ * Backtrace catcher support
4
+
5
+ 0.2 2011-05-07
6
+
7
+ * Log support
8
+
9
+ 0.1 2011-05-07
2
10
 
3
11
  * Initial hoptoad support
4
12
  * Initial email support
data/README.rdoc CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Safely is a simple exception handling and alerting mechanism extract from the daemon-kit[https://github.com/kennethkalmer/daemon-kit] project.
4
4
 
5
- Safely currently supports error reporting to Hoptoad, or via email.
5
+ Safely currently supports error reporting to Hoptoad, or via email. Safely can also log all exceptions to a file when a program exited abnormally, shedding light on what caused the failures.
6
6
 
7
7
  == Installation and Usage
8
8
 
data/lib/safely.rb CHANGED
@@ -2,11 +2,12 @@ $:.unshift File.expand_path('../', __FILE__)
2
2
 
3
3
  module Safely
4
4
 
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
 
7
- autoload :Config, 'safely/config'
8
- autoload :Mixin, 'safely/mixin'
9
- autoload :Strategy, 'safely/strategy'
7
+ autoload :Backtrace, 'safely/backtrace'
8
+ autoload :Config, 'safely/config'
9
+ autoload :Mixin, 'safely/mixin'
10
+ autoload :Strategy, 'safely/strategy'
10
11
 
11
12
  class << self
12
13
 
@@ -0,0 +1,48 @@
1
+ module Safely
2
+ class Backtrace
3
+
4
+ class << self
5
+
6
+ attr_accessor :trace_directory
7
+
8
+ def enable!
9
+ @enabled = true
10
+ at_exit { log_exceptions }
11
+ end
12
+
13
+ def safe_shutdown!
14
+ @enabled = false
15
+ end
16
+
17
+ def log_exceptions
18
+ return unless @enabled && self.trace_directory && File.directory?( self.trace_directory )
19
+
20
+ require 'logger'
21
+
22
+ trace_file = File.join( self.trace_directory, "backtrace-#{Time.now.strftime('%Y%m%d%H%M%S')}-#{Process.pid}.log" )
23
+ trace_log = Logger.new( trace_file )
24
+
25
+ # Find the last exception
26
+ e = nil
27
+ ObjectSpace.each_object {|o|
28
+ if ::Exception === o
29
+ e = o
30
+ end
31
+ }
32
+
33
+ trace_log.info "*** Below you'll find the most recent exception thrown, this will likely (but not certainly) be the exception that made #{DaemonKit.configuration.daemon_name} exit abnormally ***"
34
+ trace_log.error e
35
+
36
+ trace_log.info "*** Below you'll find all the exception objects in memory, some of them may have been thrown in your application, others may just be in memory because they are standard exceptions ***"
37
+ ObjectSpace.each_object {|o|
38
+ if ::Exception === o
39
+ trace_log.error o
40
+ end
41
+ }
42
+
43
+ trace_log.close
44
+ end
45
+ end
46
+
47
+ end
48
+ end
data/safely.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{safely}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kenneth Kalmer"]
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  "Rakefile",
28
28
  "VERSION",
29
29
  "lib/safely.rb",
30
+ "lib/safely/backtrace.rb",
30
31
  "lib/safely/config.rb",
31
32
  "lib/safely/mixin.rb",
32
33
  "lib/safely/strategy.rb",
@@ -34,6 +35,9 @@ Gem::Specification.new do |s|
34
35
  "lib/safely/strategy/log.rb",
35
36
  "lib/safely/strategy/mail.rb",
36
37
  "safely.gemspec",
38
+ "spec/backtrace/safe.rb",
39
+ "spec/backtrace/unsafe.rb",
40
+ "spec/backtrace_spec.rb",
37
41
  "spec/config_spec.rb",
38
42
  "spec/safely_spec.rb",
39
43
  "spec/spec_helper.rb",
@@ -48,6 +52,9 @@ Gem::Specification.new do |s|
48
52
  s.rubygems_version = %q{1.7.2}
49
53
  s.summary = %q{Safely run your code, keep track of exceptions}
50
54
  s.test_files = [
55
+ "spec/backtrace/safe.rb",
56
+ "spec/backtrace/unsafe.rb",
57
+ "spec/backtrace_spec.rb",
51
58
  "spec/config_spec.rb",
52
59
  "spec/safely_spec.rb",
53
60
  "spec/spec_helper.rb",
@@ -0,0 +1,12 @@
1
+ $:.unshift File.expand_path('../../../lib', __FILE__)
2
+
3
+ require 'safely'
4
+
5
+ Safely::Backtrace.trace_directory = File.expand_path('../tmp', __FILE__)
6
+ Safely::Backtrace.enable!
7
+
8
+ safely do
9
+ raise "Oops :/"
10
+ end
11
+
12
+ Safely::Backtrace.safe_shutdown!
@@ -0,0 +1,8 @@
1
+ $:.unshift File.expand_path('../../../lib', __FILE__)
2
+
3
+ require 'safely'
4
+
5
+ Safely::Backtrace.trace_directory = File.expand_path('../tmp', __FILE__)
6
+ Safely::Backtrace.enable!
7
+
8
+ raise "Oops :/"
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+
4
+ describe Safely::Backtrace do
5
+ before(:each) do
6
+ @temp_dir = File.expand_path('../backtrace/tmp', __FILE__)
7
+
8
+ FileUtils.rm_rf( @temp_dir )
9
+ FileUtils.mkdir_p( @temp_dir )
10
+ end
11
+
12
+ it "can be configured" do
13
+ Safely::Backtrace.should respond_to(:trace_directory)
14
+ end
15
+
16
+ it "can be enabled" do
17
+ Safely::Backtrace.enable!
18
+ end
19
+
20
+ it "should log a backtrace on unsafe shutdown" do
21
+ `ruby #{File.expand_path('../backtrace/unsafe.rb', __FILE__)}`
22
+
23
+ entries = Dir["#{@temp_dir}/backtrace-*.log"]
24
+ entries.should_not be_empty
25
+ end
26
+
27
+ it "should not log a backtrace on a safe shutdown" do
28
+ `ruby #{File.expand_path('../backtrace/safe.rb', __FILE__)}`
29
+
30
+ entries = Dir["#{@temp_dir}/backtrace-*.log"]
31
+ entries.should be_empty
32
+ end
33
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: safely
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.0
5
+ version: 0.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kenneth Kalmer
@@ -120,6 +120,7 @@ files:
120
120
  - Rakefile
121
121
  - VERSION
122
122
  - lib/safely.rb
123
+ - lib/safely/backtrace.rb
123
124
  - lib/safely/config.rb
124
125
  - lib/safely/mixin.rb
125
126
  - lib/safely/strategy.rb
@@ -127,6 +128,9 @@ files:
127
128
  - lib/safely/strategy/log.rb
128
129
  - lib/safely/strategy/mail.rb
129
130
  - safely.gemspec
131
+ - spec/backtrace/safe.rb
132
+ - spec/backtrace/unsafe.rb
133
+ - spec/backtrace_spec.rb
130
134
  - spec/config_spec.rb
131
135
  - spec/safely_spec.rb
132
136
  - spec/spec_helper.rb
@@ -147,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
151
  requirements:
148
152
  - - ">="
149
153
  - !ruby/object:Gem::Version
150
- hash: -2463736658289113276
154
+ hash: -1107195766842142569
151
155
  segments:
152
156
  - 0
153
157
  version: "0"
@@ -165,6 +169,9 @@ signing_key:
165
169
  specification_version: 3
166
170
  summary: Safely run your code, keep track of exceptions
167
171
  test_files:
172
+ - spec/backtrace/safe.rb
173
+ - spec/backtrace/unsafe.rb
174
+ - spec/backtrace_spec.rb
168
175
  - spec/config_spec.rb
169
176
  - spec/safely_spec.rb
170
177
  - spec/spec_helper.rb