1import{_ as te}from"./WnhdvwRK.js";import{d as ae,aM as re,f as ne,e as oe,r as R,g as y,j as se,aA as P,$ as le,c as _,a as p,p as r,q as o,n as s,L as z,B as n,t as x,s as q,F as ie,y as ce,z as ue,o as u,A as m,O as de,M as I}from"#entry";import _e from"./DGuhdwzv.js";import pe from"./P0OPl9gk.js";import me from"./CB8_Zx5j.js";import fe from"./BrarcIvp.js";import{_ as ge}from"./h7PTr_A8.js";import"./BN45GOla.js";import"./DLhWdRnk.js";import"./ZhWAdK_X.js";import"./DcFBmafp.js";import"./Bpj_hUzD.js";import"./D_cw-Y2C.js";import"./B952s-Eh.js";import"./DYz0HW9c.js";import"./R8dX-K1H.js";import"./CQhLaPtX.js";import"./jc0MLXVe.js";import"./B8BMFpyV.js";import"./CLs7nh7g.js";import"./DbwCjbbq.js";import"./DHZhrzeT.js";import"./CKGhdKMu.js";import"./D5pOz-Qt.js";import"./CoqG29EY.js";import"./DJwpQEdj.js";import"./Bco1MREm.js";import"./Cz9y-jUY.js";import"./jGFzVO0W.js";import"./Xi21UKJb.js";import"./CwI1OBdr.js";import"./CZoH9Mpf.js";import"./DWgemx0z.js";import"./DX4LRWxH.js";import"./i0jOK097.js";import"./f1dk4OBt.js";import"./owQ7ZPkK.js";import"./BTtCmqt8.js";import"./BtzUZyUo.js";import"./acE3GaAa.js";import"./LJEb9Kiv.js";import"./C-vgQfuL.js";import"./CtvbLi5n.js";import"./DC7VEsij.js";import"./Z9j3A9PW.js";import"./CNJ3kTT4.js";import"./CXPcYp7s.js";import"./D635iIRO.js";const be={class:"w-full min-w-0"},ye={class:"flex flex-row justify-between items-center border-b border-b-neutral-50 pb-4 mb-6"},xe={class:"flex items-center gap-3"},he={key:1,class:"text-xs text-neutral-400"},ke={class:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-8"},ve={class:"block text-xs text-neutral-400"},Se=["href"],$e={key:1},we={key:2,class:"block text-xs text-neutral-400"},Le={class:"block text-xs text-neutral-400"},Te=["href"],Ae={key:1},Ce={key:2,class:"block text-xs text-neutral-400"},Ee={class:"flex flex-row justify-between items-center mt-8 mb-3"},Ne={key:1},Re={class:"block text-xs text-neutral-400"},Pe=["href"],ze={key:1},U=5e3,Ie=15e3,Ue=1800,Fe=60,De=360*60,zt=ae({__name:"sync_task_feeder",setup(Me){const B=re(),{$admin:S}=ne();oe({title:"CRM Sync Feeder | Wiza Admin"});const c=R({loading:!0,refreshedAt:null,data:null}),i=R({loading:!0,status:"queued,running",rows:[],page:1,perPage:25,total:0}),H=[{label:"In progress",value:"queued,running"},{label:"Errored",value:"error"},{label:"Finished",value:"finished"}],l=R({loaded:!1,error:!1,source:null,capacity:null,busy:null,utilization:null});function h(e){if(e==null)return"â";if(e<60)return`${e}s`;const a=Math.floor(e/60),f=e%60;if(a<60)return f?`${a}m ${f}s`:`${a}m`;const g=Math.floor(a/60),v=a%60;return v?`${g}h ${v}m`:`${g}h`}function b(e){return e?`/wizaadmin/accounts/${e}`:null}const V=y(()=>c.data?.top_tenants_by_backlog||[]),G=y(()=>c.data?.most_stuck_tenants||[]),W=y(()=>{const e=c.data?.last_tick_age_seconds;return e==null?"never":`${h(e)} ago`}),j=y(()=>{const e=c.data;if(!e)return[];const a=(e.oldest_dispatchable_age_seconds??0)>De?"text-amber-600":"text-neutral-900",f=e.last_tick_age_seconds,g=f==null||f>Fe?"text-red-600":"text-neutral-900";return[{label:"Unclaimed (backlog)",value:e.unclaimed.toLocaleString(),tone:"text-neutral-900"},{label:"Dispatchable now",value:e.dispatchable.toLocaleString(),tone:"text-neutral-900"},{label:"Deferred (waiting)",value:e.deferred.toLocaleString(),tone:"text-neutral-900"},{label:"In-flight",value:e.in_flight.toLocaleString(),tone:"text-neutral-900"},{label:"Active tenants",value:e.active_tenants.toLocaleString(),tone:"text-neutral-900"},{label:"Oldest dispatchable",value:h(e.oldest_dispatchable_age_seconds),tone:a},{label:"Last dispatch tick",value:W.value,tone:g},{label:"Global ceiling",value:e.global_ceiling.toLocaleString(),tone:"text-neutral-900"}]});let $=!1,w=!1;function F(e){w||(w=!0,B.add({severity:"error",summary:"Error",detail:e||"Failed to load feeder metrics",life:5e3}))}async function D(){if(!$){$=!0;try{const e=await S.get("/feeders/sync_task");e.status===200?(c.data=e.data,c.refreshedAt=new Date,w=!1):F(e.message)}catch(e){F(e?.message)}finally{c.loading=!1,$=!1}}}let L=!1;async function M(){if(!L){L=!0;try{const e=await S.get("/feeders/sync_task_sidekiq",{timeout:4e3});e.status===200&&e.data?(l.source=e.data.source,l.capacity=e.data.capacity,l.busy=e.data.busy,l.utilization=e.data.utilization,l.loaded=!0,l.error=!1):l.error=!0}catch{l.error=!0}finally{L=!1}}}let T=!1;async function k(){if(!T){T=!0;try{const e=await S.get("/feeders/sync_runs",{params:{status:i.status,page:i.page,per_page:i.perPage}});e.status===200&&e.data&&(i.rows=e.data.runs||[],i.total=e.data.pagination.total_count)}catch{}finally{i.loading=!1,T=!1}}}function K(e){e&&(i.status=e,i.page=1,i.loading=!0,k())}function J(e){i.page=e.page+1,i.perPage=e.rows,k()}function Q(e){return e.batch_count?`${e.batches_done}/${e.batch_count}`:"â"}function X(e){return["queued","running"].includes(e.status)&&e.age_seconds>Ue}const O=y(()=>
1{if(!l.loaded)return null;const e=l.error?" (stale)":"";return l.busy!=null&&l.capacity!=null?`Workers ${l.busy}/${l.capacity} (${l.utilization}%)${e}`:`Workers cap ${l.capacity??"â"} (live n/a)${e}`}),Y=y(()=>l.error||l.utilization!=null&&l.utilization>=90?"text-amber-600":"text-neutral-500");let A=null,C=null,E=null;return se(()=>{D(),A=P(D,U),M(),C=P(M,U),k(),E=P(k,Ie)}),le(()=>{A&&clearInterval(A),C&&clearInterval(C),E&&clearInterval(E)}),(e,a)=>{const f=te,g=ue,v=_e,d=pe,N=me,Z=fe,ee=ge;return u(),_("div",be,[p("div",ye,[p("div",null,[r(f,{size:"small",class:"text-neutral-900"},{default:o(()=>a[3]||(a[3]=[m("CRM Sync Feeder")])),_:1,__:[3]}),r(g,{size:"small",class:"text-neutral-500"},{default:o(()=>[m(" Live queue feeder health â auto-refreshes every "+n(U/1e3)+"s. ",1)]),_:1})]),p("div",xe,[s(O)?(u(),_("span",{key:0,class:z(["text-xs",s(Y)])},n(s(O)),3)):x("",!0),r(v,{severity:s(c).data?.capacity_aware_burst?"success":"secondary"},{default:o(()=>[m(" Burst "+n(s(c).data?.capacity_aware_burst?"on":"off"),1)]),_:1},8,["severity"]),s(c).refreshedAt?(u(),_("span",he," Updated "+n(s(c).refreshedAt.toLocaleTimeString()),1)):x("",!0),s(c).loading?(u(),q(s(de),{key:2,class:"w-4 h-4 animate-spin text-neutral-400"})):x("",!0)])]),p("div",ke,[(u(!0),_(ie,null,ce(s(j),t=>(u(),_("div",{key:t.label,class:"rounded-lg border border-neutral-100 p-4"},[r(g,{size:"xsmall",class:"text-neutral-500"},{default:o(()=>[m(n(t.label),1)]),_:2},1024),p("div",{class:z(["text-2xl font-semibold mt-1",t.tone])},n(t.value),3)]))),128))]),r(f,{size:"small",class:"text-neutral-900 mb-3"},{default:o(()=>a[4]||(a[4]=[m("Top tenants by backlog")])),_:1,__:[4]}),r(N,{value:s(V),"data-key":"user_id",class:"mb-8",loading:s(c).loading&&!s(c).data},{empty:o(()=>a[5]||(a[5]=[p("div",{class:"py-8 text-center text-neutral-500 text-sm"},"No unclaimed backlog.",-1)])),default:o(()=>[r(d,{header:"USER"},{body:o(({data:t})=>[m(n(t.full_name||`User #${t.user_id}`)+" ",1),p("span",ve,"#"+n(t.user_id),1)]),_:1}),r(d,{header:"ACCOUNT"},{body:o(({data:t})=>[b(t.account_id)?(u(),_("a",{key:0,href:b(t.account_id),target:"_blank",rel:"noreferrer noopener",class:"text-primary-500 hover:underline",onClick:a[0]||(a[0]=I(()=>{},["stop"]))},n(t.account_name||`Account #${t.account_id}`),9,Se)):(u(),_("span",$e,n(t.account_name||(t.account_id?`Account #${t.account_id}`:"â")),1)),t.account_id?(u(),_("span",we,"#"+n(t.account_id),1)):x("",!0)]),_:1}),r(d,{header:"BACKLOG",field:"backlog"},{body:o(({data:t})=>[m(n(t.backlog.toLocaleString()),1)]),_:1}),r(d,{header:"IN-FLIGHT",field:"in_flight"}),r(d,{header:"BASE CEILING",field:"base_ceiling"}),r(d,{header:"EFFECTIVE CEILING",field:"effective_ceiling"})]),_:1},8,["value","loading"]),r(f,{size:"small",class:"text-neutral-900 mb-3"},{default:o(()=>a[6]||(a[6]=[m("Most stuck tenants")])),_:1,__:[6]}),r(N,{value:s(G),"data-key":"user_id",loading:s(c).loading&&!s(c).data},{empty:o(()=>a[7]||(a[7]=[p("div",{class:"py-8 text-center text-neutral-500 text-sm"},"Nothing waiting.",-1)])),default:o(()=>[r(d,{header:"USER"},{body:o(({data:t})=>[m(n(t.full_name||`User #${t.user_id}`)+" ",1),p("span",Le,"#"+n(t.user_id),1)]),_:1}),r(d,{header:"ACCOUNT"},{body:o(({data:t})=>[b(t.account_id)?(u(),_("a",{key:0,href:b(t.account_id),target:"_blank",rel:"noreferrer noopener",class:"text-primary-500 hover:underline",onClick:a[1]||(a[1]=I(()=>{},["stop"]))},n(t.account_name||`Account #${t.account_id}`),9,Te)):(u(),_("span",Ae,n(t.account_name||(t.account_id?`Account #${t.account_id}`:"â")),1)),t.account_id?(u(),_("span",Ce,"#"+n(t.account_id),1)):x("",!0)]),_:1}),r(d,{header:"OLDEST UNCLAIMED"},{body:o(({data:t})=>[m(n(h(t.oldest_unclaimed_age_seconds)),1)]),_:1})]),_:1},8,["value","loading"]),p("div",Ee,[r(f,{size:"small",class:"text-neutral-900"},{default:o(()=>a[8]||(a[8]=[m("Sync runs")])),_:1,__:[8]}),r(Z,{"model-value":s(i).status,options:H,"option-label":"label","option-value":"value","allow-empty":!1,size:"small","onUpdate:modelValue":K},null,8,["model-value"])]),r(N,{value:s(i).rows,"data-key":"id",loading:s(i).loading&&!s(i).rows.length,paginator:"",lazy:!0,rows:s(i).perPage,"rows-per-page-options":[25,50,100],"total-records":s(i).total,"paginator-template":"RowsPerPageDropdown FirstPageLink PrevPageLink CurrentPageReport NextPageLink LastPageLink","current-page-report-template":"{first} to {last} of {totalRecords}",onPage:J},{empty:o(()=>a[9]||(a[9]=[p("div",{class:"py-8 text-center text-neutral-500 text-sm"},"No runs for this filter.",-1)])),default:o(()=>[r(d,{header:"LIST"},{body:o(({data:t})=>[t.account_id?(u(),q(ee,{key:0,to:`/wizaadmin/accounts/${t.account_id}/reports/${t.report_id}`,class:"text-primary-500 hover:underline"},{default:o(()=>[m(n(t.report_name||`Report #${t.report_id}`),1)]),_:2},1032,["to"])):(u(),_("span",Ne,n(t.report_name||`Report #${t.report_id}`),1)),p("span",Re,"#"+n(t.report_id),1)]),_:1}),r(d,{header:"ACCOUNT"},{body:o(({data:t})=>[b(t.account_id)?(u(),_("a",{key:0,href:b(t.account_id),target:"_blank",rel:"noreferrer noopener",class:"text-primary-500 hover:underline",onClick:a[2]||(a[2]=I(()=>{},["stop"]))},n(t.account_name||`Account #${t.account_id}`),9,Pe)):(u(),_("span",ze,n(t.account_name||"â"),1))]),_:1}),r(d,{header:"STATUS",field:"status"}),r(d,{header:"BATCHES"},{body:o(({data:t})=>[m(n(Q(t)),1)]),_:1}),r(d,{header:"LAST UPDATE"},{body:o(({data:t})=>[p("span",{class:z(X(t)?"text-amber-600":"text-neutral-900")},n(h(t.age_seconds))+" ago ",3)]),_:1})]),_:1},8,["value","loading","rows","total-records"])])}}});
1export{zt as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.