lib/vmc/cli/app/stats.rb
require "vmc/cli/app/base"
module VMC::App
class Stats < Base
desc "Display application instance status"
group :apps, :info, :hidden => true
input :app, :desc => "Application to get the stats for",
:argument => true, :from_given => by_name(:app)
def stats
app = input[:app]
stats =
with_progress("Getting stats for #{c(app.name, :name)}") do |s|
begin
app.stats
rescue CFoundry::StatsError
s.fail do
err "Application #{b(app.name)} is not running."
return
end
end
end
line unless quiet?
table(
%w{instance cpu memory disk},
stats.sort_by { |idx, _| idx.to_i }.collect { |idx, info|
idx = c("\##{idx}", :instance)
if info[:state] == "DOWN"
[idx, c("down", :bad)]
else
stats = info[:stats]
usage = stats[:usage]
if usage
[ idx,
"#{percentage(usage[:cpu])}",
"#{usage(usage[:mem], stats[:mem_quota])}",
"#{usage(usage[:disk], stats[:disk_quota])}"
]
else
[idx, c("n/a", :neutral)]
end
end
})
end
def percentage(num, low = 50, mid = 70)
color =
if num <= low
:good
elsif num <= mid
:warning
else
:bad
end
c(format("%.1f\%", num), color)
end
def usage(used, limit)
"#{b(human_size(used))} of #{b(human_size(limit, 0))}"
end
end
end