Ejecución de scripts

WOCU-Monitoring ofrece la posibilidad de ejecutar scripts previamente cargados en el sistema por un administrador.

Carga de scripts

Los scripts han de dejarse en el siguiente directorio:

/opt/wocu/embedded/wocu/script_launcher/scripts/

Una vez copiados, se debe otorgar permisos de ejecución (si no disponen de ellos previamente).

Se deben cumplir las siguientes condiciones para la correcta ejecución de los scripts:

  • El nombre del script no debe contener espacios.

  • No deben escribir en ficheros intermedios o finales, durante su ejecución.

  • Deberán gestionar internamente la llegada o ausencia de parámetros.

  • Han de tener en cuenta posibles bloqueos y, en caso de producirse, gestionarlos adecuadamente para evitar timeouts.

Recolección automática de parámetros

Para que el sistema agregue los parámetros de forma automática, es necesario incluir tantas líneas como se desee.

Cada una de ellas debe comenzar con el prefijo ##autoload__parameter seguido del nombre de la variable.

Estos son algunos ejemplos de la definición de parámetros dentro de un script:

  • Parámetro host_name

##__autoload__parameter__host_name
  • Parámetro service name

##__autoload__parameter__service name
  • Parámetro Stop Condition

##__autoload__parameter__Stop Condition

Como se puede observar, los nombres de parámetro pueden contener espacios.

Ejemplo

En el siguiente script se definen dos parámetros de entrada que posteriormente serán mostrados en el formulario que permitirá su ejecución.

#!/bin/bash

##__autoload__parameter__host1
##__autoload__parameter__host2
##__autoload__parameter__Stop Condition

# Nota: El tercer parámetro no se usa en el script

host1=$1
host2=$2

echo "Primero el parámetro host1: ${host1}"
ping -c1 ${host1}
echo "Después el parámetro host2 ${host2}"
ping -c1 ${host2}

Ejecución de un script

La funcionalidad está preparada para cargar, actualizar y retirar scripts automáticamente. Cada vez que se accede a la ventana Advanced Diagnosis, se lleva a cabo el proceso de recarga que advierte al sistema de los posibles cambios.

Este proceso se realiza de forma transparente y no requiere de acciones manuales:

  • En primer lugar, accederemos a Advanced Diagnosis, que se encuentra dentro del menú desplegable Settings.

    Imagen del desplegable con la opción Advanced Diagnosis señalada.
  • Una vez en él, se mostrará un desplegable con la lista de scripts cargados en el sistema.

    Imagen con la ventana de Advanced Diagnosis y los scripts cargados en el sistema.
  • Tras seleccionar un script de la lista, aparecerán tantos campos como parámetros se hayan definido mediante el método mostrado más arriba.

    Imagen de la ventana Advanced Diagnosis con un script seleccionado y los campos del formulario sin rellenar.
  • Adicionalmente, aparecerá un selector de ficheros que permite la carga de un fichero de parámetros, en formato CSV.

Llegados a este punto, existen dos formas posibles de ejecutar el script, cada una de las cuales tiene unas implicaciones en cuanto al resultado obtenido.

Ejecución con parámetros indicados manualmente

Este tipo de ejecución se refiere a la que recibe los parámetros necesarios para el script en base a la información introducida por el administrador en los campos de la sección Parámetros.

Imagen de la ventana Advanced Diagnosis con un script seleccionado y los campos del formulario rellenos.

El resultado mostrado incluye toda la información generada durante la ejecución, incluyendo los mensajes principales, posibles errores y un indicador que refleja el resultado final del proceso.

Imagen de la ventana Advanced Diagnosis con la salida tras la ejecución del script

Ejecución con parámetros cargados por fichero

En este caso de uso, se espera que el administrador cargue un fichero en formato CSV con cabeceras.

El fichero debe contener tantas columnas como parámetros admita el script y cada fila supondrá una ejecución del script con ese conjunto de parámetros.

Imagen de las celdas de un CSV de ejemplo.

El retorno en este tipo de ejecución es un fichero de texto con extensión txt. En este fichero se encontrará una entrada por cada ejecución llevada a cabo, es decir, por cada fila del fichero CSV, sin contar las cabeceras.

Ejemplo

JSON

    // Execution date: 2025-03-14 12:29:13

    {
    "1": {
        "parameters": [
            "www.example.es",
            "www.example.com",
            "42"
        ],
        "output": [
            "Primero el parámetro host1: www.example.es",
            "PING www.example.es (185.53.177.53) 56(84) bytes of data.",
            "64 bytes from 185.53.177.53 (185.53.177.53): icmp_seq=1 ttl=48 time=45.9 ms",
            "",
            "--- www.example.es ping statistics ---",
            "1 packets transmitted, 1 received, 0% packet loss, time 0ms",
            "rtt min/avg/max/mdev = 45.860/45.860/45.860/0.000 ms",
            "Después el parámetro host2 www.example.com",
            "PING a1422.dscr.akamai.net (2.22.146.153) 56(84) bytes of data.",
            "64 bytes from a2-22-146-153.deploy.static.akamaitechnologies.com (2.22.146.153): icmp_seq=1 ttl=55 time=13.8 ms",
            "",
            "--- a1422.dscr.akamai.net ping statistics ---",
            "1 packets transmitted, 1 received, 0% packet loss, time 0ms",
            "rtt min/avg/max/mdev = 13.836/13.836/13.836/0.000 ms",
            ""
        ],
        "errors": [
            ""
        ],
        "return_code": 0
    },
    "2": {
        "parameters": [
            "8.8.8.8",
            "8.8.4.4",
            "41"
        ],
        "output": [
            "Primero el parámetro host1: 8.8.8.8",
            "PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.",
            "64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=14.5 ms",
            "",
            "--- 8.8.8.8 ping statistics ---",
            "1 packets transmitted, 1 received, 0% packet loss, time 0ms",
            "rtt min/avg/max/mdev = 14.501/14.501/14.501/0.000 ms",
            "Después el parámetro host2 8.8.4.4",
            "PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data.",
            "64 bytes from 8.8.4.4: icmp_seq=1 ttl=117 time=13.3 ms",
            "",
            "--- 8.8.4.4 ping statistics ---",
            "1 packets transmitted, 1 received, 0% packet loss, time 0ms",
            "rtt min/avg/max/mdev = 13.283/13.283/13.283/0.000 ms",
            ""
        ],
        "errors": [
            ""
        ],
        "return_code": 0
        }
    }