#!/bin/sh

set -e
set -x

if [ -z "${1}" ] ; then
	echo "usage: $0 <first-node-hostname> [--no-ha-queues]"
	exit 1
fi

SET_HA_QUEUES=yes
if [ "${2}" = "--no-ha-queues" ] ; then
	SET_HA_QUEUES=no
fi

MY_HOSTNAME=$(hostname -s)
CLUSTER_NAME=$(echo ${1} | cut -d. -f1)

RABBIT_SERVER_VERSION=$(dpkg-query -W rabbitmq-server | awk '{print $2}')
if dpkg --compare-versions ${RABBIT_SERVER_VERSION} gt 4 ; then
	RB_DISQ_OPT=" --disc"
else
	RB_DISQ_OPT=""
fi

if [ "${MY_HOSTNAME}" = "${CLUSTER_NAME}" ] ; then
	# As per recommendation at https://wiki.openstack.org/wiki/Large_Scale_Configuration_Rabbit
	# do not set HA queues for the ones with _fanout_ and reply_
	if [ "${SET_HA_QUEUES}" = "yes" ] ; then
		echo "Running: rabbitmqctl set_policy HA"
		rabbitmqctl set_policy HA '^(?!(amq\.)|(.*_fanout_)|(reply_)).*' '{"ha-mode": "all"}'
	fi
	rabbitmqctl set_policy TTL ".*" '{"message-ttl":600000}' --apply-to queues

	echo "I'm first master, let's do nothing..."
	exit 0
fi

if ! rabbitmqctl cluster_status | grep -q ${CLUSTER_NAME} ; then
	echo "Not in cluster: joining cluster ${CLUSTER_NAME}"
	rabbitmqctl stop_app
	rabbitmqctl join_cluster${RB_DISQ_OPT} rabbit@${CLUSTER_NAME} || true
	sleep 5
	rabbitmqctl start_app
else
	echo "In cluster already"
fi

echo "Running: rabbitmqctl set_policy HA"
if [ "${SET_HA_QUEUES}" = "yes" ] ; then
	rabbitmqctl set_policy HA '^(?!(amq\.)|(.*_fanout_)|(reply_)).*' '{"ha-mode": "all"}'
fi
rabbitmqctl set_policy TTL ".*" '{"message-ttl":600000}' --apply-to queues
