En esta página vas a encontrar una breve descripción sobre los webjobs que están corriendo actualmente así como el schedule sugerido (para los que corren bajo ese criterio), así como también las colas que hasta el día de hoy se usan.
WebJobs
ActiveUsersBySubscriptionScheduledWJ
Acciones que realiza.
- Query a la base del campus para obtener la cantidad de usuarios activos de cada suscripción.
- Luego inserta en la base del dashboard un registro por cada suscripción con el count obtenido.
- Finalmente genera un json con todos los count y lo guarda en el datalake.
Schedule
0 50 0/8 * * * (cada 8hs en el minuto 50)
Nombre sugerido
PROD-ActiveUsersBySubscription
CalculatePerformanceAndRankingsScheduledWJ
Acciones que realiza.
- Corre el stored procedure SumarizeUsersActivityRankingData que calcula los minutos pasados en 2. el campus por los usuarios en los últimos 15, 30, 60 y todos los días.
- Corre el stored procedure SumarizeCompletedLiveEventsData que calcula los cursos completados por los usuarios en los últimos 15, 30, 60 y todos los días.
- Corre el stored procedure SumarizeAttendancePerformanceByUser que calcula la asistencia a clases virtuales y presenciales de los usuarios en los últimos 15, 30, 60 y todos los días.
- Corre el stored procedure SummarizeUsersAcademicPerformance que calcula el promedio de exámenes rendidos de los usuarios en los últimos 15, 30, 60 y todos los días.
- Corre el stored procedure ProcessUsersActivityTimeRankings que calcula los rankings de tiempo de actividad para los últimos 15, 30, 60 y todos los días.
- Corre el stored procedure ProcessUsersCompletedLiveEventsRankings que calcula los rankings de cursos completados para los últimos 15, 30, 60 y todos los días.
- Corre el stored procedure ProcessUsersAcademicPerformanceRankings que calcula los rankings de situación académica para los últimos 15, 30, 60 y todos los días.
Schedule
0 40 0/8 * * * (cada 8hs en el minuto 40)
Nombre sugerido
PROD-StdPerformanceAndRankings
SumarizeUsersTimeSpentOnLiveEventScheduledWJ
Acciones que realiza.
- Corre el stored procedure SummarizeUsersTimeSpentOnLiveEvent que calcula los minutos pasados en el en cada curso por los usuarios en los últimos 15, 30, 60 y todos los días.
Schedule
0 20 0/8 * * * (cada 8hs en el minuto 20)
Nombre sugerido
PROD-TimeSpentOnLiveEvents
SummarizeLiveEventPerformanceScheduledWJ
Acciones que realiza.
- Crea una tabla temporal igual a LiveEventPerformanceRanking sobre la que luego va a realizar las inserciones.
- Realiza una query al campus para obtener todos los liveevents de todas las suscripciones que no estén borradas ni vencidas.
- Inserta el resultado de la query anterior en la tabla temporal.
- Ejecuta el stored procedure SummarizeAcademicPerformanceData que calcula el promedio de los exámenes de cada liveevent.
- Ejecuta el stored procedure SummarizeAttendancePerformanceData que calcula el promedio de asistencia a clases de cada liveevent.
- Ejecuta el stored procedure SummarizeLiveEventPerformanceBySubscription que saca el promedio de exámenes y asistencia de todos los cursos de cada suscripción para insertarlos en LiveEventPerformanceBySubscription (genera un registro por día. Es lo que hace que se vea la variación de los promedios en los últimos 15 días).
- Borra la tabla vieja y renombra la temporal.
Schedule
0 10 0/8 * * * (cada 8hs en el minuto 10)
Nombre sugerido
PROD-LiveEventPerformance
SummarizeStudentsStatisticsOfExpiredLiveEventsWJ
Acciones que realiza.
- Ejecuta el stored procedure UpdateUsersEventsInfoCompletedStateOfExpiredLiveEvents que calcula el promedio de los exámenes y la asistencia de cada liveevent y lo guarda en los UsersEventsInfo correspondiente.
Schedule
0 0 0/8 * * * (cada 8hs en el minuto 0)
Nombre sugerido
PROD-ExpiredLiveEventStatsWJ
Notas
- Por config está buscando liveevents vencidos en el último día.
- Esta info es la que se usa para mostrar en el listado de inscriptos a curso del admin y en el listado de cursos en curso del participante.
WIT.LMS.AsyncBulkActionsWebJob
Acciones que realiza.
- Envio Masivo de Emails
- Master worker (mail).
- Recibe el mensaje de nuevo envío de mail masivo que se generó desde el campus en la cola async-master-queue.
- Levanta los templates y los guarda en mandrill.
- Según el tamaño del envío, genera N batches para repartir las tareas y encola N mensajes para el slave.
- Slave worker (mail).
- Recibe el mensaje de nuevo envío de mail masivo que se generó desde el master worker en la cola async-slave-send-email-queue.
- Pide los usuarios correspondientes a ese batch a la base del campus.
- Trae el attachment del storage si es necesario.
- Envía el mail a los usuarios correspondientes.
- Cleaner worker (mail).
- Recibe el mensaje de nuevo envío de mail masivo que se generó desde el master worker en la cola async-slave-cleaner-email-queue.
- Descuenta el contador de estado en redis.
- Si el contador llega a 0, borra los templates, el attachment y las keys en redis.
- Master worker (mail).
- Ajuste de puntos de LiveEvent
- Master Worker - async-master-queue
- Recibe el mensaje de ajuste de puntos del liveevent desde el campus luego de haber creado/modificado/eliminado un contenido en la cola async-master-queue.
- Se ejecuta la clase Batcher ProgressPointsAdjustement dividiendo el trabajo de ajuste de puntos y enviando mensajes para que procese por lotes el slave worker.
- Slave Worker - async-slave-progress-pts-adj-queue
- Obtiene los usuarios que están inscriptos o que alguna vez lo estuvieron (desinscriptos).
- Por cada usuario ejecuta un método que:
- Obtiene los users_event_information de los programas asociadas al curso.
- Ejecuta un stored procedure que:
- Actualiza los puntos en el users_events_info.
- Actualiza los users_content_info para los usuarios que vieron el contenido.
- Completa el curso en caso de tratarse de una eliminación de contenido.
- Para los usuarios que completaron el curso/programa envía los mensajes que deben de ser procesados por el webjob-bigdata.
- Para lo usuarios en donde hubo una actualizacion de puntos se envia el mensaje correspondiente para que sea procesado por el webjob-bigdata.
- En caso de error mientras se obtienen los usuarios se vuelve a encolar el mensaje completo.
- En caso de error mientras se procesa un usuario particular se captura la excepción y se encola un mensaje para realizar el mismo procesamiento anteriormente explicitado a ese usuario específico.
- Master Worker - async-master-queue
Schedule
Contínuo.
Nombre sugerido
PROD-AsyncBulkActionsWebJob
WIT.LMS.WebJobBigData
Acciones que realiza.
- Desencola mensajes de las distintas colas de dashboard.
- Según la cola de la que tomó y el método definido en el mensaje tiene mapeado qué clase debe resolver dicho mensaje.
- Se ejecuta la clase definida que suele hacer alguna inserción o update sobre la base de dashboard.
- Finalmente se guarda el mensaje original en el datalake
Schedule
Contínuo.
Nombre sugerido
PROD-WebJobBigData
WIT.LMS.ExpiredSubscriptionMailerWebJob
Objetivo
Enviar mails de notificación de próximo vencimiento a los resellers y/o administradores de cuentas que estén por vencer.
Acciones que realiza.
- Verifica que suscripciones estén por vencer desde el momento en el que corre el jobs hasta 1 y 5 días en el futuro.
- Verifica que ya no le haya mandado notificación, si no es así, busca al reseller y a los admins de esa cuenta.
Para cada uno de esos resellers o admins les envía un mail notificando.
Schedule
0 0 0 * * *
Nombre sugerido
PROD-ExpiredSubscriptionMailer
WIT.LMS.Services.Workers.LiveEventRemindersMailer
Objetivo
Envía los recordatorios de las clases virtuales y presenciales a los inscriptos.
Acciones que realiza.
- Busca clases que tengan recordatorios configurados que entren dentro de los últimos X minutos (parámetro de configuración).
- Deja un mensaje en la cola del envío masivo de mails para que lo procese el webjob correspondiente.
Schedule
0 0/5 * * * *
Nombre sugerido
PROD-LiveEventRemindersMailer
WIT.LMS.Services.Workers.TakeVirtualRoomUsersAttendance
Objetivo
En base a la información de ingresos a la sala virtual, determina si los usuarios estuvieron presentes, llegaron tarde o estuvieron ausentes de las clases de sala virtual
Acciones que realiza.
- Toma los registros de ingresos a la sala de clases que hayan finalizado en la última hora (usando un stored procedure). Éste incluye el tiempo que pasó cada uno de los usuarios que ingreso.
- Guarda los datos de asistencia en la base del campus.
- Genera mensajes para ser enviados a la cola para que éstos también se reflejen en la base del dashboard.
Schedule
0 0 * * * *
Nombre sugerido
PROD-TakeVirtualRoomAttendance
WIT.LMS.Services.Workers.AddUsersByEmail
Objetivo
Inscribe usuarios a cursos para WesternUnion
Acciones que realiza.
- Busca nuevos correos en wuapi@wormholeit.com
- De esa casilla baja CSVs con listados de usuarios a inscribir (según las reglas puestas en el código).
- Los crea (si hace falta) y los inscribe a los cursos.
Schedule
0 0 * * * *
Nombre sugerido
PROD-AddUsersByEmail
WIT.LMS.Workers.BadgesProcessor
Objetivo
Determina si debe generar o no una nueva medalla en base al mensaje recibido. Conoce a cada categoría de medallas, y estas mismas saben los criterios de otorgamiento.
Acciones que realiza.
- Desencola mensajes de las distintas colas de dashboard.
- Según la cola de la que tomó y el método definido en el mensaje tiene mapeado qué clase debe resolver dicho mensaje.
- Se ejecuta la clase definida que define si debe o no generar una nueva medalla para el usuario y suscripción correspondientes.
Schedule
Contínuo.
Nombre sugerido
PROD-BadgesProcessor
WORKER.WIT.LMS.UpdateSubscriptionStatusWorker
Objetivo
Setea el estado “inactive” a las suscripciones que vencieron en las últimas 24 hs
Acciones que realiza.
- Busca suscripciones que hayan vencido en las últimas 24hs.
- Para cada una de ellas llama a un strategy para:
- Setearles el estado “inactive”.
- Si el customer de la cuenta solo tenía una cuenta activa, también lo pone como “inactive”.
Schedule
0 0 0 * * *
Nombre sugerido
PROD-UpdateSubscriptionStatus
WIT.LMS.Services.Workers.WebhookWJ
Objetivo
Notificar a una URL sobre las actualizaciones o la actividad de los usuarios en el Campus. Gracias a esto se podrán programar integraciones basadas en las novedades que van surgiendo sin tener que pedir toda la información nuevamente y compararla con un registro anterior de la misma.
Un ejemplo sería poder actualizar una base de datos con personas que completaron un curso solo cuando se llame automáticamente a una url del sistema externo cuando un usuario completa un curso.
Configuraciones implicadas
- Webhook_Callback_Url: La url del sistema externo a la que llamaremos cuando un usuario completa un curso. Por ejemplo: https://www.sistema.net/api/sync
- Webhook_Callback_Token: Un token que enviaremos en todos los llamados a esa url. Por ejemplo: Tcl08eGhbkZJHU7n1XV1QDJhox3xrk9klRrP
Acciones que realiza.
- Desencola mensajes de la queue liveevent-webhook-queue, que previamente son encolados por el WebJobBigData.
- Valida que la suscripción esté activa, no borrada y tenga habilitado el webhook. Para esto último revisa si hay algún valor en la customization value Webhook_Callback_Url.
- Hace un POST del mensaje en formato JSON a la url configurada en la customization Webhook_Callback_Url. El request siempre se hace con un header con el nombre Authorization y el valor que obtiene de la customization Webhook_Callback_Token.
- Si el servidor que recibe el mensaje devuelve un Status Code 2xx, de Success, no realiza ninguna acción adicional. Caso contrario, el mensaje es encolado en la queue liveevent-webhook-queue-poison.
Schedule
Continuo
Nombre sugerido
PROD-WebhookWJ
Notas
- Hoy el WebJobBigData solo encola mensajes al completar un live event que luego son desencoladas por este webjob.
- Un ejemplo de json que envía el webhook: {"courseEditionId":null,"liveEventId":191863,"liveEventType":1,"subscriptionId":2169,"userId":1210691,"method":"Complete","active":true,"timestamp":"2020-09-08 17:37:49"}
- El atributo active indica si el live event está activo.
- Se envían también otros atributos en el json pero siempre están en null, desestimarlos.
- Para el caso de cursos con ediciones se envía un solo mensaje, en el mensaje va la property liveEventId con el id del maestro, la property liveEventType con el tipo maestro y la property courseEditionId con el id de la edición que se completó.
Queues
Dashboard
-
liveevent-queue
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con los liveevents. Actualmente incluye:
- Create
- Delete
- Complete
- ForumMessageCreate
- EnrollUser
- DisenrollUser
- Access
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con los liveevents. Actualmente incluye:
-
profile-queue
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con los usuarios. Actualmente incluye:
- LiveEventStatusChange
- CreateLiveEvent
- ViewAsTrainee
- ViewLiveEvent
- Login
- Signup
- ActivityTime
- ViewProfile
- UserStatusChange
- NewUser
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con los usuarios. Actualmente incluye:
-
content-queue
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con los contenidos. Actualmente incluye:
- ExamTaken
- RollCall
- ExamDeleted
- ContentCompleted
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con los contenidos. Actualmente incluye:
-
usersupdates-queue
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con modificaciones sobre los datos personales del usuario. Actualmente incluye:
- SignUp
- Delete
- Update
- En esta cola se van a guardar y consumir todos los mensajes de actividad relacionados con modificaciones sobre los datos personales del usuario. Actualmente incluye:
-
newbadges-queue
- En esta cola se van a guardar y consumir todos los mensajes relacionados con la generación de nuevas medallas.
-
content-library-queue
- En esta cola se van a guardar las visualizaciones y descargas de los documentos de la biblioteca para los students y teachers
Acciones masivas
- async-master-queue
En esta cola se guardan los mensajes con los que se inicia la acción masiva. La conocen el campus (que es el productor) y el master worker (que es el consumidor). - async-slave-send-email-queue
En esta cola se guardan los mensajes para el envío por lotes de los mensajes. La conocen el master worker (que es el productor) y el slave worker (que es el consumidor). - async-slave-cleaner-email-queue
En esta cola se guardan los mensajes que informan cuántos mails fueron procesados por mandrill. La conocen el webhook que consume mandrill (que es el productor) y el cleaner worker (que es el consumidor). - async-slave-progress-pts-adj-queue
En esta cola se guardan los mensajes para el ajuste de puntos por lotes de los mensajes. La conocen el master worker (que es el productor) y el slave worker (que es el consumidor).
WebHooks
/webhooks/public/mandrill
Este webhook recibe requests de mandrill con información sobre los mails que procesó. Según la información que trae el body (metadata) sabe qué ambiente lo generó (DEVX, CampusTest o PROD) y según eso sabe si le corresponde o no encolar el mensaje en async-slave-cleaner-email-queue. Dicho mensaje básicamente contiene la misma metadata generada en el slave worker y además el número de mensajes que mandrill procesó.
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.