wellness 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4dfb06c69ae9ad383213314a083e3d45f29494bc
4
- data.tar.gz: da02f76f57427872ec6aee0758f47f888cd22aa0
3
+ metadata.gz: 3b9c9d8b20440639156bfee90743eddc5ba49188
4
+ data.tar.gz: bc55f4040c571be2d5b4d15557b1dcdcfb6f66e2
5
5
  SHA512:
6
- metadata.gz: 2b0bbb5258a83a3c434857e6f1625c1e957937a2db2af93f4de2f24298ef736ad8f4f2757c3f74858c84d0384f80e185653810242cc928723109993c3c9fbdca
7
- data.tar.gz: 8ea9833a6380a18562e24c752b0a21f8a932279c2a793ed4c653b1f04c3394f4f6c61dd260645c02ef0e349252e8648f3586eec1208e37333fc47b75f7eae97d
6
+ metadata.gz: d11e691c8048d2f2a61fb5d5abfc19ed38d62f2cb5d5153cb3ac87a433dd675bc069c2cd05dd37e53cbdfe47bf8b3d9e4289cea1869922b44ea6c9a4a0171a9f
7
+ data.tar.gz: 68080655a8da97463ba809c5e4dd9a93a13cae97b2aff071f328a7b9fc20fabaad1dd447c49ba72615ba42bf2d958bc04716799135100120c03ee194c5255407
data/.travis.yml CHANGED
@@ -4,6 +4,3 @@ rvm:
4
4
  - 1.9.3
5
5
  notifications:
6
6
  irc: "chat.freenode.net#warmwaffles"
7
- env:
8
- - CODECLIMATE_REPO_TOKEN=6212f00d1b8f97c85cf1e6478e12dafbb7325b3b51c6a3979aea7ea55e619c03
9
- - CODECLIMATE_REPO_TOKEN=6212f00d1b8f97c85cf1e6478e12dafbb7325b3b51c6a3979aea7ea55e619c03
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Wellness
2
2
 
3
3
  [![Build Status](https://travis-ci.org/warmwaffles/wellness.png?branch=master)](https://travis-ci.org/warmwaffles/wellness)
4
- [![Code Climate](https://codeclimate.com/repos/52d700d0e30ba038a9003919/badges/057ded44ac30dfe1950e/gpa.png)](https://codeclimate.com/repos/52d700d0e30ba038a9003919/feed)
5
-
4
+ [![Code Climate](https://codeclimate.com/github/warmwaffles/wellness.png)](https://codeclimate.com/github/warmwaffles/wellness)
6
5
 
7
6
  A rack middleware library that adds a health check to your service. It comes
8
7
  with pre made services and has the option and flexibility for you to make your
@@ -1,5 +1,3 @@
1
- require 'json'
2
-
3
1
  module Wellness
4
2
  # This is to be put into the Rack environment.
5
3
  #
@@ -2,29 +2,44 @@ module Wellness
2
2
  module Services
3
3
  # @author Matthew A. Johnston
4
4
  class Base
5
+ attr_reader :params
6
+
7
+ # Load dependencies when the class is loaded. This makes putting requires
8
+ # at the top of the file unnecessary. It plays nicely with the
9
+ # auto loader.
10
+ def self.dependency
11
+ yield if block_given?
12
+ end
13
+
14
+ # @param params [Hash]
5
15
  def initialize(params={})
6
16
  @params = params
7
17
  @health = false
18
+ @mutex = Mutex.new
8
19
  end
9
20
 
10
21
  # Flags the check as failed
22
+ # @return [FalseClass]
11
23
  def failed_check
12
- @health = false
24
+ @mutex.synchronize do
25
+ @health = false
26
+ end
13
27
  end
14
28
 
15
29
  # Flags the check as passed
30
+ # @return [TrueClass]
16
31
  def passed_check
17
- @health = true
18
- end
19
-
20
- def params
21
- @params.dup
32
+ @mutex.synchronize do
33
+ @health = true
34
+ end
22
35
  end
23
36
 
24
37
  # Returns true if the service is healthy, otherwise false
25
- # @return [Boolean]
38
+ # @return [TrueClass,FalseClass]
26
39
  def healthy?
27
- !!@health
40
+ @mutex.synchronize do
41
+ !!@health
42
+ end
28
43
  end
29
44
 
30
45
  # @return [Hash]
@@ -39,7 +54,9 @@ module Wellness
39
54
 
40
55
  # @return [Hash]
41
56
  def last_check
42
- @last_check || {}
57
+ @mutex.synchronize do
58
+ @last_check ||= {}
59
+ end
43
60
  end
44
61
  end
45
62
  end
@@ -1,10 +1,11 @@
1
- require 'pg'
2
- require 'wellness/services/base'
3
-
4
1
  module Wellness
5
2
  module Services
6
3
  # @author Matthew A. Johnston
7
- class PostgresService < Wellness::Services::Base
4
+ class PostgresService < Base
5
+ dependency do
6
+ require('pg')
7
+ end
8
+
8
9
  def check
9
10
  case ping
10
11
  when PG::Constants::PQPING_NO_ATTEMPT
@@ -1,9 +1,6 @@
1
- require 'redis'
2
- require 'wellness/services/base'
3
-
4
1
  module Wellness
5
2
  module Services
6
- class RedisService < Wellness::Services::Base
3
+ class RedisService < Base
7
4
  KEYS = [
8
5
  'used_memory_human',
9
6
  'connected_clients',
@@ -21,8 +18,12 @@ module Wellness
21
18
  'uptime_in_days'
22
19
  ]
23
20
 
21
+ dependency do
22
+ require('redis')
23
+ end
24
+
24
25
  def check
25
- client = Redis.new(self.params)
26
+ client = build_client
26
27
  details = client.info.select { |k, _| KEYS.include?(k) }
27
28
 
28
29
  passed_check
@@ -39,6 +40,10 @@ module Wellness
39
40
  }
40
41
  }
41
42
  end
43
+
44
+ def build_client
45
+ Redis.new(self.params)
46
+ end
42
47
  end
43
48
  end
44
49
  end
@@ -1,13 +1,14 @@
1
- require 'redis'
2
- require 'sidekiq'
3
- require 'wellness/services/base'
4
-
5
1
  module Wellness
6
2
  module Services
7
3
  # @author Matthew A. Johnston
8
- class SidekiqService < Wellness::Services::Base
4
+ class SidekiqService < Base
9
5
  KEYS = %w(redis_stats uptime_in_days connected_clients used_memory_human used_memory_peak_human)
10
6
 
7
+ dependency do
8
+ require 'redis'
9
+ require 'sidekiq'
10
+ end
11
+
11
12
  def check
12
13
  sidekiq_stats = Sidekiq::Stats.new
13
14
  queue = Sidekiq::Queue.new
@@ -0,0 +1,8 @@
1
+ module Wellness
2
+ module Services
3
+ autoload :Base, 'wellness/services/base'
4
+ autoload :PostgresService, 'wellness/services/postgres_service'
5
+ autoload :RedisService, 'wellness/services/redis_service'
6
+ autoload :SidekiqService, 'wellness/services/sidekiq_service'
7
+ end
8
+ end
data/lib/wellness.rb CHANGED
@@ -1,7 +1,9 @@
1
+ require 'json'
2
+
1
3
  module Wellness
2
- end
4
+ VERSION = '0.2.3'
3
5
 
4
- require 'wellness/version'
5
- require 'wellness/services/base'
6
- require 'wellness/system'
7
- require 'wellness/middleware'
6
+ autoload :Services, 'wellness/services'
7
+ autoload :Middleware, 'wellness/middleware'
8
+ autoload :System, 'wellness/system'
9
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
- require "codeclimate-test-reporter"
2
- CodeClimate::TestReporter.start
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_group('Services', 'wellness/services')
4
+ end
3
5
 
4
6
  require 'rspec'
5
7
  require 'wellness'
6
-
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wellness::Services::Base do
4
+ let(:params) { { test: 'data' } }
5
+ let(:service) { described_class.new(params) }
6
+ describe '#failed_check' do
7
+ before { service.passed_check }
8
+ subject { service.failed_check }
9
+ it 'returns false' do
10
+ expect(subject).to eq(false)
11
+ end
12
+ it 'flags the service as unhealthy' do
13
+ expect { subject }.to change(service, :healthy?).from(true).to(false)
14
+ end
15
+ end
16
+
17
+ describe '#passed_check' do
18
+ subject { service.passed_check }
19
+ it 'returns true' do
20
+ expect(subject).to eq(true)
21
+ end
22
+ it 'flags the service as healthy' do
23
+ expect { subject }.to change(service, :healthy?).from(false).to(true)
24
+ end
25
+ end
26
+
27
+ describe '#params' do
28
+ subject { service.params }
29
+ it 'returns the params that it was constructed with' do
30
+ expect(subject).to eq(params)
31
+ end
32
+ end
33
+
34
+ describe '#check' do
35
+ subject { service.check }
36
+ it 'returns an empty hash' do
37
+ expect(subject).to eq({})
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wellness::Services::PostgresService do
4
+ pending
5
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wellness::Services::RedisService do
4
+ let(:params) {
5
+ {
6
+ redis: {
7
+ url: 'redis://127.0.0.1:6379/0'
8
+ }
9
+ }
10
+ }
11
+ let(:service) { described_class.new(params) }
12
+ let(:redis_info) {
13
+ {
14
+ 'uptime_in_seconds' => '612488',
15
+ 'uptime_in_days' => '7',
16
+ 'connected_clients' => '1',
17
+ 'used_memory_human' => '979.22K',
18
+ 'total_connections_received' => '2',
19
+ 'total_commands_processed' => '1',
20
+ 'rejected_connections' => '0',
21
+ 'sync_full' => '0',
22
+ 'sync_partial_ok' => '0',
23
+ 'sync_partial_err' => '0',
24
+ 'expired_keys' => '0',
25
+ 'evicted_keys' => '0',
26
+ 'keyspace_hits' => '0',
27
+ 'keyspace_misses' => '0'
28
+ }
29
+ }
30
+ describe '#check' do
31
+ subject { service.check }
32
+ context 'when redis can\'t connect' do
33
+ it 'fails the health check' do
34
+ expect(subject).to include(status: 'UNHEALTHY')
35
+ end
36
+ end
37
+ context 'when redis returns the its details' do
38
+ let(:client) { double('Redis', info: redis_info) }
39
+ before do
40
+ service.stub(build_client: client)
41
+ end
42
+ it 'passes the health check' do
43
+ expect(subject).to include(status: 'HEALTHY')
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wellness::Services::SidekiqService do
4
+ pending
5
+ end
data/wellness.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'wellness/version'
4
+ require 'wellness'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'wellness'
@@ -21,5 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency('bundler', '~> 1.3')
22
22
  spec.add_development_dependency('rake')
23
23
  spec.add_development_dependency('rspec')
24
- spec.add_development_dependency('codeclimate-test-reporter')
24
+ spec.add_development_dependency('simplecov')
25
+
26
+ # service dependencies
27
+ spec.add_development_dependency('pg')
28
+ spec.add_development_dependency('sidekiq')
29
+ spec.add_development_dependency('redis')
25
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wellness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Johnston
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-16 00:00:00.000000000 Z
11
+ date: 2014-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,7 +53,49 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: codeclimate-test-reporter
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pg
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sidekiq
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: redis
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - '>='
@@ -85,14 +127,18 @@ files:
85
127
  - Rakefile
86
128
  - lib/wellness.rb
87
129
  - lib/wellness/middleware.rb
130
+ - lib/wellness/services.rb
88
131
  - lib/wellness/services/base.rb
89
132
  - lib/wellness/services/postgres_service.rb
90
133
  - lib/wellness/services/redis_service.rb
91
134
  - lib/wellness/services/sidekiq_service.rb
92
135
  - lib/wellness/system.rb
93
- - lib/wellness/version.rb
94
136
  - spec/spec_helper.rb
95
137
  - spec/wellness/middleware_spec.rb
138
+ - spec/wellness/services/base_spec.rb
139
+ - spec/wellness/services/postgres_service_spec.rb
140
+ - spec/wellness/services/redis_service_spec.rb
141
+ - spec/wellness/services/sidekiq_service_spec.rb
96
142
  - spec/wellness/system_spec.rb
97
143
  - wellness.gemspec
98
144
  homepage: https://github.com/warmwaffles/wellness
@@ -122,4 +168,8 @@ summary: A rack middleware health check
122
168
  test_files:
123
169
  - spec/spec_helper.rb
124
170
  - spec/wellness/middleware_spec.rb
171
+ - spec/wellness/services/base_spec.rb
172
+ - spec/wellness/services/postgres_service_spec.rb
173
+ - spec/wellness/services/redis_service_spec.rb
174
+ - spec/wellness/services/sidekiq_service_spec.rb
125
175
  - spec/wellness/system_spec.rb
@@ -1,3 +0,0 @@
1
- module Wellness
2
- VERSION = '0.2.2'
3
- end