#!/bin/bash
#/**
#@file     poweroffconf
#@brief    Control de parada tras tiempo de inactividad para ahorro de energía.
#@param    int_minutos    Minutos de inactividad (opcional).
#@note     La comprobación periódica debe ejecutarse en el "cron" del sistema.
#@note     Fichero de configuración: /etc/poweroff.conf
#@author   Ramón Gómez - Univ. Sevilla
#@date     2011-10-25
#@warning  License: GNU GPLv3+
#*/


# Variables generales.
OPENGNSYS=${OPENGNSYS:-/opt/opengnsys}	# Instalación de OpenGnSys
OGETC=${OGETC:-$OPENGNSYS/etc}		# Configuración de OpenGnSys
POWEROFFCONF=/etc/poweroff.conf		# Configuración del script
source $POWEROFFCONF

case $# in
    0)  # Sin parámetros, comprobar que existe la variable POWEROFFSLEEP.
        if [ -z "$POWEROFFSLEEP" ]; then
             ogRaiseError $OG_ERR_FORMAT "Sin tiempo de espera."
             exit $?
        fi
        ;;
    1)  #TODO Comprobar que el parámetro es entero positivo.
	# Nuevo timepo de espera.
        POWEROFFSLEEP=$1
        perl -pi -e "s/POWEROFFSLEEP=.*/POWEROFFSLEEP=$POWEROFFSLEEP/" $POWEROFFCONF
	# Si se necesita, recalcular tiempo de parada.
	if [ -n "POWEROFFTIME" ]; then
	    POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%H%M")
            perl -pi -e "s/POWEROFFTIME=.*/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF
	fi
	exit 0 ;;
    *)  # Error de formato de ejecución.
        ogRaiseError $OG_ERR_FORMAT "Formato: $0 [int_minutos]"
        exit $? ;;
esac
# Comprobar si hay algún script en ejecución.
if [ -n "$(pgrep -fl $OPENGNSYS | egrep -v "$OGETC|$0")" ]; then
    # Eliminar tiempo de inicio de espera, si se está ejecutando operación.
    perl -pi -e 's/POWEROFFTIME=.*$/POWEROFFTIME=/' $POWEROFFCONF
else
    # Si el sistema está en estado de espera, ...
    NOW=$(date +"%H%M")
    if [ -z "$POWEROFFTIME" ]; then
        # Asignar tiempo de inicio, si no estaba definido.
        POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%H%M")
        perl -pi -e "s/POWEROFFTIME=.*$/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF
    else
        # Apagar el equipo si se sobrepasa el periodo de espera.
        if [ $NOW -ge $POWEROFFTIME ]; then
            $OPENGNSYS/scripts/poweroff
        fi
    fi
fi

