Sha256: aacf768560c90c8b5fe18f6c195aaa861351331f03114248a89008b09686c90e

Contents?: true

Size: 1.67 KB

Versions: 4

Compression:

Stored size: 1.67 KB

Contents

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

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

  extend self

  def services
    return @services if @services

    (@services = []).tap do
      load_services if service_files_loaded.empty?
    end
  end

  def service_files_loaded
    @service_files_loaded ||= []
  end

  def load_services(path = nil)
    path = File.expand_path(path || SERVICES_PATH, Dir.pwd)
    return if service_files_loaded.include?(path)
    service_files_loaded << path
    load path
  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[services.map { |s| [s.name.to_sym, s]}]
  end

  # Stop all services.  If service wasn't started by this service manager session, don't try and stop it.
  def stop
    return unless services.any? { |s| s.process }
    puts "Stopping the services..."
    services.map {|s| Thread.new { s.stop } }.map(&:join)
  end

  # Starts all configured services. If service is detected as running already, don't try and start it.
  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
end

require "service_manager/service"

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
service_manager-0.6.4 lib/service_manager.rb
service_manager-0.6.3 lib/service_manager.rb
service_manager-0.6.2 lib/service_manager.rb
service_manager-0.6 lib/service_manager.rb