Sha256: 4f92c43a965ab277dd0f1911854ad70ac21d86e4f3da0960cca99a804c17cfab

Contents?: true

Size: 1.37 KB

Versions: 4

Compression:

Stored size: 1.37 KB

Contents

module BigBrother
  class Configuration
    def self.evaluate(file)
      yaml = YAML.load(File.read(file))
      assoc_array = yaml.map do |name, values|
        nodes = _parse_nodes(values.delete('nodes'))
        [name, Cluster.new(name, values.merge('nodes' => nodes))]
      end

      Hash[assoc_array]
    end

    def self.synchronize_with_ipvs(clusters, ipvs_state)
      clusters.values.each do |cluster|
        if ipvs_state.has_key?(cluster.fwmark.to_s)
          cluster.resume_monitoring!

          running_nodes = ipvs_state[cluster.fwmark.to_s]
          cluster_nodes = cluster.nodes.map(&:address)

          _remove_nodes(cluster, running_nodes - cluster_nodes)
          _add_nodes(cluster, cluster_nodes - running_nodes)
        end
      end
    end

    def self._add_nodes(cluster, addresses)
      addresses.each do |address|
        BigBrother.logger.info "adding #{address} to cluster #{cluster}"
        BigBrother.ipvs.start_node(cluster.fwmark, address, 100)
      end
    end

    def self._remove_nodes(cluster, addresses)
      addresses.each do |address|
        BigBrother.logger.info "removing #{address} to cluster #{cluster}"
        BigBrother.ipvs.stop_node(cluster.fwmark, address)
      end
    end

    def self._parse_nodes(nodes)
      nodes.map do |values|
        Node.new(values['address'], values['port'], values['path'])
      end
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
big_brother-0.3.1 lib/big_brother/configuration.rb
big_brother-0.3.0 lib/big_brother/configuration.rb
big_brother-0.2.1 lib/big_brother/configuration.rb
big_brother-0.1.0 lib/big_brother/configuration.rb