require "./service/service.cr" require "./config.cr" context = Service::Context.new context.load LibC.setuid 0 LibC.setgid 0 verbose = ENV["SERVICE_VERBOSE"]?.try &.==("true") list_status = false services = ARGV if services.size == 0 list_status = true services = context.services else services = services.map do |id| context.get_service_by_id id end end if services.size == 1 && ! list_status services[0]?.try do |service| puts service.status PID_DIRECTORY exit 0 end exit 1 else service_not_found = false services.each do |service| if service.nil? service_not_found = true else if verbose STDOUT << ("%-20s " % "#{service.full_id}:").colorize(:white).to_s status_string = "%-15s" % service.status PID_DIRECTORY status_string = case service.status PID_DIRECTORY when Service::Status::Dead status_string.colorize(:red).bright when Service::Status::Running status_string.colorize(:green).bright when Service::Status::NonRunnable status_string.colorize(:cyan) when Service::Status::Stopped status_string.colorize :yellow else status_string.colorize # ¯\_(ツ)_/¯ end STDOUT << status_string.to_s STDOUT << ( service.ports.map do |name, number| "#{name}:#{number.colorize(:magenta).to_s}" end + service.providers.map do |token, id| "-#{token.colorize(:yellow)}:" + id.colorize(:cyan).to_s end + service.provides.map do |token| "+#{token.token.colorize(:green).to_s}" end ).join " " STDOUT << "\n" else puts "#{service.full_id}: #{service.status PID_DIRECTORY}" end end end exit 1 if service_not_found end