From 8a949ce4c078ff377e91a95c4b86ef2b15dae88b Mon Sep 17 00:00:00 2001 From: towfiqi Date: Fri, 3 Nov 2023 11:58:17 +0600 Subject: [PATCH] fix: Cron stopped on failing to parse failed queue closes #116 --- cron.js | 24 ++++++++++++++---------- utils/scraper.ts | 8 ++++---- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/cron.js b/cron.js index 335dfe1..09c70cb 100644 --- a/cron.js +++ b/cron.js @@ -111,16 +111,20 @@ const runAppCronJobs = () => { readFile(`${process.cwd()}/data/failed_queue.json`, { encoding: 'utf-8' }, (err, data) => { if (data) { - const keywordsToRetry = data ? JSON.parse(data) : []; - if (keywordsToRetry.length > 0) { - const fetchOpts = { method: 'POST', headers: { Authorization: `Bearer ${process.env.APIKEY}` } }; - fetch(`${process.env.NEXT_PUBLIC_APP_URL}/api/refresh?id=${keywordsToRetry.join(',')}`, fetchOpts) - .then((res) => res.json()) - .then((refreshedData) => console.log(refreshedData)) - .catch((fetchErr) => { - console.log('ERROR Making failed_queue Cron Request..'); - console.log(fetchErr); - }); + try { + const keywordsToRetry = data ? JSON.parse(data) : []; + if (keywordsToRetry.length > 0) { + const fetchOpts = { method: 'POST', headers: { Authorization: `Bearer ${process.env.APIKEY}` } }; + fetch(`${process.env.NEXT_PUBLIC_APP_URL}/api/refresh?id=${keywordsToRetry.join(',')}`, fetchOpts) + .then((res) => res.json()) + .then((refreshedData) => console.log(refreshedData)) + .catch((fetchErr) => { + console.log('ERROR Making failed_queue Cron Request..'); + console.log(fetchErr); + }); + } + } catch (error) { + console.log('ERROR Reading Failed Scrapes Queue File..', error); } } else { console.log('ERROR Reading Failed Scrapes Queue File..', err); diff --git a/utils/scraper.ts b/utils/scraper.ts index c89c882..fdc1ec5 100644 --- a/utils/scraper.ts +++ b/utils/scraper.ts @@ -207,7 +207,7 @@ export const getSerp = (domain:string, result:SearchResult[]) : SERPObject => { * @returns {void} */ export const retryScrape = async (keywordID: number) : Promise => { - if (!keywordID) { return; } + if (!keywordID && !Number.isInteger(keywordID)) { return; } let currentQueue: number[] = []; const filePath = `${process.cwd()}/data/failed_queue.json`; @@ -215,7 +215,7 @@ export const retryScrape = async (keywordID: number) : Promise => { currentQueue = currentQueueRaw ? JSON.parse(currentQueueRaw) : []; if (!currentQueue.includes(keywordID)) { - currentQueue.push(keywordID); + currentQueue.push(Math.abs(keywordID)); } await writeFile(filePath, JSON.stringify(currentQueue), { encoding: 'utf-8' }).catch((err) => { console.log(err); return '[]'; }); @@ -227,13 +227,13 @@ export const retryScrape = async (keywordID: number) : Promise => { * @returns {void} */ export const removeFromRetryQueue = async (keywordID: number) : Promise => { - if (!keywordID) { return; } + if (!keywordID && !Number.isInteger(keywordID)) { return; } let currentQueue: number[] = []; const filePath = `${process.cwd()}/data/failed_queue.json`; const currentQueueRaw = await readFile(filePath, { encoding: 'utf-8' }).catch((err) => { console.log(err); return '[]'; }); currentQueue = currentQueueRaw ? JSON.parse(currentQueueRaw) : []; - currentQueue = currentQueue.filter((item) => item !== keywordID); + currentQueue = currentQueue.filter((item) => item !== Math.abs(keywordID)); await writeFile(filePath, JSON.stringify(currentQueue), { encoding: 'utf-8' }).catch((err) => { console.log(err); return '[]'; }); };