#!/bin/bash

unset LANG

PIDFILE=$OMD_ROOT/tmp/run/redis-server.pid
DAEMON=$OMD_ROOT/bin/redis-server
THE_PID=$(cat "$PIDFILE" 2>/dev/null)
OPTS="$OMD_ROOT/etc/redis/redis.conf"

case "$1" in
start)
    echo -n 'Starting redis...'
    # shellcheck disable=SC2086 # Yes, we want splitting for OPTS.
    if kill -0 "$THE_PID" >/dev/null 2>&1; then
        echo 'Already running.'
        exit 0
    elif "$DAEMON" $OPTS; then
        init-redis
        echo OK
        exit 0
    else
        echo Failed
        exit 1
    fi
    ;;
stop)
    echo -n 'Stopping redis...'
    if [ -z "$THE_PID" ]; then
        echo 'Not running.'
    elif ! kill -0 "$THE_PID" >/dev/null 2>&1; then
        echo "not running (PID file orphaned)"
    else
        echo -n "killing $THE_PID..."
        if kill "$THE_PID" 2>/dev/null; then
            # Only wait for pidfile removal when the signal could be sent
            N=0
            while [ -e "$PIDFILE" ] && kill -0 "$THE_PID" 2>/dev/null; do
                sleep 0.1
                N=$((N + 1))
                if [ $((N % 10)) = 0 ]; then echo -n .; fi
                if [ $N -gt 600 ]; then
                    echo -n "sending SIGKILL..."
                    kill -9 "$THE_PID"
                elif [ $N = 700 ]; then
                    echo "Failed"
                    exit 1
                fi
            done
        fi
        echo 'OK'
    fi
    ;;
restart | reload)
    $0 stop
    $0 start
    ;;
status)
    echo -n 'Checking status of redis...'
    if [ -z "$THE_PID" ]; then
        echo "not running (PID file missing)"
        exit 1
    elif ! kill -0 "$THE_PID"; then
        echo "not running (PID file orphaned)"
        exit 1
    else
        echo "running"
        exit 0
    fi
    ;;
*)
    echo "Usage: $0 {start|stop|restart|reload|status}"
    ;;
esac
