chillout 0.2.3 → 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/lib/chillout/client.rb +1 -4
- data/lib/chillout/dispatcher.rb +0 -11
- data/lib/chillout/event_data_builder.rb +0 -32
- data/lib/chillout/railtie.rb +1 -2
- data/lib/chillout/server_side.rb +0 -9
- data/lib/chillout/version.rb +1 -1
- data/lib/chillout.rb +0 -3
- data/test/dispatcher_test.rb +0 -45
- data/test/event_data_builder_test.rb +0 -101
- data/test/server_side_test.rb +0 -12
- metadata +4 -13
- data/lib/chillout/error.rb +0 -60
- data/lib/chillout/error_filter.rb +0 -9
- data/lib/chillout/middleware/exception_monitor.rb +0 -25
- data/test/error_test.rb +0 -115
- data/test/integration/exception_monitor_rack_test.rb +0 -51
- data/test/middleware/exception_monitor_test.rb +0 -54
data/lib/chillout/client.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
require 'chillout/server_side'
|
3
3
|
require 'chillout/http_client'
|
4
|
-
require 'chillout/error_filter'
|
5
4
|
require 'chillout/dispatcher'
|
6
5
|
require 'chillout/config'
|
7
|
-
require 'chillout/error'
|
8
6
|
require 'chillout/event_data_builder'
|
9
7
|
require 'chillout/prefixed_logger'
|
10
8
|
require 'chillout/worker'
|
@@ -14,7 +12,7 @@ module Chillout
|
|
14
12
|
class Client
|
15
13
|
extend Forwardable
|
16
14
|
|
17
|
-
def_delegators :@dispatcher, :
|
15
|
+
def_delegators :@dispatcher, :send_creations
|
18
16
|
|
19
17
|
attr_reader :config
|
20
18
|
attr_reader :logger
|
@@ -30,7 +28,6 @@ module Chillout
|
|
30
28
|
@http_client = HttpClient.new(@config, logger).freeze
|
31
29
|
@event_data_builder = EventDataBuilder.new(@config).freeze
|
32
30
|
@server_side = ServerSide.new(@event_data_builder, @http_client).freeze
|
33
|
-
@filter = ErrorFilter.new
|
34
31
|
@dispatcher = Dispatcher.new(@filter, @server_side).freeze
|
35
32
|
@queue = Queue.new
|
36
33
|
end
|
data/lib/chillout/dispatcher.rb
CHANGED
@@ -8,17 +8,6 @@ module Chillout
|
|
8
8
|
@server_side = server_side
|
9
9
|
end
|
10
10
|
|
11
|
-
def dispatch_error(error)
|
12
|
-
if @filter.deliver_error?(error)
|
13
|
-
send_error(error)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def send_error(error)
|
18
|
-
@server_side.send_error(error)
|
19
|
-
rescue HttpClient::NotSent
|
20
|
-
end
|
21
|
-
|
22
11
|
def send_creations(creations)
|
23
12
|
@server_side.send_creations(creations)
|
24
13
|
rescue HttpClient::NotSent
|
@@ -4,32 +4,6 @@ module Chillout
|
|
4
4
|
@config = config
|
5
5
|
end
|
6
6
|
|
7
|
-
def build_from_error(error, timestamp)
|
8
|
-
{
|
9
|
-
event: "exception",
|
10
|
-
timestamp: timestamp,
|
11
|
-
content: {
|
12
|
-
class: error.exception_class,
|
13
|
-
message: error.message,
|
14
|
-
backtrace: error.backtrace,
|
15
|
-
file: error.file,
|
16
|
-
environment: @config.environment,
|
17
|
-
context: {
|
18
|
-
platform: @config.platform,
|
19
|
-
controller: error.controller_name,
|
20
|
-
action: error.controller_action,
|
21
|
-
current_user: {
|
22
|
-
id: error.current_user_id,
|
23
|
-
email: error.current_user_email,
|
24
|
-
full_name: error.current_user_full_name
|
25
|
-
}
|
26
|
-
},
|
27
|
-
rack_environment: build_rack_environment(error)
|
28
|
-
},
|
29
|
-
notifier: build_notifier
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
7
|
def build_from_creations_container(creations_container, timestamp)
|
34
8
|
{
|
35
9
|
metric: "creations",
|
@@ -56,11 +30,5 @@ module Chillout
|
|
56
30
|
url: @config.notifier_url
|
57
31
|
}
|
58
32
|
end
|
59
|
-
|
60
|
-
def build_rack_environment(error)
|
61
|
-
Hash[error.environment.collect do |key, value|
|
62
|
-
[key, value.to_s]
|
63
|
-
end]
|
64
|
-
end
|
65
33
|
end
|
66
34
|
end
|
data/lib/chillout/railtie.rb
CHANGED
@@ -3,7 +3,7 @@ require 'chillout/creation_listener'
|
|
3
3
|
module Chillout
|
4
4
|
class Railtie < Rails::Railtie
|
5
5
|
config.chillout = ActiveSupport::OrderedOptions.new
|
6
|
-
initializer "chillout.
|
6
|
+
initializer "chillout.creations_listener_initialization" do |app|
|
7
7
|
if !app.config.chillout.empty?
|
8
8
|
existing_option_keys = [:port, :hostname, :ssl].select{|key| app.config.chillout.has_key?(key)}
|
9
9
|
options_list = existing_option_keys.map{|key| [key, app.config.chillout[key]]}
|
@@ -13,7 +13,6 @@ module Chillout
|
|
13
13
|
|
14
14
|
ActiveRecord::Base.extend(CreationListener)
|
15
15
|
|
16
|
-
app.middleware.use Middleware::ExceptionMonitor, client
|
17
16
|
app.middleware.use Middleware::CreationsMonitor, client
|
18
17
|
|
19
18
|
client.start_worker
|
data/lib/chillout/server_side.rb
CHANGED
@@ -9,15 +9,6 @@ module Chillout
|
|
9
9
|
@event_data_builder = event_data_builder
|
10
10
|
end
|
11
11
|
|
12
|
-
def send_error(error)
|
13
|
-
event_data = @event_data_builder.build_from_error(error, timestamp)
|
14
|
-
send_event(event_data)
|
15
|
-
end
|
16
|
-
|
17
|
-
def send_event(data)
|
18
|
-
@http_client.post('/events', data)
|
19
|
-
end
|
20
|
-
|
21
12
|
def send_creations(creations_container)
|
22
13
|
event_data = @event_data_builder.build_from_creations_container(creations_container, timestamp)
|
23
14
|
send_metric(event_data)
|
data/lib/chillout/version.rb
CHANGED
data/lib/chillout.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
require "chillout/version"
|
2
2
|
require "chillout/config"
|
3
|
-
require "chillout/middleware/exception_monitor"
|
4
3
|
require "chillout/middleware/creations_monitor"
|
5
|
-
require "chillout/error"
|
6
4
|
require "chillout/dispatcher"
|
7
|
-
require "chillout/error_filter"
|
8
5
|
require "chillout/server_side"
|
9
6
|
require "chillout/http_client"
|
10
7
|
require "chillout/client"
|
data/test/dispatcher_test.rb
CHANGED
@@ -1,51 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class DispatcherTest < ChilloutTestCase
|
4
|
-
|
5
|
-
def test_error_dispatch
|
6
|
-
exception = build_exception(NameError)
|
7
|
-
env = {
|
8
|
-
"HTTP_USER_AGENT" => "Mozzila/4.0",
|
9
|
-
"rack.session" => {}
|
10
|
-
}
|
11
|
-
error = Chillout::Error.new(exception, env)
|
12
|
-
|
13
|
-
filter = mock("Filter")
|
14
|
-
filter.expects(:deliver_error?).with(error).returns(true)
|
15
|
-
|
16
|
-
server_side = mock("ServerSide")
|
17
|
-
server_side.expects(:send_error).with(error)
|
18
|
-
|
19
|
-
dispatcher = Chillout::Dispatcher.new(filter, server_side)
|
20
|
-
dispatcher.dispatch_error(error)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_ignored_error_dispatch
|
24
|
-
exception = build_exception(NameError)
|
25
|
-
env = {
|
26
|
-
"HTTP_USER_AGENT" => "Mozzila/4.0",
|
27
|
-
"rack.session" => {}
|
28
|
-
}
|
29
|
-
error = Chillout::Error.new(exception, env)
|
30
|
-
|
31
|
-
filter = mock("Filter")
|
32
|
-
filter.expects(:deliver_error?).with(error).returns(false)
|
33
|
-
|
34
|
-
server_side = mock("ServerSide")
|
35
|
-
|
36
|
-
dispatcher = Chillout::Dispatcher.new(filter, server_side)
|
37
|
-
dispatcher.dispatch_error(error)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_send_error_ignore_not_sent_exception
|
41
|
-
server_side = stub()
|
42
|
-
server_side.stubs(:send_error).raises(Chillout::HttpClient::NotSent.new(:http_error))
|
43
|
-
|
44
|
-
dispatcher = Chillout::Dispatcher.new(mock, server_side)
|
45
|
-
|
46
|
-
assert_nil dispatcher.send_error(:error)
|
47
|
-
end
|
48
|
-
|
49
4
|
def test_send_creations
|
50
5
|
filter = mock("Filter")
|
51
6
|
|
@@ -18,99 +18,6 @@ module Chillout
|
|
18
18
|
@timestamp = Time.now.iso8601
|
19
19
|
end
|
20
20
|
|
21
|
-
context "build from error" do
|
22
|
-
setup do
|
23
|
-
@event_data_builder = EventDataBuilder.new(@config)
|
24
|
-
|
25
|
-
@controller = mock("Controller")
|
26
|
-
@controller.stubs(:controller_name).returns("UsersController")
|
27
|
-
@controller.stubs(:action_name).returns("index")
|
28
|
-
|
29
|
-
@current_user = mock("User")
|
30
|
-
@current_user.stubs(:id).returns(123)
|
31
|
-
@current_user.stubs(:email).returns("john@example.com")
|
32
|
-
@current_user.stubs(:full_name).returns("john doe")
|
33
|
-
|
34
|
-
@exception = build_exception(NameError, "FooBar does not exists")
|
35
|
-
@env = {
|
36
|
-
'HTTP_USER_AGENT' => 'Mozilla/4.0',
|
37
|
-
'action_controller.instance' => @controller,
|
38
|
-
'current_user' => @current_user
|
39
|
-
}
|
40
|
-
@error = Chillout::Error.new(@exception, @env)
|
41
|
-
@event_data = @event_data_builder.build_from_error(@error, @timestamp)
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_event_type
|
45
|
-
assert_param :event, 'exception'
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_timestamp
|
49
|
-
assert_param :timestamp, @timestamp
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_exception_class
|
53
|
-
assert_content :class, 'NameError'
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_exception_message
|
57
|
-
assert_content :message, 'FooBar does not exists'
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_backtrace
|
61
|
-
assert_content :backtrace, @exception.backtrace
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_file
|
65
|
-
assert_content :file, @error.file
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_environment
|
69
|
-
assert_content :environment, "development"
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_platform
|
73
|
-
assert_context :platform, "rails"
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_controller
|
77
|
-
assert_context :controller, "UsersController"
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_action
|
81
|
-
assert_context :controller, "UsersController"
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_current_user_id
|
85
|
-
assert_current_user :id, 123
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_current_user_email
|
89
|
-
assert_current_user :email, "john@example.com"
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_current_user_full_name
|
93
|
-
assert_current_user :full_name, "john doe"
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_rack_environment
|
97
|
-
expected_value = Hash[@env.collect { |k,v| [k, v.to_s] }]
|
98
|
-
assert_content :rack_environment, expected_value
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_notifier_name
|
102
|
-
assert_notifier :name, "chillout"
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_notifier_version
|
106
|
-
assert_notifier :version, "0.1"
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_notifier_url
|
110
|
-
assert_notifier :url, "http://github.com/arkency/chillout"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
21
|
context "build from creations container" do
|
115
22
|
setup do
|
116
23
|
@creations_container = CreationsContainer.new
|
@@ -166,18 +73,10 @@ module Chillout
|
|
166
73
|
assert_equal value, event_data[:content][key]
|
167
74
|
end
|
168
75
|
|
169
|
-
def assert_context(key, value)
|
170
|
-
assert_equal value, event_data[:content][:context][key]
|
171
|
-
end
|
172
|
-
|
173
76
|
def assert_creations(key, value)
|
174
77
|
assert_equal value, event_data[:content][:creations][key]
|
175
78
|
end
|
176
79
|
|
177
|
-
def assert_current_user(key, value)
|
178
|
-
assert_equal value, event_data[:content][:context][:current_user][key]
|
179
|
-
end
|
180
|
-
|
181
80
|
def assert_notifier(key, value)
|
182
81
|
assert_equal value, event_data[:notifier][key]
|
183
82
|
end
|
data/test/server_side_test.rb
CHANGED
@@ -9,18 +9,6 @@ class ServerSideTest < ChilloutTestCase
|
|
9
9
|
@server_side = Chillout::ServerSide.new(@event_data_builder, @http_client)
|
10
10
|
end
|
11
11
|
|
12
|
-
def test_send_error_use_event_data_builder
|
13
|
-
@event_data_builder.expects(:build_from_error).with(:error, anything).returns(:event_data_from_builder)
|
14
|
-
@http_client.stubs(:post)
|
15
|
-
@server_side.send_error(:error)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_send_error_use_http_client
|
19
|
-
@event_data_builder.stubs(:build_from_error).returns(:event_data_from_builder)
|
20
|
-
@http_client.expects(:post).with('/events', :event_data_from_builder)
|
21
|
-
@server_side.send_error(:error)
|
22
|
-
end
|
23
|
-
|
24
12
|
def test_send_creations_use_event_data_builder
|
25
13
|
@event_data_builder.expects(:build_from_creations_container).with(:creations_container, anything).returns(:event_data_from_builder)
|
26
14
|
@http_client.stubs(:post)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chillout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-03-
|
13
|
+
date: 2013-03-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: minitest
|
@@ -129,12 +129,9 @@ files:
|
|
129
129
|
- lib/chillout/creation_listener.rb
|
130
130
|
- lib/chillout/creations_container.rb
|
131
131
|
- lib/chillout/dispatcher.rb
|
132
|
-
- lib/chillout/error.rb
|
133
|
-
- lib/chillout/error_filter.rb
|
134
132
|
- lib/chillout/event_data_builder.rb
|
135
133
|
- lib/chillout/http_client.rb
|
136
134
|
- lib/chillout/middleware/creations_monitor.rb
|
137
|
-
- lib/chillout/middleware/exception_monitor.rb
|
138
135
|
- lib/chillout/prefixed_logger.rb
|
139
136
|
- lib/chillout/railtie.rb
|
140
137
|
- lib/chillout/server_side.rb
|
@@ -144,13 +141,10 @@ files:
|
|
144
141
|
- test/config_test.rb
|
145
142
|
- test/creations_container_test.rb
|
146
143
|
- test/dispatcher_test.rb
|
147
|
-
- test/error_test.rb
|
148
144
|
- test/event_data_builder_test.rb
|
149
145
|
- test/http_client_test.rb
|
150
146
|
- test/integration/creations_monitor_rack_test.rb
|
151
|
-
- test/integration/exception_monitor_rack_test.rb
|
152
147
|
- test/middleware/creations_monitor_test.rb
|
153
|
-
- test/middleware/exception_monitor_test.rb
|
154
148
|
- test/prefixed_logger_test.rb
|
155
149
|
- test/server_side_test.rb
|
156
150
|
- test/test_helper.rb
|
@@ -169,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
163
|
version: '0'
|
170
164
|
segments:
|
171
165
|
- 0
|
172
|
-
hash:
|
166
|
+
hash: 4186506627613896564
|
173
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
168
|
none: false
|
175
169
|
requirements:
|
@@ -178,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
172
|
version: '0'
|
179
173
|
segments:
|
180
174
|
- 0
|
181
|
-
hash:
|
175
|
+
hash: 4186506627613896564
|
182
176
|
requirements: []
|
183
177
|
rubyforge_project:
|
184
178
|
rubygems_version: 1.8.25
|
@@ -190,13 +184,10 @@ test_files:
|
|
190
184
|
- test/config_test.rb
|
191
185
|
- test/creations_container_test.rb
|
192
186
|
- test/dispatcher_test.rb
|
193
|
-
- test/error_test.rb
|
194
187
|
- test/event_data_builder_test.rb
|
195
188
|
- test/http_client_test.rb
|
196
189
|
- test/integration/creations_monitor_rack_test.rb
|
197
|
-
- test/integration/exception_monitor_rack_test.rb
|
198
190
|
- test/middleware/creations_monitor_test.rb
|
199
|
-
- test/middleware/exception_monitor_test.rb
|
200
191
|
- test/prefixed_logger_test.rb
|
201
192
|
- test/server_side_test.rb
|
202
193
|
- test/test_helper.rb
|
data/lib/chillout/error.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
|
3
|
-
module Chillout
|
4
|
-
class Error
|
5
|
-
|
6
|
-
attr_reader :exception
|
7
|
-
attr_reader :environment
|
8
|
-
|
9
|
-
def initialize(exception, environment = {})
|
10
|
-
@exception = exception
|
11
|
-
@environment = environment
|
12
|
-
@nullObject = OpenStruct.new
|
13
|
-
end
|
14
|
-
|
15
|
-
def exception_class
|
16
|
-
exception.class.name
|
17
|
-
end
|
18
|
-
|
19
|
-
def message
|
20
|
-
exception.message
|
21
|
-
end
|
22
|
-
|
23
|
-
def backtrace
|
24
|
-
exception.backtrace
|
25
|
-
end
|
26
|
-
|
27
|
-
def file
|
28
|
-
backtrace.first.split(":").first rescue nil
|
29
|
-
end
|
30
|
-
|
31
|
-
def controller
|
32
|
-
environment['action_controller.instance'] || @nullObject
|
33
|
-
end
|
34
|
-
|
35
|
-
def controller_name
|
36
|
-
controller.controller_name
|
37
|
-
end
|
38
|
-
|
39
|
-
def controller_action
|
40
|
-
controller.action_name
|
41
|
-
end
|
42
|
-
|
43
|
-
def current_user
|
44
|
-
environment['current_user'] || @nullObject
|
45
|
-
end
|
46
|
-
|
47
|
-
def current_user_id
|
48
|
-
current_user.id if current_user.respond_to?(:id)
|
49
|
-
end
|
50
|
-
|
51
|
-
def current_user_email
|
52
|
-
current_user.email if current_user.respond_to?(:email)
|
53
|
-
end
|
54
|
-
|
55
|
-
def current_user_full_name
|
56
|
-
current_user.full_name if current_user.respond_to?(:full_name)
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Chillout
|
2
|
-
module Middleware
|
3
|
-
class ExceptionMonitor
|
4
|
-
def initialize(app, client)
|
5
|
-
@app = app
|
6
|
-
@client = client
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
begin
|
11
|
-
response = @app.call(env)
|
12
|
-
rescue Exception => exception
|
13
|
-
@client.dispatch_error(Chillout::Error.new(exception, env))
|
14
|
-
raise exception
|
15
|
-
end
|
16
|
-
|
17
|
-
if env['rack.exception']
|
18
|
-
@client.dispatch_error(Chillout::Error.new(env['rack.exception'], env))
|
19
|
-
end
|
20
|
-
|
21
|
-
response
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/test/error_test.rb
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ErrorTest < ChilloutTestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@exception = build_exception(ArgumentError)
|
7
|
-
@env = { 'charset' => 'utf-8' }
|
8
|
-
@error = Chillout::Error.new(@exception, @env)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_exception_class
|
12
|
-
assert_equal "ArgumentError", @error.exception_class
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_backtrace
|
16
|
-
assert_kind_of Array, @error.backtrace
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_file
|
20
|
-
file = File.expand_path('../test_helper.rb', __FILE__)
|
21
|
-
assert_equal file, @error.file
|
22
|
-
end
|
23
|
-
|
24
|
-
context "controller is not given" do
|
25
|
-
|
26
|
-
def test_controller_name
|
27
|
-
assert_nil @error.controller_name
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_controller_action
|
31
|
-
assert_nil @error.controller_action
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
context "controller is given" do
|
37
|
-
|
38
|
-
setup do
|
39
|
-
@controller = mock("controller")
|
40
|
-
@env['action_controller.instance'] = @controller
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_controller_action_when_controller_is_set
|
44
|
-
@controller.expects(:action_name).returns("index")
|
45
|
-
assert_equal "index", @error.controller_action
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_controller_name_when_controller_is_set
|
49
|
-
@controller.expects(:controller_name).returns("ApplicationController")
|
50
|
-
assert_equal "ApplicationController", @error.controller_name
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
context "current user is not given" do
|
56
|
-
|
57
|
-
def test_current_user_id
|
58
|
-
assert_nil @error.current_user_id
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_current_user_email
|
62
|
-
assert_nil @error.current_user_email
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_current_user_full_name
|
66
|
-
assert_nil @error.current_user_full_name
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
context "current user is given" do
|
72
|
-
|
73
|
-
setup do
|
74
|
-
@user = mock("user")
|
75
|
-
@env['current_user'] = @user
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_current_user_id
|
79
|
-
@user.expects(:id).returns(123)
|
80
|
-
assert_equal 123, @error.current_user_id
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_current_user_email
|
84
|
-
@user.expects(:email).returns("john@example.net")
|
85
|
-
assert_equal "john@example.net", @error.current_user_email
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_current_user_full_name
|
89
|
-
@user.expects(:full_name).returns("john doe")
|
90
|
-
assert_equal "john doe", @error.current_user_full_name
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
context "current user is given but does not respond to expected methods" do
|
95
|
-
|
96
|
-
setup do
|
97
|
-
@user = mock("user")
|
98
|
-
@env['current_user'] = @user
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_current_user_id
|
102
|
-
assert_nil @error.current_user_id
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_current_user_email
|
106
|
-
assert_nil @error.current_user_email
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_current_user_full_name
|
110
|
-
assert_nil @error.current_user_full_name
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ExceptionMonitorRackTest < ChilloutTestCase
|
4
|
-
include Rack::Test::Methods
|
5
|
-
|
6
|
-
def setup
|
7
|
-
api_key = "xyz123"
|
8
|
-
stub_api_request(api_key, "events")
|
9
|
-
@config = Chillout::Config.new(api_key)
|
10
|
-
@config.ssl = false
|
11
|
-
@client = Chillout::Client.new(@config)
|
12
|
-
end
|
13
|
-
|
14
|
-
def app
|
15
|
-
client = @client # Only local variable can be passed to the block below
|
16
|
-
Rack::Builder.new do
|
17
|
-
use Chillout::Middleware::ExceptionMonitor, client
|
18
|
-
run(lambda { |env| raise ChilloutTestException.new("Something went wrong") })
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_exception_class
|
23
|
-
trigger_error
|
24
|
-
assert_equal "ChilloutTestException", request_body["content"]["class"]
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_exception_message
|
28
|
-
trigger_error
|
29
|
-
assert_equal "Something went wrong", request_body["content"]["message"]
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_rack_environment
|
33
|
-
trigger_error
|
34
|
-
assert_request_body "events" do |body|
|
35
|
-
assert_equal last_request.env.keys, body["content"]["rack_environment"].keys
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
def trigger_error
|
41
|
-
begin
|
42
|
-
get "/"
|
43
|
-
rescue ChilloutTestException
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def request_body
|
48
|
-
assert_request_body("events"){ |body| return body }
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Chillout
|
4
|
-
module Middleware
|
5
|
-
class ExceptionMonitorTest < ChilloutTestCase
|
6
|
-
|
7
|
-
class DummyError < StandardError; end
|
8
|
-
|
9
|
-
def test_behaves_like_rack_middleware
|
10
|
-
env = { 'HOST' => 'example.net' }
|
11
|
-
app = lambda { |env| [200, env, ['hello']] }
|
12
|
-
middleware = ExceptionMonitor.new(app, mock)
|
13
|
-
|
14
|
-
response = middleware.call(env)
|
15
|
-
|
16
|
-
assert_equal [200, env, ['hello']], response
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_exception_is_raised
|
20
|
-
exception = build_exception(DummyError)
|
21
|
-
env = { 'HOST' => 'example.net' }
|
22
|
-
app = lambda do |env|
|
23
|
-
raise exception
|
24
|
-
end
|
25
|
-
dispatcher = mock("Dispatcher")
|
26
|
-
dispatcher.expects(:dispatch_error).with do |error|
|
27
|
-
error.exception == exception && error.environment == env
|
28
|
-
end
|
29
|
-
|
30
|
-
middleware = ExceptionMonitor.new(app, dispatcher)
|
31
|
-
assert_raises DummyError do
|
32
|
-
middleware.call(env)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_exception_is_found_in_rack_environment
|
37
|
-
exception = build_exception(DummyError)
|
38
|
-
env = { 'HOST' => 'example.net' }
|
39
|
-
app = lambda do |env|
|
40
|
-
env['rack.exception'] = exception
|
41
|
-
[200, env, ['hello']]
|
42
|
-
end
|
43
|
-
dispatcher = mock("Dispatcher")
|
44
|
-
dispatcher.expects(:dispatch_error).with do |error|
|
45
|
-
error.exception == exception && error.environment == env
|
46
|
-
end
|
47
|
-
|
48
|
-
middleware = ExceptionMonitor.new(app, dispatcher)
|
49
|
-
middleware.call(env)
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|