46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
# File 'lib/mysql_health/command_line.rb', line 46
def initialize
@options = {}
@options[:server] = {}
@options[:check] = {}
@options[:log] = {}
begin
@optparse = OptionParser.new do |opts|
opts.banner = "Usage: #{$0} options"
@options[:check][:master] = false
opts.on( '--check:master', 'Master health check') do
@options[:check][:master] = true
end
@options[:check][:slave] = false
opts.on( '--check:slave', 'Slave health check') do |host|
@options[:check][:slave] = true
end
@options[:check][:database] = nil
opts.on( '--check:database NAME', 'Ensure that database exists') do |name|
@options[:check][:database] = name
end
@options[:check][:allow_overlapping] = false
opts.on( '--check:allow-overlapping', "Allow overlapping health checks (default: #{@options[:check][:allow_overlapping]})") do
@options[:check][:allow_overlapping] = true
end
@options[:check][:allow_master] = false
opts.on( '--check:allow-master', "Allow master to act as slave when --check:slave is used (default: #{@options[:check][:allow_master]})") do
@options[:check][:allow_master] = true
end
@options[:check][:interval] = '10s'
opts.on( '--check:interval INTERVAL', "Check health every INTERVAL (default: #{@options[:check][:interval]})") do |interval|
@options[:check][:interval] = interval.to_s
end
@options[:check][:delay] = '0s'
opts.on( '--check:delay DELAY', "Delay health checks for INTERVAL (default: #{@options[:check][:delay]})") do |delay|
@options[:check][:delay] = delay.to_s
end
@options[:check][:dsn] ||= "DBI:Mysql:mysql:localhost"
opts.on( '--check:dsn DSN', "MySQL DSN (default: #{@options[:check][:dsn]})") do |dsn|
@options[:check][:dsn] = dsn.to_s
end
@options[:check][:username] ||= "root"
opts.on( '--check:username USERNAME', "MySQL Username (default: #{@options[:check][:username]})") do |username|
@options[:check][:username] = username.to_s
end
@options[:check][:password] ||= ""
opts.on( '--check:password PASSWORD', "MySQL Password (default: #{@options[:check][:password]})") do |password|
@options[:check][:password] = password.to_s
end
@options[:server][:listen] = '0.0.0.0'
opts.on( '-l', '--server:listen ADDR', "Server listen address (default: #{@options[:server][:listen]})") do |addr|
@options[:server][:addr] = addr.to_s
end
@options[:server][:port] = 3305
opts.on( '-p', '--server:port PORT', "Server listen port (default: #{@options[:server][:port]})") do |port|
@options[:server][:port] = port.to_i
end
@options[:server][:daemonize] = false
opts.on( '-d', '--server:daemonize', "Daemonize the process (default: #{@options[:server][:daemonize]})") do
@options[:server][:daemonize] = true
end
@options[:server][:pid_file] = false
opts.on('-P', '--server:pid-file PID-FILE', "Pid-File to save the process id (default: #{@options[:server][:pid_file]})") do |pid_file|
@options[:server][:pid_file] = pid_file
end
@options[:log][:level] = Logger::INFO
opts.on( '--log:level LEVEL', 'Logging level (default: INFO)' ) do|level|
@options[:log][:level] = Logger.const_get level.upcase
end
@options[:log][:file] = STDERR
opts.on( '--log:file FILE', 'Write logs to FILE (default: STDERR)' ) do|file|
@options[:log][:file] = File.open(file, File::WRONLY | File::APPEND | File::CREAT)
end
@options[:log][:age] = 7
opts.on( '--log:age DAYS', "Rotate logs after DAYS pass (default: #{@options[:log][:age]})" ) do|days|
@options[:log][:age] = days.to_i
end
@options[:log][:size] = 1024*1024*10
opts.on( '--log:size SIZE', "Rotate logs after the grow past SIZE bytes (default: #{@options[:log][:size]})" ) do |size|
@options[:log][:size] = size.to_i
end
end
@optparse.parse!
raise ArgumentException.new("No action specified") if @options[:check][:master] == false && @options[:check][:slave] == false
@log = Logger.new(@options[:log][:file], @options[:log][:age], @options[:log][:size])
@log.level = @options[:log][:level]
rescue ArgumentException => e
puts e.message
puts @optparse
exit 1
end
end
|