##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
## Des outils pour contrôler les services unix
##@cooked nocomments
uprovide service
urequire sysinfos

function __service() {
    # Appliquer la commande $2 au service $1, e.g. 'service daemon restart'
    # Si la variable SERVICE_OVERRIDE_$1_$2 existe, utiliser la fonction dont le
    # nom est donnée par cette variable pour faire l'opération. Si la valeur est
    # 1, prendre la fonction nommée SERVICE_OVERRIDE_$1_$2
    # Pour information, le nom de la variable est corrigé en remplaçant '-' par
    # '_'. Ceci permet d'utiliser des noms de services avec des '-' dans leur
    # nom.
    # XXX ajouter le support de MacOS X
    local overriden="SERVICE_OVERRIDE_${1}_${2}" overridef
    overriden="${overriden//-/_}"
    overridef="${!overriden}"
    if [ -n "$overridef" ]; then
        [ "$overridef" == 1 ] && overridef="$overriden"
        "$overridef" "$@"
    elif [ -x /usr/sbin/service ]; then
        /usr/sbin/service "$@"
    else
        local script="$1"; shift
        "/etc/init.d/$script" "$@"
    fi
}

function service() {
    if [ "$2" == check ]; then
        __service "$1" status >&/dev/null
    elif [ "$2" == startm ]; then
        __service "$1" status >&/dev/null || __service "$1" start
    elif [ "$2" == stopm ]; then
        __service "$1" status >&/dev/null && __service "$1" stop
    elif [ "$2" == restartm ]; then
        __service "$1" status >&/dev/null && __service "$1" restart
    else
        __service "$@"
    fi
}

function service_start() {
    # démarrer le service $1 de façon inconditionnelle
    service "$1" start
}
function service_startm() {
    # démarrer le service $1 s'il n'est pas déjà démarré
    service "$1" startm
}
function service_stop() {
    # arrêter le service $1 de façon inconditionnelle
    service "$1" stop
}
function service_stopm() {
    # arrêter le service $1 s'il n'est pas déjà arrêté
    service "$1" stopm
}
function service_reload() {
    # recharger le service $1
    service "$1" reload
}
function service_status() {
    # tester/afficher le status du service $1
    service "$1" status
}