LatamQChallenge: Implementando los task queue functions

Explico los puntos técnicos que involucran la funcionalidad de Streamer vs Streamer para el LatamQChallenge

hace 2 meses   •   4 min de lectura

Por Andrés Tuñón

Han sido semanas difíciles, pero finalmente pude volver a trabajar en este proyecto. Esta vez entro en lo técnico de la funcionalidad explicada en el artículo de a continuación:

LatamQChallenge: Streamer vs Streamer
Desgloso la lógica a aplicar para la funcionalidad de Streamer vs Streamer para el LatamQChallenge

Recapitulando...

Necesito revisar una serie de condiciones que debe cumplir el streamer para poder informar al frontend, en resume es esto:

Diagrama de flujo de la funcionalidad
Diagrama de flujo de la funcionalidad

Como debo hacer API Polling, debo verificar cada cierto tiempo (por el momento trato de que sea cada 2 minutos) por esta información en Firestore.

Y no solo eso, como no será el único request que necesito de este API, debo trabajar con Queues para que haya un tiempo de espera entre llamadas.

Diseñando la solución

Bajo la información y herramientas que tengo, dispongo de 3 tipos de funciones:

  • Cloud Firestore Function: Lo acciona cambios de Firestore
  • Scheduled Function: Se acciona cada cierto tiempo
  • Task queue function: Se acciona al recibir un mensaje y crean los queues

Por si no lo recuerdan, ya tengo información inicial de los streamers y un webhook que escucha cuando alguno de los streamers está online.

Tratando de aprovechar lo anterior, primero intenté escuchar el campo isOnline de Firestore (me refiero al que se ve en la imagen) para luego activar y desactivar el Scheduled Function y mantenerme revisando la partida hasta que acabé; pero hay un problema ... los Scheduled Functions no se activan y desactivan tan fácil (al menos no de una forma práctica).

Ejemplo de Firestore
Ejemplo de Firestore

Lo que me queda es tomar la lógica de escuchar a Firestore y llevarlo a un Scheduled Function, para que cada 2 minutos verifique si hay algún streamer Online:

Como se puede apreciar, pregunto por lo que está en Firestore; luego si trae algo, lo itero para agregarlos a la cola llamada riotFunnel.

Este Riot Funnel tiene justo ese nombre porque tooodas las llamadas a Riot pasarán por ahí; sera el intermedario para olvidarme del 429. No está completo pero se ve así riotFunnel:

Claramente se ve los tiempos para limitar las llamadas e incluso los retries. La idea es que este sea el encargado de realizar las llamadas en el onDispatch.

Problemas

Toda la suite de funciones se puede probar bajo diversos métodos:

  • Interactivamente
  • Emuladores
  • Consola
  • HTTP ?

Muy bonita la documentación (la dejaré al final del artículo), pero por ejemplo los scheduled functions no se emulan, la única forma que encontré fue por consola:

Bueno al menos me alegro de tener muchas alternativas  de probar el asunto.. no como cof cof los Azure Functions...

Y luego de horas aplicando un montón de permisos a streamerVsStreamer y a riotFunnel para darles acceso a los recursos en la cloud de Google, me percaté que arriba no necesita permisos (obvio xD)

Scheduled Function Usage
Scheduled Function Usage
Queue preview
Queue preview

Y bueno... algo que aprendí de todo esto es tener un mejor control de los permisos, si los separo y documento correctamente creo que podré identificarlos mejor.

Por suerte no me han cobrado nada, voy a apagar todo esto mejor y volverlo a subir desde cero...

Referencias

Test functions interactively | Cloud Functions for Firebase
Test functions interactively
Enqueue functions with Cloud Tasks | Cloud Functions for Firebase
Task queue functions

Corre la voz

Sigue leyendo