#!/bin/bash
#
# Guralp Configuration System
#   Copyright (c) 2010-2011 Guralp Systems Ltd. All rights reserved.
#
#   Data service support functions helper

# Load support functions
script_dir=$(dirname $0)
. $script_dir/functions.sh


# Check whether a service is enabled in either autostart
gcs_svc_enabled() {
    local name="$1"
    local sel="$2"
    local svc

    svc="${name}.${sel}"
    [ "${sel}" == "default" ] && svc="${name}"

    grep -q "^${svc}\$" "${INITDIR}/autostart" && return 0
    grep -q "^${svc}\$" "${INITDIR2}/autostart" && return 0
    return 1
}



# Update or create a service file from the service description template
helper_update_svc() {
    local name="$1"
    local sel="$2"
    local enable="$3"
    local desc="$4"
    local cfgfile="$5"
    local ctlfile="$6"
    local svcbase="$7"
    local socket="$8"
    local tfile=$(mktemp $TMPDIR/gcs-hlp-XXXXXX)
    local current_enable

    local svc_name

    if [ "$sel" == "default" ]
    then
        svc_name="${name}"
    else
        svc_name="${name}.${sel}"
    fi

    # We don't touch the initscript for "default" services, unless we need
    # to create one.
    if [ "$sel" != "default" -o ! \( -x "${INITDIR}/${svc_name}" -o -x "${INITDIR2}/${svc_name}" \) ]
    then
        # Create a new service script
        if [ -r $svcbase/svc-script.in ]
        then
            sed -e "s&@@DESC@@&${desc}&" \
                -e "s&@@NAME@@&${name}&" \
                -e "s&@@CFGFILE@@&${cfgfile}&" \
                -e "s&@@CTLFILE@@&${ctlfile}&" \
                -e "s&@@SEL@@&${sel}&" \
                -e "s&@@SOCKET@@&${socket}&" \
                    < $svcbase/svc-script.in > $tfile
            if diff "${tfile}" "${INITDIR2}/${svc_name}" > /dev/null 2>&1
            then
                # New file is the same so just delete the temp
                rm -f "${tfile}"
            else
                group_move_file "${tfile}" "${INITDIR2}/${svc_name}" root 755
            fi
        fi
    fi

    # Add or remove from autostart
    current_enable="False"
    gcs_svc_enabled "${name}" "${sel}" && current_enable="True"

    if [ "${enable}" != "${current_enable}" ]
    then
        if gcs_truefalse "${enable:-false}"
        then
            echo "${svc_name}" >> "${INITDIR2}/autostart"
        else
            grep -v "^${svc_name}\$" "${INITDIR2}/autostart" > "${tfile}"
            group_move_file "${tfile}" "${INITDIR2}/autostart" root 644
        fi
    fi
}



# Delete a configured service
helper_delete_svc() {                 
    local name=$1
    local sel=$2                            
    local tfile=$(mktemp $TMPDIR/gcs-svc-XXXXXX)

    if [ $sel = "default" ]
    then
        echo "Cannot delete default service instance"
        exit 1
    fi

    # Try to stop service
    for i in 1 2 3 4 5                                   
    do                                                     
        if svc "$name.$sel" running > /dev/null
        then
            svc "$name.$sel" stop > /dev/null 2>&1
            sleep 1
        else
            break
        fi
    done
    
    # Force the service to stop
    if svc "$name.$sel" running > /dev/null
    then
        svc "$name.$sel" zap 2>&1
    fi

    # Delete service script
    rm -f "$INITDIR2/$name.$sel" > /dev/null

    # Remove service from autostart
    if gcs_svc_enabled "${name}" "${sel}"
    then
        grep -v "^${name}.${sel}\$" "$INITDIR2/autostart" > $tfile
        group_move_file $tfile "$INITDIR2/autostart"
    fi

    # Remove config and control file
    rm -f "$CONFIGDIR/$name/$sel.local" > /dev/null
    rm -f "$CONFIGDIR/$name/$sel.ctl.local" > /dev/null
}


# Decide on the action to take
act=$1
shift
case "X$act" in
Xupdate)	helper_update_svc "$@" ; exit 0 ;;
Xdelete)	helper_delete_svc "$@" ; exit 0 ;;
*)		echo "Bad action $act" ; exit 1 ;;
esac


# vim: ts=4:sw=4:expandtab
