Orquestando múltiples trabajos concurrentes.

En esta tarea vamos a evaluar de manera general tu habilidad para desarrollar soluciones a problemas no triviales. Es muy importante que utilices todo el tiempo. Cada detalle del que te hagas cargo sumará en tu evaluación.

Enunciado

Al hacer la validación de una empresa en Plutto múltiples procesos (Jobs) son lanzados para obtener información. Cada uno de estos procesos pueden ser consultas a bases de datos, web-scrappers, consultas a apis, etc.

Tu tarea es hacer un sistema que orqueste y ordene la forma en que se corren estos jobs. Se te entregará código con los jobs ya programados y con un endpoint para poder iniciar el proceso de obtención de información.

El endpoint es POST /task_runs y creará un recurso TaskRun que por ahora es un modelo que solo tiene dos columnas: started_at y ended_at para guardar cuando se inició y terminó un proceso.

Con “un proceso” nos referimos a la ejecución de todos los Jobs en el orden correspondiente y guardando toda la información. Es decir, el flujo es como sigue:

  1. El servidor recibe un POST a /task_runs
  2. Se crea el recurso TaskRun y se marca a la hora que empezó
  3. Se lanzan los jobs*
  4. Se guarda la información que recolectan los jobs*
  5. Se marca el TaskRun como terminado (ended_at) a la hora que el último job termina de correr*

Importante: