From 240a9276cc01a45529afd6d72911584a79fd0e29 Mon Sep 17 00:00:00 2001 From: Mehul Kiran Chaudhari <55375534+MehulKChaudhari@users.noreply.github.com> Date: Tue, 2 Apr 2024 22:18:11 +0530 Subject: [PATCH 1/4] Feat: Add a cron job to hit the filter orphan tasks API every 6hours --- src/handlers/scheduledEventHandler.ts | 57 ++++++++++++++++++++++++++- src/types/global.types.ts | 7 ++++ src/worker.ts | 6 ++- 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/handlers/scheduledEventHandler.ts b/src/handlers/scheduledEventHandler.ts index 5dad138..8d4b252 100644 --- a/src/handlers/scheduledEventHandler.ts +++ b/src/handlers/scheduledEventHandler.ts @@ -4,7 +4,13 @@ import config from '../config/config'; import { NAMESPACE_NAME } from '../constants'; import { updateUserRoles } from '../services/discordBotServices'; import { getMissedUpdatesUsers } from '../services/rdsBackendService'; -import { DiscordUserRole, env, NicknameUpdateResponseType, UserStatusResponse } from '../types/global.types'; +import { + DiscordUserRole, + env, + NicknameUpdateResponseType, + OrphanTasksStatusUpdateResponseType, + UserStatusResponse, +} from '../types/global.types'; import { apiCaller } from '../utils/apiCaller'; import { chunks } from '../utils/arrayUtils'; import { generateJwt } from '../utils/generateJwt'; @@ -141,3 +147,52 @@ export const syncIdle7dUsers = async (env: env) => { export const syncOnboarding31dPlusUsers = async (env: env) => { return await apiCaller(env, 'discord-actions/group-onboarding-31d-plus', 'PUT'); }; + +export async function filterOrphanTasks(env: env) { + const namespace = env[NAMESPACE_NAME] as unknown as KVNamespace; + let lastOrphanTasksFilteration: string | null = '0'; + try { + lastOrphanTasksFilteration = await namespace.get('ORPHAN_TASKS_UPDATED_TIME'); + if (lastOrphanTasksFilteration === null) { + console.error('Error while fetching KV "ORPHAN_TASKS_UPDATED_TIME" timestamp'); + } + if (!lastOrphanTasksFilteration) { + lastOrphanTasksFilteration = '0'; + } + } catch (err) { + console.error(err, 'Error while fetching the timestamp of last orphan tasks filteration'); + throw err; + } + + const url = config(env).RDS_BASE_API_URL; + let token; + try { + token = await generateJwt(env); + } catch (err) { + console.error(`Error while generating JWT token: ${err}`); + throw err; + } + const response = await fetch(`${url}/tasks/orphanTasks`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + lastOrphanTasksFilteration, + }), + }); + if (!response.ok) { + throw new Error('Error while trying to update status of orphan tasks to backlog'); + } + + const data: OrphanTasksStatusUpdateResponseType = await response.json(); + + try { + await namespace.put('ORPHAN_TASKS_UPDATED_TIME', Date.now().toString()); + } catch (err) { + console.error('Error while trying to update the last orphan tasks filteration timestamp'); + } + + return data; +} diff --git a/src/types/global.types.ts b/src/types/global.types.ts index 98a30fa..30092db 100644 --- a/src/types/global.types.ts +++ b/src/types/global.types.ts @@ -19,6 +19,13 @@ export type NicknameUpdateResponseType = { unsuccessfulNicknameUpdates: number; }; }; + +export type OrphanTasksStatusUpdateResponseType = { + message: string; + data: { + orphanTasksUpdatedCount: number; + }; +}; export type DiscordUsersResponse = { message: string; data: DiscordUserIdList; diff --git a/src/worker.ts b/src/worker.ts index 38f5c0a..467a447 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -1,6 +1,7 @@ import { addMissedUpdatesRole, callDiscordNicknameBatchUpdate, + filterOrphanTasks, syncExternalAccounts, syncIdle7dUsers, syncIdleUsers, @@ -20,7 +21,10 @@ export default { async scheduled(req: ScheduledController, env: env, ctx: ExecutionContext) { switch (req.cron) { case EVERY_6_HOURS: { - return await callDiscordNicknameBatchUpdate(env); + await callDiscordNicknameBatchUpdate(env); + await filterOrphanTasks(env); + console.log('Worker for filtering the orphan tasks has completed'); + break; } case EVERY_11_HOURS: { return await addMissedUpdatesRole(env); From 3dcbb8f4812b4ea10d5add3db836f5e537f712f1 Mon Sep 17 00:00:00 2001 From: Mehul Kiran Chaudhari <55375534+MehulKChaudhari@users.noreply.github.com> Date: Thu, 4 Apr 2024 00:43:30 +0530 Subject: [PATCH 2/4] fix: suggested changes --- src/handlers/scheduledEventHandler.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/handlers/scheduledEventHandler.ts b/src/handlers/scheduledEventHandler.ts index 8d4b252..9451fc5 100644 --- a/src/handlers/scheduledEventHandler.ts +++ b/src/handlers/scheduledEventHandler.ts @@ -153,10 +153,9 @@ export async function filterOrphanTasks(env: env) { let lastOrphanTasksFilteration: string | null = '0'; try { lastOrphanTasksFilteration = await namespace.get('ORPHAN_TASKS_UPDATED_TIME'); - if (lastOrphanTasksFilteration === null) { - console.error('Error while fetching KV "ORPHAN_TASKS_UPDATED_TIME" timestamp'); - } + if (!lastOrphanTasksFilteration) { + console.error('Error while fetching KV "ORPHAN_TASKS_UPDATED_TIME" timestamp'); lastOrphanTasksFilteration = '0'; } } catch (err) { From 526ebafc561ea3567209c17b278645afb2c46531 Mon Sep 17 00:00:00 2001 From: Mehul Kiran Chaudhari <55375534+MehulKChaudhari@users.noreply.github.com> Date: Thu, 4 Apr 2024 00:55:50 +0530 Subject: [PATCH 3/4] fix: log wording --- src/handlers/scheduledEventHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/handlers/scheduledEventHandler.ts b/src/handlers/scheduledEventHandler.ts index 9451fc5..a7e8eae 100644 --- a/src/handlers/scheduledEventHandler.ts +++ b/src/handlers/scheduledEventHandler.ts @@ -155,7 +155,7 @@ export async function filterOrphanTasks(env: env) { lastOrphanTasksFilteration = await namespace.get('ORPHAN_TASKS_UPDATED_TIME'); if (!lastOrphanTasksFilteration) { - console.error('Error while fetching KV "ORPHAN_TASKS_UPDATED_TIME" timestamp'); + console.log(`Empty KV ORPHAN_TASKS_UPDATED_TIME: ${lastOrphanTasksFilteration}`); lastOrphanTasksFilteration = '0'; } } catch (err) { From 1561137c2b16a95fc20388f212804cbe7c6224a4 Mon Sep 17 00:00:00 2001 From: Mehul Kiran Chaudhari <55375534+MehulKChaudhari@users.noreply.github.com> Date: Thu, 4 Apr 2024 01:05:31 +0530 Subject: [PATCH 4/4] fix: varaible name --- src/handlers/scheduledEventHandler.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/handlers/scheduledEventHandler.ts b/src/handlers/scheduledEventHandler.ts index a7e8eae..c75c5e0 100644 --- a/src/handlers/scheduledEventHandler.ts +++ b/src/handlers/scheduledEventHandler.ts @@ -150,13 +150,13 @@ export const syncOnboarding31dPlusUsers = async (env: env) => { export async function filterOrphanTasks(env: env) { const namespace = env[NAMESPACE_NAME] as unknown as KVNamespace; - let lastOrphanTasksFilteration: string | null = '0'; + let lastOrphanTasksFilterationTimestamp: string | null = '0'; // O means it will take the oldest unix timestamp try { - lastOrphanTasksFilteration = await namespace.get('ORPHAN_TASKS_UPDATED_TIME'); + lastOrphanTasksFilterationTimestamp = await namespace.get('ORPHAN_TASKS_UPDATED_TIME'); - if (!lastOrphanTasksFilteration) { - console.log(`Empty KV ORPHAN_TASKS_UPDATED_TIME: ${lastOrphanTasksFilteration}`); - lastOrphanTasksFilteration = '0'; + if (!lastOrphanTasksFilterationTimestamp) { + console.log(`Empty KV ORPHAN_TASKS_UPDATED_TIME: ${lastOrphanTasksFilterationTimestamp}`); + lastOrphanTasksFilterationTimestamp = '0'; // O means it will take the oldest unix timestamp } } catch (err) { console.error(err, 'Error while fetching the timestamp of last orphan tasks filteration'); @@ -178,7 +178,7 @@ export async function filterOrphanTasks(env: env) { 'Content-Type': 'application/json', }, body: JSON.stringify({ - lastOrphanTasksFilteration, + lastOrphanTasksFilterationTimestamp, }), }); if (!response.ok) {