#!/bin/bash
# lastact: arturo@2022-1-20
# desc: Script encargado de devolver si un servicio esta activo o no

FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}" "null"

# Mostramos la ayuda si se pasa como parámetro -h o --help:
AYUDA="Script encargado de devolver si un servicio esta activo o no."
AYUDA+="\nPueden pasarse hasta 4 parámetros opcionales: 1) DNS servidor, 2) nº puerto, 3) Timeout netcat y 4) Número de intentos"
AYUDA+="\nEl tiempo máximo de espera en no recibir respuesta y salir sería: tmax = 5*_NINTENTOS + _TIMEOUT*_NINTENTOS segundos"
EJEMPLOS=("${0} \"migasfree.educa.aragon.es\" \"80\" \"5\" \"10\" # Llamada con los valores por defecto")
EJEMPLOS+=("${0} \"migasfree.educa.aragon.es\" # Sin parámetros chequeará el puerto 80 de migasfree.educa.aragon.es")
EJEMPLOS+=("${0} \"srv.local\" \"2049\" \"\" \"8\" # Los parámetros omitidos adoptarán los valores por defecto")
vx-check_need_help "${1}" && \
vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" && \
exit 0

# Preparamos la auditoria del servicio:
LOG="vx-check-servicio.log"
vx-log_xsession -o "${LOG}"

_SERVER="${1:-"migasfree.educa.aragon.es"}"
_PORT="${2:-"80"}"
_TIMEOUT="${3:-"5"}"
_NINTENTOS="${4:-"10"}"
_INTENTOS=1
# Mediante netcat chequeamos el puerto de escucha:
until nc -z "${_SERVER}" "${_PORT}" -w"${_TIMEOUT}" ; do
    if (( _INTENTOS <= _NINTENTOS )) ; then
        sleep 5 # tmax = 5*_NINTENTOS + _TIMEOUT*_NINTENTOS
        echo "=> Problemas de conexión con ${_SERVER}:${_PORT}. Intento ${_INTENTOS} [$(vx-funcs-bash vx-fecha)]"
    else
        # No hay conexión al servidor y salimos.
        echo "--------------------------------"
        echo "=> No hay conexion con ${_SERVER}. Cancelamos."
        exit 1
    fi
    (( _INTENTOS++ ))
done

exit 0