Sha256: ebe48a760651447ac07ee102fc5560b64b9d144cc871dc6c75263ef0bc263e4d

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

require 'tcpsocket-wait'
require 'background_process'
require 'net/http'

module ServiceManager
  SERVICES_PATH = "./config/services.rb"

  extend self

  def services
    @services ||= []
  end

  def load_services(path = nil)
    path ||= SERVICES_PATH
    return if @services_loaded
    load path
    @services_loaded = true
  end
  
  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
  
  def services_hash
    Hash[ServiceManager.services.map { |s| [s.name.to_sym, s]}]
  end

  def stop(which = :all)
    puts "Stopping the services..."
    services.map {|s| Thread.new { s.stop } }.map(&:join)
  end
  
  def start(which = :all)
    load_services
    raise RuntimeError, "No services defined" if services.empty?
    threads = services.map do |s|
      Thread.new do
        begin
          s.start
        rescue ServiceManager::Service::ServerDidntStart
          puts "Quitting due to failure."
          exit(1)
        rescue Exception => e
          puts e
          puts e.backtrace
          exit(1)
        end
      end
    end
    threads.map(&:join)
  end
end

require "service_manager/service"

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
service_manager-0.1 lib/service_manager.rb