4 Preprocesamiento con JavaScript

Descripción general

Esta sección proporciona detalles del preprocesamiento mediante JavaScript.

Preprocesamiento de JavaScript

El preprocesamiento de JavaScript se realiza invocando la función de JavaScript con un 'valor' de parámetro único y cuerpo de función proporcionado por el usuario. El resultado del paso de preprocesamiento es el valor devuelto por esta función. Por ejemplo, para realizar la conversión de Fahrenheit a Celsius, el usuario debe ingresar:

return (value - 32)* 5 / 9

en los parámetros de preprocesamiento de JavaScript, que se incluirán en una función JavaScript por el servidor:

function (value)
       {
          return (value - 32) * 5 / 9
       }

El parámetro de entrada 'value' siempre se pasa como una cadena. El valor de retorno se convierte automáticamente en cadena mediante el método ToString() (si falla, el error se devuelve como valor de cadena), con algunas excepciones:

  • devolver un valor indefinido resultará en un error
  • devolver un valor nulo hará que se descarte el valor de entrada, muy parecido al preprocesamiento 'Descartar valor' en la acción 'Personalizado en caso de error'.

Los errores se pueden devolver arrojando valores/objetos (normalmente ya sea cadenas u objetos de error).

Por ejemplo:

if (value == 0)
           throw "Zero input value"
       return 1/value

Cada script tiene un tiempo de espera de ejecución de 10 segundos (dependiendo del script el tiempo de espera puede tardar más en activarse); si se supera, se producirá un error de retorno. Se aplica un límite de almacenamiento dinámico de 512 megabytes (64 megabytes antes de Zabbix 6.0.19).

El código de bytes del paso de preprocesamiento de JavaScript se almacena en caché y se reutiliza cuando el paso se aplica la próxima vez. Cualquier cambio en los pasos de preprocesamiento de la métrica hará que el script almacenado en caché se restablezca y se vuelva a compilar más tarde.

Fallos consecutivos en el tiempo de ejecución (3 seguidos) causarán que el motor se apague, reiniciadose para mitigar la posibilidad de que un script rompa el entorno de ejecución para los siguientes scripts (esta acción se registra con un nivel de depuración 4 y superior).

El preprocesamiento de JavaScript se implementa con Duktape (https://duktape.org/) Motor JavaScript.

Ver también: Objetos JavaScript adicionales y funciones globales

Uso de macros en scripts

Es posible utilizar macros de usuario en el código JavaScript. Si un guión contiene macros de usuario, estas macros son resueltas por el servidor/proxy antes de ejecutar los pasos de preprocesamiento específicos. Tenga en cuenta que al realizar pruebas de pasos de preprocesamiento en la interfaz, los valores macro no se extraerán y deben ingresarse manualmente.

El contexto se ignora cuando una macro se reemplaza con su valor. El valor de la macro se inserta en el código tal cual, no es posible agregar escapes adicionales antes de colocar el valor en el código JavaScript. Tenga en cuenta que esto puede provocar errores de JavaScript en algunos casos.

En el siguiente ejemplo, si el valor recibido excede el valor de una macro {$THRESHOLD}, en su lugar se devolverá el valor del umbral (si está presente):

var threshold = '{$THRESHOLD}';
       return (!isNaN(threshold) && value > threshold) ? threshold : value;