wellness 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.
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