galera-ha 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/bin/galera-ha +72 -0
  3. metadata +106 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 96a8863ed2d02130ec5491404a7d7a4fe3e5e2a2
4
+ data.tar.gz: 7071e73ed1133ec870c748e25262c74f1c15bb92
5
+ SHA512:
6
+ metadata.gz: bafd9f3344f6f76229330d4e4097e2eea76fdeaacd5b927f4a07cea9f77a6322781e495703403e99630d2862297a52a0562f2aa9171ac9ce6fccbd5c65735eeb
7
+ data.tar.gz: 4b6ea7808f06971bb73408d0a9658a8ef0d839e4d7b1f22ded71ecb21a8cd39b2fefc51c642f3fa9e69318fbb8a281b11f73e20a763ad236bb5857069e0bcb2e
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ # MySQL health check micro HTTP server
5
+ #
6
+ #
7
+ require 'rubygems' if RUBY_VERSION < '1.9.0'
8
+ require 'thin'
9
+ require 'mysql2'
10
+ require 'timeout'
11
+ require 'yaml'
12
+
13
+ class SimpleAdapter
14
+
15
+ $config = YAML::load( File.open '/etc/galera-ha.yaml' )
16
+
17
+ def mysql_connect
18
+
19
+ Timeout::timeout($config["server"]["query_timeout"]) do
20
+ begin
21
+ mysql = Mysql2::Client.new(
22
+ :host => $config["client"]["host"],
23
+ :port => $config["client"]["port"],
24
+ :username => $config["client"]["user"],
25
+ :password => $config["client"]["pass"]
26
+ )
27
+ wsrep_state = mysql.query("SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment'")
28
+ mysql.close
29
+ rescue => e
30
+ puts e.message
31
+ end
32
+ if ! wsrep_state.nil?
33
+ @synced = wsrep_state.first['Value']
34
+ else
35
+ @synced = 'none'
36
+ end
37
+ end
38
+ rescue Timeout::Error
39
+ @synced = 'none'
40
+ end
41
+
42
+
43
+ def call(env)
44
+ $0 = "/usr/local/bin/galera-ha"
45
+ mysql_connect
46
+ body = [""]
47
+ if @synced == 'Synced'
48
+ [
49
+ 200,
50
+ { 'Content-Type' => 'text/plain' },
51
+ body
52
+ ]
53
+ else
54
+ [
55
+ 504,
56
+ { 'Content-Type' => 'text/plain' },
57
+ body
58
+ ]
59
+ end
60
+ end
61
+ end
62
+
63
+ server = Thin::Server.new($config["server"]["host"], $config["server"]["port"]) do
64
+ use Rack::CommonLogger
65
+ map '/galera-state' do
66
+ run SimpleAdapter.new
67
+ end
68
+ end
69
+ server.log_file = '/var/log/galera-ha.log'
70
+ server.pid_file = '/home/galeraha/galera-ha.pid'
71
+ server.daemonize if $config["server"]["daemonize"]
72
+ server.start
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: galera-ha
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Tomas 'arteal' Hejatko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thin
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.7.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.7.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: mysql2
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.4'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.4.5
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.4'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.4.5
53
+ - !ruby/object:Gem::Dependency
54
+ name: json
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.8'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.8.3
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.8'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.8.3
73
+ description: Small Thin server monitoring Galera cluster members state - useful for
74
+ HAProxy HTTP check
75
+ email: tomas.hejatko@gmail.com
76
+ executables:
77
+ - galera-ha
78
+ extensions: []
79
+ extra_rdoc_files: []
80
+ files:
81
+ - bin/galera-ha
82
+ homepage: https://github.com/arteal/galera-ha
83
+ licenses:
84
+ - GPL-2.0
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 1.9.3
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.6.8
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: Galera readiness check
106
+ test_files: []