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 +4 -4
- data/.travis.yml +0 -3
- data/README.md +1 -2
- data/lib/wellness/middleware.rb +0 -2
- data/lib/wellness/services/base.rb +26 -9
- data/lib/wellness/services/postgres_service.rb +5 -4
- data/lib/wellness/services/redis_service.rb +10 -5
- data/lib/wellness/services/sidekiq_service.rb +6 -5
- data/lib/wellness/services.rb +8 -0
- data/lib/wellness.rb +7 -5
- data/spec/spec_helper.rb +4 -3
- data/spec/wellness/services/base_spec.rb +40 -0
- data/spec/wellness/services/postgres_service_spec.rb +5 -0
- data/spec/wellness/services/redis_service_spec.rb +47 -0
- data/spec/wellness/services/sidekiq_service_spec.rb +5 -0
- data/wellness.gemspec +7 -2
- metadata +54 -4
- data/lib/wellness/version.rb +0 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b9c9d8b20440639156bfee90743eddc5ba49188
|
|
4
|
+
data.tar.gz: bc55f4040c571be2d5b4d15557b1dcdcfb6f66e2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d11e691c8048d2f2a61fb5d5abfc19ed38d62f2cb5d5153cb3ac87a433dd675bc069c2cd05dd37e53cbdfe47bf8b3d9e4289cea1869922b44ea6c9a4a0171a9f
|
|
7
|
+
data.tar.gz: 68080655a8da97463ba809c5e4dd9a93a13cae97b2aff071f328a7b9fc20fabaad1dd447c49ba72615ba42bf2d958bc04716799135100120c03ee194c5255407
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Wellness
|
|
2
2
|
|
|
3
3
|
[](https://travis-ci.org/warmwaffles/wellness)
|
|
4
|
-
[](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
|
data/lib/wellness/middleware.rb
CHANGED
|
@@ -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
|
-
@
|
|
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
|
-
@
|
|
18
|
-
|
|
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 [
|
|
38
|
+
# @return [TrueClass,FalseClass]
|
|
26
39
|
def healthy?
|
|
27
|
-
|
|
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
|
-
@
|
|
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 <
|
|
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 <
|
|
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 =
|
|
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 <
|
|
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
|
-
|
|
4
|
+
VERSION = '0.2.3'
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
autoload :Services, 'wellness/services'
|
|
7
|
+
autoload :Middleware, 'wellness/middleware'
|
|
8
|
+
autoload :System, 'wellness/system'
|
|
9
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -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,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
|
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
|
|
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('
|
|
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.
|
|
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-
|
|
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:
|
|
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
|
data/lib/wellness/version.rb
DELETED