dribbled 0.8.2 → 0.9.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.
- data/lib/dribbled/cli.rb +18 -30
- data/lib/dribbled/drbd.rb +66 -25
- data/lib/dribbled/version.rb +1 -1
- metadata +2 -2
data/lib/dribbled/cli.rb
CHANGED
@@ -15,6 +15,13 @@ module Dribbled
|
|
15
15
|
COMPONENTS = %w(resources)
|
16
16
|
DEFAULT_CONFIG_FILE = File.join(ENV['HOME'],"/.senedsa/config")
|
17
17
|
|
18
|
+
STATUS = {
|
19
|
+
:ok => OpenStruct.new({ :num => 0, :str => "OK", }),
|
20
|
+
:warning => OpenStruct.new({ :num => 1, :str => "WARNING", }),
|
21
|
+
:critical => OpenStruct.new({ :num => 2, :str => "CRITICAL", }),
|
22
|
+
:unknown => OpenStruct.new({ :num => 3, :str => "UNKNOWN" })
|
23
|
+
}
|
24
|
+
|
18
25
|
def initialize(arguments)
|
19
26
|
@arguments = arguments
|
20
27
|
@whoami = File.basename($PROGRAM_NAME).to_sym
|
@@ -112,7 +119,7 @@ module Dribbled
|
|
112
119
|
output_message opts, 0 if (@arguments.size == 0 and @whoami != :check_drbd) or @global_options[:HELP]
|
113
120
|
|
114
121
|
@action = @whoami == :check_drbd ? :check : @arguments.shift.to_sym
|
115
|
-
raise OptionParser::InvalidArgument, "invalid action
|
122
|
+
raise OptionParser::InvalidArgument, "invalid action #{@action}" if actions[@action].nil?
|
116
123
|
actions[@action].order!(@arguments)
|
117
124
|
case @action
|
118
125
|
when :show
|
@@ -198,8 +205,8 @@ module Dribbled
|
|
198
205
|
|
199
206
|
def run_check
|
200
207
|
|
201
|
-
|
202
|
-
|
208
|
+
output = ''
|
209
|
+
status = :ok
|
203
210
|
|
204
211
|
# check for configuration vs running resources
|
205
212
|
|
@@ -215,41 +222,22 @@ module Dribbled
|
|
215
222
|
# + dstate should be: UpToDate/UpToDate
|
216
223
|
|
217
224
|
@drbdset.each do |r,res|
|
218
|
-
next if res.
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
po_cstate = "cs:#{res.cstate}" unless res.cstate == "Connected" and res.in_kernel? and res.in_configuration?
|
224
|
-
po_dstate = "ds:#{res.dstate}" unless res.dstate == "UpToDate/UpToDate" and res.in_kernel? and res.in_configuration?
|
225
|
-
|
226
|
-
unless po_cstate.gsub('cs:','').empty? and po_dstate.gsub('ds:','').empty?
|
227
|
-
if ['SyncSource','SyncTarget','VerifyS','VerifyT','PausedSyncS','PausedSyncT','StandAlone'].include? res.cstate
|
228
|
-
plugin_status = :warning
|
229
|
-
plugin_output += res.percent.nil? ? " #{res.id}:#{po_cstate};#{po_dstate}" : " #{res.id}:#{po_cstate}[#{res.percent}%,#{res.finish}];#{po_dstate}"
|
230
|
-
elsif not res.in_configuration?
|
231
|
-
plugin_status = :warning
|
232
|
-
plugin_output += " #{res.id}[unconfigured]>#{po_cstate}/;#{po_dstate}"
|
233
|
-
else
|
234
|
-
plugin_output += " #{res.id}>#{po_cstate};#{po_dstate}"
|
235
|
-
plugin_status = :critical
|
236
|
-
end
|
237
|
-
end
|
225
|
+
next if res.cs == 'Unconfigured'
|
226
|
+
s,o = res.status
|
227
|
+
output << " #{o}"
|
228
|
+
status = s if STATUS[s].num > STATUS[status].num
|
238
229
|
end
|
239
230
|
|
240
|
-
plugin_output = " all DRBD resources Connected, UpToDate/UpToDate" if plugin_output.empty? and plugin_status.empty?
|
241
|
-
plugin_status = :ok if plugin_status.empty?
|
242
|
-
|
243
231
|
case @action_options[:monitor]
|
244
232
|
when :nagios
|
245
233
|
case @action_options[:mode]
|
246
234
|
when :active
|
247
|
-
puts "#{
|
248
|
-
exit SendNsca::STATUS[
|
235
|
+
puts "#{status.to_s.upcase}:#{output}"
|
236
|
+
exit SendNsca::STATUS[status]
|
249
237
|
when :passive
|
250
238
|
sn = SendNsca.new @action_options
|
251
239
|
begin
|
252
|
-
sn.send
|
240
|
+
sn.send status, output
|
253
241
|
rescue SendNsca::SendNscaError => e
|
254
242
|
output_message "send_nsca failed: #{e.message}", 1
|
255
243
|
end
|
@@ -271,7 +259,7 @@ module Dribbled
|
|
271
259
|
loop do
|
272
260
|
@drbdset = DrbdSet.new @global_options
|
273
261
|
@drbdset.each do |r,resource|
|
274
|
-
if resource.
|
262
|
+
if resource.cs =~ /#{@action_options[:cstate]}/ or resource.ds =~ /#{@action_options[:dstate]}/ or resource.name == @action_options[:resource]
|
275
263
|
puts resource
|
276
264
|
end
|
277
265
|
end
|
data/lib/dribbled/drbd.rb
CHANGED
@@ -9,8 +9,8 @@ module Dribbled
|
|
9
9
|
attr_reader :resources_cfg_raw, :resources_run_raw
|
10
10
|
|
11
11
|
PROCDRBD_VERSION_RE = /^version:\s+(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)\s+\(api:(?<api>\d+)\/proto:(?<proto>[0-9-]+)/
|
12
|
-
PROCDRBD_RESOURCE_RE = /^\s*(?<id>\d+):\s+cs:(?<
|
13
|
-
PROCDRBD_URESOURCE_RE = /^\s*(?<id>\d+):\s+cs:(?<
|
12
|
+
PROCDRBD_RESOURCE_RE = /^\s*(?<id>\d+):\s+cs:(?<cs>[\w\/]+)\s+(st|ro):(?<ro>[\w\/]+)\s+ds:(?<ds>[\w\/]+)\s+/
|
13
|
+
PROCDRBD_URESOURCE_RE = /^\s*(?<id>\d+):\s+cs:(?<cs>[\w\/]+)/
|
14
14
|
PROCDRBD_ACTIVITY_RE = /^\s+\[[.>=]+\]\s+(?<activity>[a-z']+):\s+(?<percent>[0-9.]+)%\s+\(\d+\/\d+\)M(finish:\s+(?<finish>[0-9:]+)\s+)*/
|
15
15
|
PROCDRBD_ACTIVITY_STATUS_RE = /^\s+finish:\s+(?<finish>[0-9:]+)\s+/
|
16
16
|
|
@@ -36,7 +36,7 @@ module Dribbled
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def version
|
39
|
-
"
|
39
|
+
"#{@version_major}.#{@version_minor}.#{@version_path}"
|
40
40
|
end
|
41
41
|
|
42
42
|
protected
|
@@ -44,7 +44,7 @@ module Dribbled
|
|
44
44
|
def _read_procdrbd(resources_run_src)
|
45
45
|
@log.debug "Running configuration source: #{resources_run_src}" unless @log.nil?
|
46
46
|
resources_run = {}
|
47
|
-
@resources_run_raw = File.open(resources_run_src,
|
47
|
+
@resources_run_raw = File.open(resources_run_src,'r') { |f| f.read }
|
48
48
|
r = nil
|
49
49
|
@resources_run_raw.each_line do |line|
|
50
50
|
if /^\s*(\d+):/.match(line)
|
@@ -53,11 +53,11 @@ module Dribbled
|
|
53
53
|
resources_run[r].in_kernel = true
|
54
54
|
if PROCDRBD_RESOURCE_RE.match(line)
|
55
55
|
m = PROCDRBD_RESOURCE_RE.match(line)
|
56
|
-
resources_run[r].
|
57
|
-
resources_run[r].
|
58
|
-
resources_run[r].
|
56
|
+
resources_run[r].cs = m[:cs]
|
57
|
+
resources_run[r].ro = m[:ro]
|
58
|
+
resources_run[r].ds = m[:ds]
|
59
59
|
elsif PROCDRBD_URESOURCE_RE.match(line)
|
60
|
-
resources_run[r].
|
60
|
+
resources_run[r].cs = PROCDRBD_URESOURCE_RE.match(line)[:cs]
|
61
61
|
end
|
62
62
|
@log.debug " #{resources_run[r].inspect}" unless @log.nil?
|
63
63
|
elsif PROCDRBD_ACTIVITY_RE.match(line)
|
@@ -99,14 +99,14 @@ module Dribbled
|
|
99
99
|
end
|
100
100
|
if self[r].nil?
|
101
101
|
self[r] = DrbdResource.new r, @hostname
|
102
|
-
self[r].
|
103
|
-
self[r].
|
104
|
-
self[r].
|
102
|
+
self[r].cs = 'StandAlone'
|
103
|
+
self[r].ds = 'DUnknown'
|
104
|
+
self[r].ro = 'Unknown'
|
105
105
|
end
|
106
106
|
self[r].name = name
|
107
107
|
self[r].in_configuration = true
|
108
|
-
@log.debug " resource: #{r}, state: #{self[r].
|
109
|
-
if self[r].
|
108
|
+
@log.debug " resource: #{r}, state: #{self[r].ro}"
|
109
|
+
if self[r].ro == 'Primary/Secondary'
|
110
110
|
if hostname == @hostname
|
111
111
|
@log.debug " resource: #{r}, primary"
|
112
112
|
self[r].primary[:disk] = disk
|
@@ -118,7 +118,7 @@ module Dribbled
|
|
118
118
|
self[r].secondary[:device] = device
|
119
119
|
self[r].secondary[:hostname] = hostname
|
120
120
|
end
|
121
|
-
elsif self[r].
|
121
|
+
elsif self[r].ro == 'Secondary/Primary' or self[r].ro == 'Unknown'
|
122
122
|
if hostname == @hostname
|
123
123
|
@log.debug " resource: #{r}, secondary"
|
124
124
|
self[r].secondary[:disk] = disk
|
@@ -138,15 +138,15 @@ module Dribbled
|
|
138
138
|
class DrbdResource
|
139
139
|
|
140
140
|
attr_reader :id
|
141
|
-
attr_accessor :name, :
|
141
|
+
attr_accessor :name, :cs, :ds, :ro, :config, :primary, :secondary, :activity, :percent, :finish, :in_kernel, :in_configuration
|
142
142
|
|
143
143
|
def initialize(res,hostname)
|
144
144
|
@id = res
|
145
145
|
@name = nil
|
146
146
|
@config = nil
|
147
|
-
@
|
148
|
-
@
|
149
|
-
@
|
147
|
+
@ds = nil
|
148
|
+
@cs = nil
|
149
|
+
@ro = nil
|
150
150
|
@activity = nil
|
151
151
|
@percent = nil
|
152
152
|
@finish = nil
|
@@ -164,11 +164,38 @@ module Dribbled
|
|
164
164
|
@in_configuration
|
165
165
|
end
|
166
166
|
|
167
|
-
def
|
168
|
-
|
169
|
-
|
167
|
+
def status
|
168
|
+
s = :unknown
|
169
|
+
o = 'unable to assert health'
|
170
170
|
|
171
|
-
if
|
171
|
+
if self.cs == 'Unconfigured'
|
172
|
+
[:ok,"#{self.id}[unconfigured]"]
|
173
|
+
else
|
174
|
+
if self.in_kernel? and self.in_configuration?
|
175
|
+
if self.cs == 'Connected' and self.ds == 'UpToDate/UpToDate' and (self.ro == 'Primary/Secondary' or self.ro == 'Secondary/Primary')
|
176
|
+
s = :ok
|
177
|
+
else
|
178
|
+
if ['SyncSource','SyncTarget','VerifyS','VerifyT','PausedSyncS','PausedSyncT','StandAlone'].include? self.cs
|
179
|
+
s = :warning
|
180
|
+
elsif not self.in_configuration?
|
181
|
+
s = :warning
|
182
|
+
else
|
183
|
+
s = :critical
|
184
|
+
end
|
185
|
+
end
|
186
|
+
else
|
187
|
+
s = :unknown
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
[s,self.to_s(:concise)]
|
192
|
+
end
|
193
|
+
|
194
|
+
def to_s(mode=:line)
|
195
|
+
ph = @primary[:hostname].gsub(/\.[a-z0-9-]+\.[a-z0-9-]+$/,'') unless @primary[:hostname].nil?
|
196
|
+
sh = @secondary[:hostname].gsub(/\.[a-z0-9-]+\.[a-z0-9-]+$/,'') unless @secondary[:hostname].nil?
|
197
|
+
|
198
|
+
if @ro == 'Primary/Secondary'
|
172
199
|
h1 = ph; dev1 = @primary[:device]
|
173
200
|
h2 = sh; dev2 = @secondary[:device]
|
174
201
|
else
|
@@ -176,13 +203,27 @@ module Dribbled
|
|
176
203
|
h2 = ph; dev2 = @primary[:device]
|
177
204
|
end
|
178
205
|
|
179
|
-
percent_finish = @activity.nil? ? nil :
|
206
|
+
percent_finish = @activity.nil? ? nil : '[%3d%% %8s]' % [@percent,@finish]
|
207
|
+
|
208
|
+
case mode
|
209
|
+
when :line
|
210
|
+
fmt_string = '%2d %6s %-13s %15s %-22s %-20s %10s %-11s %10s %-11s'
|
211
|
+
percent_finish = @activity.nil? ? nil : '[%3d%% %8s]' % [@percent,@finish]
|
212
|
+
when :concise
|
213
|
+
fmt_string = '%s>%s:%s%s:%s:%s'
|
214
|
+
percent_finish = @activity.nil? ? nil : '[%d%%,%s]' % [@percent,@finish]
|
215
|
+
when :verbose
|
216
|
+
fmt_string = '%s'
|
217
|
+
else
|
218
|
+
fmt_string = '%s'
|
219
|
+
end
|
220
|
+
|
221
|
+
fmt_string % [@id,@name,@cs,percent_finish,@ro,@ds,h1,dev1,h2,dev2]
|
180
222
|
|
181
|
-
"%2d %6s %-13s %15s %-22s %-20s %10s %-11s %10s %-11s" % [@id,@name,@cstate,percent_finish,@dstate,@state,h1,dev1,h2,dev2]
|
182
223
|
end
|
183
224
|
|
184
225
|
def inspect
|
185
|
-
"#{self.class}:
|
226
|
+
"#{self.class}: #{@id}[#{@name}]: #{@cs},#{@ds},#{@ro}"
|
186
227
|
end
|
187
228
|
|
188
229
|
def check
|
data/lib/dribbled/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dribbled
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: xml-simple
|