Sha256: b8dbfc39210e64e3f5d56767dd8013bd97e37f02c79bb7af9f2db4dcce3a09f2

Contents?: true

Size: 1.94 KB

Versions: 3

Compression:

Stored size: 1.94 KB

Contents

require "mcrain/version"

require 'timeout'
require 'logger'

require 'logger_pipe'

require 'active_support/inflector/inflections'
require 'active_support/core_ext/class/subclasses'
require 'active_support/core_ext/object/blank'

module Mcrain
  class << self
    def [](name)
      lookup(name)
    end

    def lookup(name, options = {})
      klass = class_for(name.to_sym)
      r = instances[name] ||= klass.new
      options.each{|k,v| r.send("#{k}=", v)}
      r
    end

    def class_names
      @class_names ||= {}
    end

    def class_for(name)
      if class_name = class_names[name]
        class_name.constantize
      else
        if klass = Mcrain::Base.descendants.detect{|c| c.server_name == name}
          class_names[name] = klass.name
        end
        klass
      end
    end

    def register(name, class_name)
      class_names[name] = class_name
    end

    def instances
      @instances ||= {}
    end

    def pull_images
      Mcrain::Base.descendants.each do |klass|
        Timeout.timeout(10.minutes) do
          LoggerPipe.run(logger, "docker pull #{klass.container_image}")
        end
      end
    end

    attr_writer :logger
    def logger
      @logger ||= Logger.new($stderr)
    end

    def wait_port_opened(host, port, options = {})
      logger.debug("wait_port_opened(#{host.inspect}, #{port.inspect}, #{options.inspect})")
      interval = options[:interval] || 10 # second
      Timeout.timeout(options[:timeout] || 60) do
        begin
          s = TCPSocket.open(host, port)
          s.close
          return true
        rescue Errno::ECONNREFUSED
          sleep(interval)
          retry
        end
      end
    end

  end

  autoload :Base, 'mcrain/base'
  autoload :Boot2docker, 'mcrain/boot2docker'

  autoload :Riak, 'mcrain/riak'
  autoload :Redis, 'mcrain/redis'
  autoload :Rabbitmq, 'mcrain/rabbitmq'

  register :riak, "Mcrain::Riak"
  register :redis, "Mcrain::Redis"
  register :rabbitmq, "Mcrain::Rabbitmq"
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mcrain-0.1.2 lib/mcrain.rb
mcrain-0.1.1 lib/mcrain.rb
mcrain-0.1.0 lib/mcrain.rb