From b00f463db56341ebcb09a2e62a0eaedf186e4cf8 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 13 May 2025 15:02:23 +0200 Subject: [PATCH] refactor sending jobs to worker server --- website/server/libs/email.js | 30 ++++++++------------------- website/server/libs/worker.js | 38 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 22 deletions(-) create mode 100644 website/server/libs/worker.js diff --git a/website/server/libs/email.js b/website/server/libs/email.js index bca8b4b294..97ccfa1133 100644 --- a/website/server/libs/email.js +++ b/website/server/libs/email.js @@ -4,6 +4,7 @@ import { TAVERN_ID } from '../models/group'; // eslint-disable-line import/no-cy import { encrypt } from './encryption'; import logger from './logger'; import common from '../../common'; +import { sendJob } from './worker'; const IS_PROD = nconf.get('IS_PROD'); const EMAIL_SERVER = { @@ -156,29 +157,14 @@ export async function sendTxn (mailingInfoArray, emailType, variables, personalV } if (IS_PROD && mailingInfoArray.length > 0) { - return got.post(`${EMAIL_SERVER.url}/job`, { - retry: 5, // retry the http request to the email server 5 times - timeout: 60000, // wait up to 60s before timing out - username: EMAIL_SERVER.auth.user, - password: EMAIL_SERVER.auth.password, - json: { - type: 'email', - data: { - emailType, - to: mailingInfoArray, - variables, - personalVariables, - }, - options: { - priority: 'high', - attempts: 5, - backoff: { delay: 10 * 60 * 1000, type: 'fixed' }, - }, + return sendJob('email', { + data: { + emailType, + to: mailingInfoArray, + variables, + personalVariables, }, - }).json().catch(err => logger.error(err, { - extraMessage: 'Error while sending an email.', - emailType, - })); + }); } return null; diff --git a/website/server/libs/worker.js b/website/server/libs/worker.js new file mode 100644 index 0000000000..4086d32055 --- /dev/null +++ b/website/server/libs/worker.js @@ -0,0 +1,38 @@ +import got from 'got'; +import nconf from 'nconf'; +import logger from './logger'; + +const IS_PROD = nconf.get('IS_PROD'); +const EMAIL_SERVER = { + url: nconf.get('EMAIL_SERVER_URL'), + auth: { + user: nconf.get('EMAIL_SERVER_AUTH_USER'), + password: nconf.get('EMAIL_SERVER_AUTH_PASSWORD'), + }, +}; + +export function sendJob (type, config) { + if (IS_PROD) { + const { data, options } = config; + const usedOptions = { + priority: 'high', + backoff: { delay: 10 * 60 * 1000, type: 'exponential' }, + ...options, + }; + + return got.post(`${EMAIL_SERVER.url}/job`, { + retry: 5, // retry the http request to the email server 5 times + timeout: 60000, // wait up to 60s before timing out + username: EMAIL_SERVER.auth.user, + password: EMAIL_SERVER.auth.password, + json: { + type, + data, + options: usedOptions, + }, + }).json().catch(err => logger.error(err, { + extraMessage: 'Error while sending an email.', + })); + } + return null; +}