Module: ServiceManager

Extended by:
ServiceManager
Included in:
ServiceManager
Defined in:
lib/service_manager.rb

Defined Under Namespace

Classes: Service

Constant Summary collapse

SERVICES_PATH =
"./config/services.rb"

Instance Method Summary collapse

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

#servicesObject



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_hashObject



32
33
34
# File 'lib/service_manager.rb', line 32

def services_hash
  Hash[services.map { |s| [s.name.to_sym, s]}]
end

#startObject

Starts all configured services. If service is detected as running already, don’t try and start it.

Raises:

  • (RuntimeError)


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

#stopObject

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