#!/bin/bash
#
# Try to fix a service
#
# By default, the problem is "solved" the Microsoft way
# (stop and start).
# To do something more intelligent, create a
# /federated/services/<service>/fix
# script.

if [ "$#" != 1 ]; then
	echo Usage: $0 service
	exit 1
fi

SERVICE="$1"

if /federated/bin/check ${SERVICE}; then
	echo "${SERVICE} doesn't seem to be broken"
	exit 0
fi

/federated/bin/stop ${SERVICE}
/federated/bin/start ${SERVICE}

if /federated/bin/check ${SERVICE}; then
	echo "${SERVICE} was (probably) fixed by a restart"
	exit 0
fi

if [ -e /federated/services/${SERVICE}/fix ]; then
	. /federated/services/${SERVICE}/fix

	if /federated/bin/check ${SERVICE}; then
		echo "${SERVICE} was (probably) fixed by the service fix script"
		exit 0
	fi

	/federated/bin/stop ${SERVICE}
	/federated/bin/start ${SERVICE}

	if /federated/bin/check ${SERVICE}; then
		echo "${SERVICE} was (probably) fixed by restarting after running the fix script"
		exit 0
	fi
fi

docker compose -f /federated/apps/${SERVICE}/docker-compose.yml down
docker rm ${SERVICE}
/federated/bin/stop ${SERVICE} || :
/federated/bin/start ${SERVICE}
if /federated/bin/check ${SERVICE}; then
	echo "${SERVICE} was (probably) fixed by rebuilding the container"
	exit 0
fi


echo "${SERVICE} is still broken. Please improve the fix script."
exit 1