class Morpheus::Cli::UsageCommand

CLI command usages UI is Costing - Usage API is /usage and returns usages

Public Instance Methods

_get(id, params, options) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 123
def _get(id, params, options)
  usage = nil
  @usage_interface.setopts(options)
  if options[:dry_run]
    print_dry_run @usage_interface.dry.get(id, params)
    return
  end
  json_response = @usage_interface.get(id, params)
  usage = json_response[usage_object_key]
  render_response(json_response, options, usage_object_key) do
    print_h1 "Usage Details", [], options
    print cyan
    show_columns = {
      "ID" => 'id',
      "Cloud" => 'zoneName',
      "Type" => lambda {|it| format_usage_type(it) },
      "Name" => 'name',
      "Plan" => 'planName',
      "Start Date" => lambda {|it| format_local_dt(it['startDate']) },
      "End Date" => lambda {|it| format_local_dt(it['endDate']) },
      "Usage Status" => lambda {|it| format_usage_status(it) },
      "Usage Cost" => lambda {|it| format_money(it['costDetails']['cost'], it['currency'] || 'USD', {sigdig: (options[:sigdig] || 5)}) },
      "Usage Price" => lambda {|it| format_money(it['price'], it['currency'] || 'USD', {sigdig: (options[:sigdig] || 5)}) },
    }
    print_description_list(show_columns, usage)

    # print_h2 "Applicable Prices"
    
    print reset,"\n"
  end
  return 0, nil
end
connect(opts) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 14
def connect(opts)
  @api_client = establish_remote_appliance_connection(opts)
  @usage_interface = @api_client.usage
end
get(args) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 103
  def get(args)
    params = {}
    options = {}
    optparse = Morpheus::Cli::OptionParser.new do |opts|
      opts.banner = subcommand_usage("[usage]")
      build_standard_get_options(opts, options)
      opts.footer = <<-EOT
Get details about a specific usage.
[usage] is required. This is the id of a usage record.
EOT
    end
    optparse.parse!(args)
    verify_args!(args:args, optparse:optparse, min:1)
    connect(options)
    id_list = parse_id_list(args)
    return run_command_for_each_arg(id_list) do |arg|
      _get(arg, params, options)
    end
  end
handle(args) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 19
def handle(args)
  handle_subcommand(args)
end
list(args) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 23
def list(args)
  options = {}
  params = {}
  ref_ids = []
  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = subcommand_usage("[search]")
    opts.on( '-t', '--type TYPE', "Filter by type" ) do |val|
      params['type'] = parse_usage_type(val)
    end
    opts.on( '-c', '--cloud CLOUD', "Filter by cloud" ) do |val|
      options[:cloud] = val
    end
    opts.on('--start DATE', String, "Start date in the format YYYY-MM-DD.") do |val|
      params['startDate'] = val # parse_time(val).utc.iso8601
    end
    opts.on('--end DATE', String, "End date in the format YYYY-MM-DD. Default is the current date.") do |val|
      params['endDate'] = val # parse_time(val).utc.iso8601
    end
    opts.on('--sigdig DIGITS', "Significant digits when rounding cost values for display as currency. Default is 5.") do |val|
      options[:sigdig] = val.to_i
    end
    build_standard_list_options(opts, options)
    opts.footer = "List usages."
  end
  optparse.parse!(args)
  connect(options)
  # verify_args!(args:args, optparse:optparse, count:0)
  if args.count > 0
    options[:phrase] = args.join(" ")
  end
  params.merge!(parse_list_options(options))
  # --cloud
  if options[:cloud]
    params['cloud'] = parse_id_list(options[:cloud]).collect {|cloud_id|
      if cloud_id.to_s =~ /\A\d{1,}\Z/
        cloud_id
      else
        cloud = find_cloud_option(cloud_id)
        return 1 if cloud.nil?
        cloud['id']
      end
    }
  end

  @usage_interface.setopts(options)
  if options[:dry_run]
    print_dry_run @usage_interface.dry.list(params)
    return
  end
  json_response = @usage_interface.list(params)
  usages = json_response[usage_list_key]
  render_response(json_response, options, usage_list_key) do
    print_h1 "Morpheus Usages", parse_list_subtitles(options), options
    if usages.empty?
      print cyan,"No usages found.",reset,"\n"
    else
      list_columns = {
        "ID" => 'id',
        "Cloud" => 'zoneName',
        "Type" => lambda {|it| format_usage_type(it) },
        "Name" => 'name',
        "Plan" => 'planName',
        "Start Date" => lambda {|it| format_local_dt(it['startDate']) },
        "End Date" => lambda {|it| format_local_dt(it['endDate']) },
        "Usage Status" => lambda {|it| format_usage_status(it) },
        "Usage Cost" => lambda {|it| format_money(it['costDetails']['cost'], it['currency'] || 'USD', {sigdig: (options[:sigdig] || 5)}) },
        "Usage Price" => lambda {|it| format_money(it['price'], it['currency'] || 'USD', {sigdig: (options[:sigdig] || 5)}) },
      }
      print as_pretty_table(usages, list_columns.upcase_keys!, options)
      print_results_pagination(json_response)
    end
    print reset,"\n"
  end
  if usages.empty?
    return 1, "no usages found"
  else
    return 0, nil
  end
end

Private Instance Methods

format_usage_status(usage, return_color=cyan) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 193
def format_usage_status(usage, return_color=cyan)
  #return usage['status'].to_s.capitalize
  status_string = usage['status'].to_s
  if status_string == 'stopped'
    return "#{red}#{status_string.upcase}#{return_color}"
  else
    return "#{green}#{status_string.upcase}#{return_color}"
  end
end
format_usage_type(usage) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 166
def format_usage_type(usage)
  #return usage['costDetails']['refType']
  ref_type = usage['costDetails'] ? usage['costDetails']['refType'].to_s : ''
  if ref_type == 'discoveredServer'
    'Discovered'
  elsif ref_type == 'computeServer'
    'Host'
  elsif ref_type == 'container'
    'Container'
  else
    ref_type.to_s
  end
end
parse_usage_type(val) click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 180
def parse_usage_type(val)
  type_string = val.to_s.downcase
  if type_string == 'discoveredServer'
    'discoveredServer'
  elsif type_string == 'host'
    'computeServer'
  elsif type_string == 'container'
    'container'
  else
    val
  end
end
usage_list_key() click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 162
def usage_list_key
  'usages'
end
usage_object_key() click to toggle source
# File lib/morpheus/cli/commands/usage_command.rb, line 158
def usage_object_key
  'usage'
end