class Kontena::Cli::Services::StatsCommand
Constants
- MEM_MAX_LIMITS
Public Instance Methods
execute()
click to toggle source
# File lib/kontena/cli/services/stats_command.rb, line 17 def execute require_api_url token = require_token if tail? system('clear') render_header end loop do fetch_stats(token, name, tail?) break unless tail? sleep(2) end end
Private Instance Methods
fetch_stats(token, service_id, follow)
click to toggle source
# File lib/kontena/cli/services/stats_command.rb, line 33 def fetch_stats(token, service_id, follow) result = client(token).get("services/#{parse_service_id(service_id)}/stats") system('clear') if follow render_header result['stats'].each do |stat| render_stat_row(stat) end end
filesize_to_human(size)
click to toggle source
@param [Integer] size @return [String]
# File lib/kontena/cli/services/stats_command.rb, line 69 def filesize_to_human(size) return '0B' if size.to_f == 0.0 units = %w{B K M G T} e = (Math.log(size) / Math.log(1000)).floor s = '%.2f' % (size.to_f / 1000**e) s.sub(/\.?0*$/, units[e]) rescue FloatDomainError 'N/A' end
network_bytes(network, key)
click to toggle source
@param [Hash] network @param [String] key @return [Integer]
# File lib/kontena/cli/services/stats_command.rb, line 83 def network_bytes(network, key) (network.dig('internal', key) || 0) + (network.dig('external', key) || 0) end
render_header()
click to toggle source
# File lib/kontena/cli/services/stats_command.rb, line 42 def render_header puts '%-30.30s %-15s %-20s %-15s %-15s' % ['INSTANCE', 'CPU %', 'MEM USAGE/LIMIT', 'MEM %', 'NET I/O'] end
render_stat_row(stat)
click to toggle source
# File lib/kontena/cli/services/stats_command.rb, line 46 def render_stat_row(stat) memory = stat['memory'].nil? ? 'N/A' : filesize_to_human(stat['memory']['usage']) if !stat['memory'].nil? && (stat['memory']['limit'] && !MEM_MAX_LIMITS.include?(stat['memory']['limit'])) memory_limit = filesize_to_human(stat['memory']['limit']) memory_pct = "#{(stat['memory']['usage'].to_f / stat['memory']['limit'].to_f * 100).round(2)}%" else memory_limit = 'N/A' memory_pct = 'N/A' end cpu = stat['cpu'].nil? ? 'N/A' : stat['cpu']['usage'] network_in = stat['network'].nil? ? 'N/A' : filesize_to_human(network_bytes(stat['network'], 'rx_bytes')) network_out = stat['network'].nil? ? 'N/A' : filesize_to_human(network_bytes(stat['network'], 'tx_bytes')) prefix = self.name.split('/')[0] instance_name = stat['container_id'].gsub("#{prefix}-", "") puts '%-30.30s %-15s %-20s %-15s %-15s' % [ instance_name, "#{cpu}%", "#{memory} / #{memory_limit}", "#{memory_pct}", "#{network_in}/#{network_out}"] end