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:
Recapitulando...
Necesito revisar una serie de condiciones que debe cumplir el streamer para poder informar al frontend, en resume es esto:
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).
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)
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...