diff --git a/lib/pve/cli.rb b/lib/pve/cli.rb index b2bf2cc..5c232ca 100644 --- a/lib/pve/cli.rb +++ b/lib/pve/cli.rb @@ -183,13 +183,13 @@ class PVE::Cli end push = if target and status - lambda {|n| to.virt n if n === target and status.include?( n.state) } + lambda {|n| to.push tablized_virt( n) if n === target and status.include?( n.state) } elsif target - lambda {|n| to.virt n if n === target } + lambda {|n| to.push tablized_virt( n) if n === target } elsif status - lambda {|n| to.virt n if status.include? n.state } + lambda {|n| to.push tablized_virt( n) if status.include? n.state } else - to.method :virt + lambda {|n| to.push tablized_virt( n) } end yield push to.print order: sort.each_char.map {|c| (2*c.ord[5]-1) * (' sainhucmd'.index( c.downcase)) } @@ -274,4 +274,47 @@ class PVE::Cli end to.print order: [1,2] end + + COLORS = %w[black red green yellow blue magenta cyan white].each_with_index.to_h + def fgcolor color + if /\Abright[-_]?(.*)\z/ =~ color + c = COLORS[$1] + c.nil? ? nil : "1;3#{c}" + else + c = COLORS[color] + c.nil? ? nil : "3#{c}" + end + end + + def tablized_virt v + ha = v.respond_to?( :ha) ? v.ha : nil + unknown = TablizedOutput::V.new 0, '-' + node = v.node.is_a?(String) ? v.node : v.node.node + if color = @cfg[:hosts]&.[](node.to_sym)&.[](:color) + node = ColoredString.new node, fgcolor( color) + end + [ + case v.status + when "running", "online" then ColoredString.new v.status, "32" + when "stopped" then ColoredString.new v.status, "31" + else v.status + end, + ha&.state || '·', + case v.t + when "nd" then ColoredString.new v.sid, "33" + when "qm" then ColoredString.new v.sid, "35" + when "ct" then ColoredString.new v.sid, "36" + else v.sid + end, + v.name, node, + v.respond_to?(:uptime) ? TablizedOutput::V.new( v.uptime, Measured.seconds( v.uptime)) : unknown, + v.respond_to?(:cpu) ? TablizedOutput::Percentage.new( v.cpu) : unknown, + v.respond_to?(:mem) ? TablizedOutput::V.new( v.mem, Measured.bytes( v.mem)) : unknown, + v.respond_to?(:maxmem) ? TablizedOutput::Percentage.new( v.mem/v.maxmem.to_f) : unknown, + v.respond_to?(:disk) ? TablizedOutput::V.new( v.disk.to_i, Measured.bytes( v.disk.to_i)) : unknown, + if v.respond_to?(:maxdisk) and 0 < v.maxdisk.to_i + TablizedOutput::Percentage.new( v.disk.to_f/v.maxdisk.to_f) + else unknown end, + ] + end end diff --git a/lib/pve/helper.rb b/lib/pve/helper.rb index 3c92065..45f0515 100644 --- a/lib/pve/helper.rb +++ b/lib/pve/helper.rb @@ -178,32 +178,4 @@ class TablizedOutput }.join( "\e[3#{i.even? ? 6 : 3}m | \e[0m") end end - - def virt v - ha = v.respond_to?( :ha) ? v.ha : nil - unknown = V.new 0, '-' - push [ - case v.status - when "running", "online" then ColoredString.new v.status, "32" - when "stopped" then ColoredString.new v.status, "31" - else v.status - end, - ha&.state || '·', - case v.t - when "nd" then ColoredString.new v.sid, "33" - when "qm" then ColoredString.new v.sid, "35" - when "ct" then ColoredString.new v.sid, "36" - else v.sid - end, - v.name, v.node.is_a?(String) ? v.node : v.node.node, - v.respond_to?(:uptime) ? V.new( v.uptime, Measured.seconds( v.uptime)) : unknown, - v.respond_to?(:cpu) ? Percentage.new( v.cpu) : unknown, - v.respond_to?(:mem) ? V.new( v.mem, Measured.bytes( v.mem)) : unknown, - v.respond_to?(:maxmem) ? Percentage.new( v.mem/v.maxmem.to_f) : unknown, - v.respond_to?(:disk) ? V.new( v.disk.to_i, Measured.bytes( v.disk.to_i)) : unknown, - if v.respond_to?(:maxdisk) and 0 < v.maxdisk.to_i - Percentage.new( v.disk.to_f/v.maxdisk.to_f) - else unknown end, - ] - end end