contrast-exceptional 0.0.1 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +1,13 @@
1
1
  require 'rubygems'
2
+
3
+ if ENV['RAILS_VER']
4
+ gem 'rails', "=#{ENV['RAILS_VER']}"
5
+ else
6
+ gem 'rails'
7
+ end
8
+
9
+ # TODO couple of different ways to test parts of exceptional with Rails (or a mock), reconcile them.
10
+ #require 'active_support'
11
+ # module Rails; end # Rails faker
12
+
2
13
  require File.dirname(__FILE__) + '/../lib/exceptional'
metadata CHANGED
@@ -1,57 +1,79 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contrast-exceptional
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
- - David Rice
8
- - Paul Campbell
7
+ - Contrast
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
11
 
13
- date: 2008-10-13 00:00:00 -07:00
12
+ date: 2009-07-09 00:00:00 -07:00
14
13
  default_executable:
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: json
17
+ type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - ">"
21
+ - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.0.0
23
+ version: "0"
24
24
  version:
25
25
  description: Exceptional is the core Ruby library for communicating with http://getexceptional.com (hosted error tracking service)
26
- email: david@getexceptional.com
26
+ email: hello@contrast.ie
27
27
  executables: []
28
28
 
29
29
  extensions: []
30
30
 
31
31
  extra_rdoc_files:
32
- - History.txt
33
- - Manifest
32
+ - lib/exceptional/api.rb
33
+ - lib/exceptional/bootstrap.rb
34
+ - lib/exceptional/config.rb
35
+ - lib/exceptional/exception_data.rb
36
+ - lib/exceptional/integration/rails.rb
37
+ - lib/exceptional/log.rb
38
+ - lib/exceptional/remote.rb
39
+ - lib/exceptional/version.rb
40
+ - lib/exceptional.rb
34
41
  - README
35
42
  files:
36
- - History.txt
37
- - Manifest
38
- - README
39
- - Rakefile
40
43
  - exceptional.gemspec
41
44
  - exceptional.yml
45
+ - History.txt
42
46
  - init.rb
43
47
  - install.rb
44
- - lib/exceptional/agent/worker.rb
45
- - lib/exceptional/deployed_environment.rb
48
+ - lib/exceptional/api.rb
49
+ - lib/exceptional/bootstrap.rb
50
+ - lib/exceptional/config.rb
46
51
  - lib/exceptional/exception_data.rb
47
52
  - lib/exceptional/integration/rails.rb
48
- - lib/exceptional/rails.rb
53
+ - lib/exceptional/log.rb
54
+ - lib/exceptional/remote.rb
49
55
  - lib/exceptional/version.rb
50
56
  - lib/exceptional.rb
57
+ - Manifest
58
+ - Rakefile
59
+ - README
60
+ - spec/api_spec.rb
61
+ - spec/bootstrap_spec.rb
62
+ - spec/config_spec.rb
63
+ - spec/exception_data_spec.rb
64
+ - spec/exceptional_rescue_from_spec.rb
65
+ - spec/exceptional_spec.rb
66
+ - spec/log_spec.rb
67
+ - spec/remote_spec.rb
68
+ - spec/spec_helper.rb
51
69
  has_rdoc: true
52
- homepage: http://github.com/contrast/exceptional
70
+ homepage: http://getexceptional.com/
53
71
  post_install_message:
54
72
  rdoc_options:
73
+ - --line-numbers
74
+ - --inline-source
75
+ - --title
76
+ - Exceptional
55
77
  - --main
56
78
  - README
57
79
  require_paths:
@@ -66,18 +88,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
88
  requirements:
67
89
  - - ">="
68
90
  - !ruby/object:Gem::Version
69
- version: "0"
91
+ version: "1.2"
70
92
  version:
71
93
  requirements: []
72
94
 
73
- rubyforge_project:
95
+ rubyforge_project: exceptional
74
96
  rubygems_version: 1.2.0
75
97
  signing_key:
76
98
  specification_version: 2
77
99
  summary: Exceptional is the core Ruby library for communicating with http://getexceptional.com (hosted error tracking service)
78
- test_files:
79
- - spec/deployed_environment_spec.rb
80
- - spec/exception_data_spec.rb
81
- - spec/exceptional_spec.rb
82
- - spec/spec_helper.rb
83
- - spec/worker_spec.rb
100
+ test_files: []
101
+
@@ -1,56 +0,0 @@
1
- # The Worker is used by Exceptional when started in :queue mode
2
- # It queues and sends exception data asynchronously.
3
-
4
- module Exceptional::Agent
5
-
6
- class Worker
7
-
8
- attr_reader :log, :timeout, :exceptions
9
-
10
- def initialize(log = Logger.new(STDERR))
11
- @exceptions = []
12
- @timeout = ::WORKER_TIMEOUT
13
- @mutex = Mutex.new
14
- @log = log
15
- @log.info "Started Exceptional Worker."
16
- end
17
-
18
- def add_exception(data)
19
- @mutex.synchronize do
20
- @exceptions << data
21
- end
22
- end
23
-
24
- def run
25
- while(true) do
26
- send_any_exception_data
27
- end
28
- end
29
-
30
- private
31
-
32
- def exception_to_send
33
- @mutex.synchronize do
34
- return @exceptions.shift
35
- end
36
- end
37
-
38
-
39
- def send_any_exception_data
40
- if @exceptions.empty?
41
- sleep @timeout
42
- return
43
- end
44
-
45
- data = exception_to_send
46
-
47
- begin
48
- Exceptional.post(data)
49
- rescue Exception => e
50
- @log.error "Error sending exception data: #{e}"
51
- @log.debug e.backtrace.join("\n")
52
- end
53
- end
54
-
55
- end
56
- end
@@ -1,86 +0,0 @@
1
- # This class is used to determine the server environment
2
- module Exceptional
3
- class DeployedEnvironment
4
-
5
- attr_reader :server, :identifier, :hostname#, :environment
6
-
7
- def initialize
8
- @server = :unknown
9
- @identifier = nil
10
-
11
- @hostname = determine_host
12
- # @environment = Exceptional.environment
13
- # @application_root = Exceptional.application_root
14
-
15
- servers = %w[webrick mongrel thin litespeed passenger]
16
- while servers.any? && @identifier.nil?
17
- send 'is_'+(servers.shift)+'?'
18
- end
19
-
20
- end
21
-
22
- def should_start_worker?
23
- !identifier.nil?
24
- end
25
-
26
- def determine_mode
27
- @server == :passenger ? :direct : :queue
28
- end
29
-
30
- def to_s
31
- "#{@hostname}:#{@identifier} [#{@server}]"
32
- end
33
-
34
- def determine_host
35
- Socket.gethostname
36
- end
37
-
38
- def is_webrick?
39
- if defined?(OPTIONS) && defined?(DEFAULT_PORT) && OPTIONS.respond_to?(:fetch)
40
- # OPTIONS is set by script/server if launching webrick
41
- @identifier = OPTIONS.fetch :port, DEFAULT_PORT
42
- @server = :webrick
43
- end
44
- end
45
-
46
- def is_mongrel?
47
- if defined? Mongrel::HttpServer
48
- ObjectSpace.each_object(Mongrel::HttpServer) do |mongrel|
49
- next unless mongrel.respond_to? :port
50
- @server = :mongrel
51
- @identifier = mongrel.port
52
- end
53
- end
54
- end
55
-
56
- def is_thin?
57
- if defined? Thin::Server
58
- ObjectSpace.each_object(Thin::Server) do |thin_server|
59
- @server = :thin
60
- backend = thin_server.backend
61
- if backend.respond_to? :port
62
- @identifier = backend.port
63
- elsif backend.respond_to? :socket
64
- @identifier = backend.socket
65
- end
66
- end
67
- end
68
- end
69
-
70
- def is_litespeed?
71
- if caller.pop =~ /fcgi-bin\/RailsRunner\.rb/
72
- @server = :litespeed
73
- @identifier = 'litespeed'
74
- end
75
- end
76
-
77
- def is_passenger?
78
- if defined? Passenger::AbstractServer
79
- @server = :passenger
80
- @identifier = 'passenger'
81
- end
82
- end
83
-
84
- end
85
- end
86
-
@@ -1,53 +0,0 @@
1
- module Exceptional
2
-
3
- class Rails
4
-
5
- def self.init
6
- Exceptional.deployed_environment = DeployedEnvironment.new
7
- # If no server environment detected, don't perform magic.
8
- # Means rake, script/console etc perform as expected
9
- return false unless Exceptional.deployed_environment.should_start_worker?
10
-
11
- setup_log
12
- Exceptional.log_config_info
13
-
14
- if Exceptional.authenticate
15
-
16
- if Exceptional.mode == :queue
17
- Exceptional.worker = Agent::Worker.new(Exceptional.log)
18
- Exceptional.worker_thread = Thread.new do
19
- Exceptional.worker.run
20
- end
21
- end
22
-
23
- require File.join(File.dirname(__FILE__), 'integration', 'rails')
24
-
25
-
26
- at_exit do
27
- if Exceptional.mode == :queue
28
- Exceptional.worker_thread.terminate if Exceptional.worker_thread
29
- end
30
- end
31
- else
32
- Exceptional.log! "Plugin not authenticated, check your API Key"
33
- Exceptional.log! "Disabling Plugin."
34
- end
35
- end
36
-
37
- def self.setup_log
38
- log_file = "#{Exceptional.application_root}/log/exceptional.log"
39
-
40
- @log = Logger.new log_file
41
- @log.level = Logger::INFO
42
-
43
- allowed_log_levels = ['debug', 'info', 'warn', 'error', 'fatal']
44
- if Exceptional.log_level && allowed_log_levels.include?(Exceptional.log_level)
45
- @log.level = eval("Logger::#{Exceptional.log_level.upcase}")
46
- end
47
-
48
- Exceptional.log = @log
49
- end
50
-
51
- end
52
-
53
- end
@@ -1,168 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe Exceptional::DeployedEnvironment do
4
-
5
- describe "mongrel" do
6
-
7
- before(:all) do
8
- class << self
9
- module ::Mongrel
10
- class HttpServer
11
- def port; 3000; end
12
- end
13
- end
14
- end
15
-
16
- Mongrel::HttpServer.new
17
- @deployed_environment = Exceptional::DeployedEnvironment.new
18
- end
19
-
20
- it "server should be mongrel" do
21
- @deployed_environment.server.should == :mongrel
22
- end
23
-
24
- it "identifier should be 3000" do
25
- @deployed_environment.identifier.should == 3000
26
- end
27
-
28
- it "to_s should match" do
29
- pending
30
- @deployed_environment.to_s.should match(/(:3000 \[:mongrel\])/)
31
- end
32
-
33
- it "mode should be queue" do
34
- @deployed_environment.determine_mode.should == :queue
35
- end
36
-
37
- after(:all) do
38
- ObjectSpace.garbage_collect
39
- end
40
-
41
- end
42
-
43
- describe "webrick" do
44
-
45
- before(:all) do
46
- class MockOptions
47
- def fetch(*args)
48
- 3001
49
- end
50
- end
51
-
52
- class << self
53
- ::OPTIONS = MockOptions.new
54
- ::DEFAULT_PORT = 3000
55
- end
56
- @deployed_environment = Exceptional::DeployedEnvironment.new
57
- end
58
-
59
- it "server should be webrick" do
60
- @deployed_environment.server.should == :webrick
61
- end
62
-
63
- it "identifier should be 3001" do
64
- @deployed_environment.identifier.should == 3001
65
- end
66
-
67
- it "mode should be queue" do
68
- @deployed_environment.determine_mode.should == :queue
69
- end
70
-
71
- after(:all) do
72
- ObjectSpace.garbage_collect
73
- Object.class_eval { remove_const :OPTIONS }
74
- Object.class_eval { remove_const :DEFAULT_PORT }
75
- end
76
-
77
- end
78
-
79
- describe "thin" do
80
-
81
- before(:all) do
82
- class << self
83
- module ::Thin
84
- class Server
85
- def backend; self; end
86
- def socket; "/socket/file.000"; end
87
- end
88
- end
89
- end
90
- Thin::Server.new
91
-
92
- @deployed_environment = Exceptional::DeployedEnvironment.new
93
- end
94
-
95
- it "server should be thin" do
96
- @deployed_environment.server.should == :thin
97
- end
98
-
99
- it "identifier should be the socket file" do
100
- @deployed_environment.identifier.should == '/socket/file.000'
101
- end
102
-
103
- it "mode should be queue" do
104
- @deployed_environment.determine_mode.should == :queue
105
- end
106
-
107
- after(:all) do
108
- ObjectSpace.garbage_collect
109
- end
110
-
111
- end
112
-
113
- describe "litespeed" do
114
-
115
- before(:all) do
116
- @deployed_environment = Exceptional::DeployedEnvironment.new
117
- end
118
-
119
- # Hmmph, how to determine if we're running under litespeed...
120
- it "server should be unknown" do
121
- @deployed_environment.server.should == :unknown
122
- end
123
-
124
- it "identifier should be nil" do
125
- @deployed_environment.identifier.should == nil
126
- end
127
-
128
- it "mode should be queue" do
129
- @deployed_environment.determine_mode.should == :queue
130
- end
131
-
132
- after(:all) do
133
- ObjectSpace.garbage_collect
134
- end
135
-
136
- end
137
-
138
- describe "passenger" do
139
-
140
- before(:all) do
141
- class << self
142
- module ::Passenger
143
- const_set "AbstractServer", 0
144
- end
145
- end
146
- @deployed_environment = Exceptional::DeployedEnvironment.new
147
- end
148
-
149
- it "server should be passenger" do
150
- @deployed_environment.server.should == :passenger
151
- end
152
-
153
- # Would be nicer to identify passenger by some
154
- it "identifier should be passenger" do
155
- @deployed_environment.identifier.should == 'passenger'
156
- end
157
-
158
- it "mode should be queue" do
159
- @deployed_environment.determine_mode.should == :direct
160
- end
161
-
162
- after(:all) do
163
- ObjectSpace.garbage_collect
164
- end
165
-
166
- end
167
-
168
- end