#!/bin/bash #/** #@file ogagentqueue.cron #@brief Cronfile to send pending operations to OGAgent. #warning This file must be executed under system Cron every minute. #@version 1.1.0 - Initial version. #@date 2017-10-26 #@author Ramón M. Gómez - Univ. Sevilla #*/ ## # Variables. PROG=$(basename "$0") OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg LOGFILE=$OPENGNSYS/log/remotepc.log source $OPENGNSYS/lib/ogfunctions.sh || exit 1 # Basic error control source $SERVERCONF 2> /dev/null || raiseError access "Server configuration file" touch "$LOGFILE" 2> /dev/null || raiseError access "Cannot write in the log file" # Reading pending operations. dbexec " SELECT ogagent_queue.id, ogagent_queue.exectime, ogagent_queue.operation, ordenadores.idordenador, ordenadores.ip, ordenadores.agentkey, remotepc.language FROM ogagent_queue JOIN ordenadores ON ogagent_queue.clientid=ordenadores.idordenador JOIN remotepc ON ogagent_queue.clientid=remotepc.id WHERE exectime < NOW() ORDER BY exectime;" | \ while read -r OPERID DATE TIME OPER CLNTID AGNTIP AGNTKEY LANGUAGE; do # Preparing operation data. case "$OPER" in popup-10) # Message: 10 min. before power off. AGNTURL="https://$AGNTIP:8000/opengnsys/popup" case "$LANGUAGE" in es) DATA='{"title":"Apagado en 10 min.","message":"Fin del tiempo de acceso remoto.\nEl ordenador se apagará automáticamente dentro de 10 minutos."}' ;; *) DATA='{"title":"Shutdown after 10 min.","message":"Remote access time is ended.\nComputer will be powered off automaticly after 10 minutes."}' ;; esac ;; popup-5) # Message: 5 min. before power off. AGNTURL="https://$AGNTIP:8000/opengnsys/popup" case "$LANGUAGE" in es) DATA='{"title":"Apagado en 5 min.","message":"El ordenador se apagará automáticamente dentro de 5 minutos.\nATENCIÓN: Este es el último aviso."}' ;; *) DATA='{"title":"Shutdown after 5 min.","message":"The computer will be powered off automaticly after 5 minutes.\nATTENTION: This is the last warning."}' esac ;; poweroff) # Power off client. AGNTURL="https://$AGNTIP:8000/opengnsys/poweroff" DATA= ;; *) # Unknown operation. AGNTURL= ;; esac # Sending operation to OGAgent. if [ -n "$AGNTURL" ]; then CODE=$(curl -ksm 1 -w "%{http_code}" -o /dev/null -H "Authorization: $AGNTKEY" ${DATA:+"-d $DATA"} "$AGNTURL") case "$CODE" in 000) # Client does not respond (may be halted). ;; 200) # Operation sent. echo "$(date +"%FT%T%z"): $PROG: Operation sent to OGAgent: client=$AGNTIP, oper=$OPER, exectime=\"$DATE $TIME\"" >> $LOGFILE ;; *) # Operation error. echo "$(date +"%FT%T%z"): $PROG: Operation error: client=$AGNTIP, oper=$OPER, code=$CODE" >> $LOGFILE ;; esac else # Unknown operation. echo "$(date +"%FT%T%z"): $PROG: Unknown operation: client=$AGNTIP, oper=$OPER" >> $LOGFILE fi # Deleting operation from the database. SQL="DELETE FROM ogagent_queue WHERE id='$OPERID';" [ "$OPER" == "poweroff" ] && SQL+=" UPDATE remotepc SET reserved = NOW() - INTERVAL 1 SECOND, urllogin=NULL, urllogout=NULL, language=NULL WHERE id = '$CNLTID'; DELETE FROM acciones WHERE idordenador = '$CLNTID' AND descriaccion = 'RemotePC Session';" dbexec "$SQL" done