chillout 0.3.0 → 0.4.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.
@@ -0,0 +1,13 @@
1
+ class CheckResult
2
+ def initialize(response)
3
+ @response = response
4
+ end
5
+
6
+ def successful?
7
+ @response.respond_to?(:code) && @response.code == "200"
8
+ end
9
+
10
+ def has_problem_with_authorization?
11
+ @response.respond_to?(:code) && @response.code == "401"
12
+ end
13
+ end
@@ -6,13 +6,14 @@ require 'chillout/config'
6
6
  require 'chillout/event_data_builder'
7
7
  require 'chillout/prefixed_logger'
8
8
  require 'chillout/worker'
9
+ require 'chillout/check_result'
9
10
  require 'thread'
10
11
 
11
12
  module Chillout
12
13
  class Client
13
14
  extend Forwardable
14
15
 
15
- def_delegators :@dispatcher, :send_creations
16
+ def_delegators :@dispatcher, :send_creations, :check_api_connection
16
17
 
17
18
  attr_reader :config
18
19
  attr_reader :logger
@@ -6,7 +6,7 @@ module Chillout
6
6
  class Config
7
7
 
8
8
  DEFAULT_HOSTNAME = "api.chillout.io"
9
- DEFAULT_PORT = 80
9
+ DEFAULT_PORT = 443
10
10
  DEFAULT_NOTIFIER_NAME = "Chillout"
11
11
  DEFAULT_NOTIFIER_URL = "http://github.com/chilloutio/chillout"
12
12
 
@@ -48,5 +48,13 @@ module Chillout
48
48
  @authentication_password || api_key
49
49
  end
50
50
 
51
+ def to_s
52
+ <<-eos
53
+ * hostname: #{hostname}
54
+ * port: #{port}
55
+ * ssl: #{ssl}
56
+ eos
57
+ end
58
+
51
59
  end
52
60
  end
@@ -13,5 +13,12 @@ module Chillout
13
13
  rescue HttpClient::NotSent
14
14
  raise SendCreationsFailed.new
15
15
  end
16
+
17
+ def check_api_connection
18
+ response = @server_side.send_check
19
+ CheckResult.new(response)
20
+ rescue HttpClient::NotReceived => e
21
+ CheckResult.new(e)
22
+ end
16
23
  end
17
24
  end
@@ -10,6 +10,14 @@ module Chillout
10
10
  end
11
11
  end
12
12
 
13
+ class NotReceived < StandardError
14
+ attr_reader :original_exception
15
+
16
+ def initialize(original_exception)
17
+ @original_exception = original_exception
18
+ end
19
+ end
20
+
13
21
  MEDIA_TYPE = "application/vnd.chillout.v1+json"
14
22
 
15
23
  def initialize(config, logger)
@@ -32,5 +40,18 @@ module Chillout
32
40
  raise NotSent.new(e)
33
41
  end
34
42
 
43
+ def get(path)
44
+ http = Net::HTTP.new(@config.hostname, @config.port)
45
+ http.use_ssl = @config.ssl
46
+ request_spec = Net::HTTP::Get.new(path)
47
+ request_spec.content_type = MEDIA_TYPE
48
+ request_spec.basic_auth @config.authentication_user, @config.authentication_password
49
+ http.start do
50
+ http.request(request_spec)
51
+ end
52
+ rescue => e
53
+ raise NotReceived.new(e)
54
+ end
55
+
35
56
  end
36
57
  end
@@ -18,5 +18,9 @@ module Chillout
18
18
  client.start_worker
19
19
  end
20
20
  end
21
+
22
+ rake_tasks do
23
+ load "chillout/tasks.rb"
24
+ end
21
25
  end
22
26
  end
@@ -18,6 +18,10 @@ module Chillout
18
18
  @http_client.post('/metrics', data)
19
19
  end
20
20
 
21
+ def send_check
22
+ @http_client.get('/check')
23
+ end
24
+
21
25
  private
22
26
  def timestamp
23
27
  Time.now.iso8601
@@ -0,0 +1,18 @@
1
+ namespace :chillout do
2
+ desc "Check chillout integration"
3
+ task :check do
4
+ Rails.initialize!
5
+ config = Rails.configuration.chillout
6
+ client = Chillout::Client.new(config[:secret], config.reject{|x| x == :secret})
7
+ check_result = client.check_api_connection
8
+
9
+ if check_result.successful?
10
+ puts "Chillout API available."
11
+ elsif check_result.has_problem_with_authorization?
12
+ puts "Chillout API available, but project couldn't authorize."
13
+ else
14
+ puts "Chillout API not available for given configuration:"
15
+ puts client.config.to_s
16
+ end
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module Chillout
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,45 @@
1
+ require 'test_helper'
2
+
3
+ class CheckResultTest < ChilloutTestCase
4
+ def test_successful_for_response_with_200_code
5
+ response = stub(code: "200")
6
+ check_result = CheckResult.new(response)
7
+ assert check_result.successful?
8
+ end
9
+
10
+ def test_not_successful_for_response_with_other_code
11
+ response = stub(code: "304")
12
+ check_result = CheckResult.new(response)
13
+ refute check_result.successful?
14
+ end
15
+
16
+ def test_not_successful_for_response_that_dont_respond_to_code
17
+ response = stub
18
+ check_result = CheckResult.new(response)
19
+ refute check_result.successful?
20
+ end
21
+
22
+ def test_dont_have_problem_with_authorization_for_response_with_200_code
23
+ response = stub(code: "200")
24
+ check_result = CheckResult.new(response)
25
+ refute check_result.has_problem_with_authorization?
26
+ end
27
+
28
+ def test_have_problem_with_authorization_for_response_with_401_code
29
+ response = stub(code: "401")
30
+ check_result = CheckResult.new(response)
31
+ assert check_result.has_problem_with_authorization?
32
+ end
33
+
34
+ def test_dont_have_problem_with_authorization_for_response_with_other_code
35
+ response = stub(code: "501")
36
+ check_result = CheckResult.new(response)
37
+ refute check_result.has_problem_with_authorization?
38
+ end
39
+
40
+ def test_dont_have_problem_with_authorization_for_response_that_dont_respond_to_code
41
+ response = stub
42
+ check_result = CheckResult.new(response)
43
+ refute check_result.has_problem_with_authorization?
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+
3
+ class ClientIntegrationTest < ChilloutTestCase
4
+ def test_check_api_connection_with_200_ok_response
5
+ @_api_key = "xyz123"
6
+ url = api_url("check")
7
+ stub_request(:get, url).to_return(body: "OK", status: 200)
8
+
9
+ client = Chillout::Client.new(@_api_key)
10
+ check_result = client.check_api_connection
11
+ assert check_result.successful?, "Check was not successful"
12
+ end
13
+
14
+ def test_check_api_connection_with_other_response
15
+ @_api_key = "xyz123"
16
+ url = api_url("check")
17
+ stub_request(:get, url).to_return(body: "Not Found", status: 404)
18
+
19
+ client = Chillout::Client.new(@_api_key)
20
+ check_result = client.check_api_connection
21
+ refute check_result.successful?, "Check was successful"
22
+ end
23
+
24
+ def test_check_api_connection_with_raised_exception_on_request
25
+ @_api_key = "xyz123"
26
+ url = api_url("check")
27
+ stub_request(:get, url).to_raise(StandardError)
28
+
29
+ client = Chillout::Client.new(@_api_key)
30
+ check_result = client.check_api_connection
31
+ refute check_result.successful?, "Check was successful"
32
+ end
33
+ end
@@ -9,7 +9,6 @@ module Chillout
9
9
  api_key = "xyz123"
10
10
  stub_api_request(api_key, "metrics")
11
11
  @config = Chillout::Config.new(api_key)
12
- @config.ssl = false
13
12
  @client = Chillout::Client.new(@config)
14
13
  @client.start_worker
15
14
  end
data/test/test_helper.rb CHANGED
@@ -38,7 +38,7 @@ class ChilloutTestCase < Test::Unit::TestCase
38
38
 
39
39
  def api_url(resource_name)
40
40
  raise "API KEY not set" unless @_api_key
41
- "http://#{@_api_key}:#{@_api_key}@api.chillout.io/#{resource_name}"
41
+ "https://#{@_api_key}:#{@_api_key}@api.chillout.io/#{resource_name}"
42
42
  end
43
43
 
44
44
  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.3.0
4
+ version: 0.4.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-16 00:00:00.000000000 Z
13
+ date: 2013-03-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: minitest
@@ -124,6 +124,7 @@ files:
124
124
  - Rakefile
125
125
  - chillout.gemspec
126
126
  - lib/chillout.rb
127
+ - lib/chillout/check_result.rb
127
128
  - lib/chillout/client.rb
128
129
  - lib/chillout/config.rb
129
130
  - lib/chillout/creation_listener.rb
@@ -135,14 +136,17 @@ files:
135
136
  - lib/chillout/prefixed_logger.rb
136
137
  - lib/chillout/railtie.rb
137
138
  - lib/chillout/server_side.rb
139
+ - lib/chillout/tasks.rb
138
140
  - lib/chillout/version.rb
139
141
  - lib/chillout/worker.rb
142
+ - test/check_result_test.rb
140
143
  - test/client_test.rb
141
144
  - test/config_test.rb
142
145
  - test/creations_container_test.rb
143
146
  - test/dispatcher_test.rb
144
147
  - test/event_data_builder_test.rb
145
148
  - test/http_client_test.rb
149
+ - test/integration/client_test.rb
146
150
  - test/integration/creations_monitor_rack_test.rb
147
151
  - test/middleware/creations_monitor_test.rb
148
152
  - test/prefixed_logger_test.rb
@@ -163,7 +167,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
163
167
  version: '0'
164
168
  segments:
165
169
  - 0
166
- hash: 4186506627613896564
170
+ hash: 1830182422873723913
167
171
  required_rubygems_version: !ruby/object:Gem::Requirement
168
172
  none: false
169
173
  requirements:
@@ -172,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
176
  version: '0'
173
177
  segments:
174
178
  - 0
175
- hash: 4186506627613896564
179
+ hash: 1830182422873723913
176
180
  requirements: []
177
181
  rubyforge_project:
178
182
  rubygems_version: 1.8.25
@@ -180,12 +184,14 @@ signing_key:
180
184
  specification_version: 3
181
185
  summary: Chillout.io Ruby client
182
186
  test_files:
187
+ - test/check_result_test.rb
183
188
  - test/client_test.rb
184
189
  - test/config_test.rb
185
190
  - test/creations_container_test.rb
186
191
  - test/dispatcher_test.rb
187
192
  - test/event_data_builder_test.rb
188
193
  - test/http_client_test.rb
194
+ - test/integration/client_test.rb
189
195
  - test/integration/creations_monitor_rack_test.rb
190
196
  - test/middleware/creations_monitor_test.rb
191
197
  - test/prefixed_logger_test.rb