Module: ServiceManager
Defined Under Namespace
Classes: Service
Constant Summary collapse
- SERVICES_PATH =
"./config/services.rb"
Instance Method Summary collapse
- #define_service(name = nil, &block) ⇒ Object
- #load_services(path = nil) ⇒ Object
- #services ⇒ Object
- #services_hash ⇒ Object
-
#start ⇒ Object
Starts all configured services.
-
#stop ⇒ Object
Stop all services.
Instance Method Details
#define_service(name = nil, &block) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/service_manager.rb', line 24 def define_service(name = nil, &block) name ||= File.basename(caller.first.gsub(/.rb:.+$/, "")) ServiceManager::Service.new(:name => name).tap do |service| yield service services << service end end |
#load_services(path = nil) ⇒ Object
17 18 19 20 21 22 |
# File 'lib/service_manager.rb', line 17 def load_services(path = nil) path ||= SERVICES_PATH return if @services_loaded load path @services_loaded = true end |
#services ⇒ Object
10 11 12 13 14 15 |
# File 'lib/service_manager.rb', line 10 def services return @services if @services @services = [] load_services @services end |
#services_hash ⇒ Object
32 33 34 |
# File 'lib/service_manager.rb', line 32 def services_hash Hash[services.map { |s| [s.name.to_sym, s]}] end |
#start ⇒ Object
Starts all configured services. If service is detected as running already, don’t try and start it.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/service_manager.rb', line 44 def start raise RuntimeError, "No services defined" if services.empty? threads = services.map do |s| Thread.new do begin s.start rescue ServiceManager::Service::ServiceDidntStart puts "Quitting due to failure." exit(1) rescue Exception => e puts e puts e.backtrace exit(1) end end end threads.map(&:join) end |
#stop ⇒ Object
Stop all services. If service wasn’t started by this service manager session, don’t try and stop it.
37 38 39 40 41 |
# File 'lib/service_manager.rb', line 37 def stop return unless services.any? { |s| s.process } puts "Stopping the services..." services.map {|s| Thread.new { s.stop } }.map(&:join) end |