galera-ha 0.1

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.
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: []