UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 1.99 kB
import{copy as e}from"../i18n/copy.mjs";import t from"../../constants/constants.mjs";import n from"../logger/index.mjs";import r from"../../utils/services/service-wrapper.mjs";import i from"../queue/adapters/passthrough.mjs";import{destroyQueueAdapter as a,getInitializedQueueAdapter as o}from"../queue/lifecycle.mjs";import s from"./cron-jobs.mjs";const c=async(i,a,o)=>{for(let s=1;s<=3;s++){let c=await r(a.fn,{transaction:a.transaction,logError:!0,defaultError:{type:`cron`,name:e(`server:core.cron.job.error.name`),message:a.error}})(o);if(!c.error)return{key:i,success:!0};if(s<3)n.warn({message:`Cron job "${a.label}" failed (attempt ${s}/3), retrying...`,scope:t.logScopes.cron,data:{error:c.error.message}});else return n.error({message:`Cron job "${a.label}" failed after 3 attempts`,scope:t.logScopes.cron,data:{error:c.error.message}}),{key:i,success:!1,error:o.translate.english(c.error.message)}}return{key:i,success:!1}},l=async e=>{let r;return e.createQueue&&(r=i({bypassImmediateExecution:!0})),{schedules:Object.values(t.cronSchedules),register:async(i,l)=>{let u=i.queue??r,d;try{e.createQueue&&e.runtimeContext&&(d=await o(i.config,{runtimeContext:e.runtimeContext,env:e.env??i.env??void 0}),u=d);let r=i.config.i18n.defaultLocale,a={...i,queue:u,translate:i.translate.forLocale(r),request:{...i.request,locale:r}};n.info({message:`Running cron jobs`,scope:t.logScopes.cron});let f=Object.entries(s()).filter(([,e])=>!l?.schedule||t.cronSchedules[e.schedule]===l.schedule),p=await Promise.allSettled(f.map(([e,t])=>c(e,t,a))),m=p.filter(e=>e.status===`rejected`||e.status===`fulfilled`&&!e.value.success);m.length>0&&n.error({message:`${m.length} of ${p.length} cron jobs failed`,scope:t.logScopes.cron})}catch{n.error({message:`Error running or registering cron jobs`,scope:t.logScopes.cron})}finally{await a(d,{config:i.config,runtimeContext:e.runtimeContext,env:e.env??i.env??void 0})}},queue:r}};export{l as default}; //# sourceMappingURL=setup-cron-jobs.mjs.map