¿Cómo planificar la ejecución de un DataFlow desde el FlowEngine?
En este tutorial se va a construir un caso de uso completo haciendo uso de los nodos de control y orquestación de Dataflow. Vamos a planificar la ejecución de un DataFlow de manera periódica, controlando si es viable lanzar el proceso, esperando a un estado determinado y procesando la respuesta.
Para mayor detalle en el uso de cada nodo, puedes ver cada uno de ellos en su sección correspondiente AQUÍ.
Dentro del dominio de FlowEngine, seleccionaremos primero un nodo planificador de procesos. El objetivo es que dicho nodo pueda generar un mensaje de manera periódica o bajo los criterios que nos sean necesarios. Por ejemplo, podemos añadir un nodo “cronplus” desde la paleta al área de trabajo.
En este nodo podemos configurar la planificación deseada bien haciendo uso de una expresión en texto o bien usando la el constructor de expresiones integrado.
Para este caso planificaremos que el nodo lance un mensaje cada hora a las y 30 minutos.
A continuación, hay que validar que el DataFlow que queremos ejecutar no está siendo ejecutado ya. Para ello, tenemos que añadir un nodo “Check Dataflow Status“ y unirlo al anterior. En este nodo tenemos se configurar las siguientes opciones:
Dataflows available: El nombre del DataFlow que queremos ejecutar. La lista se carga automáticamente con aquellos DataFlows sobre los que el usuario dueño del dominio tiene permisos.
Wait until status: interval. Este valor indica que estaremos esperando un tiempo determinado desde que el mensaje del cron nos llega para validar que ese DataFlow está en o transiciona hacia uno o varios estados en concreto. Al seleccionar “interval” aparecerán las siguientes opciones de configuración:
Status: Lista de estados (selección múltiple con la tecla ctrl) a los que vamos a esperar. En el ejemplo seleccionamos todos aquellos estados que indican finalización de ejecución, edición o fallo: EDITED, FINISHED, RUN_ERROR
Restart checking status after receiving a message. Vuelve a lanzar la espera activa a un estado determinado. Lo marcamos como activo.
Stop after first match. Para la espera activa una vez se detecta un cambio de estado marcado o pasa el tiempo de espera. Lo marcamos como activo.
Set timeout for the status to reach the selecction state. Define un tiempo de espera tras el cual, si no se ha detectado un cambio de estado hacia uno de los de la selección, se para la espera activa y se notifica por la salida de TIMEOUT. Lo marcamos como activo.
Timeout: Tiempo en segundos de espera activa sobre el que aplicar el criterio del campo anterior. Este valor tiene que estar acorde a lo que se estima que va a tardar la ejecución del proceso que se está validando.
Every: Periodo de sondeo de la espera activa. Cada x tiempo indicaremos que se vuelva a comprobar si el estado ha cambiado o no. Por defecto cada segundo.
Una vez configurado el nodo “check Dataflow Status” clickamos en “Done” y veremos que aparecen tantas salidas como estados se han seleccionado y una salida más que corresponde al TIMEOUT. Para ver cual es cual, se puede dejar el cursor sobre la patilla de salida y aparecerá un tooltip:
A continuación, arrastramos un nodo de tipo “Start Dataflow“ al área de trabajo y unimos la entrada de este con todas las salidas del “Check Dataflow Status” menos la de TIMEOUT, ya que representa que el DataFlow no quedó libre para ejecución en el tiempo de espera definido. En este caso lo sacamos por pantalla, pero podría tratarse el mensaje y guardarlo en una entidad para hacer una auditoría de procesos no ejecutados por determinadas circunstancias.
Sobre el nodo “Start Dataflow”, seleccionamos el DataFlow a ejecutar. Si queremos, podemos pasar parámetros que estén definidos en el DataFlow pulsando el botón inferior “+add”. Es fundamental que los parámetros estén definidos previamente en el DataFlow, o los valores serán ignorados.
Este nodo lanzará la ejecución del DataFlow. Tras esto, si el DataFlow es de ejecución online, podemos dejarlo como está y pulsar en el botón DEPLOY de la esquina superior derecha para guardar los cambios y aplicar la planificación.
En este caso, vamos a suponer que el DataFlow se para automáticamente y queremos recoger el evento de finalización para poder anotarlo.
Para ello, volvemos a hacer uso del nodo “Check Dataflow Status” y lo configuramos exactamente igual, pero cambiamos la selección de estados, por los que queramos analizar, en este caso los estados:
FINISHED
RUN_ERROR
STOPPED
CONNECT_ERROR
RUNNING_ERROR
Lo enlazamos con el nodo “Start Dataflow” y decidimos qué hacer con las salidas:
Para este ejemplo, diferenciaremos los casos de ejecución correcta de los que no:
La primera salida en este caso es la de FINISHED, que representa el estado de finalización correcta.
Stopped, representa la finalización del proceso por petición de usuario. Esto sucede cuando un usuario para la ejecución del DataFlow mediante el nodo “Stop Dataflow” o desde el control de ejecución de Dataflows con el botón “Stop”.
Todas las demás salidas (salvo la última) representan estados de error de ejecución por diversos motivos, fallo de conexión interno a otros servicios, errores de parametrización, DataFlow mal formado, etc.
Pro último, la salida de TIMEOUT, como comentamos anteriormente, representa que el DataFlow no ha cambiado hacia ninguno de los estados seleccionados en el tiempo de espera.
Para este ejemplo solamente sacaremos por pantalla agrupados estos 3 conjuntos, pero se pueden procesar como se quieran (mandando mails de aviso, insertándolos a una entidad de auditoría, etc).
Como siempre, recordad guardar los cambios haciendo click en el botón deploy.