require "vmc/cli/app/base" module VMC::App class Apps < Base desc "List your applications" group :apps input :space, :from_given => by_name("space"), :default => proc { client.current_space }, :desc => "Show apps in given space" input :name, :desc => "Filter by name regexp" input :runtime, :desc => "Filter by runtime regexp" input :framework, :desc => "Filter by framework regexp" input :url, :desc => "Filter by url regexp" input :full, :type => :boolean, :default => false, :desc => "Verbose output format" def apps if space = input[:space] space.summarize! rescue CFoundry::APIError apps = with_progress("Getting applications in #{c(space.name, :name)}") do space.apps end else apps = with_progress("Getting applications") do client.apps(:depth => 2) end end line unless quiet? if apps.empty? and !quiet? line "No applications." return end apps.reject! do |a| !app_matches?(a, input) end apps = apps.sort_by(&:name) if input[:full] spaced(apps) do |a| invoke :app, :app => a end elsif quiet? apps.each do |a| line a.name end else display_apps_table(apps) end end def display_apps_table(apps) table( ["name", "status", "usage", v2? && "plan", "runtime", "url"], apps.collect { |a| [ c(a.name, :name), app_status(a), "#{a.total_instances} x #{human_mb(a.memory)}", v2? && (a.production ? "prod" : "dev"), a.runtime.name, if a.urls.empty? d("none") elsif a.urls.size == 1 a.url else "#{a.url}, ..." end ] }) end def app_matches?(a, options) if name = options[:name] return false if a.name !~ /#{name}/ end if runtime = options[:runtime] return false if a.runtime.name !~ /#{runtime}/ end if framework = options[:framework] return false if a.framework.name !~ /#{framework}/ end if url = options[:url] return false if a.urls.none? { |u| u =~ /#{url}/ } end true end end end