#!/bin/bash
#
# .---.                  .              .
# |                      |              |
# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
#
#                    Freedom in the Cloud
#
# Watchdog functions to keep systems running even if they crash
# systemd itself can handle this, but some debian packages are in
# twilight world where they still use the older init scripts
#
# License
# =======
#
# Copyright (C) 2014-2016 Bob Mottram <bob@freedombone.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# name of a script which keeps running processes going even if they crash
WATCHDOG_SCRIPT_NAME="keepon"

function install_watchdog_script {
    if [[ $(is_completed $FUNCNAME) == "1" ]]; then
        return
    fi
    echo '#!/bin/bash' > /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo 'LOGFILE=/var/log/keepon.log' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo 'CURRENT_DATE=$(date)' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    # application specific stuff is added later
    chmod +x /usr/bin/$WATCHDOG_SCRIPT_NAME

    function_check cron_add_mins
    cron_add_mins 1 "/usr/bin/$WATCHDOG_SCRIPT_NAME"

    mark_completed $FUNCNAME
}

function add_watchdog_daemon {
    daemon_name=$1

    echo '' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo "# keep ${daemon_name} daemon running" >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo "RUNNING=$(pgrep ${daemon_name} > /dev/null && echo Running)" >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo 'if [ ! $RUNNING ]; then' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo "  systemctl start ${daemon_name}" >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo '  echo -n $CURRENT_DATE >> $LOGFILE' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo "  echo \"${daemon_name} daemon restarted\" >> \$LOGFILE" >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo 'fi' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
    echo "# End of ${daemon_name}" >> /usr/bin/$WATCHDOG_SCRIPT_NAME
}

function remove_watchdog_daemon {
    daemon_name=$1

    sed -i "/# keep ${daemon_name} daemon running/,/# End of ${daemon_name}/d" /usr/bin/$WATCHDOG_SCRIPT_NAME
}

# NOTE: deliberately no exit 0
