collectors/iostat/iostat in panoptimon-0.2.0 vs collectors/iostat/iostat in panoptimon-0.3.0

- old
+ new

@@ -14,11 +14,11 @@ [1,2].each { x = p.readline until x == "\n" } # header + first sample puts '{}' # beep -def prep l +def parse_header l want = { 'kb_read/s' => 'rkB/s', 'kb_write/s' => 'wkB/s', 'rrqm/s' => 'rrqm/s', 'wrqm/s' => 'wrqm/s', @@ -31,20 +31,22 @@ 'w_await' => 'w_await', 'util' => '%util', } head = l.chomp.split(/\s+/) head = Hash[*head.zip(0..(head.length-1)).flatten] - raise "oops" unless head.values_at(*want.values).length == want.values.length - o = {}; want.each {|k,v| o[k] = head[v]} + want.values.find_all{|x| not(head[x])}.tap {|missed| + warn "missing headers: "+ missed.join(', ') if missed.length > 0 + } + o = {}; want.each {|k,v| o[k] = head[v] if head[v]} return o end omap = nil group = {} until p.eof? l = p.readline("\n\n").split(/\n/) - omap ||= prep(l[0]) + omap ||= parse_header(l[0]) puts JSON::generate(Hash[*l.drop(1).map {|x| r = x.split(/\s+/) [r[0], # device name Hash[*omap.keys.map {|k| [k, r[omap[k]].to_f]}.flatten]] }.flatten])