class RabbitMQ::Cluster::Server

Attributes

client[RW]
etcd[RW]

Public Class Methods

build() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 15
def self.build
  new(
    ::RabbitMQManager.new(ENV['RABBITMQ_MNGR'] || 'http://guest:guest@localhost:15672'),
    ::RabbitMQ::Cluster::Etcd.build
  )
end
new(client, etcd) click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 22
def initialize(client, etcd)
  self.client = client
  self.etcd = etcd
end

Public Instance Methods

healthcheck() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 36
def healthcheck
  register if up?
end
name() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 40
def name
  @_name ||= client.overview["node"]
end
prestart() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 27
def prestart
  setup_erlang_cookie
end
synchronize() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 31
def synchronize
  join_cluster
  remove_stopped_nodes if stopped_nodes.any?
end
up?() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 44
def up?
  client.aliveness_test('/')['status'] == 'ok'
rescue Faraday::ConnectionFailed
  false
end

Private Instance Methods

clustered?() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 86
def clustered?
  client.nodes.size > 1
end
join_cluster() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 76
def join_cluster
  if up? && !clustered? && nodes_to_join.any?
    system("rabbitmqctl stop_app")
    system("rabbitmqctl join_cluster #{nodes_to_join.first}")
    system("rabbitmqctl start_app")
    sleep 1 until up?
    register
  end
end
nodes(running) click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 72
def nodes(running)
  client.nodes.select { |n| n["running"] == running }.map { |n| n["name"] }.sort
end
nodes_to_join() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 90
def nodes_to_join
  etcd.nodes - [name]
end
register() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 52
def register
  etcd.register(name)
end
remove_stopped_nodes() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 64
def remove_stopped_nodes
  etcd.acquire_lock do
    stopped_nodes.each do |node_name|
      system("rabbitmqctl forget_cluster_node #{node_name}")
    end
  end
end
running_nodes() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 56
def running_nodes
  nodes(true)
end
stopped_nodes() click to toggle source
# File lib/rabbitmq/cluster/server.rb, line 60
def stopped_nodes
  nodes(false)
end