From dddf28504623494b3b14da136b563b88fe329e09 Mon Sep 17 00:00:00 2001 From: Luka Vandervelden Date: Sat, 8 Jun 2019 18:46:53 +0200 Subject: [PATCH] UI update. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `start` and `stop` now take service ids in parameter and can take multiple of them. - Errors are displayed properly (instead of “index out of bounds” or “nil assertion failed”) when invalid ids are provided on the CLI for `start` and `stop`. --- src/main.cr | 50 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/src/main.cr b/src/main.cr index d4e48d0..4809cf9 100644 --- a/src/main.cr +++ b/src/main.cr @@ -142,7 +142,10 @@ end class Service getter environment : Environment getter providers = ProvidersList.new - + + class Exception < ::Exception + end + class ProvidersList < Hash(String, String) def []?(name) super(name).try { |x| Service.get_by_id x} @@ -405,19 +408,44 @@ begin elsif args[0] == "del" Service.new(args[1], args[2]?).remove RC_DIRECTORY elsif args[0] == "start" - #service = Service.new(args[1], args[2]?) - service = Service.get_by_id(args[1]).not_nil! - service.dependency_tree.flatten.reverse.each do |service| - if service.status(PID_DIRECTORY) == Service::Status::Running - next + services = args[1..args.size].map do |arg| + service = Service.get_by_id(arg) + + unless service + raise Service::Exception.new "Service '#{arg}' does not exist." end - puts "starting #{service.to_s}" - service.start PID_DIRECTORY, LOG_DIRECTORY + service + end + + services.each do |service| + service.dependency_tree.flatten.reverse.each do |service| + if service.status(PID_DIRECTORY) == Service::Status::Running + next + end + + puts "starting #{service.to_s}" + service.start PID_DIRECTORY, LOG_DIRECTORY + end end elsif args[0] == "stop" - # FIXME: Build revdep tree and stop services started as dependencies? - Service.new(args[1], args[2]?).stop PID_DIRECTORY + services = args[1..args.size].map do |arg| + service = Service.get_by_id(arg) + + unless service + raise Service::Exception.new "Service '#{arg}' does not exist." + end + + service + end + + services.each do |service| + # FIXME: Build revdep tree and stop services started as dependencies? + if service.status(PID_DIRECTORY) == Service::Status::Running + puts "stopping #{service.to_s}" + service.stop PID_DIRECTORY + end + end elsif args[0] == "status" puts Service.new(args[1], args[2]?).status PID_DIRECTORY elsif args[0] == "show" @@ -451,7 +479,7 @@ begin STDERR << parser << "\n" exit 1 end -rescue e +rescue e : Service::Exception STDERR << e.message << "\n" exit 2 end