elesai 0.6.9 → 0.8.0

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/README.md CHANGED
@@ -9,14 +9,18 @@
9
9
  where:
10
10
 
11
11
  * `<action>` is one of `show` or `check`
12
- * `<component>` is one of `virtualdrive` (or `vd`) or `physicaldrive` (or `pd`) (for `show` action)
12
+ * `<component>` (for `show` action) is one of
13
+ * `virtualdrive` (or `vd`)
14
+ * `physicaldrive` (or `pd`)
15
+ * `bbu`
13
16
 
14
17
  Global options include:
15
18
 
16
19
  * `-d`, `--debug`: enable *debug* mode
17
20
  * `-f`, `--fake DIRECTORY`: specifies path to directory containing output of MegaCli invocations:
18
- * `ldlist_aall`: output from `MegaCli -pdlist -aall`
19
- * `ldpdinfo_aall`: output from `MegaCli -ldpdinfo -aall`
21
+ * `ldlist_aall`: output from `MegaCli -pdlist -aall -nolog`
22
+ * `ldpdinfo_aall`: output from `MegaCli -ldpdinfo -aall -nolog`
23
+ * `adpbbucmd_aall`: output from `MegaCli -adpcbucmd -aall -nolog`
20
24
  * `-m`, `--megacli MEGACLI`: path to `MegaCli` binary (if noth in `$PATH`)
21
25
  * `-a`, `--about`: display general information about `elesai`
22
26
  * `-V`, `--version`: display `elesai`'s version
@@ -29,7 +33,7 @@ The `<check>` can have options specific to itself:
29
33
  * `-c`, `--config CONFIG`: Path to Senedsa (send_nsca) configuration
30
34
  * `-S`, `--svc_descr SVC_DESCR`: Nagios service description
31
35
 
32
- *Elesai* uses [Senedsa](https://rubygems.org/gems/senedsa "Senedsa") for Nagios passive check submission, which can use a configuration file to set options.
36
+ *Elesai* uses [Senedsa](https://rubygems.org/gems/senedsa "Senedsa") for Nagios passive check submission, which can use a configuration file to set options. Additionally, it will invoke `MegaCli` with `sudo` if not run by `root`.
33
37
 
34
38
  # Invocations
35
39
 
data/lib/elesai/cli.rb CHANGED
@@ -69,7 +69,7 @@ module Elesai
69
69
  :show => OptionParser.new do |aopts|
70
70
  aopts.banner = "Usage: #{ID} [options] show <component>"
71
71
  aopts.separator ""
72
- aopts.separator " <component> is physicaldisk|pd, virtualdisk|vd"
72
+ aopts.separator " <component> is physicaldisk|pd, virtualdisk|vd, bbu"
73
73
  end,
74
74
  :check => OptionParser.new do |aopts|
75
75
  aopts.banner = "Usage: #{ID} [options] check [check_options]"
@@ -148,6 +148,10 @@ module Elesai
148
148
  @lsi.physicaldrives.each do |id,physicaldrive|
149
149
  print "#{physicaldrive}\n"
150
150
  end
151
+ when 'bbu'
152
+ @lsi.bbus.each do |bbu|
153
+ print "#{bbu}\n"
154
+ end
151
155
  else
152
156
  raise ArgumentError, "invalid component #{component}"
153
157
  end
@@ -162,26 +166,35 @@ module Elesai
162
166
  drive_plugin_string = "[PD:#{physicaldrive._id}:#{physicaldrive[:size]}:#{physicaldrive[:mediatype]}:#{physicaldrive[:pdtype]}]"
163
167
  unless physicaldrive[:firmwarestate].state == :online or physicaldrive[:firmwarestate].state == :hotspare
164
168
  plugin_output += " #{drive_plugin_string}:#{physicaldrive[:firmwarestate].state}"
169
+ plugin_status = :critical if physicaldrive[:firmwarestate] == :failed
165
170
  plugin_status = :warning if plugin_status.empty?
166
171
  end
167
- unless physicaldrive[:mediaerrorcount].to_i == 0
168
- plugin_output += " #{drive_plugin_string}:me:#{physicaldrive[:mediaerrorcount]}"
172
+ unless physicaldrive[:mediaerrorcount].to_i < 10
173
+ plugin_output += " #{drive_plugin_string}:MediaError:#{physicaldrive[:mediaerrorcount]}"
169
174
  plugin_status = :warning if plugin_status.empty?
170
175
  end
171
- unless physicaldrive[:predictivefailurecount].to_i == 0
172
- plugin_output += " #{drive_plugin_string}:pf:#{physicaldrive[:predictivefailurecount]}"
176
+ unless physicaldrive[:predictivefailurecount].to_i < 5
177
+ plugin_output += " #{drive_plugin_string}:PredictiveFailure:#{physicaldrive[:predictivefailurecount]}"
173
178
  plugin_status = :warning if plugin_status.empty?
174
179
  end
175
180
  end
176
181
 
177
- plugin_output = "no LSI RAID errors found" if plugin_output.empty? and plugin_status.empty?
182
+ @lsi.virtualdrives.each do |vd|
183
+ vd_plugin_string = "[VD:#{vd._id}]"
184
+ unless vd[:state] == :optimal
185
+ plugin_output += " #{vd_plugin_string}:#{vd[:state]}"
186
+ plugin_status = :critical
187
+ end
188
+ end
189
+
190
+ plugin_output = " no LSI RAID errors found" if plugin_output.empty? and plugin_status.empty?
178
191
  plugin_status = :ok if plugin_status.empty?
179
192
 
180
193
  case @action_options[:monitor]
181
194
  when :nagios
182
195
  case @action_options[:mode]
183
196
  when :active
184
- puts "#{plugin_status.to_s.upcase}: #{plugin_output}"
197
+ puts "#{plugin_status.to_s.upcase}:#{plugin_output}"
185
198
  exit SendNsca::STATUS[plugin_status]
186
199
  when :passive
187
200
  sn = SendNsca.new @action_options
@@ -202,9 +215,4 @@ module Elesai
202
215
  end
203
216
 
204
217
  end
205
- end
206
-
207
-
208
-
209
-
210
-
218
+ end
data/lib/elesai/lsi.rb CHANGED
@@ -2,7 +2,7 @@ module Elesai
2
2
 
3
3
  class LSIArray
4
4
 
5
- attr_reader :adapters, :virtualdrives, :physicaldrives, :enclosures
5
+ attr_reader :adapters, :virtualdrives, :physicaldrives, :bbus, :enclosures
6
6
 
7
7
  def initialize(opts)
8
8
  @adapters = []
@@ -10,12 +10,15 @@ module Elesai
10
10
  @physicaldrives = {}
11
11
  @enclosures = []
12
12
  @spans = []
13
+ @bbus = []
13
14
 
14
15
  case opts[:hint]
15
16
  when :pd,:physicaldrive
16
17
  PDlist_aAll.new.parse!(self,opts)
17
18
  when :vd,:virtualdrive
18
19
  LDPDinfo_aAll.new.parse!(self,opts)
20
+ when :bbu
21
+ AdpBbuCmd_aAll.new.parse!(self,opts)
19
22
  else
20
23
  PDlist_aAll.new.parse!(self,opts)
21
24
  LDPDinfo_aAll.new.parse!(self,opts)
@@ -35,6 +38,10 @@ module Elesai
35
38
  @physicaldrives[pd._id]
36
39
  end
37
40
 
41
+ def add_bbu(bbu)
42
+ @bbus.push(bbu)
43
+ end
44
+
38
45
  def to_s
39
46
  lsiarrayout = "LSI Array\n"
40
47
  @adapters.each do |adapter|
@@ -205,5 +212,41 @@ module Elesai
205
212
  self[:_virtualdrives]
206
213
  end
207
214
  end
215
+
216
+ ### BBU
217
+
218
+ class BBU < Hash
219
+
220
+ class Stub < Hash
221
+ def inspect
222
+ "#{self.class}:#{self.__id__}"
223
+ end
224
+ end
225
+ class Status < Stub; end
226
+ class FirmwareStatus < Stub; end
227
+ class DesignInfo < Stub; end
228
+ class Properties < Stub; end
229
+ class CapacityInfo < Stub; end
230
+ class GasGaugeStatus < Stub; end
231
+
232
+ def initialize
233
+ self[:status] = Status.new
234
+ self[:firmwarestatus] = FirmwareStatus.new
235
+ self[:designinfo] = DesignInfo.new
236
+ self[:properties] = Properties.new
237
+ self[:capacityinfo] = CapacityInfo.new
238
+ self[:gasgaugestatus] = GasGaugeStatus.new
239
+ self[:capacityinfo][:absolutestateofcharge] = '-'
240
+ end
241
+
242
+ def inspect
243
+ "#{self.class}:#{self.__id__}"
244
+ end
245
+
246
+ def to_s
247
+ "[BBU] %-5s %-4s %-11s %3s:%s %s:%s %s:%s %-4s %s" % [self[:batterytype],self[:designinfo][:devicechemistry],self[:firmwarestatus][:chargingstatus],self[:firmwarestatus][:learncycleactive],self[:firmwarestatus][:learncyclestatus],self[:voltage].gsub(/\s/,''),self[:firmwarestatus][:voltage],self[:temperature].gsub(/\s/,''),self[:firmwarestatus][:temperature],self[:capacityinfo][:absolutestateofcharge].gsub(/\s/,''),self[:properties][:nextlearntime]]
248
+ #puts self[:firmwarestatus].keys
249
+ end
250
+ end
208
251
  end
209
252
  end
@@ -12,15 +12,23 @@ module Elesai
12
12
  VIRTUALDRIVE_RE = /^Virtual\s+Drive:\s+\d+\s+\((?<key>Target\s+Id):\s+(?<value>\d+)\)/
13
13
  SPAN_RE = /^Span:\s+(?<value>\d+)/
14
14
  PHYSICALDRIVE_RE = /^(?<key>Enclosure\s+Device\s+ID):\s+(?<value>\d+)/
15
- ATTRIBUTE_RE = /^(?<key>[A-Za-z0-9()\s#'-.]+):(?<value>.*)/
15
+ ATTRIBUTE_RE = /^(?<key>[A-Za-z0-9()\s#'-.&]+)[:|=](?<value>.*)/
16
16
  EXIT_RE = /^Exit Code: /
17
17
 
18
+ BBU_RE = /^BBU status for Adapter:\s+(?<value>\d+)/
19
+ BBU_FIRMWARESTATUS_RE = /^BBU Firmware Status:/
20
+ BBU_DESIGNINFO_RE = /^BBU Design Info for Adapter:\s+(?<value>\d+)/
21
+ BBU_PROPERTIES_RE = /^BBU Properties for Adapter:\s+(?<value>\d+)/
22
+ BBU_GASGAUGESTATUS_RE = /^GasGuageStatus:/
23
+ BBU_CAPACITYINFO_RE = /^BBU Capacity Info for Adapter:\s+(?<value>\d+)/
24
+
25
+
18
26
  ### Context
19
27
 
20
28
  class Context
21
29
 
22
30
  def initialize(current_state,lsi)
23
- current_state.meta[:context] = { :stack => [], :adapter => nil, :virtualdrive => nil, :physicaldrive => nil }
31
+ current_state.meta[:context] = { :stack => [] }
24
32
  @context = current_state.meta[:context]
25
33
  @lsi = lsi
26
34
  @log = Elesai::Logger.instance.log
@@ -29,7 +37,7 @@ module Elesai
29
37
  def open(component)
30
38
  @log.debug " * Open #{component.inspect}"
31
39
  @context[:stack].push(component)
32
- @context[component.type] = component
40
+ @context[component.class] = component
33
41
  @log.debug " + context: #{@context[:stack]}"
34
42
  end
35
43
 
@@ -42,17 +50,20 @@ module Elesai
42
50
 
43
51
  def close
44
52
  component = @context[:stack].pop
45
- @context[component.type] = nil
53
+ @context[component.class] = nil
46
54
  @log.debug " * Close #{component.inspect}"
47
- if component.type_of? :physicaldrive
48
- pd = @lsi.add_physicaldrive(component)
49
- pd.add_adapter(adapter)
50
- pd.add_virtualdrive(virtualdrive) unless virtualdrive.nil?
51
- adapter.add_physicaldrive(pd)
52
- elsif component.type_of? :virtualdrive
53
- vd = @lsi.add_virtualdrive(component)
54
- elsif component.type_of? :adapter
55
- @lsi.add_adapter(component)
55
+ case component
56
+ when Elesai::LSIArray::PhysicalDrive
57
+ pd = @lsi.add_physicaldrive(component)
58
+ pd.add_adapter(adapter)
59
+ pd.add_virtualdrive(virtualdrive) unless virtualdrive.nil?
60
+ adapter.add_physicaldrive(pd)
61
+ when Elesai::LSIArray::VirtualDrive
62
+ vd = @lsi.add_virtualdrive(component)
63
+ when Elesai::LSIArray::Adapter
64
+ @lsi.add_adapter(component)
65
+ when Elesai::LSIArray::BBU
66
+ @lsi.add_bbu(component)
56
67
  end
57
68
  @log.debug " + context: #{@context[:stack]}"
58
69
  end
@@ -62,19 +73,49 @@ module Elesai
62
73
  end
63
74
 
64
75
  def adapter
65
- @context[:adapter]
76
+ @context[Elesai::LSIArray::Adapter]
66
77
  end
67
78
 
68
79
  def virtualdrive
69
- @context[:virtualdrive]
80
+ @context[Elesai::LSIArray::VirtualDrive]
70
81
  end
71
82
 
72
83
  def physicaldrive
73
- @context[:physicaldrive]
84
+ @context[Elesai::LSIArray::PhysicalDrive]
85
+ end
86
+
87
+ def bbu
88
+ @context[Elesai::LSIArray::BBU]
74
89
  end
75
90
 
76
91
  end
77
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
+
78
119
  ### State Machine Handlers
79
120
 
80
121
  # Start
@@ -94,9 +135,8 @@ module Elesai
94
135
  def on_adapter_entry(old_state, event, *args)
95
136
  @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
96
137
 
97
- @context.close unless @context.current.nil? or @context.current.type_of? :adapter
138
+ @context.close unless @context.current.nil? or @context.current === Elesai::LSIArray::Adapter
98
139
  @context.open args[0]
99
-
100
140
  end
101
141
 
102
142
  def on_adapter_exit(new_state, event, *args)
@@ -115,7 +155,7 @@ module Elesai
115
155
  @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
116
156
 
117
157
  unless @context.current.nil?
118
- if @context.current.type_of? :virtualdrive
158
+ if @context.current === Elesai::LSIArray::VirtualDrive
119
159
  @context.close
120
160
  end
121
161
  end
@@ -152,7 +192,7 @@ module Elesai
152
192
  end
153
193
 
154
194
  def on_attribute_entry(old_state, event, *args)
155
- @log.debug " [#{current_state}] entry: leaving #{old_state}; args: #{args}"
195
+ @log.debug " [#{current_state}] entry: leaving #{old_state}; args: #{args}; context: #{@context.current.class}"
156
196
 
157
197
 
158
198
  c = @context.current
@@ -185,11 +225,113 @@ module Elesai
185
225
 
186
226
  def on_attribute_exit(new_state, event, *args)
187
227
  @log.debug " [#{current_state}] exit: entering #{new_state} throught event #{event}; args: #{args}"
188
- @context.close if @context.current.type_of? :physicaldrive and event != :attribute_line
228
+ @context.close if @context.current.class == Elesai::LSIArray::PhysicalDrive and event != :attribute_line
229
+
230
+ @context.flash!(new_state)
231
+ end
232
+
233
+ # BBU
234
+
235
+ def bbu_line(bbu,key,value)
236
+ @log.debug " [#{current_state}] event: bbu_line: new #{bbu.inspect}"
237
+ bbu[key.to_sym] = value.to_i
238
+ end
239
+
240
+ def on_bbu_entry(old_state, event, *args)
241
+ @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
242
+ @context.open args[0]
243
+ end
244
+
245
+ def on_bbu_exit(new_state, event, *args)
246
+ @log.debug " [#{current_state}] on_exit: entering #{new_state}; args: #{args}"
247
+ @context.flash!(new_state)
248
+ end
249
+
250
+ # BBU Firmware Status
251
+
252
+ def bbu_firmwarestatus_line
253
+ @log.debug " [#{current_state}] event: bbu_firmware_line:"
254
+ end
255
+
256
+ def on_bbu_firmwarestatus_entry(old_state, event, *args)
257
+ @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
258
+ @context.open @context.current[:firmwarestatus]
259
+ end
260
+
261
+ def on_bbu_firmwarestatus_exit(new_state, event, *args)
262
+ @log.debug " [#{current_state}] on_exit: entering #{new_state}; args: #{args}"
263
+ @context.flash!(new_state)
264
+ end
265
+
266
+ # BBU DesignInfo Status
267
+
268
+ def bbu_designinfo_line
269
+ @log.debug " [#{current_state}] event: bbu_designinfo_line:"
270
+ end
271
+
272
+ def on_bbu_designinfo_entry(old_state, event, *args)
273
+ @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
274
+ @context.close
275
+ @context.open @context.current[:designinfo]
276
+ end
277
+
278
+ def on_bbu_designinfo_exit(new_state, event, *args)
279
+ @log.debug " [#{current_state}] on_exit: entering #{new_state}; args: #{args}"
280
+ @context.flash!(new_state)
281
+ end
282
+
283
+ # BBU Properties Status
284
+
285
+ def bbu_properties_line
286
+ @log.debug " [#{current_state}] event: bbu_designinfo_line:"
287
+ end
288
+
289
+ def on_bbu_properties_entry(old_state, event, *args)
290
+ @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
291
+ @context.close
292
+ @context.open @context.current[:properties]
293
+ end
294
+
295
+ def on_bbu_properties_exit(new_state, event, *args)
296
+ @log.debug " [#{current_state}] on_exit: entering #{new_state}; args: #{args}"
297
+ @context.flash!(new_state)
298
+ end
299
+
300
+ # BBU GasGuage Status
301
+
302
+ def bbu_gasgaugestatus_line
303
+ @log.debug " [#{current_state}] event: bbu_gasgaugestatus_line:"
304
+ end
305
+
306
+ def on_bbu_gasgaugestatus_entry(old_state, event, *args)
307
+ @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
308
+ @context.close
309
+ @context.open @context.current[:gasgaugestatus]
310
+ end
311
+
312
+ def on_bbu_gasgaugestatus_exit(new_state, event, *args)
313
+ @log.debug " [#{current_state}] on_exit: entering #{new_state}; args: #{args}"
314
+ @context.flash!(new_state)
315
+ end
316
+
317
+ # BBU Capacity Info
318
+
319
+ def bbu_capacityinfo_line
320
+ @log.debug " [#{current_state}] event: bbu_capacityinfo_line:"
321
+ end
322
+
323
+ def on_bbu_capacityinfo_entry(old_state, event, *args)
324
+ @log.debug " [#{current_state}] on_entry: leaving #{old_state}; args: #{args}"
325
+ @context.close
326
+ @context.open @context.current[:capacityinfo]
327
+ end
189
328
 
329
+ def on_bbu_capacityinfo_exit(new_state, event, *args)
330
+ @log.debug " [#{current_state}] on_exit: entering #{new_state}; args: #{args}"
190
331
  @context.flash!(new_state)
191
332
  end
192
333
 
334
+
193
335
  # Exit
194
336
 
195
337
  def exit_line
@@ -203,6 +345,17 @@ module Elesai
203
345
  end
204
346
  end
205
347
 
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
206
359
  ### Regular Expression Match Handlers
207
360
 
208
361
  # Adapter
@@ -241,6 +394,40 @@ module Elesai
241
394
  attribute_line!(key,value)
242
395
  end
243
396
 
397
+ # BBU
398
+ def bbu_match(match)
399
+ @log.debug "BBU! #{match.string}"
400
+ key = 'id'
401
+ value = match[:value]
402
+ adapter_line(LSIArray::Adapter.new,key,value)
403
+ bbu_line!(LSIArray::BBU.new,key,value)
404
+ end
405
+
406
+ def bbu_firmwarestatus_match(match)
407
+ @log.debug "BBU FIRMWARE! #{match.string}"
408
+ bbu_firmwarestatus_line!
409
+ end
410
+
411
+ def bbu_designinfo_match(match)
412
+ @log.debug "BBU DESIGN INFO! #{match.string}"
413
+ bbu_designinfo_line!
414
+ end
415
+
416
+ def bbu_properties_match(match)
417
+ @log.debug "BBU PROPERTIES! #{match.string}"
418
+ bbu_properties_line!
419
+ end
420
+
421
+ def bbu_capacityinfo_match(match)
422
+ @log.debug "BBU CAPACITY INFO! #{match.string}"
423
+ bbu_capacityinfo_line!
424
+ end
425
+
426
+ def bbu_gasgaugestatus_match(match)
427
+ @log.debug "BBU GAS GUAGE STATUS! #{match.string}"
428
+ bbu_gasgaugestatus_line!
429
+ end
430
+
244
431
  # Exit
245
432
 
246
433
  def exit_match(match)
@@ -262,6 +449,7 @@ module Elesai
262
449
  if opts[:fake].start_with? '-'
263
450
  megacli = opts[:megacli].nil? ? "Megacli" : opts[:megacli]
264
451
  command = "#{megacli} #{opts[:fake]} -nolog"
452
+ command = Process.uid == 0 ? command : "sudo " << command
265
453
  output, stderr_str, status = Open3.capture3(command)
266
454
  raise RuntimeError, stderr_str unless status.exitstatus == 0
267
455
  else
@@ -274,11 +462,17 @@ module Elesai
274
462
  next if line == ''
275
463
 
276
464
  case line
277
- when ADAPTER_RE then adapter_match(ADAPTER_RE.match(line))
278
- when VIRTUALDRIVE_RE then virtualdrive_match(VIRTUALDRIVE_RE.match(line))
279
- when PHYSICALDRIVE_RE then physicaldrive_match(PHYSICALDRIVE_RE.match(line))
280
- when EXIT_RE then exit_match(EXIT_RE.match(line))
281
- when ATTRIBUTE_RE then attribute_match(ATTRIBUTE_RE.match(line))
465
+ when ADAPTER_RE then adapter_match(ADAPTER_RE.match(line))
466
+ when BBU_RE then bbu_match(BBU_RE.match(line))
467
+ when VIRTUALDRIVE_RE then virtualdrive_match(VIRTUALDRIVE_RE.match(line))
468
+ when PHYSICALDRIVE_RE then physicaldrive_match(PHYSICALDRIVE_RE.match(line))
469
+ when BBU_FIRMWARESTATUS_RE then bbu_firmwarestatus_match(BBU_FIRMWARESTATUS_RE.match(line))
470
+ when BBU_DESIGNINFO_RE then bbu_designinfo_match(BBU_DESIGNINFO_RE.match(line))
471
+ when BBU_PROPERTIES_RE then bbu_properties_match(BBU_PROPERTIES_RE.match(line))
472
+ when BBU_CAPACITYINFO_RE then bbu_capacityinfo_match(BBU_CAPACITYINFO_RE.match(line))
473
+ when BBU_GASGAUGESTATUS_RE then bbu_gasgaugestatus_match(BBU_GASGAUGESTATUS_RE.match(line))
474
+ when EXIT_RE then exit_match(EXIT_RE.match(line))
475
+ when ATTRIBUTE_RE then attribute_match(ATTRIBUTE_RE.match(line))
282
476
  else raise StandardError, "cannot parse '#{line}'"
283
477
  end
284
478
 
@@ -388,5 +582,60 @@ module Elesai
388
582
 
389
583
  end
390
584
 
585
+ class AdpBbuCmd_aAll < Megacli
586
+
587
+ def parse!(lsi,opts)
588
+ fake = opts[:fake].nil? ? "-AdpBbuCmd -aAll" : File.join(opts[:fake],"adpbbucmd_aall")
589
+ super lsi, :fake => fake, :megacli => opts[:megacli]
590
+ end
591
+
592
+ workflow do
593
+
594
+ state :start do
595
+ event :bbu_line, :transitions_to => :bbu
596
+ event :exit_line, :transitions_to => :exit
597
+ end
598
+
599
+ state :bbu do
600
+ event :attribute_line, :transitions_to => :attribute
601
+ event :bbu_firmwarestatus_line, :transitions_to => :bbu_firmwarestatus
602
+ end
603
+
604
+ state :bbu_firmwarestatus do
605
+ event :attribute_line, :transitions_to => :attribute
606
+ end
607
+
608
+ state :bbu_capacityinfo do
609
+ event :attribute_line, :transitions_to => :attribute
610
+ end
611
+
612
+ state :bbu_designinfo do
613
+ event :attribute_line, :transitions_to => :attribute
614
+ end
615
+
616
+ state :bbu_gasgaugestatus do
617
+ event :attribute_line, :transitions_to => :attribute
618
+ end
619
+
620
+ state :bbu_properties do
621
+ event :attribute_line, :transitions_to => :attribute
622
+ event :exit_line, :transitions_to => :exit
623
+ end
624
+
625
+ state :attribute do
626
+ event :attribute_line, :transitions_to => :attribute
627
+ event :bbu_firmwarestatus_line, :transitions_to => :bbu_firmwarestatus
628
+ event :bbu_designinfo_line, :transitions_to => :bbu_designinfo
629
+ event :bbu_properties_line, :transitions_to => :bbu_properties
630
+ event :bbu_gasgaugestatus_line, :transitions_to => :bbu_gasgaugestatus
631
+ event :bbu_capacityinfo_line, :transitions_to => :bbu_capacityinfo
632
+ event :exit_line, :transitions_to => :exit
633
+ end
634
+
635
+ state :exit
636
+ end
637
+
638
+ end
639
+
391
640
 
392
641
  end
@@ -1,3 +1,3 @@
1
1
  module Elesai
2
- VERSION = "0.6.9"
2
+ VERSION = "0.8.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elesai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.8.0
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: 2012-08-08 00:00:00.000000000 Z
12
+ date: 2012-09-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: workflow