#! /bin/bash
#
# check_systemd_unit.sh
# Copyright (C) 2021 Vintage Salt <rehashedsalt@cock.li>
#
# Distributed under terms of the MIT license.
#

# Usage: Set the first argument to be a systemd unit. The script will respond with the following:
# The unit is running			OK
# The unit is dead

service="$1"
# If the service is null, be critical
if [ -z "$service" ]; then
	echo "UNIT CRITICAL: Service is undefined"
	exit 1
# If systemctl is not present, be critical
elif ! command -v systemctl > /dev/null 2>&1; then
	echo "UNIT CRITICAL: systemctl missing from PATH"
	exit 1
# If the service is failed, be critical
elif systemctl is-failed --quiet "$service" > /dev/null 2>&1; then
	echo "UNIT CRITICAL: $service is failed"
	exit 2
# Otherwise, see what its state is
else
	systemctl status "$service" > /dev/null 2>&1
	case $? in
		0)
			echo "UNIT OK: $service is running"
			exit 0
			;;
		1|2)
			echo "UNIT CRITICAL: $service is dead"
			exit 3
			;;
		3)
			# In this case, the unit is not running. Whether this is an issue depends on the type of service
			if systemctl cat backup | grep -ie '^Type=' | grep -ie 'oneshot' > /dev/null 2>&1; then
				echo "UNIT OK: $service is type oneshot and not running"
				exit 0
			else
				echo "UNIT CRITICAL: $service is not running"
				exit 4
			fi
			;;
		4)
			echo "UNIT CRITICAL: $service is not present on this machine"
			exit 50
			;;
	esac
fi