class Qtc::Cli::Mar::Apps

Public Instance Methods

create(name, options) click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 33
def create(name, options)
  sizes = {mini: 1, small: 2, medium: 4}
  size = sizes[options.size.to_s.to_sym] || 1
  data = {
      name: name,
      serviceProviderId: 'mar',
      config: {
          runtimeSize: size,
          runtimeType: 'app'
      }
  }
  response = platform_client.post("/accounts/#{current_cloud_id}/instances", data)
  puts response['id']
end
exec(command, options) click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 92
def exec(command, options)
  instance_id = resolve_instance_id(options)
  instance_data = instance_info(instance_id)
  if instance_data
    data = {
        cmd: command,
        processId: options.process
    }
    result = client.post("/apps/#{instance_id}/exec", data, {}, {'Authorization' => "Bearer #{current_cloud_token}"})
    puts result['stderr']
    puts result['stdout']
  end
end
list() click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 7
def list
  instances = platform_client(current_cloud_token).get("/accounts/#{current_cloud_id}/instances", {provider: 'mar'})
  if instances['results'].size > 0
    template = "%-20.20s %-30.30s %-20.20s"
    puts template % ["ID", "NAME", "TAGS"]
    instances['results'].each do |instance|
      puts template % [instance['id'], instance['name'], instance['tags'].join(',')]
    end
  end
end
logs(options) click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 56
def logs(options)
  offset = options.offset || 0
  limit = options.limit || 100
  stream = options.stream || nil

  instance_id = resolve_instance_id(options)
  instance_data = instance_info(instance_id)
  if instance_data
    result = client.get("/apps/#{instance_id}/logs", {offset: offset, limit: limit}, {'Authorization' => "Bearer #{current_cloud_token}"})
    result['results'].each do |r|
      line = ''
      line << "[#{r['time']}] " if options.timestamp == true
      line << r['log']
      puts line
    end
  end
end
restart(options) click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 48
def restart(options)
  instance_id = resolve_instance_id(options)
  instance_data = instance_info(instance_id)
  if instance_data
    client.post("/apps/#{instance_id}/restart", {}, nil, {'Authorization' => "Bearer #{current_cloud_token}"})
  end
end
scale(args, options) click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 74
def scale(args, options)
  instance_id = resolve_instance_id(options)
  instance_data = instance_info(instance_id)
  if instance_data
    app = client.get("/apps/#{instance_id}", nil,  {'Authorization' => "Bearer #{current_cloud_token}"})
    structure = app['structure']
    scale = {}
    args.each do |type|
      arr = type.strip.split("=")
      if arr[0] && arr[1]
        raise ArgumentError.new("#{arr[0]} is not defined in Procfile") unless structure.has_key?(arr[0])
        scale[arr[0]] = arr[1]
      end
    end
    client.post("/apps/#{instance_id}/scale", scale, {}, {'Authorization' => "Bearer #{current_cloud_token}"})
  end
end
show(options) click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 18
def show(options)
  instance_id = resolve_instance_id(options)
  result = client.get("/apps/#{instance_id}", nil,  {'Authorization' => "Bearer #{current_cloud_token}"})
  puts "Id: #{result['id']}"
  puts "Name: #{result['name']}"
  puts "Size: #{size_mapping[result['size'].to_s] || result['size']}"
  puts "State: #{result['state']}"
  puts "Custom SSL: #{result['sslCertificate'].nil? ? 'no': 'yes'}"
  env_vars = client.get("/apps/#{instance_id}/env_vars", {}, {'Authorization' => "Bearer #{current_cloud_token}"})
  puts "Stack: #{env_vars['STACK']}"
  puts "Structure: #{JSON.pretty_generate(result['structure'])}"
  status = client.get("/apps/#{instance_id}/status", nil,  {'Authorization' => "Bearer #{current_cloud_token}"})
  puts "Processes: #{JSON.pretty_generate(status['processes'])}"
end
size_mapping() click to toggle source
# File lib/qtc/cli/mar/apps.rb, line 106
def size_mapping
  {
      '1' => 'mini',
      '2' => 'small',
      '4' => 'medium',
      '8' => 'large'
  }
end