Patrón de secuencia

Las reglas de secuencia las define el patrón de secuencia. Una regla de secuencia detecta si una secuencia de sucesos determinada llega dentro de un intervalo de tiempo. La secuencia puede ser ordenada o aleatoria. Una regla de secuencia es una regla con estado.

Visión general

El patrón de secuencia comprueba una secuencia de sucesos durante un periodo de tiempo, y detecta si la secuencia está completa o incompleta. Una secuencia incompleta es una secuencia que incluye uno o más de los sucesos en el orden especificado, pero no todos.

El periodo de tiempo se indica por una ventana de tiempo obligatoria, según define el elemento <timeWindow> en el lenguaje de reglas. Cada suceso de la secuencia se define por un elemento <eventSelector> distinto dentro de la regla. La secuencia de sucesos puede detectarse en cualquiera de los siguientes órdenes:
  • En el orden en que los elementos <eventSelector> están codificados para la regla. En este caso, cuando la regla detecta el suceso definido por el primer elemento <eventSelector>, se inicia la detección de la secuencia. A continuación la regla espera el suceso definido por el segundo elemento <eventSelector>.
  • En orden aleatorio. En este caso, cuando la regla detecta alguno de los elementos definidos por los elementos <eventSelector>, se inicia la detección de la secuencia. A continuación la regla espera algún otro de los sucesos definidos por los elementos <eventSelector>.
El patrón de secuencia se diferencia de los demás patrones de regla en lo siguiente:
  • Tiene múltiples elementos <eventSelector> para definir qué sucesos son aceptados por la regla. Requiere un mínimo de dos elementos <eventSelector>.
  • Cuando un suceso cumple los criterios definidos en alguno de los elementos <eventSelector>, ese elemento <eventSelector> queda excluido para el posterior proceso de sucesos dentro de esa instancia de regla.
  • El atributo de alias del elemento <eventSelector> sólo es válido dentro de una regla de secuencia, y únicamente nombra a un suceso seleccionado por un selector de sucesos concreto de la regla de secuencia. En una expresión dentro de un predicado o acción de filtrado, puede utilizar la variable act_eventList para acceder a un suceso de una regla de secuencia mediante su nombre de alias.

Condiciones bajo las que se ejecuta la respuesta de la regla

Con el patrón de secuencia, la respuesta se la regla se ejecuta en los siguientes momentos:
  • Cuando se detecta la secuencia completa de sucesos dentro de la ventana de tiempo, según se define en el elemento <onDetection>.
  • Cuando llegan uno o más sucesos pero no la secuencia completa dentro de la ventana de tiempo, según se define en el elemento <onTimeOut>.

    El patrón de secuencia puede ser útil para detectar que una secuencia dada es incompleta.Por ejemplo, si se da un suceso "system down" sin un suceso "system up" subsiguiente, el creador de reglas puede codificar una acción <onTimeOut> para manejar este tipo de suceso que no tienen lugar.

Ejemplo de utilización de este patrón de regla

Caso que ilustra la detección de una secuencia completa:
Supongamos que en un entorno de TI, un administrador desea saber si el valor del tamaño de almacenamiento de DB2 está afectando a WebSphere Application Server y, si es el caso, corregir el problema. Por lo tanto, si se dan los siguientes sucesos en el siguiente orden durante un periodo de tiempo especificado, el administrador quiere aumentar el valor del tamaño de almacenamiento de DB2 y reiniciar el gestor de bases de datos:
  1. Una excepción de asignación de recursos de WebSphere Application Server. Supongamos que este es un suceso de tipo WASResourceAllocationException.
  2. El mensaje de error de DB2 parecido al siguiente: "No hay almacenamiento suficiente para procesar la sentencia". Supongamos que este es un suceso de tipo DB2NotEnoughHeap.
Para este caso, hay dos elementos <eventSelector> definidos en una regla de secuencia y los sucesos tienen que llegar en el orden en que están codificados los elementos <eventSelector> (y no en orden aleatorio). El primer elemento <eventSelector> comprueba el suceso WASResourceAllocationException, y el segundo elemento <eventSelector> comprueba el suceso DB2NotEnoughHeap. Supongamos que se presentan los siguientes sucesos al sistema dentro de la ventana de tiempo especificada:
  1. WASResourceAllocationException
  2. DB2BackupStarted
  3. WASResourceAllocationException
  4. WASResourceAllocationException
  5. DB2NotEnoughHeap
El comportamiento de la regla es el siguiente:
  1. El primer suceso, WASResourceAllocationException, es aceptado. Ya que se cumple el criterio para el primer elemento <eventSelector>, el primer elemento <eventSelector> queda excluido para el posterior proceso de sucesos dentro de esta regla.
  2. El segundo suceso, DB2BackupStarted, es ignorado.
  3. El tercer suceso, WASResourceAllocationException, es ignorado.
  4. El cuarto suceso, WASResourceAllocationException, es ignorado.
  5. El quinto suceso, DB2NotEnoughHeap, es aceptado y completa la secuencia. Se ejecuta la acción de respuesta de regla <onDetection>. Esta acción se define para aumentar el valor del tamaño de almacenamiento de DB2 y reiniciar el gestor de bases de datos. La regla vuelve a su estado inicial.

    El primer elemento <eventSelector> se incluye ahora para el futuro proceso de sucesos de esta regla.

Caso que ilustra la detección de una secuencia incompleta:
Supongamos que una organización empresarial pretende tener todos los pedidos de un cliente listos para la entrega en 1 hora desde la recepción del pedido y desea saber los casos en que esto no se cumple.
Para este caso, hay dos elementos <eventSelector> definidos en una regla de secuencia y los sucesos tienen que llegar en el orden en que están codificados los elementos <eventSelector> (y no en orden aleatorio). El primer elemento <eventSelector> comprueba el suceso Netsales con operationType=Order, y el segundo elemento <eventSelector> comprueba el suceso Netsales conoperationType=Delivery. Supongamos que se presentan los siguientes sucesos al sistema con una ventana de tiempo especificada de 1 hora:
  1. Un suceso Netsales con operationType=Order
  2. Un suceso Netsales con operationType=Order
El comportamiento de la regla es el siguiente:
  1. El primer suceso es aceptado. Ya que se cumple el criterio para el primer elemento <eventSelector>, el primer elemento <eventSelector> queda excluido para el posterior proceso de sucesos dentro de esta regla.
  2. El segundo suceso es ignorado.
  3. Ya que un suceso Netsales con operationType=Delivery no se recibe dentro del espacio de tiempo especificado, se ejecuta la acción <onTimeOut>. Esta acción se define para notificar a un ejecutivo comercial que el pedido de un cliente no está preparado para la entrega dentro del espacio de tiempo de 1 hora tras la solicitud del pedido. La regla vuelve a su estado inicial.

    El primer elemento <eventSelector> se incluye ahora para el futuro proceso de sucesos de esta regla.

Conceptos relacionados
Acceso a la información relacionada con los sucesos
Referencia relacionada
Resumen de la regla de secuencia