chillout 0.2.2 → 0.2.3
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 +4 -8
- data/lib/chillout/dispatcher.rb +3 -0
- data/lib/chillout/version.rb +1 -1
- data/lib/chillout/worker.rb +33 -15
- data/test/dispatcher_test.rb +4 -2
- data/test/worker_test.rb +40 -0
- metadata +6 -6
- data/test/integration/standalone_client_test.rb +0 -61
data/lib/chillout/client.rb
CHANGED
@@ -27,18 +27,14 @@ module Chillout
|
|
27
27
|
|
28
28
|
@logger = PrefixedLogger.new("Chillout", @config.logger)
|
29
29
|
|
30
|
-
@http_client = HttpClient.new(@config, logger)
|
31
|
-
@event_data_builder = EventDataBuilder.new(@config)
|
32
|
-
@server_side = ServerSide.new(@event_data_builder, @http_client)
|
30
|
+
@http_client = HttpClient.new(@config, logger).freeze
|
31
|
+
@event_data_builder = EventDataBuilder.new(@config).freeze
|
32
|
+
@server_side = ServerSide.new(@event_data_builder, @http_client).freeze
|
33
33
|
@filter = ErrorFilter.new
|
34
|
-
@dispatcher = Dispatcher.new(@filter, @server_side)
|
34
|
+
@dispatcher = Dispatcher.new(@filter, @server_side).freeze
|
35
35
|
@queue = Queue.new
|
36
36
|
end
|
37
37
|
|
38
|
-
def send_exception(exception, environment = {})
|
39
|
-
send_error(Error.new(exception, environment))
|
40
|
-
end
|
41
|
-
|
42
38
|
def enqueue(creations)
|
43
39
|
@queue << creations
|
44
40
|
end
|
data/lib/chillout/dispatcher.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Chillout
|
2
2
|
class Dispatcher
|
3
|
+
class SendCreationsFailed < StandardError
|
4
|
+
end
|
3
5
|
|
4
6
|
def initialize(filter, server_side)
|
5
7
|
@filter = filter
|
@@ -20,6 +22,7 @@ module Chillout
|
|
20
22
|
def send_creations(creations)
|
21
23
|
@server_side.send_creations(creations)
|
22
24
|
rescue HttpClient::NotSent
|
25
|
+
raise SendCreationsFailed.new
|
23
26
|
end
|
24
27
|
end
|
25
28
|
end
|
data/lib/chillout/version.rb
CHANGED
data/lib/chillout/worker.rb
CHANGED
@@ -2,28 +2,46 @@ module Chillout
|
|
2
2
|
class Worker
|
3
3
|
attr_reader :dispatcher, :queue, :logger
|
4
4
|
|
5
|
-
def initialize(dispatcher, queue, logger)
|
5
|
+
def initialize(dispatcher, queue, logger, container_class=CreationsContainer)
|
6
6
|
@dispatcher = dispatcher
|
7
7
|
@queue = queue
|
8
8
|
@logger = logger
|
9
|
+
@container_class = container_class
|
9
10
|
end
|
10
11
|
|
11
|
-
def
|
12
|
+
def get_all_containers_to_process
|
13
|
+
all_containers = [queue.pop]
|
12
14
|
loop do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
rescue ThreadError
|
18
|
-
break
|
19
|
-
end
|
20
|
-
end
|
21
|
-
creations_container = CreationsContainer.new
|
22
|
-
for container in containers_to_merge
|
23
|
-
creations_container.merge(container)
|
15
|
+
begin
|
16
|
+
all_containers << queue.pop(true)
|
17
|
+
rescue ThreadError
|
18
|
+
break
|
24
19
|
end
|
25
|
-
|
26
|
-
|
20
|
+
end
|
21
|
+
all_containers
|
22
|
+
end
|
23
|
+
|
24
|
+
def merge_containers(containers_to_merge)
|
25
|
+
creations_container = @container_class.new
|
26
|
+
for container in containers_to_merge
|
27
|
+
creations_container.merge(container)
|
28
|
+
end
|
29
|
+
creations_container
|
30
|
+
end
|
31
|
+
|
32
|
+
def send_creations(creations_container)
|
33
|
+
dispatcher.send_creations(creations_container)
|
34
|
+
logger.info "Sending metrics"
|
35
|
+
rescue Dispatcher::SendCreationsFailed
|
36
|
+
queue << creations_container
|
37
|
+
logger.error "Sending metrics failed"
|
38
|
+
end
|
39
|
+
|
40
|
+
def run
|
41
|
+
loop do
|
42
|
+
containers_to_merge = get_all_containers_to_process
|
43
|
+
creations_container = merge_containers(containers_to_merge)
|
44
|
+
send_creations(creations_container)
|
27
45
|
sleep 5
|
28
46
|
end
|
29
47
|
end
|
data/test/dispatcher_test.rb
CHANGED
@@ -56,13 +56,15 @@ class DispatcherTest < ChilloutTestCase
|
|
56
56
|
dispatcher.send_creations(:creations)
|
57
57
|
end
|
58
58
|
|
59
|
-
def
|
59
|
+
def test_send_creations_raise_exception_if_server_side_failed_to_send_request
|
60
60
|
server_side = stub()
|
61
61
|
server_side.stubs(:send_creations).raises(Chillout::HttpClient::NotSent.new(:http_error))
|
62
62
|
|
63
63
|
dispatcher = Chillout::Dispatcher.new(mock, server_side)
|
64
64
|
|
65
|
-
|
65
|
+
assert_raises Chillout::Dispatcher::SendCreationsFailed do
|
66
|
+
dispatcher.send_creations(:creations)
|
67
|
+
end
|
66
68
|
end
|
67
69
|
|
68
70
|
end
|
data/test/worker_test.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Chillout
|
4
|
+
class WorkerTest < ChilloutTestCase
|
5
|
+
def setup
|
6
|
+
@dispatcher = stub
|
7
|
+
@queue = stub
|
8
|
+
@container = stub
|
9
|
+
@logger = stub(info: "", error: "")
|
10
|
+
@container_class = stub(new: @container)
|
11
|
+
@worker = Worker.new(@dispatcher, @queue, @logger, @container_class)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_get_all_containers_to_process_pops_all_existings_jobs_from_queue
|
15
|
+
@queue.expects(:pop).times(3).returns(:container1, :container2).then.raises(ThreadError)
|
16
|
+
all_jobs = @worker.get_all_containers_to_process
|
17
|
+
assert_equal 2, all_jobs.count
|
18
|
+
assert_includes all_jobs, :container1
|
19
|
+
assert_includes all_jobs, :container2
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_merge_containers_to_one
|
23
|
+
@container.expects(:merge).with(:container1)
|
24
|
+
@container.expects(:merge).with(:container2)
|
25
|
+
result = @worker.merge_containers([:container1, :container2])
|
26
|
+
assert_equal @container, result
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_send_creations_just_send_creations_with_dispatcher
|
30
|
+
@dispatcher.expects(:send_creations).with(:creations_container)
|
31
|
+
@worker.send_creations(:creations_container)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_send_creations_with_interuption
|
35
|
+
@dispatcher.stubs(:send_creations).raises(Dispatcher::SendCreationsFailed)
|
36
|
+
@queue.expects(:<<).with(:creations_container)
|
37
|
+
@worker.send_creations(:creations_container)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
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.2.
|
4
|
+
version: 0.2.3
|
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-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: minitest
|
@@ -149,12 +149,12 @@ files:
|
|
149
149
|
- test/http_client_test.rb
|
150
150
|
- test/integration/creations_monitor_rack_test.rb
|
151
151
|
- test/integration/exception_monitor_rack_test.rb
|
152
|
-
- test/integration/standalone_client_test.rb
|
153
152
|
- test/middleware/creations_monitor_test.rb
|
154
153
|
- test/middleware/exception_monitor_test.rb
|
155
154
|
- test/prefixed_logger_test.rb
|
156
155
|
- test/server_side_test.rb
|
157
156
|
- test/test_helper.rb
|
157
|
+
- test/worker_test.rb
|
158
158
|
homepage: http://chillout.io/
|
159
159
|
licenses: []
|
160
160
|
post_install_message:
|
@@ -169,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
169
|
version: '0'
|
170
170
|
segments:
|
171
171
|
- 0
|
172
|
-
hash:
|
172
|
+
hash: 111791620312850416
|
173
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
174
|
none: false
|
175
175
|
requirements:
|
@@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
178
|
version: '0'
|
179
179
|
segments:
|
180
180
|
- 0
|
181
|
-
hash:
|
181
|
+
hash: 111791620312850416
|
182
182
|
requirements: []
|
183
183
|
rubyforge_project:
|
184
184
|
rubygems_version: 1.8.25
|
@@ -195,9 +195,9 @@ test_files:
|
|
195
195
|
- test/http_client_test.rb
|
196
196
|
- test/integration/creations_monitor_rack_test.rb
|
197
197
|
- test/integration/exception_monitor_rack_test.rb
|
198
|
-
- test/integration/standalone_client_test.rb
|
199
198
|
- test/middleware/creations_monitor_test.rb
|
200
199
|
- test/middleware/exception_monitor_test.rb
|
201
200
|
- test/prefixed_logger_test.rb
|
202
201
|
- test/server_side_test.rb
|
203
202
|
- test/test_helper.rb
|
203
|
+
- test/worker_test.rb
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'webmock/minitest'
|
3
|
-
|
4
|
-
class StandaloneClientTest < ChilloutTestCase
|
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
|
-
@error = build_error(NameError, "FooBar is not defined")
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_request_headers_contain_content_type
|
16
|
-
send_error
|
17
|
-
assert_request_headers 'events', 'Content-Type' => 'application/vnd.chillout.v1+json'
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_request_body_contains_exception_class
|
21
|
-
send_error
|
22
|
-
assert_equal "NameError", request_body["content"]["class"]
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_request_body_contains_exception_message
|
26
|
-
send_error
|
27
|
-
assert_equal "FooBar is not defined", request_body["content"]["message"]
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_request_body_contains_event_type
|
31
|
-
send_error
|
32
|
-
assert_equal "exception", request_body["event"]
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_request_body_contains_notifier_name
|
36
|
-
send_error
|
37
|
-
assert_equal "Chillout", request_body["notifier"]["name"]
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_request_body_contains_notifier_version
|
41
|
-
send_error
|
42
|
-
assert_equal Chillout::VERSION, request_body["notifier"]["version"]
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_allows_to_send_exceptions
|
46
|
-
exception = build_exception(ArgumentError, "wrong number of arguments")
|
47
|
-
@client.send_exception(exception)
|
48
|
-
assert_equal "ArgumentError", request_body["content"]["class"]
|
49
|
-
assert_equal "wrong number of arguments", request_body["content"]["message"]
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
def send_error
|
54
|
-
@client.send_error(@error)
|
55
|
-
end
|
56
|
-
|
57
|
-
def request_body
|
58
|
-
assert_request_body("events") { |body| return body }
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|