mysql-heartbeat 0.1.1 → 0.1.2
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
- metadata +14 -30
- data/.travis.yml +0 -10
- data/Gemfile +0 -20
- data/Gemfile.lock +0 -87
- data/Guardfile +0 -29
- data/README.md +0 -57
- data/bin/mysql-heartbeat +0 -15
- data/config/example_mysql.yml +0 -5
- data/config/travis.yml +0 -5
- data/lib/mysql-heartbeat.rb +0 -26
- data/lib/mysql-heartbeat/health.rb +0 -55
- data/lib/mysql-heartbeat/version.rb +0 -5
- data/lib/mysql-heartbeat/worker.rb +0 -25
- data/mysql-heartbeat.gemspec +0 -29
- data/spec/requests/base_spec.rb +0 -14
- data/spec/spec_helper.rb +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2228d01f5df78e6c69bd08f0a6720a3703d3fb60
|
|
4
|
+
data.tar.gz: 5261b1f8d8f138986ead23b3612ed0498812fc6b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b2ceedc9f2a3adfb14fdfdd9c804c240d7e9f555ab3db7c62afea45618e016f4e28115e25e57c37e62550541356716d6ef9b86385cbb4056a0b2fc317230c27b
|
|
7
|
+
data.tar.gz: 93c6b45405ed8b5ef8f438fc69f52c4fba8088fdfc8c6cb2179c3458d55d480d489b91dd0c49cd3522d3503c56167febae24535554d580583dc56487507a447e
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mysql-heartbeat
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- John Barney
|
|
@@ -14,56 +14,56 @@ dependencies:
|
|
|
14
14
|
name: sinatra
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '1.4'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.4'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: mysql2
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0.3'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0.3'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: celluloid
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - ~>
|
|
45
|
+
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0.15'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - ~>
|
|
52
|
+
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0.15'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: thin
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - ~>
|
|
59
|
+
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '1.6'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - ~>
|
|
66
|
+
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '1.6'
|
|
69
69
|
description: " Queries the replication health of a MySQL server.\n A health
|
|
@@ -71,26 +71,10 @@ description: " Queries the replication health of a MySQL server.\n A healt
|
|
|
71
71
|
like HAProxy to check the\n health of replication, and load balance across read
|
|
72
72
|
slaves.\n"
|
|
73
73
|
email: johnb0011@gmail.com
|
|
74
|
-
executables:
|
|
75
|
-
- mysql-heartbeat
|
|
74
|
+
executables: []
|
|
76
75
|
extensions: []
|
|
77
76
|
extra_rdoc_files: []
|
|
78
|
-
files:
|
|
79
|
-
- .travis.yml
|
|
80
|
-
- Gemfile
|
|
81
|
-
- Gemfile.lock
|
|
82
|
-
- Guardfile
|
|
83
|
-
- README.md
|
|
84
|
-
- bin/mysql-heartbeat
|
|
85
|
-
- config/example_mysql.yml
|
|
86
|
-
- config/travis.yml
|
|
87
|
-
- lib/mysql-heartbeat.rb
|
|
88
|
-
- lib/mysql-heartbeat/health.rb
|
|
89
|
-
- lib/mysql-heartbeat/version.rb
|
|
90
|
-
- lib/mysql-heartbeat/worker.rb
|
|
91
|
-
- mysql-heartbeat.gemspec
|
|
92
|
-
- spec/requests/base_spec.rb
|
|
93
|
-
- spec/spec_helper.rb
|
|
77
|
+
files: []
|
|
94
78
|
homepage: http://github.com/johnb0011/mysql_heartbeat
|
|
95
79
|
licenses: []
|
|
96
80
|
metadata: {}
|
|
@@ -100,17 +84,17 @@ require_paths:
|
|
|
100
84
|
- lib
|
|
101
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
86
|
requirements:
|
|
103
|
-
- -
|
|
87
|
+
- - ">="
|
|
104
88
|
- !ruby/object:Gem::Version
|
|
105
89
|
version: 1.9.3
|
|
106
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
91
|
requirements:
|
|
108
|
-
- -
|
|
92
|
+
- - ">="
|
|
109
93
|
- !ruby/object:Gem::Version
|
|
110
94
|
version: '0'
|
|
111
95
|
requirements: []
|
|
112
96
|
rubyforge_project:
|
|
113
|
-
rubygems_version: 2.
|
|
97
|
+
rubygems_version: 2.1.10
|
|
114
98
|
signing_key:
|
|
115
99
|
specification_version: 4
|
|
116
100
|
summary: Queries the replication health of a MySQL server.
|
data/.travis.yml
DELETED
data/Gemfile
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
source 'http://rubygems.org'
|
|
2
|
-
gem 'sinatra'
|
|
3
|
-
gem 'mysql2'
|
|
4
|
-
gem 'celluloid'
|
|
5
|
-
gem 'thin'
|
|
6
|
-
|
|
7
|
-
group :test, :development do
|
|
8
|
-
gem 'rspec'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
group :development do
|
|
12
|
-
gem 'guard'
|
|
13
|
-
gem 'guard-rubocop'
|
|
14
|
-
gem 'guard-rspec'
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
group :test do
|
|
18
|
-
gem 'rubocop'
|
|
19
|
-
gem 'rack-test'
|
|
20
|
-
end
|
data/Gemfile.lock
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
GEM
|
|
2
|
-
remote: http://rubygems.org/
|
|
3
|
-
specs:
|
|
4
|
-
ast (1.1.0)
|
|
5
|
-
celluloid (0.15.2)
|
|
6
|
-
timers (~> 1.1.0)
|
|
7
|
-
coderay (1.0.9)
|
|
8
|
-
daemons (1.1.9)
|
|
9
|
-
diff-lcs (1.2.4)
|
|
10
|
-
eventmachine (1.0.3)
|
|
11
|
-
ffi (1.9.3)
|
|
12
|
-
formatador (0.2.4)
|
|
13
|
-
guard (2.2.2)
|
|
14
|
-
formatador (>= 0.2.4)
|
|
15
|
-
listen (~> 2.1)
|
|
16
|
-
lumberjack (~> 1.0)
|
|
17
|
-
pry (>= 0.9.12)
|
|
18
|
-
thor (>= 0.18.1)
|
|
19
|
-
guard-rspec (4.0.3)
|
|
20
|
-
guard (>= 2.1.1)
|
|
21
|
-
rspec (~> 2.14)
|
|
22
|
-
guard-rubocop (1.0.0)
|
|
23
|
-
guard (~> 2.0)
|
|
24
|
-
rubocop (~> 0.10)
|
|
25
|
-
listen (2.2.0)
|
|
26
|
-
celluloid (>= 0.15.2)
|
|
27
|
-
rb-fsevent (>= 0.9.3)
|
|
28
|
-
rb-inotify (>= 0.9)
|
|
29
|
-
lumberjack (1.0.4)
|
|
30
|
-
method_source (0.8.2)
|
|
31
|
-
mysql2 (0.3.13)
|
|
32
|
-
parser (2.0.0)
|
|
33
|
-
ast (~> 1.1)
|
|
34
|
-
slop (~> 3.4, >= 3.4.5)
|
|
35
|
-
powerpack (0.0.9)
|
|
36
|
-
pry (0.9.12.2)
|
|
37
|
-
coderay (~> 1.0.5)
|
|
38
|
-
method_source (~> 0.8)
|
|
39
|
-
slop (~> 3.4)
|
|
40
|
-
rack (1.5.2)
|
|
41
|
-
rack-protection (1.5.1)
|
|
42
|
-
rack
|
|
43
|
-
rack-test (0.6.2)
|
|
44
|
-
rack (>= 1.0)
|
|
45
|
-
rainbow (1.1.4)
|
|
46
|
-
rb-fsevent (0.9.3)
|
|
47
|
-
rb-inotify (0.9.2)
|
|
48
|
-
ffi (>= 0.5.0)
|
|
49
|
-
rspec (2.14.1)
|
|
50
|
-
rspec-core (~> 2.14.0)
|
|
51
|
-
rspec-expectations (~> 2.14.0)
|
|
52
|
-
rspec-mocks (~> 2.14.0)
|
|
53
|
-
rspec-core (2.14.7)
|
|
54
|
-
rspec-expectations (2.14.3)
|
|
55
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
|
56
|
-
rspec-mocks (2.14.4)
|
|
57
|
-
rubocop (0.14.1)
|
|
58
|
-
parser (~> 2.0)
|
|
59
|
-
powerpack (~> 0.0.6)
|
|
60
|
-
rainbow (>= 1.1.4)
|
|
61
|
-
sinatra (1.4.4)
|
|
62
|
-
rack (~> 1.4)
|
|
63
|
-
rack-protection (~> 1.4)
|
|
64
|
-
tilt (~> 1.3, >= 1.3.4)
|
|
65
|
-
slop (3.4.6)
|
|
66
|
-
thin (1.6.1)
|
|
67
|
-
daemons (>= 1.0.9)
|
|
68
|
-
eventmachine (>= 1.0.0)
|
|
69
|
-
rack (>= 1.0.0)
|
|
70
|
-
thor (0.18.1)
|
|
71
|
-
tilt (1.4.1)
|
|
72
|
-
timers (1.1.0)
|
|
73
|
-
|
|
74
|
-
PLATFORMS
|
|
75
|
-
ruby
|
|
76
|
-
|
|
77
|
-
DEPENDENCIES
|
|
78
|
-
celluloid
|
|
79
|
-
guard
|
|
80
|
-
guard-rspec
|
|
81
|
-
guard-rubocop
|
|
82
|
-
mysql2
|
|
83
|
-
rack-test
|
|
84
|
-
rspec
|
|
85
|
-
rubocop
|
|
86
|
-
sinatra
|
|
87
|
-
thin
|
data/Guardfile
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# A sample Guardfile
|
|
2
|
-
# More info at https://github.com/guard/guard#readme
|
|
3
|
-
|
|
4
|
-
guard :rubocop do
|
|
5
|
-
watch(%r{.+\.rb$})
|
|
6
|
-
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
guard :rspec do
|
|
10
|
-
watch(%r{^spec/.+_spec\.rb$})
|
|
11
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
|
12
|
-
watch('spec/spec_helper.rb') { "spec" }
|
|
13
|
-
|
|
14
|
-
# Rails example
|
|
15
|
-
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
|
16
|
-
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
|
17
|
-
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
|
18
|
-
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
|
19
|
-
watch('config/routes.rb') { "spec/routing" }
|
|
20
|
-
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
|
21
|
-
|
|
22
|
-
# Capybara features specs
|
|
23
|
-
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
|
24
|
-
|
|
25
|
-
# Turnip features and steps
|
|
26
|
-
watch(%r{^spec/acceptance/(.+)\.feature$})
|
|
27
|
-
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
|
28
|
-
end
|
|
29
|
-
|
data/README.md
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
[](https://gemnasium.com/johnbarney/mysql-heartbeat)
|
|
2
|
-
[](http://travis-ci.org/johnbarney/mysql-heartbeat)
|
|
3
|
-
[](http://badge.fury.io/rb/mysql-heartbeat)
|
|
4
|
-
# MySQL Heartbeat
|
|
5
|
-
|
|
6
|
-
A health monitor for MySQL replication. This can be used in tandem with applications like HAProxy to check the health of replication, and load balance across read slaves.
|
|
7
|
-
|
|
8
|
-
Installation
|
|
9
|
-
------------
|
|
10
|
-
|
|
11
|
-
Installation is as easy as installing a gem.
|
|
12
|
-
|
|
13
|
-
$ gem install mysql-heartbeat
|
|
14
|
-
$ mysql-heartbeat yourconfig.yml
|
|
15
|
-
|
|
16
|
-
Configuration
|
|
17
|
-
-------------
|
|
18
|
-
|
|
19
|
-
Make a copy of database.yml for each MySQL instance you want to watch. You can launch as many of these instances as you like as long as they each use a different local port.
|
|
20
|
-
|
|
21
|
-
custom.yml:
|
|
22
|
-
|
|
23
|
-
host: "localhost" # Address of MySQL instance
|
|
24
|
-
username: "health" # Username of MySQL user
|
|
25
|
-
password: "health99" # Password of MySQL user
|
|
26
|
-
health_port: 6977 # Port this instance of MySQL health resides on
|
|
27
|
-
tolerance: 5 # How far behind MySQL replication can be before healthchecks fail
|
|
28
|
-
|
|
29
|
-
$ ruby heartbeat.rb custom.yml
|
|
30
|
-
|
|
31
|
-
Note: The user must have REPLICATION CLIENT privileges for mysql_heartbeat to function.
|
|
32
|
-
|
|
33
|
-
Example:
|
|
34
|
-
|
|
35
|
-
mysql> create user 'health'@'localhost' identified by 'health99';
|
|
36
|
-
|
|
37
|
-
mysql> grant REPLICATION CLIENT on *.* to 'health'@'localhost';
|
|
38
|
-
|
|
39
|
-
Process Control
|
|
40
|
-
---------------
|
|
41
|
-
|
|
42
|
-
I would recommend either [Supervisord](http://supervisord.org/ "Supervisord") or [Bluepill](https://github.com/bluepill-rb/bluepill "Bluepill") to manage forking and management of instances.
|
|
43
|
-
|
|
44
|
-
HAProxy Configuration
|
|
45
|
-
---------------------
|
|
46
|
-
|
|
47
|
-
Coming Soon!
|
|
48
|
-
|
|
49
|
-
Work in Progress
|
|
50
|
-
----------------
|
|
51
|
-
|
|
52
|
-
This project is primarily to teach myself how to write tests, and integrate with Travis. It's still a long way from complete. Contributions and suggestions are always welcome.
|
|
53
|
-
|
|
54
|
-
Contributing
|
|
55
|
-
------------
|
|
56
|
-
|
|
57
|
-
See GitHub's ["Fork A Repo"](https://help.github.com/articles/fork-a-repo "Forking a project") for more information.
|
data/bin/mysql-heartbeat
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
#! /usr/bin/env ruby
|
|
2
|
-
# -*- encoding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
if RUBY_VERSION >= '1.9.3'
|
|
5
|
-
if ARGV[0].nil? && ENV['RACK_ENV'] != 'test'
|
|
6
|
-
puts 'No configuration file specified'
|
|
7
|
-
exit 1
|
|
8
|
-
end
|
|
9
|
-
$LOAD_PATH.unshift(File.dirname(File.realpath(__FILE__)) + '/../lib')
|
|
10
|
-
require 'mysql-heartbeat'
|
|
11
|
-
HeartBeat.run!
|
|
12
|
-
else
|
|
13
|
-
puts 'mysql-heartbeat supports only Ruby 1.9.3+'
|
|
14
|
-
exit(-1)
|
|
15
|
-
end
|
data/config/example_mysql.yml
DELETED
data/config/travis.yml
DELETED
data/lib/mysql-heartbeat.rb
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
require 'sinatra/base'
|
|
3
|
-
require 'yaml'
|
|
4
|
-
require 'rack/test' if ENV['RACK_ENV'] == 'test'
|
|
5
|
-
require 'mysql-heartbeat/health'
|
|
6
|
-
require 'mysql-heartbeat/worker'
|
|
7
|
-
require 'mysql-heartbeat/version'
|
|
8
|
-
|
|
9
|
-
# Heartbeat Class
|
|
10
|
-
class HeartBeat < Sinatra::Base
|
|
11
|
-
configure do
|
|
12
|
-
if ENV['RACK_ENV'] == 'test'
|
|
13
|
-
config = YAML.load_file("#{File.dirname(__FILE__)}/../config/travis.yml")
|
|
14
|
-
else
|
|
15
|
-
config = YAML.load_file(ARGV[0])
|
|
16
|
-
end
|
|
17
|
-
set :port, config['health_port'].to_i
|
|
18
|
-
set :bind, '0.0.0.0'
|
|
19
|
-
set :server, 'thin'
|
|
20
|
-
set :process, HeartbeatWorker.new(config)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
options '/' do
|
|
24
|
-
settings.process.current_health
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
require 'mysql2'
|
|
3
|
-
|
|
4
|
-
# Is MySQL healthy?
|
|
5
|
-
class Health
|
|
6
|
-
def initialize(config)
|
|
7
|
-
@conn = Mysql2::Client.new(host: config['host'],
|
|
8
|
-
username: config['username'],
|
|
9
|
-
password: config['password']
|
|
10
|
-
)
|
|
11
|
-
@tolerance = config[:tolerance]
|
|
12
|
-
get_status
|
|
13
|
-
rescue => ex
|
|
14
|
-
puts ex
|
|
15
|
-
puts 'Could not connect to MySQL.'
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def get_status
|
|
19
|
-
results = @conn.query('show slave status;')
|
|
20
|
-
results.each do |row|
|
|
21
|
-
@sec_behind = row['Seconds_Behind_Master'].to_i
|
|
22
|
-
@slave_sql = row['Slave_SQL_Running'] == 'Yes'
|
|
23
|
-
@slave_io = row['Slave_IO_Running'] == 'Yes'
|
|
24
|
-
@last_error = row['Last_Error']
|
|
25
|
-
end
|
|
26
|
-
rescue => ex
|
|
27
|
-
puts ex
|
|
28
|
-
puts 'Could not query slave status.'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def replicating?
|
|
32
|
-
@slave_sql && @slave_io
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def behind?
|
|
36
|
-
@sec_behind > @tolerance unless @sec_behind.nil?
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def healthy?
|
|
40
|
-
if replicating? && !behind?
|
|
41
|
-
return [200, "OK\n"]
|
|
42
|
-
else
|
|
43
|
-
reason = "Replication is not healthy!
|
|
44
|
-
\nSlave_IO running: #{@slave_io}
|
|
45
|
-
\nSlave_SQL running: #{@slave_sql}
|
|
46
|
-
\nSeconds Behind: #{@sec_behind}
|
|
47
|
-
\nLast Error: #{@last_error}"
|
|
48
|
-
return [503, reason]
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def conn_close
|
|
53
|
-
@conn.close unless @conn.nil?
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
require 'celluloid'
|
|
3
|
-
|
|
4
|
-
# Celluloid worker
|
|
5
|
-
class HeartbeatWorker
|
|
6
|
-
include Celluloid
|
|
7
|
-
attr_reader :current_health
|
|
8
|
-
|
|
9
|
-
def initialize(config)
|
|
10
|
-
@config = config
|
|
11
|
-
async.worker
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def worker
|
|
15
|
-
loop do
|
|
16
|
-
begin
|
|
17
|
-
db = Health.new(@config)
|
|
18
|
-
@current_health = db.healthy?
|
|
19
|
-
sleep 15
|
|
20
|
-
ensure
|
|
21
|
-
db.conn_close unless db.nil?
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
data/mysql-heartbeat.gemspec
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
|
2
|
-
|
|
3
|
-
require "mysql-heartbeat/version"
|
|
4
|
-
|
|
5
|
-
Gem::Specification.new do |s|
|
|
6
|
-
s.name = 'mysql-heartbeat'
|
|
7
|
-
s.version = MysqlHeartBeat::VERSION.dup
|
|
8
|
-
s.date = '2013-10-28'
|
|
9
|
-
s.summary = "Queries the replication health of a MySQL server."
|
|
10
|
-
s.description = <<-EOF
|
|
11
|
-
Queries the replication health of a MySQL server.
|
|
12
|
-
A health monitor for MySQL replication. This can be used
|
|
13
|
-
in tandem with applications like HAProxy to check the
|
|
14
|
-
health of replication, and load balance across read slaves.
|
|
15
|
-
EOF
|
|
16
|
-
|
|
17
|
-
s.add_dependency 'sinatra', '~> 1.4'
|
|
18
|
-
s.add_dependency 'mysql2', '~> 0.3'
|
|
19
|
-
s.add_dependency 'celluloid', '~> 0.15'
|
|
20
|
-
s.add_dependency 'thin', '~> 1.6'
|
|
21
|
-
|
|
22
|
-
s.authors = ["John Barney"]
|
|
23
|
-
s.email = 'johnb0011@gmail.com'
|
|
24
|
-
s.required_ruby_version = '>= 1.9.3'
|
|
25
|
-
s.platform = Gem::Platform::RUBY
|
|
26
|
-
s.files = `git ls-files`.split("\n")
|
|
27
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
28
|
-
s.homepage = 'http://github.com/johnb0011/mysql_heartbeat'
|
|
29
|
-
end
|
data/spec/requests/base_spec.rb
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
# spec/features/base_spec.rb
|
|
3
|
-
require_relative '../spec_helper'
|
|
4
|
-
|
|
5
|
-
describe 'Root Path' do
|
|
6
|
-
describe 'OPTIONS /' do
|
|
7
|
-
before { options '/' }
|
|
8
|
-
|
|
9
|
-
it 'is successful' do
|
|
10
|
-
# Yep. I wrote a test to pass on a 503. Deal with it. (This will change)
|
|
11
|
-
expect(last_response.status).to eq(503)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
data/spec/spec_helper.rb
DELETED