@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 2.9 kB
JavaScript
import e from"../../../constants/constants.mjs";import t from"../../../utils/helpers/format-bytes.mjs";import n from"../../../libs/repositories/alerts.mjs";import r from"../../../libs/repositories/options.mjs";import{multiTenancyEnabled as i}from"../../../utils/helpers/tenants.mjs";import a from"../../email/send-email.mjs";import o from"../get-storage-usage.mjs";import{getMediaStorageOptionName as s}from"../helpers/storage-usage-options.mjs";const c=async(c,l)=>{let u=c.config.media.limits.storageBytes;if(u===!1)return{error:void 0,data:void 0};let d=l?.source??`cron`,f=l?.trigger??`scheduled`,p=l?.metadata??{},m=new n(c.db.client,c.config.db),h=new r(c.db.client,c.config.db),[g,_]=await Promise.all([o(c,i(c.config)?{grouped:!0}:{includeAllBuckets:!0}),h.selectSingle({select:[`value_text`],where:[{key:`name`,operator:`=`,value:`system_alert_email`}]})]);if(g.error)return g;if(_.error)return _;let v=_.data?.value_text??null,y=g.data.buckets??[{tenantKey:null,total:g.data.total}];for(let n of y){let r=n.tenantKey?c.config.tenants.find(e=>e.key===n.tenantKey):void 0,i=n.tenantKey===null?void 0:r?.name??n.tenantKey,o=n.total,l=Math.max(0,u-o),h=u<=0?100:o/u*100,g=Math.max(0,Math.floor(h)),_=[...e.alerts.storage.thresholds].sort((e,t)=>e.percent-t.percent).filter(e=>h>=e.percent).at(-1);if(!_)continue;let y=`storage:${s(n.tenantKey)}:${_.percent}`,b=new Date(Date.now()-_.cooldownDays*24*60*60*1e3).toISOString(),x=await m.selectMultiple({select:[`id`],where:[{key:`type`,operator:`=`,value:e.alerts.storage.type},{key:`dedupe_key`,operator:`=`,value:y},{key:`created_at`,operator:`>=`,value:b}]});if(x.error)return x;if((x.data?.length??0)>0)continue;let S={source:d,trigger:f,triggerMetadata:p,tenantKey:n.tenantKey,tenantName:r?.name??null,thresholdPercent:_.percent,cooldownDays:_.cooldownDays,percentUsed:g,storageUsed:o,storageLimit:u,storageRemaining:l},C=c.translate(`server:core.alerts.storage.triggered.title`,{data:{percent:_.percent}}),w=null;if(v){let o=await a(c,{type:`internal`,to:v,subject:c.translate(`server:core.alerts.storage.email.subject`,{data:{percent:_.percent}}),template:e.email.templates.storageAlert.key,priority:`high`,isSystem:!0,tenantKey:r&&n.tenantKey?n.tenantKey:null,data:{triggerSource:d,thresholdPercent:_.percent,percentUsed:S.percentUsed,storageUsed:t(S.storageUsed),storageLimit:t(S.storageLimit),storageRemaining:t(S.storageRemaining),tenantScope:i,repeat:!1,title:C},storage:e.email.templates.storageAlert.storage??void 0});if(o.error)return o;w=o.data.email.id}let T=await m.createSingle({data:{type:e.alerts.storage.type,level:_.level,dedupe_key:y,title:C,message:c.translate(`server:core.alerts.storage.triggered.message`,{data:{percent:_.percent}}),metadata:S,email_id:w},returning:[`id`],validation:{enabled:!0}});if(T.error)return T}return{error:void 0,data:void 0}};export{c as default};
//# sourceMappingURL=storage-check.mjs.map