wurk 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/app/controllers/concerns/wurk/stream_concurrency_guard.rb +22 -5
  4. data/lib/wurk/capsule.rb +40 -12
  5. data/lib/wurk/client/buffered.rb +7 -0
  6. data/lib/wurk/client.rb +102 -32
  7. data/lib/wurk/component.rb +34 -2
  8. data/lib/wurk/configuration.rb +45 -6
  9. data/lib/wurk/context.rb +1 -1
  10. data/lib/wurk/engine.rb +41 -1
  11. data/lib/wurk/errors.rb +15 -0
  12. data/lib/wurk/fetcher/reaper.rb +12 -2
  13. data/lib/wurk/fetcher/reliable.rb +322 -60
  14. data/lib/wurk/fetcher.rb +6 -0
  15. data/lib/wurk/heartbeat.rb +2 -2
  16. data/lib/wurk/job_logger.rb +16 -7
  17. data/lib/wurk/job_set.rb +3 -2
  18. data/lib/wurk/job_util.rb +44 -24
  19. data/lib/wurk/launcher.rb +116 -72
  20. data/lib/wurk/leader.rb +36 -6
  21. data/lib/wurk/logger.rb +1 -1
  22. data/lib/wurk/lua/loader.rb +9 -3
  23. data/lib/wurk/metrics/accumulator.rb +95 -0
  24. data/lib/wurk/metrics/flusher.rb +70 -0
  25. data/lib/wurk/metrics/history.rb +98 -29
  26. data/lib/wurk/metrics/statsd.rb +32 -18
  27. data/lib/wurk/middleware/chain.rb +31 -14
  28. data/lib/wurk/middleware/poison_pill.rb +23 -2
  29. data/lib/wurk/pool_checkout.rb +10 -0
  30. data/lib/wurk/processor.rb +79 -11
  31. data/lib/wurk/profiler.rb +6 -2
  32. data/lib/wurk/queue.rb +8 -0
  33. data/lib/wurk/redis_client_adapter.rb +1 -1
  34. data/lib/wurk/redis_pool.rb +2 -1
  35. data/lib/wurk/shutdown_gate.rb +79 -0
  36. data/lib/wurk/stats.rb +5 -1
  37. data/lib/wurk/swarm/child_boot.rb +24 -4
  38. data/lib/wurk/swarm.rb +88 -14
  39. data/lib/wurk/version.rb +1 -1
  40. data/lib/wurk/web/config.rb +11 -7
  41. data/lib/wurk.rb +2 -8
  42. data/vendor/assets/dashboard/assets/{ArgsValue-D74zX0MI.js → ArgsValue-CcR2ya6e.js} +1 -1
  43. data/vendor/assets/dashboard/assets/{BatchDetail-OmC5NPgw.js → BatchDetail-CUXJUQ3Q.js} +1 -1
  44. data/vendor/assets/dashboard/assets/{Batches-CIpai7St.js → Batches-Cxan6Ngw.js} +1 -1
  45. data/vendor/assets/dashboard/assets/{Busy-A_kwSR6Q.js → Busy-DC5EGM0g.js} +1 -1
  46. data/vendor/assets/dashboard/assets/{Cron-BG7HTqlp.js → Cron-Dlt8tXJA.js} +1 -1
  47. data/vendor/assets/dashboard/assets/Dashboard-DNLu_WCg.js +1 -0
  48. data/vendor/assets/dashboard/assets/{Dead-8J21jMyK.js → Dead-dZ7VGlKS.js} +1 -1
  49. data/vendor/assets/dashboard/assets/{Extension-B4Q9FIQu.js → Extension-DaFpEIJf.js} +1 -1
  50. data/vendor/assets/dashboard/assets/{FilterBox-Fh_Ae7UW.js → FilterBox-CO3aYWIq.js} +1 -1
  51. data/vendor/assets/dashboard/assets/{JobDetailModal-Ceng0PMB.js → JobDetailModal-DSWbT6G0.js} +1 -1
  52. data/vendor/assets/dashboard/assets/{Limiters-CruDWvNZ.js → Limiters-Cb4PKXNR.js} +1 -1
  53. data/vendor/assets/dashboard/assets/Metrics-CCGzgCsT.js +1 -0
  54. data/vendor/assets/dashboard/assets/{Modal-CN3rdKA_.js → Modal-B86q6ruL.js} +1 -1
  55. data/vendor/assets/dashboard/assets/{PageHeader-C44KNMGm.js → PageHeader-fPrCcp_-.js} +1 -1
  56. data/vendor/assets/dashboard/assets/{Profiles-xEVTyS2N.js → Profiles-BnS82nR_.js} +1 -1
  57. data/vendor/assets/dashboard/assets/{Queues-D86FYohJ.js → Queues-CIyPevOy.js} +1 -1
  58. data/vendor/assets/dashboard/assets/{Retries-Bz1O1D-i.js → Retries-DopwXkXl.js} +1 -1
  59. data/vendor/assets/dashboard/assets/{Scheduled-B6h2akTu.js → Scheduled-1-Z7i1zE.js} +1 -1
  60. data/vendor/assets/dashboard/assets/{Search-OOu22e5s.js → Search-ByA6eTma.js} +1 -1
  61. data/vendor/assets/dashboard/assets/{Skeleton-DzR7XNxz.js → Skeleton-bC7HfQ9r.js} +1 -1
  62. data/vendor/assets/dashboard/assets/{charts-BVHHGof7.js → charts-CLLzJ7vK.js} +1 -1
  63. data/vendor/assets/dashboard/assets/index-B1N8hQUh.js +141 -0
  64. data/vendor/assets/dashboard/assets/{useResetPageOnEmpty-dVPGEWzn.js → useResetPageOnEmpty-DpBjkf6_.js} +1 -1
  65. data/vendor/assets/dashboard/assets/{useSort-BeYbztkN.js → useSort-DvpwuNQE.js} +1 -1
  66. data/vendor/assets/dashboard/index.html +2 -2
  67. data/vendor/assets/dashboard/wurk-manifest.json +2 -2
  68. metadata +30 -26
  69. data/vendor/assets/dashboard/assets/Dashboard-A_ToqHoo.js +0 -1
  70. data/vendor/assets/dashboard/assets/Metrics-CIT7VCoN.js +0 -1
  71. data/vendor/assets/dashboard/assets/index-D_lSDwKw.js +0 -141
@@ -1 +1 @@
1
- import{A as e,F as t,H as n,J as r,O as i,R as a,T as o,V as s,_ as c,b as l,g as u,q as d,v as f,w as p,x as m,z as h}from"./Skeleton-DzR7XNxz.js";var g=p(`<svg><line stroke=rgba(255,255,255,0.06) stroke-dasharray="3 3"></svg>`,!1,!0,!1),_=p(`<svg><text text-anchor=end dominant-baseline=middle fill=#71717a font-size=11 font-family="JetBrains Mono, monospace"></svg>`,!1,!0,!1),v=p(`<svg><text fill=#71717a font-size=11 font-family="JetBrains Mono, monospace"></svg>`,!1,!0,!1),y=p(`<div style="position:absolute;top:8px;background:#161618;border:1px solid #272729;color:#e4e4e7;border-radius:6px;font-size:12px;font-family:JetBrains Mono, monospace;padding:8px 10px;pointer-events:none;white-space:nowrap;z-index:10"><div style=color:#a1a1aa;margin-bottom:4px>`),b=p(`<div style=display:flex;align-items:center;gap:6px><span style=width:8px;height:8px;border-radius:2px;display:inline-block;flex:none></span><span></span><span style=margin-inline-start:auto;padding-inline-start:10px>`),x=`JetBrains Mono, monospace`,S=`rgba(255,255,255,0.25)`,C=`rgba(255,255,255,0.04)`,w=`#09090b`;function T(e,t,n=0){let r=n;return{width:e,height:t,left:r,right:8,top:8,bottom:22,plotW:Math.max(0,e-r-8),plotH:Math.max(0,t-8-22)}}function E(e,t,n){return t<=1?n.left+n.plotW/2:n.left+e*n.plotW/(t-1)}function D(e,t,n){let r=n.height-n.bottom;return t<=0?r:r-e/t*n.plotH}function O(e){if(e.length===0)return``;if(e.length===1)return`M${e[0][0]},${e[0][1]}`;let t=`M${e[0][0]},${e[0][1]}`;for(let n=0;n<e.length-1;n++){let r=e[n-1]??e[n],i=e[n],a=e[n+1],o=e[n+2]??a,s=i[0]+(a[0]-r[0])/6,c=i[1]+(a[1]-r[1])/6,l=a[0]-(o[0]-i[0])/6,u=a[1]-(o[1]-i[1])/6;t+=` C${s},${c} ${l},${u} ${a[0]},${a[1]}`}return t}function k(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function A(e,t=!0){if(!(e>0))return{max:1,ticks:[0,1]};let n=k(e/4,!0);t||(n=Math.max(1,Math.round(n)));let r=Math.ceil(e/n)*n,i=[];for(let e=0;e<=r+n/1e3;e+=n)i.push(Number(e.toFixed(6)));return{max:r,ticks:i}}function j(e){return Number.isInteger(e)?e.toLocaleString():e.toFixed(e<10?2:1)}function M(e,t,n){let r=e.length;if(r<=1)return r===1?[0]:[];let i=Math.max(...e.map(e=>e.length))*6.6+n,a=Math.max(2,Math.floor(t/i));if(a>=r)return e.map((e,t)=>t);let o=Math.ceil((r-1)/(a-1)),s=[];for(let e=0;e<r;e+=o)s.push(e);return s[s.length-1]!==r-1&&s.push(r-1),s}function N(){let[e,t]=s({w:0,h:0}),n;return r(()=>{let e=()=>{n&&t({w:n.clientWidth,h:n.clientHeight})};e();let r=new ResizeObserver(e);n&&r.observe(n),d(()=>r.disconnect())}),{setRef:e=>{n=e},size:e}}function P(n){let r=()=>n.labels.length-1;return[t(i,{get each(){return n.yTicks},children:e=>(()=>{var t=g();return h(r=>{var i=n.geo.left,a=n.geo.width-n.geo.right,o=n.yAt(e),s=n.yAt(e);return i!==r.e&&l(t,`x1`,r.e=i),a!==r.t&&l(t,`x2`,r.t=a),o!==r.a&&l(t,`y1`,r.a=o),s!==r.o&&l(t,`y2`,r.o=s),r},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}),t(e,{get when(){return n.showY},get children(){return t(i,{get each(){return n.yTicks},children:e=>(()=>{var t=_();return c(t,()=>j(e)),h(r=>{var i=n.geo.left-6,a=n.yAt(e);return i!==r.e&&l(t,`x`,r.e=i),a!==r.t&&l(t,`y`,r.t=a),r},{e:void 0,t:void 0}),t})()})}}),t(i,{get each(){return n.xTicks},children:e=>(()=>{var t=v();return c(t,()=>n.labels[e]),h(i=>{var a=n.xAt(e),o=n.geo.height-n.geo.bottom+14,s=e===0?`start`:e===r()?`end`:`middle`;return a!==i.e&&l(t,`x`,i.e=a),o!==i.t&&l(t,`y`,i.t=o),s!==i.a&&l(t,`text-anchor`,i.a=s),i},{e:void 0,t:void 0,a:void 0}),t})()})]}function F(e){return Number.isInteger(e)?e.toLocaleString():e.toFixed(2)}function I(e){let n=()=>e.x>e.containerW/2;return(()=>{var r=y(),a=r.firstChild;return c(a,()=>e.label),c(r,t(i,{get each(){return e.rows},children:e=>(()=>{var t=b(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return c(r,()=>e.name),c(i,()=>F(e.value)),h(t=>m(n,`background`,e.color)),t})()}),null),h(t=>{var i=`${e.x}px`,a=n()?`translateX(calc(-100% - 12px))`:`translateX(12px)`;return i!==t.e&&m(r,`left`,t.e=i),a!==t.t&&m(r,`transform`,t.t=a),t},{e:void 0,t:void 0}),r})()}function L(e,t,n){if(t<=1)return 0;let r=n.plotW/(t-1),i=Math.round((e-n.left)/r);return Math.max(0,Math.min(t-1,i))}function R(e,t,n){if(t<=0)return-1;let r=n.plotW/t,i=Math.floor((e-n.left)/r);return Math.max(0,Math.min(t-1,i))}function z(e,t){let n=t.getBoundingClientRect();return{x:e.clientX-n.left,y:e.clientY-n.top}}var B=p(`<svg><line stroke-width=1></svg>`,!1,!0,!1),V=p(`<svg><defs>`),H=p(`<div style=position:relative;width:100%><div style=position:relative;width:100%;height:100%>`),U=p(`<svg><linearGradient x1=0 y1=0 x2=0 y2=1><stop offset=0%></stop><stop offset=95% stop-opacity=0></svg>`,!1,!0,!1),W=p(`<svg><path stroke=none></svg>`,!1,!0,!1),G=p(`<svg><path fill=none stroke-linejoin=round stroke-linecap=round></svg>`,!1,!0,!1),K=p(`<svg><circle r=4 stroke-width=2></svg>`,!1,!0,!1);function q(r){let{setRef:u,size:d}=N(),[p,g]=s(null),_=n(),v,y=a(()=>T(d().w,d().h,r.yAxisWidth??0)),b=a(()=>{let e=0;for(let t of r.data)for(let n of r.series)e=Math.max(e,Number(t[n.key])||0);return e}),x=a(()=>A(b(),r.yDecimals??!0)),C=a(()=>r.data.map(e=>e.label)),k=a(()=>M(C(),y().plotW,r.xMinTickGap??56)),j=e=>E(e,r.data.length,y()),F=e=>D(e,x().max,y()),R=e=>{if(!v)return;let{x:t}=z(e,v);g(L(t,r.data.length,y()))},q=()=>{let e=p();return e===null?[]:r.series.map(t=>({name:t.name??t.key,value:Number(r.data[e]?.[t.key])||0,color:t.stroke}))};return(()=>{var n=H(),a=n.firstChild;return o(u,a),c(a,t(e,{get when(){return f(()=>d().w>0)()&&d().h>0},get children(){var n=V(),a=n.firstChild;n.addEventListener(`mouseleave`,()=>g(null)),n.$$mousemove=R;var s=v;return typeof s==`function`?o(s,n):v=n,c(a,t(i,{get each(){return r.series},children:n=>t(e,{get when(){return(n.fill??`gradient`)===`gradient`},get children(){var e=U(),t=e.firstChild,r=t.nextSibling;return h(i=>{var a=`${_}-${n.key}`,o=n.stroke,s=n.fillOpacity??.22,c=n.stroke;return a!==i.e&&l(e,`id`,i.e=a),o!==i.t&&l(t,`stop-color`,i.t=o),s!==i.a&&l(t,`stop-opacity`,i.a=s),c!==i.o&&l(r,`stop-color`,i.o=c),i},{e:void 0,t:void 0,a:void 0,o:void 0}),e}})})),c(n,t(P,{get geo(){return y()},get yTicks(){return x().ticks},yAt:F,get showY(){return r.yAxisWidth!=null},get xTicks(){return k()},xAt:j,get labels(){return C()}}),null),c(n,t(i,{get each(){return r.series},children:n=>{let i=()=>r.data.map((e,t)=>[j(t),F(Number(e[n.key])||0)]),a=()=>O(i()),o=()=>{let e=i();if(e.length===0)return``;let t=y().height-y().bottom;return`${O(e)} L${e[e.length-1][0]},${t} L${e[0][0]},${t} Z`};return[t(e,{get when(){return(n.fill??`gradient`)===`gradient`},get children(){var e=W();return h(t=>{var r=o(),i=`url(#${_}-${n.key})`;return r!==t.e&&l(e,`d`,t.e=r),i!==t.t&&l(e,`fill`,t.t=i),t},{e:void 0,t:void 0}),e}}),(()=>{var e=G();return h(t=>{var r=a(),i=n.stroke,o=n.strokeWidth??2,s=n.strokeDasharray;return r!==t.e&&l(e,`d`,t.e=r),i!==t.t&&l(e,`stroke`,t.t=i),o!==t.a&&l(e,`stroke-width`,t.a=o),s!==t.o&&l(e,`stroke-dasharray`,t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})()]}}),null),c(n,t(e,{get when(){return p()!==null},get children(){return[(()=>{var e=B();return l(e,`stroke`,S),h(t=>{var n=j(p()),r=j(p()),i=y().top,a=y().height-y().bottom;return n!==t.e&&l(e,`x1`,t.e=n),r!==t.t&&l(e,`x2`,t.t=r),i!==t.a&&l(e,`y1`,t.a=i),a!==t.o&&l(e,`y2`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),t(i,{get each(){return r.series},children:e=>(()=>{var t=K();return l(t,`stroke`,w),h(n=>{var i=j(p()),a=F(Number(r.data[p()]?.[e.key])||0),o=e.stroke;return i!==n.e&&l(t,`cx`,n.e=i),a!==n.t&&l(t,`cy`,n.t=a),o!==n.a&&l(t,`fill`,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()})]}}),null),h(e=>{var t=d().w,r=d().h;return t!==e.e&&l(n,`width`,e.e=t),r!==e.t&&l(n,`height`,e.t=r),e},{e:void 0,t:void 0}),n}})),c(n,t(e,{get when(){return p()!==null},get children(){return t(I,{get x(){return j(p())},get containerW(){return d().w},get label(){return C()[p()]},get rows(){return q()}})}}),null),h(e=>m(n,`height`,`${r.height}px`)),n})()}u([`mousemove`]);var J=p(`<svg><line stroke-width=1></svg>`,!1,!0,!1),Y=p(`<svg>`),X=p(`<div style=display:flex;flex-wrap:wrap;justify-content:center;gap:12px;font-size:11px;color:#a1a1aa;padding-top:6px>`),Z=p(`<div style=position:relative;width:100%;display:flex;flex-direction:column><div style=position:relative;width:100%;flex:1;min-height:0>`),Q=p(`<svg><path fill=none stroke-linejoin=round stroke-linecap=round></svg>`,!1,!0,!1),ee=p(`<svg><circle r=4 stroke-width=2></svg>`,!1,!0,!1),te=p(`<span style=display:inline-flex;align-items:center;gap:5px><span style=width:10px;height:2px;display:inline-block>`);function ne(n){let{setRef:r,size:u}=N(),[d,p]=s(null),g,_=a(()=>T(u().w,u().h,n.yAxisWidth??0)),v=a(()=>{let e=0;for(let t of n.data)for(let r of n.series)e=Math.max(e,Number(t[r.key])||0);return e}),y=a(()=>A(v(),n.yDecimals??!0)),b=a(()=>n.data.map(e=>e.label)),C=a(()=>M(b(),_().plotW,n.xMinTickGap??48)),k=e=>E(e,n.data.length,_()),j=e=>D(e,y().max,_()),F=e=>{if(!g)return;let{x:t}=z(e,g);p(L(t,n.data.length,_()))},R=()=>{let e=d();return e===null?[]:n.series.map(t=>({name:t.name??t.key,value:Number(n.data[e]?.[t.key])||0,color:t.stroke}))};return(()=>{var a=Z(),s=a.firstChild;return o(r,s),c(s,t(e,{get when(){return f(()=>u().w>0)()&&u().h>0},get children(){var r=Y();r.addEventListener(`mouseleave`,()=>p(null)),r.$$mousemove=F;var a=g;return typeof a==`function`?o(a,r):g=r,c(r,t(P,{get geo(){return _()},get yTicks(){return y().ticks},yAt:j,get showY(){return n.yAxisWidth!=null},get xTicks(){return C()},xAt:k,get labels(){return b()}}),null),c(r,t(i,{get each(){return n.series},children:e=>(()=>{var t=Q();return h(r=>{var i=O(n.data.map((t,n)=>[k(n),j(Number(t[e.key])||0)])),a=e.stroke,o=e.strokeWidth??2;return i!==r.e&&l(t,`d`,r.e=i),a!==r.t&&l(t,`stroke`,r.t=a),o!==r.a&&l(t,`stroke-width`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()}),null),c(r,t(e,{get when(){return d()!==null},get children(){return[(()=>{var e=J();return l(e,`stroke`,S),h(t=>{var n=k(d()),r=k(d()),i=_().top,a=_().height-_().bottom;return n!==t.e&&l(e,`x1`,t.e=n),r!==t.t&&l(e,`x2`,t.t=r),i!==t.a&&l(e,`y1`,t.a=i),a!==t.o&&l(e,`y2`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),t(i,{get each(){return n.series},children:e=>(()=>{var t=ee();return l(t,`stroke`,w),h(r=>{var i=k(d()),a=j(Number(n.data[d()]?.[e.key])||0),o=e.stroke;return i!==r.e&&l(t,`cx`,r.e=i),a!==r.t&&l(t,`cy`,r.t=a),o!==r.a&&l(t,`fill`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()})]}}),null),h(e=>{var t=u().w,n=u().h;return t!==e.e&&l(r,`width`,e.e=t),n!==e.t&&l(r,`height`,e.t=n),e},{e:void 0,t:void 0}),r}})),c(a,t(e,{get when(){return n.legend},get children(){var e=X();return m(e,`font-family`,x),c(e,t(i,{get each(){return n.series},children:e=>(()=>{var t=te(),n=t.firstChild;return c(t,()=>e.name??e.key,null),h(t=>m(n,`background`,e.stroke)),t})()})),e}}),null),c(a,t(e,{get when(){return d()!==null},get children(){return t(I,{get x(){return k(d())},get containerW(){return u().w},get label(){return b()[d()]},get rows(){return R()}})}}),null),h(e=>m(a,`height`,`${n.height}px`)),a})()}u([`mousemove`]);var $=p(`<svg><rect></svg>`,!1,!0,!1),re=p(`<svg>`),ie=p(`<div style=position:relative;width:100%><div style=position:relative;width:100%;height:100%>`);function ae(n){let{setRef:r,size:u}=N(),[d,p]=s(null),g,_=a(()=>T(u().w,u().h,n.yAxisWidth??0)),v=a(()=>Math.max(0,...n.data.map(e=>e.value))),y=a(()=>A(v(),n.yDecimals??!0)),b=a(()=>n.data.map(e=>e.label)),x=a(()=>M(b(),_().plotW,n.xMinTickGap??40)),S=e=>D(e,y().max,_()),w=()=>n.data.length>0?_().plotW/n.data.length:0,E=()=>Math.max(1,w()*.62),O=e=>_().left+w()*(e+.5),k=e=>{if(!g)return;let{x:t}=z(e,g);p(R(t,n.data.length,_()))},j=()=>{let e=d();return e===null||!n.data[e]?[]:[{name:n.name??`Value`,value:n.data[e].value,color:n.data[e].color}]};return(()=>{var a=ie(),s=a.firstChild;return o(r,s),c(s,t(e,{get when(){return f(()=>u().w>0)()&&u().h>0},get children(){var r=re();r.addEventListener(`mouseleave`,()=>p(null)),r.$$mousemove=k;var a=g;return typeof a==`function`?o(a,r):g=r,c(r,t(P,{get geo(){return _()},get yTicks(){return y().ticks},yAt:S,get showY(){return n.yAxisWidth!=null},get xTicks(){return x()},xAt:O,get labels(){return b()}}),null),c(r,t(e,{get when(){return d()!==null},get children(){var e=$();return l(e,`fill`,C),h(t=>{var n=_().left+w()*d(),r=_().top,i=w(),a=_().plotH;return n!==t.e&&l(e,`x`,t.e=n),r!==t.t&&l(e,`y`,t.t=r),i!==t.a&&l(e,`width`,t.a=i),a!==t.o&&l(e,`height`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),null),c(r,t(i,{get each(){return n.data},children:(e,t)=>{let r=()=>S(e.value),i=()=>_().height-_().bottom,a=()=>Math.max(0,i()-r()),o=()=>Math.min(n.radius??3,E()/2,a());return(()=>{var n=$();return h(i=>{var s=O(t())-E()/2,c=r(),u=E(),d=a(),f=o(),p=o(),m=e.color;return s!==i.e&&l(n,`x`,i.e=s),c!==i.t&&l(n,`y`,i.t=c),u!==i.a&&l(n,`width`,i.a=u),d!==i.o&&l(n,`height`,i.o=d),f!==i.i&&l(n,`rx`,i.i=f),p!==i.n&&l(n,`ry`,i.n=p),m!==i.s&&l(n,`fill`,i.s=m),i},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),n})()}}),null),h(e=>{var t=u().w,n=u().h;return t!==e.e&&l(r,`width`,e.e=t),n!==e.t&&l(r,`height`,e.t=n),e},{e:void 0,t:void 0}),r}})),c(a,t(e,{get when(){return d()!==null},get children(){return t(I,{get x(){return O(d())},get containerW(){return u().w},get label(){return b()[d()]},get rows(){return j()}})}}),null),h(e=>m(a,`height`,`${n.height}px`)),a})()}u([`mousemove`]);export{ne as n,q as r,ae as t};
1
+ import{A as e,F as t,H as n,J as r,O as i,R as a,T as o,V as s,_ as c,b as l,g as u,q as d,v as f,w as p,x as m,z as h}from"./Skeleton-bC7HfQ9r.js";var g=p(`<svg><line stroke=rgba(255,255,255,0.06) stroke-dasharray="3 3"></svg>`,!1,!0,!1),_=p(`<svg><text text-anchor=end dominant-baseline=middle fill=#71717a font-size=11 font-family="JetBrains Mono, monospace"></svg>`,!1,!0,!1),v=p(`<svg><text fill=#71717a font-size=11 font-family="JetBrains Mono, monospace"></svg>`,!1,!0,!1),y=p(`<div style="position:absolute;top:8px;background:#161618;border:1px solid #272729;color:#e4e4e7;border-radius:6px;font-size:12px;font-family:JetBrains Mono, monospace;padding:8px 10px;pointer-events:none;white-space:nowrap;z-index:10"><div style=color:#a1a1aa;margin-bottom:4px>`),b=p(`<div style=display:flex;align-items:center;gap:6px><span style=width:8px;height:8px;border-radius:2px;display:inline-block;flex:none></span><span></span><span style=margin-inline-start:auto;padding-inline-start:10px>`),x=`JetBrains Mono, monospace`,S=`rgba(255,255,255,0.25)`,C=`rgba(255,255,255,0.04)`,w=`#09090b`;function T(e,t,n=0){let r=n;return{width:e,height:t,left:r,right:8,top:8,bottom:22,plotW:Math.max(0,e-r-8),plotH:Math.max(0,t-8-22)}}function E(e,t,n){return t<=1?n.left+n.plotW/2:n.left+e*n.plotW/(t-1)}function D(e,t,n){let r=n.height-n.bottom;return t<=0?r:r-e/t*n.plotH}function O(e){if(e.length===0)return``;if(e.length===1)return`M${e[0][0]},${e[0][1]}`;let t=`M${e[0][0]},${e[0][1]}`;for(let n=0;n<e.length-1;n++){let r=e[n-1]??e[n],i=e[n],a=e[n+1],o=e[n+2]??a,s=i[0]+(a[0]-r[0])/6,c=i[1]+(a[1]-r[1])/6,l=a[0]-(o[0]-i[0])/6,u=a[1]-(o[1]-i[1])/6;t+=` C${s},${c} ${l},${u} ${a[0]},${a[1]}`}return t}function k(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function A(e,t=!0){if(!(e>0))return{max:1,ticks:[0,1]};let n=k(e/4,!0);t||(n=Math.max(1,Math.round(n)));let r=Math.ceil(e/n)*n,i=[];for(let e=0;e<=r+n/1e3;e+=n)i.push(Number(e.toFixed(6)));return{max:r,ticks:i}}function j(e){return Number.isInteger(e)?e.toLocaleString():e.toFixed(e<10?2:1)}function M(e,t,n){let r=e.length;if(r<=1)return r===1?[0]:[];let i=Math.max(...e.map(e=>e.length))*6.6+n,a=Math.max(2,Math.floor(t/i));if(a>=r)return e.map((e,t)=>t);let o=Math.ceil((r-1)/(a-1)),s=[];for(let e=0;e<r;e+=o)s.push(e);return s[s.length-1]!==r-1&&s.push(r-1),s}function N(){let[e,t]=s({w:0,h:0}),n;return r(()=>{let e=()=>{n&&t({w:n.clientWidth,h:n.clientHeight})};e();let r=new ResizeObserver(e);n&&r.observe(n),d(()=>r.disconnect())}),{setRef:e=>{n=e},size:e}}function P(n){let r=()=>n.labels.length-1;return[t(i,{get each(){return n.yTicks},children:e=>(()=>{var t=g();return h(r=>{var i=n.geo.left,a=n.geo.width-n.geo.right,o=n.yAt(e),s=n.yAt(e);return i!==r.e&&l(t,`x1`,r.e=i),a!==r.t&&l(t,`x2`,r.t=a),o!==r.a&&l(t,`y1`,r.a=o),s!==r.o&&l(t,`y2`,r.o=s),r},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}),t(e,{get when(){return n.showY},get children(){return t(i,{get each(){return n.yTicks},children:e=>(()=>{var t=_();return c(t,()=>j(e)),h(r=>{var i=n.geo.left-6,a=n.yAt(e);return i!==r.e&&l(t,`x`,r.e=i),a!==r.t&&l(t,`y`,r.t=a),r},{e:void 0,t:void 0}),t})()})}}),t(i,{get each(){return n.xTicks},children:e=>(()=>{var t=v();return c(t,()=>n.labels[e]),h(i=>{var a=n.xAt(e),o=n.geo.height-n.geo.bottom+14,s=e===0?`start`:e===r()?`end`:`middle`;return a!==i.e&&l(t,`x`,i.e=a),o!==i.t&&l(t,`y`,i.t=o),s!==i.a&&l(t,`text-anchor`,i.a=s),i},{e:void 0,t:void 0,a:void 0}),t})()})]}function F(e){return Number.isInteger(e)?e.toLocaleString():e.toFixed(2)}function I(e){let n=()=>e.x>e.containerW/2;return(()=>{var r=y(),a=r.firstChild;return c(a,()=>e.label),c(r,t(i,{get each(){return e.rows},children:e=>(()=>{var t=b(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return c(r,()=>e.name),c(i,()=>F(e.value)),h(t=>m(n,`background`,e.color)),t})()}),null),h(t=>{var i=`${e.x}px`,a=n()?`translateX(calc(-100% - 12px))`:`translateX(12px)`;return i!==t.e&&m(r,`left`,t.e=i),a!==t.t&&m(r,`transform`,t.t=a),t},{e:void 0,t:void 0}),r})()}function L(e,t,n){if(t<=1)return 0;let r=n.plotW/(t-1),i=Math.round((e-n.left)/r);return Math.max(0,Math.min(t-1,i))}function R(e,t,n){if(t<=0)return-1;let r=n.plotW/t,i=Math.floor((e-n.left)/r);return Math.max(0,Math.min(t-1,i))}function z(e,t){let n=t.getBoundingClientRect();return{x:e.clientX-n.left,y:e.clientY-n.top}}var B=p(`<svg><line stroke-width=1></svg>`,!1,!0,!1),V=p(`<svg><defs>`),H=p(`<div style=position:relative;width:100%><div style=position:relative;width:100%;height:100%>`),U=p(`<svg><linearGradient x1=0 y1=0 x2=0 y2=1><stop offset=0%></stop><stop offset=95% stop-opacity=0></svg>`,!1,!0,!1),W=p(`<svg><path stroke=none></svg>`,!1,!0,!1),G=p(`<svg><path fill=none stroke-linejoin=round stroke-linecap=round></svg>`,!1,!0,!1),K=p(`<svg><circle r=4 stroke-width=2></svg>`,!1,!0,!1);function q(r){let{setRef:u,size:d}=N(),[p,g]=s(null),_=n(),v,y=a(()=>T(d().w,d().h,r.yAxisWidth??0)),b=a(()=>{let e=0;for(let t of r.data)for(let n of r.series)e=Math.max(e,Number(t[n.key])||0);return e}),x=a(()=>A(b(),r.yDecimals??!0)),C=a(()=>r.data.map(e=>e.label)),k=a(()=>M(C(),y().plotW,r.xMinTickGap??56)),j=e=>E(e,r.data.length,y()),F=e=>D(e,x().max,y()),R=e=>{if(!v)return;let{x:t}=z(e,v);g(L(t,r.data.length,y()))},q=()=>{let e=p();return e===null?[]:r.series.map(t=>({name:t.name??t.key,value:Number(r.data[e]?.[t.key])||0,color:t.stroke}))};return(()=>{var n=H(),a=n.firstChild;return o(u,a),c(a,t(e,{get when(){return f(()=>d().w>0)()&&d().h>0},get children(){var n=V(),a=n.firstChild;n.addEventListener(`mouseleave`,()=>g(null)),n.$$mousemove=R;var s=v;return typeof s==`function`?o(s,n):v=n,c(a,t(i,{get each(){return r.series},children:n=>t(e,{get when(){return(n.fill??`gradient`)===`gradient`},get children(){var e=U(),t=e.firstChild,r=t.nextSibling;return h(i=>{var a=`${_}-${n.key}`,o=n.stroke,s=n.fillOpacity??.22,c=n.stroke;return a!==i.e&&l(e,`id`,i.e=a),o!==i.t&&l(t,`stop-color`,i.t=o),s!==i.a&&l(t,`stop-opacity`,i.a=s),c!==i.o&&l(r,`stop-color`,i.o=c),i},{e:void 0,t:void 0,a:void 0,o:void 0}),e}})})),c(n,t(P,{get geo(){return y()},get yTicks(){return x().ticks},yAt:F,get showY(){return r.yAxisWidth!=null},get xTicks(){return k()},xAt:j,get labels(){return C()}}),null),c(n,t(i,{get each(){return r.series},children:n=>{let i=()=>r.data.map((e,t)=>[j(t),F(Number(e[n.key])||0)]),a=()=>O(i()),o=()=>{let e=i();if(e.length===0)return``;let t=y().height-y().bottom;return`${O(e)} L${e[e.length-1][0]},${t} L${e[0][0]},${t} Z`};return[t(e,{get when(){return(n.fill??`gradient`)===`gradient`},get children(){var e=W();return h(t=>{var r=o(),i=`url(#${_}-${n.key})`;return r!==t.e&&l(e,`d`,t.e=r),i!==t.t&&l(e,`fill`,t.t=i),t},{e:void 0,t:void 0}),e}}),(()=>{var e=G();return h(t=>{var r=a(),i=n.stroke,o=n.strokeWidth??2,s=n.strokeDasharray;return r!==t.e&&l(e,`d`,t.e=r),i!==t.t&&l(e,`stroke`,t.t=i),o!==t.a&&l(e,`stroke-width`,t.a=o),s!==t.o&&l(e,`stroke-dasharray`,t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})()]}}),null),c(n,t(e,{get when(){return p()!==null},get children(){return[(()=>{var e=B();return l(e,`stroke`,S),h(t=>{var n=j(p()),r=j(p()),i=y().top,a=y().height-y().bottom;return n!==t.e&&l(e,`x1`,t.e=n),r!==t.t&&l(e,`x2`,t.t=r),i!==t.a&&l(e,`y1`,t.a=i),a!==t.o&&l(e,`y2`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),t(i,{get each(){return r.series},children:e=>(()=>{var t=K();return l(t,`stroke`,w),h(n=>{var i=j(p()),a=F(Number(r.data[p()]?.[e.key])||0),o=e.stroke;return i!==n.e&&l(t,`cx`,n.e=i),a!==n.t&&l(t,`cy`,n.t=a),o!==n.a&&l(t,`fill`,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()})]}}),null),h(e=>{var t=d().w,r=d().h;return t!==e.e&&l(n,`width`,e.e=t),r!==e.t&&l(n,`height`,e.t=r),e},{e:void 0,t:void 0}),n}})),c(n,t(e,{get when(){return p()!==null},get children(){return t(I,{get x(){return j(p())},get containerW(){return d().w},get label(){return C()[p()]},get rows(){return q()}})}}),null),h(e=>m(n,`height`,`${r.height}px`)),n})()}u([`mousemove`]);var J=p(`<svg><line stroke-width=1></svg>`,!1,!0,!1),Y=p(`<svg>`),X=p(`<div style=display:flex;flex-wrap:wrap;justify-content:center;gap:12px;font-size:11px;color:#a1a1aa;padding-top:6px>`),Z=p(`<div style=position:relative;width:100%;display:flex;flex-direction:column><div style=position:relative;width:100%;flex:1;min-height:0>`),Q=p(`<svg><path fill=none stroke-linejoin=round stroke-linecap=round></svg>`,!1,!0,!1),ee=p(`<svg><circle r=4 stroke-width=2></svg>`,!1,!0,!1),te=p(`<span style=display:inline-flex;align-items:center;gap:5px><span style=width:10px;height:2px;display:inline-block>`);function ne(n){let{setRef:r,size:u}=N(),[d,p]=s(null),g,_=a(()=>T(u().w,u().h,n.yAxisWidth??0)),v=a(()=>{let e=0;for(let t of n.data)for(let r of n.series)e=Math.max(e,Number(t[r.key])||0);return e}),y=a(()=>A(v(),n.yDecimals??!0)),b=a(()=>n.data.map(e=>e.label)),C=a(()=>M(b(),_().plotW,n.xMinTickGap??48)),k=e=>E(e,n.data.length,_()),j=e=>D(e,y().max,_()),F=e=>{if(!g)return;let{x:t}=z(e,g);p(L(t,n.data.length,_()))},R=()=>{let e=d();return e===null?[]:n.series.map(t=>({name:t.name??t.key,value:Number(n.data[e]?.[t.key])||0,color:t.stroke}))};return(()=>{var a=Z(),s=a.firstChild;return o(r,s),c(s,t(e,{get when(){return f(()=>u().w>0)()&&u().h>0},get children(){var r=Y();r.addEventListener(`mouseleave`,()=>p(null)),r.$$mousemove=F;var a=g;return typeof a==`function`?o(a,r):g=r,c(r,t(P,{get geo(){return _()},get yTicks(){return y().ticks},yAt:j,get showY(){return n.yAxisWidth!=null},get xTicks(){return C()},xAt:k,get labels(){return b()}}),null),c(r,t(i,{get each(){return n.series},children:e=>(()=>{var t=Q();return h(r=>{var i=O(n.data.map((t,n)=>[k(n),j(Number(t[e.key])||0)])),a=e.stroke,o=e.strokeWidth??2;return i!==r.e&&l(t,`d`,r.e=i),a!==r.t&&l(t,`stroke`,r.t=a),o!==r.a&&l(t,`stroke-width`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()}),null),c(r,t(e,{get when(){return d()!==null},get children(){return[(()=>{var e=J();return l(e,`stroke`,S),h(t=>{var n=k(d()),r=k(d()),i=_().top,a=_().height-_().bottom;return n!==t.e&&l(e,`x1`,t.e=n),r!==t.t&&l(e,`x2`,t.t=r),i!==t.a&&l(e,`y1`,t.a=i),a!==t.o&&l(e,`y2`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),t(i,{get each(){return n.series},children:e=>(()=>{var t=ee();return l(t,`stroke`,w),h(r=>{var i=k(d()),a=j(Number(n.data[d()]?.[e.key])||0),o=e.stroke;return i!==r.e&&l(t,`cx`,r.e=i),a!==r.t&&l(t,`cy`,r.t=a),o!==r.a&&l(t,`fill`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()})]}}),null),h(e=>{var t=u().w,n=u().h;return t!==e.e&&l(r,`width`,e.e=t),n!==e.t&&l(r,`height`,e.t=n),e},{e:void 0,t:void 0}),r}})),c(a,t(e,{get when(){return n.legend},get children(){var e=X();return m(e,`font-family`,x),c(e,t(i,{get each(){return n.series},children:e=>(()=>{var t=te(),n=t.firstChild;return c(t,()=>e.name??e.key,null),h(t=>m(n,`background`,e.stroke)),t})()})),e}}),null),c(a,t(e,{get when(){return d()!==null},get children(){return t(I,{get x(){return k(d())},get containerW(){return u().w},get label(){return b()[d()]},get rows(){return R()}})}}),null),h(e=>m(a,`height`,`${n.height}px`)),a})()}u([`mousemove`]);var $=p(`<svg><rect></svg>`,!1,!0,!1),re=p(`<svg>`),ie=p(`<div style=position:relative;width:100%><div style=position:relative;width:100%;height:100%>`);function ae(n){let{setRef:r,size:u}=N(),[d,p]=s(null),g,_=a(()=>T(u().w,u().h,n.yAxisWidth??0)),v=a(()=>Math.max(0,...n.data.map(e=>e.value))),y=a(()=>A(v(),n.yDecimals??!0)),b=a(()=>n.data.map(e=>e.label)),x=a(()=>M(b(),_().plotW,n.xMinTickGap??40)),S=e=>D(e,y().max,_()),w=()=>n.data.length>0?_().plotW/n.data.length:0,E=()=>Math.max(1,w()*.62),O=e=>_().left+w()*(e+.5),k=e=>{if(!g)return;let{x:t}=z(e,g);p(R(t,n.data.length,_()))},j=()=>{let e=d();return e===null||!n.data[e]?[]:[{name:n.name??`Value`,value:n.data[e].value,color:n.data[e].color}]};return(()=>{var a=ie(),s=a.firstChild;return o(r,s),c(s,t(e,{get when(){return f(()=>u().w>0)()&&u().h>0},get children(){var r=re();r.addEventListener(`mouseleave`,()=>p(null)),r.$$mousemove=k;var a=g;return typeof a==`function`?o(a,r):g=r,c(r,t(P,{get geo(){return _()},get yTicks(){return y().ticks},yAt:S,get showY(){return n.yAxisWidth!=null},get xTicks(){return x()},xAt:O,get labels(){return b()}}),null),c(r,t(e,{get when(){return d()!==null},get children(){var e=$();return l(e,`fill`,C),h(t=>{var n=_().left+w()*d(),r=_().top,i=w(),a=_().plotH;return n!==t.e&&l(e,`x`,t.e=n),r!==t.t&&l(e,`y`,t.t=r),i!==t.a&&l(e,`width`,t.a=i),a!==t.o&&l(e,`height`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),null),c(r,t(i,{get each(){return n.data},children:(e,t)=>{let r=()=>S(e.value),i=()=>_().height-_().bottom,a=()=>Math.max(0,i()-r()),o=()=>Math.min(n.radius??3,E()/2,a());return(()=>{var n=$();return h(i=>{var s=O(t())-E()/2,c=r(),u=E(),d=a(),f=o(),p=o(),m=e.color;return s!==i.e&&l(n,`x`,i.e=s),c!==i.t&&l(n,`y`,i.t=c),u!==i.a&&l(n,`width`,i.a=u),d!==i.o&&l(n,`height`,i.o=d),f!==i.i&&l(n,`rx`,i.i=f),p!==i.n&&l(n,`ry`,i.n=p),m!==i.s&&l(n,`fill`,i.s=m),i},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),n})()}}),null),h(e=>{var t=u().w,n=u().h;return t!==e.e&&l(r,`width`,e.e=t),n!==e.t&&l(r,`height`,e.t=n),e},{e:void 0,t:void 0}),r}})),c(a,t(e,{get when(){return d()!==null},get children(){return t(I,{get x(){return O(d())},get containerW(){return u().w},get label(){return b()[d()]},get rows(){return j()}})}}),null),h(e=>m(a,`height`,`${n.height}px`)),a})()}u([`mousemove`]);export{ne as n,q as r,ae as t};
@@ -0,0 +1,141 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-DNLu_WCg.js","assets/Skeleton-bC7HfQ9r.js","assets/utils-DDJC7tJV.js","assets/PageHeader-fPrCcp_-.js","assets/charts-CLLzJ7vK.js","assets/Queues-CIyPevOy.js","assets/useResetPageOnEmpty-DpBjkf6_.js","assets/useSort-DvpwuNQE.js","assets/Modal-B86q6ruL.js","assets/ArgsValue-CcR2ya6e.js","assets/JobDetailModal-DSWbT6G0.js","assets/Retries-DopwXkXl.js","assets/FilterBox-CO3aYWIq.js","assets/Scheduled-1-Z7i1zE.js","assets/Dead-dZ7VGlKS.js","assets/Busy-DC5EGM0g.js","assets/Batches-Cxan6Ngw.js","assets/BatchDetail-CUXJUQ3Q.js","assets/Limiters-Cb4PKXNR.js","assets/Cron-Dlt8tXJA.js","assets/Metrics-CCGzgCsT.js","assets/Profiles-BnS82nR_.js","assets/Search-ByA6eTma.js","assets/Extension-DaFpEIJf.js"])))=>i.map(i=>d[i]);
2
+ import{$ as e,A as t,B as n,D as r,F as i,G as a,I as o,J as s,K as c,L as l,N as u,O as d,P as f,Q as p,R as m,S as ee,U as h,V as g,W as _,X as te,Y as ne,Z as v,_ as y,a as b,b as x,c as S,et as C,f as w,g as T,h as E,j as re,l as D,o as ie,q as O,s as k,t as ae,tt as A,u as oe,v as j,w as M,x as se,y as ce,z as N}from"./Skeleton-bC7HfQ9r.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function le(){let e=new Set;function t(t){return e.add(t),()=>e.delete(t)}let n=!1;function r(t,r){if(n)return!(n=!1);let i={to:t,options:r,defaultPrevented:!1,preventDefault:()=>i.defaultPrevented=!0};for(let a of e)a.listener({to:t,options:r,get defaultPrevented(){return i.defaultPrevented},preventDefault:i.preventDefault,from:a.location,retry:e=>{e&&(n=!0),a.navigate(t,{...r,resolve:!1})}});return!i.defaultPrevented}return{subscribe:t,confirm:r}}var P;function F(){(!window.history.state||window.history.state._depth==null)&&window.history.replaceState({...window.history.state,_depth:window.history.length-1},``),P=window.history.state._depth}F();function ue(e){return{...e,_depth:window.history.state&&window.history.state._depth}}function de(e,t){let n=!1;return()=>{let r=P;F();let i=r==null?null:P-r;if(n){n=!1;return}i&&t(i)?(n=!0,window.history.go(-i)):e()}}var fe=/^(?:[a-z0-9]+:)?\/\//i,pe=/^\/+|(\/)\/+$/g,I=`http://sr`;function L(e,t=!1){let n=e.replace(pe,`$1`);return n?t||/^[?#]/.test(n)?n:`/`+n:``}function R(e,t,n){if(fe.test(t))return;let r=L(e),i=n&&L(n),a=``;return a=!i||t.startsWith(`/`)?r:i.toLowerCase().indexOf(r.toLowerCase())===0?i:r+i,(a||`/`)+L(t,!a)}function me(e,t){if(e==null)throw Error(t);return e}function he(e,t){return L(e).replace(/\/*(\*.*)?$/g,``)+L(t)}function ge(e){let t={};return e.searchParams.forEach((e,n)=>{n in t?Array.isArray(t[n])?t[n].push(e):t[n]=[t[n],e]:t[n]=e}),t}function _e(e,t,n){let[r,i]=e.split(`/*`,2),a=r.split(`/`).filter(Boolean),o=a.length;return e=>{let r=e.split(`/`);if(r[0]===``&&r.shift(),r.length&&r[r.length-1]===``&&r.pop(),r.includes(``))return null;let s=r.length-o;if(s<0||s>0&&i===void 0&&!t)return null;let c={path:o?``:`/`,params:{}},l=e=>n===void 0?void 0:n[e];for(let e=0;e<o;e++){let t=a[e],n=t[0]===`:`,i=n?r[e]:r[e].toLowerCase(),o=n?t.slice(1):t.toLowerCase();if(n&&z(i,l(o)))c.params[o]=i;else if(n||!z(i,o))return null;c.path+=`/${i}`}if(i){let e=s?r.slice(-s).join(`/`):``;if(z(e,l(i)))c.params[i]=e;else return null}return c}}function z(e,t){let n=t=>t===e;return t===void 0?!0:typeof t==`string`?n(t):typeof t==`function`?t(e):Array.isArray(t)?t.some(n):t instanceof RegExp&&t.test(e)}function ve(e){let[t,n]=e.pattern.split(`/*`,2),r=t.split(`/`).filter(Boolean);return r.reduce((e,t)=>e+(t.startsWith(`:`)?2:3),r.length-(n===void 0?0:1))}function ye(e){let t=new Map,n=h();return new Proxy({},{get(r,i){return t.has(i)||te(n,()=>t.set(i,m(()=>e()[i]))),t.get(i)()},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}},ownKeys(){return Reflect.ownKeys(e())},has(t,n){return n in e()}})}function be(e,t){let n=new URLSearchParams(e);Object.entries(t).forEach(([e,t])=>{t==null||t===``||t instanceof Array&&!t.length?n.delete(e):t instanceof Array?(n.delete(e),t.forEach(t=>{n.append(e,String(t))})):n.set(e,String(t))});let r=n.toString();return r?`?${r}`:``}function xe(e){let t=/(\/?\:[^\/]+)\?/.exec(e);if(!t)return[e];let n=e.slice(0,t.index),r=e.slice(t.index+t[0].length),i=[n,n+=t[1]];for(;t=/^(\/\:[^\/]+)\?/.exec(r);)i.push(n+=t[1]),r=r.slice(t[0].length);return xe(r).reduce((e,t)=>[...e,...i.map(e=>e+t)],[])}var Se=100,Ce=o(),B=o(),V=()=>me(A(Ce),`<A> and 'use' router primitives can be only used inside a Route.`),we=()=>A(B)||V().base,Te=e=>{let t=we();return m(()=>t.resolvePath(e()))},Ee=e=>{let t=V();return m(()=>{let n=e();return n===void 0?n:t.renderPath(n)})},De=()=>V().navigatorFactory(),Oe=()=>V().location,ke=()=>V().params,Ae=()=>{let e=V(),t=e.location,n=De();return[t.query,(r,i)=>{let a=C(()=>{let n=e.pendingTarget&&new URL(e.pendingTarget.value,`http://sr`),i=n?n.pathname:t.pathname,a=n?n.search:t.search,o=n?n.hash:t.hash;return i+be(a,r)+o});n(a,{scroll:!1,resolve:!1,...i})}]},je=e=>encodeURIComponent(e).replace(/%(2B|40|3A|24|26|2C|3B|3D)/g,e=>decodeURIComponent(e));function Me(e,t=``){let{component:n,preload:r,load:i,children:a,info:o}=e,s=!a||Array.isArray(a)&&!a.length,c={key:e,component:n,preload:r||i,info:o};return Pe(e.path).reduce((n,r)=>{for(let i of xe(r)){let a=he(t,i),o=s?a:a.split(`/*`,1)[0];o=o.split(`/`).map(e=>e.startsWith(`:`)||e.startsWith(`*`)?e:je(e)).join(`/`),n.push({...c,originalPath:r,pattern:o,matcher:_e(o,!s,e.matchFilters)})}return n},[])}function Ne(e,t=0){return{routes:e,score:ve(e[e.length-1])*1e4-t,matcher(t){let n=[];for(let r=e.length-1;r>=0;r--){let i=e[r],a=i.matcher(t);if(!a)return null;n.unshift({...a,route:i})}return n}}}function Pe(e){return Array.isArray(e)?e:[e]}function Fe(e,t=``,n=[],r=[]){let i=Pe(e);for(let e=0,a=i.length;e<a;e++){let a=i[e];if(a&&typeof a==`object`){a.hasOwnProperty(`path`)||(a.path=``);let e=Me(a,t);for(let t of e){n.push(t);let e=Array.isArray(a.children)&&a.children.length===0;if(a.children&&!e)Fe(a.children,t.pattern,n,r);else{let e=Ne([...n],r.length);r.push(e)}n.pop()}}}return n.length?r:r.sort((e,t)=>t.score-e.score)}function H(e,t){for(let n=0,r=e.length;n<r;n++){let r=e[n].matcher(t);if(r)return r}return[]}function Ie(e,t,n){let r=new URL(I),i=m(t=>{let n=e();try{return new URL(n[0]===`/`?I+n:n,r)}catch{return console.error(`Invalid path ${n}`),t}},r,{equals:(e,t)=>e.href===t.href}),a=m(()=>i().pathname),o=m(()=>i().search,!0),s=m(()=>i().hash),l=()=>``,u=c(o,()=>ge(i()));return{get pathname(){return a()},get search(){return o()},get hash(){return s()},get state(){return t()},get key(){return l()},query:n?n(u):ye(u)}}var U;function Le(){return U}function Re(t,n,r,i={}){let{signal:[a,o],utils:s={}}=t,l=s.parsePath||(e=>e),d=s.renderPath||(e=>e),f=s.beforeLeave||le(),p=R(``,i.base||``);if(p===void 0)throw Error(`${p} is not a valid base path`);p&&!a().value&&o({value:p,replace:!0,scroll:!1});let[ee,h]=g(!1),_,v=(t,n)=>{n.value===y()&&n.state===x()||(_===void 0&&h(!0),U=t,_=n,e(()=>{_===n&&(b(_.value),S(_.state),ne(),E[1](e=>e.filter(e=>e.pending)))}).finally(()=>{_===n&&u(()=>{U=void 0,t===`navigate`&&oe(_),h(!1),_=void 0})}))},[y,b]=g(a().value),[x,S]=g(a().state),w=Ie(y,x,s.queryWrapper),T=[],E=g([]),re=m(()=>typeof i.transformUrl==`function`?H(n(),i.transformUrl(w.pathname)):H(n(),w.pathname)),D=()=>{let e=re(),t={};for(let n=0;n<e.length;n++)Object.assign(t,e[n].params);return t},ie=s.paramsWrapper?s.paramsWrapper(D,n):ye(D),O={pattern:p,path:()=>p,outlet:()=>null,resolvePath(e){return R(p,e)}};return N(c(a,e=>v(`native`,e),{defer:!0})),{base:O,location:w,params:ie,isRouting:ee,get pendingTarget(){return _},renderPath:d,parsePath:l,navigatorFactory:ae,matches:re,beforeLeave:f,preloadRoute:j,singleFlight:i.singleFlight===void 0||i.singleFlight,submissions:E};function k(e,t,n){C(()=>{if(typeof t==`number`){t&&(s.go?s.go(t):console.warn(`Router integration does not support relative routing`));return}let r=!t||t[0]===`?`,{replace:i,resolve:a,scroll:o,state:c}={replace:!1,resolve:!r,scroll:!0,...n},l=a?e.resolvePath(t):R(r&&w.pathname||``,t);if(l===void 0)throw Error(`Path '${t}' is not a routable path`);if(T.length>=Se)throw Error(`Too many redirects`);let u=y();(l!==u||c!==x())&&f.confirm(l,n)&&(T.push({value:u,replace:i,scroll:o,state:x()}),v(`navigate`,{value:l,state:c}))})}function ae(e){return e=e||A(B)||O,(t,n)=>k(e,t,n)}function oe(e){let t=T[0];t&&(o({...e,replace:t.replace,scroll:t.scroll}),T.length=0)}function j(e,t){let i=H(n(),e.pathname),a=U;U=`preload`;for(let n in i){let{route:a,params:o}=i[n];a.component&&a.component.preload&&a.component.preload();let{preload:s}=a;t&&s&&te(r(),()=>s({params:o,location:{pathname:e.pathname,search:e.search,hash:e.hash,query:ge(e),state:null,key:``},intent:`preload`}))}U=a}}function ze(e,t,n,r){let{base:a,location:o,params:s}=e,{pattern:c,component:l,preload:u}=r().route,d=m(()=>r().path);l&&l.preload&&l.preload();let f=u?u({params:s,location:o,intent:U||`initial`}):void 0;return{parent:t,pattern:c,path:d,outlet:()=>l?i(l,{params:s,location:o,data:f,get children(){return n()}}):n(),resolvePath(e){return R(a.path(),e,d())}}}var Be=e=>t=>{let{base:n}=t,r=f(()=>t.children),a=m(()=>Fe(r(),t.base||``)),o,s=Re(e,a,()=>o,{base:n,singleFlight:t.singleFlight,transformUrl:t.transformUrl});return e.create&&e.create(s),i(Ce.Provider,{value:s,get children(){return i(Ve,{routerState:s,get root(){return t.root},get preload(){return t.rootPreload||t.rootLoad},get children(){return[j(()=>(o=h())&&null),i(He,{routerState:s,get branches(){return a()}})]}})}})};function Ve(e){let n=e.routerState.location,r=e.routerState.params,a=m(()=>e.preload&&C(()=>{e.preload({params:r,location:n,intent:Le()||`initial`})}));return i(t,{get when(){return e.root},keyed:!0,get fallback(){return e.children},children:t=>i(t,{params:r,location:n,get data(){return a()},get children(){return e.children}})})}function He(e){let t=[],r;O(()=>t.forEach(e=>e()));let i=m(c(e.routerState.matches,(a,o,s)=>{let c=o&&a.length===o.length,l=[];for(let r=0,u=a.length;r<u;r++){let u=o&&o[r],d=a[r];s&&u&&d.route.key===u.route.key?l[r]=s[r]:(c=!1,t[r]&&t[r](),n(n=>{t[r]=n,l[r]=ze(e.routerState,l[r-1]||e.routerState.base,Ue(()=>i()[r+1]),()=>{let t=e.routerState.matches();return t[r]??t[0]})}))}return t.splice(a.length).forEach(e=>e()),s&&c?s:(r=l[0],l)}));return Ue(()=>i()&&r)()}var Ue=e=>()=>i(t,{get when(){return e()},keyed:!0,children:e=>i(B.Provider,{value:e,get children(){return e.outlet()}})}),W=e=>{let t=f(()=>e.children);return a(e,{get children(){return t()}})};function We([e,t],n,r){return[n?()=>n(e()):e,r?e=>t(r(e)):t]}function Ge(e){let t=!1,n=e=>typeof e==`string`?{value:e}:e,r=We(g(n(e.get()),{equals:(e,t)=>e.value===t.value&&e.state===t.state}),void 0,n=>(!t&&e.set(n),v.registry&&!v.done&&(v.done=!0),n));return e.init&&O(e.init((i=e.get())=>{t=!0,r[1](n(i)),t=!1})),Be({signal:r,create:e.create,utils:e.utils})}function G(e,t,n){return e.addEventListener(t,n),()=>e.removeEventListener(t,n)}function Ke(e,t){let n=e&&document.getElementById(e);n?n.scrollIntoView():t&&window.scrollTo(0,0)}var qe=new Map;function Je({preload:e=!0,explicitLinks:t=!1,actionBase:n=`/_server`,transformUrl:r}={}){return i=>{let a=i.base.path(),o=i.navigatorFactory(i.base),s,c;function l(e){return e.namespaceURI===`http://www.w3.org/2000/svg`}function u(e){if(e.defaultPrevented||e.button!==0||e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;let n=e.composedPath().find(e=>e instanceof Node&&e.nodeName.toUpperCase()===`A`);if(!n||t&&!n.hasAttribute(`link`))return;let r=l(n),i=r?n.href.baseVal:n.href;if((r?n.target.baseVal:n.target)||!i&&!n.hasAttribute(`state`))return;let o=(n.getAttribute(`rel`)||``).split(/\s+/);if(n.hasAttribute(`download`)||o&&o.includes(`external`))return;let s=r?new URL(i,document.baseURI):new URL(i);if(!(s.origin!==window.location.origin||a&&s.pathname&&!s.pathname.toLowerCase().startsWith(a.toLowerCase())))return[n,s]}function d(e){let t=u(e);if(!t)return;let[n,r]=t,a=i.parsePath(r.pathname+r.search+r.hash),s=n.getAttribute(`state`);e.preventDefault(),o(a,{resolve:!1,replace:n.hasAttribute(`replace`),scroll:!n.hasAttribute(`noscroll`),state:s?JSON.parse(s):void 0})}function f(e){let t=u(e);if(!t)return;let[n,a]=t;r&&(a.pathname=r(a.pathname)),i.preloadRoute(a,n.getAttribute(`preload`)!==`false`)}function p(e){clearTimeout(s);let t=u(e);if(!t)return c=null;let[n,a]=t;c!==n&&(r&&(a.pathname=r(a.pathname)),s=setTimeout(()=>{i.preloadRoute(a,n.getAttribute(`preload`)!==`false`),c=n},20))}function m(e){if(e.defaultPrevented)return;let t=e.submitter&&e.submitter.hasAttribute(`formaction`)?e.submitter.getAttribute(`formaction`):e.target.getAttribute(`action`);if(!t)return;if(!t.startsWith(`https://action/`)){let e=new URL(t,I);if(t=i.parsePath(e.pathname+e.search),!t.startsWith(n))return}if(e.target.method.toUpperCase()!==`POST`)throw Error(`Only POST forms are supported for Actions`);let r=qe.get(t);if(r){e.preventDefault();let t=new FormData(e.target,e.submitter);r.call({r:i,f:e.target},e.target.enctype===`multipart/form-data`?t:new URLSearchParams(t))}}T([`click`,`submit`]),document.addEventListener(`click`,d),e&&(document.addEventListener(`mousemove`,p,{passive:!0}),document.addEventListener(`focusin`,f,{passive:!0}),document.addEventListener(`touchstart`,f,{passive:!0})),document.addEventListener(`submit`,m),O(()=>{document.removeEventListener(`click`,d),e&&(document.removeEventListener(`mousemove`,p),document.removeEventListener(`focusin`,f),document.removeEventListener(`touchstart`,f)),document.removeEventListener(`submit`,m)})}}var Ye=`solid-router:scroll`;function Xe(){window.history.scrollRestoration=`manual`,F();let e={};try{e=JSON.parse(sessionStorage.getItem(Ye))||{}}catch{}let t=()=>window.history.state&&window.history.state._depth,n=!1,r,i=[G(window,`scroll`,()=>{let i=t();i!=null&&(e[i]=window.scrollY),n||(r=void 0)}),G(window,`pagehide`,()=>{try{sessionStorage.setItem(Ye,JSON.stringify(e))}catch{}})],a=()=>{if(r==null)return;let t=e[r];r=void 0,t!=null&&(n=!0,window.scrollTo(0,t),n=!1)};return{onPop(){r=t()},onPush(){let n=t();if(n!=null)for(let t in e)+t>=n&&delete e[t]},create(e){l(c(e.isRouting,e=>e||a(),{defer:!0})),O(()=>i.forEach(e=>e()));let[n]=performance.getEntriesByType&&performance.getEntriesByType(`navigation`);n&&n.type!==`navigate`&&(r=t(),a())}}}function Ze(e){let t=e.scrollRestoration?Xe():void 0,n=()=>{let e=window.location.pathname+window.location.search,t=window.history.state&&window.history.state._depth&&Object.keys(window.history.state).length===1?void 0:window.history.state;return{value:e+window.location.hash,state:t}},r=le();return Ge({get:n,set({value:e,replace:n,scroll:r,state:i}){n?window.history.replaceState(ue(i),``,e):window.history.pushState(i,``,e),Ke(decodeURIComponent(window.location.hash.slice(1)),r),F(),t&&!n&&t.onPush()},init:e=>{let i=de(e,e=>{if(e)return!r.confirm(e);{let e=n();return!r.confirm(e.value,{state:e.state})}});return G(window,`popstate`,t?()=>{t.onPop(),i()}:i)},create:n=>{Je({preload:e.preload,explicitLinks:e.explicitLinks,actionBase:e.actionBase,transformUrl:e.transformUrl})(n),t&&t.create(n)},utils:{go:e=>window.history.go(e),beforeLeave:r}})(e)}var Qe=M(`<a>`);function K(e){e=a({inactiveClass:`inactive`,activeClass:`active`},e);let[,t]=p(e,[`href`,`state`,`class`,`activeClass`,`inactiveClass`,`end`]),n=Te(()=>e.href),r=Ee(n),i=Oe(),o=m(()=>{let t=n();if(t===void 0)return[!1,!1];let r=L(t.split(/[?#]/,1)[0]).toLowerCase().replace(/\/$/,``),a=decodeURI(L(i.pathname).toLowerCase().replace(/\/$/,``));return[e.end?r===a:a.startsWith(r+`/`)||a===r,r===a]});return(()=>{var n=Qe();return ee(n,a(t,{get href(){return r()||e.href},get state(){return JSON.stringify(e.state)},get classList(){return{...e.class&&{[e.class]:!0},[e.inactiveClass]:!o()[0],[e.activeClass]:o()[0],...t.classList}},link:``,get"aria-current"(){return o()[1]?`page`:void 0}}),!1,!1),n})()}function q(){return w(()=>({queryKey:[`meta`],queryFn:()=>fetch(`${S()}/api/meta`).then(e=>e.json()),staleTime:1/0}))}var[$e,et]=g(null),[tt,J]=g(!1),Y=null,X=0;function nt(){Y=new EventSource(`${S()}/api/stream`),Y.addEventListener(`stats`,e=>{try{et(JSON.parse(e.data))}catch{}}),Y.onopen=()=>J(!0),Y.onerror=()=>J(!1)}function rt(){Y?.close(),Y=null,J(!1),et(null)}function it(e=!0){return s(()=>{e&&(X===0&&nt(),X+=1,O(()=>{--X,X===0&&rt()}))}),{stats:$e,connected:tt}}var at=`/wurk-assets/assets/wurk-logo-Vy3xW4K0.png`,ot=M(`<div class=nav-overlay style=position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:99;display:none>`),st=M(`<img alt=Wurk style="height:36px;width:auto;display:block;flex:none;filter:drop-shadow(0 2px 6px rgba(0,0,0,0.45))">`),ct=M(`<span style="font-family:var(--font-mono);font-size:10px;font-weight:500;letter-spacing:0.02em;color:var(--text-muted);background:var(--surface-strong);border:1px solid var(--border);border-radius:5px;padding:0.05rem 0.3rem">v`),lt=M(`<span class=nav-label style=display:flex;flex-direction:column;line-height:1.15><span style=display:inline-flex;align-items:baseline;gap:0.4rem><span style=font-size:18px;font-weight:700;letter-spacing:-0.02em;color:var(--text-bright)>Wurk</span></span><span style=font-family:var(--font-mono);font-size:9px;font-weight:500;letter-spacing:0.1em;text-transform:uppercase;color:var(--text-muted);margin-top:2px;display:inline-flex;align-items:center;gap:5px><span class=live-dot style=width:6px;height:6px>`),ut=M(`<li aria-hidden=true style="padding:0.5rem 0.95rem 0.2rem;margin-top:0.4rem"><div style=height:1px;background:var(--border);margin-bottom:0.45rem></div><span class=nav-label style=font-size:10px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:var(--text-muted)>`),dt=M(`<nav class=wurk-nav style="position:fixed;top:0;inset-inline-start:0;bottom:0;background:var(--surface);border-inline-end:1px solid var(--border);display:flex;flex-direction:column;z-index:100;overflow-y:auto;overflow-x:hidden"><div class=nav-brand-wrap style="padding:1.25rem 1rem 0.75rem"></div><div style="height:1px;background:var(--border);margin:0 1rem 0.5rem"></div><ul style=list-style:none;flex:1></ul><div style="height:1px;background:var(--border);margin:0.5rem 1rem 0"></div><button type=button class=nav-collapse-toggle style="display:flex;align-items:center;gap:0.625rem;width:calc(100% - 16px);padding:0.5rem 0.85rem;margin:4px 8px;border-radius:8px;border:none;background:transparent;color:var(--text-muted);font-size:13px;cursor:pointer;font:inherit"><i aria-hidden=true></i><span class=nav-label></span></button><div style="height:1px;background:var(--border);margin:0.5rem 1rem"></div><a href=https://github.com/developerz-ai/wurk target=_blank rel="noopener noreferrer"class=wurk-navlink style="display:flex;align-items:center;gap:0.625rem;padding:0.5rem 0.85rem;margin:2px 8px 0.85rem;border-radius:8px;color:var(--text-muted);font-size:13px;text-decoration:none;transition:background var(--dur-base) var(--ease-standard), color var(--dur-base) var(--ease-standard)"><i class="fa-brands fa-github"style=font-size:16px;width:20px;text-align:center;flex:none></i><span class=nav-label>GitHub`),ft=M(`<style>
3
+ .wurk-nav { width: var(--nav-width); transition: width var(--dur-page) var(--ease-emphasized); }
4
+ /* Base nav-item chrome (was an inline style function under React; Solid's
5
+ &lt;A> toggles the .active class, so the active look lives in CSS now). */
6
+ .wurk-navlink {
7
+ display: flex;
8
+ align-items: center;
9
+ gap: 0.625rem;
10
+ padding: 0.5rem 0.85rem;
11
+ border-radius: 8px;
12
+ margin: 2px 8px;
13
+ color: var(--text);
14
+ background: transparent;
15
+ box-shadow: none;
16
+ font-weight: 400;
17
+ font-size: 14px;
18
+ text-decoration: none;
19
+ transition: background var(--dur-base) var(--ease-standard), color var(--dur-base) var(--ease-standard), box-shadow var(--dur-base) var(--ease-standard);
20
+ }
21
+ /* Text stays white for every item; the active one is marked by a subtle
22
+ dark raised pill + hairline, not a bright white box. */
23
+ .wurk-navlink.active {
24
+ color: var(--accent);
25
+ background: var(--surface-strong);
26
+ box-shadow: inset 0 0 0 1px var(--border);
27
+ font-weight: 600;
28
+ }
29
+ .wurk-navlink:hover {
30
+ background: var(--surface-hover) !important;
31
+ color: var(--accent) !important;
32
+ text-decoration: none !important;
33
+ }
34
+ /* The collapse toggle is a control, not a nav item — it only shifts
35
+ colour on hover, no filled pill/active box. */
36
+ .nav-collapse-toggle:hover { color: var(--text) !important; }
37
+ .nav-label { white-space: nowrap; }
38
+ .wurk-navlink__icon { width: 24px; font-size: 18px; text-align: center; flex: none; transition: background var(--dur-base) var(--ease-standard), color var(--dur-base) var(--ease-standard), transform var(--dur-base) var(--ease-standard); }
39
+ /* Subtle lift on hover so the nav feels reactive. */
40
+ .wurk-navlink:hover .wurk-navlink__icon { transform: scale(1.12); }
41
+ @media (prefers-reduced-motion: reduce) {
42
+ .wurk-navlink__icon { transition: background var(--dur-base) var(--ease-standard), color var(--dur-base) var(--ease-standard); }
43
+ .wurk-navlink:hover .wurk-navlink__icon { transform: none; }
44
+ }
45
+ @media (max-width: 767px) {
46
+ .wurk-nav {
47
+ transform: translateX(-100%);
48
+ transition: transform var(--dur-slow) var(--ease-standard);
49
+ }
50
+ .wurk-nav--open {
51
+ transform: translateX(0);
52
+ }
53
+ /* RTL: the rail is pinned to the right edge, so it slides off to the
54
+ right when closed. */
55
+ [dir="rtl"] .wurk-nav {
56
+ transform: translateX(100%);
57
+ }
58
+ [dir="rtl"] .wurk-nav--open {
59
+ transform: translateX(0);
60
+ }
61
+ .nav-overlay {
62
+ display: block !important;
63
+ }
64
+ /* The collapse control is desktop-only; on mobile the nav is a
65
+ full-width drawer toggled by the hamburger. */
66
+ .nav-collapse-toggle { display: none !important; }
67
+ }
68
+ /* Desktop: a fixed-width rail the user pins open or collapsed (icons only)
69
+ via the toggle button — no hover-driven movement. The width change
70
+ animates; prefers-reduced-motion drops the animation. */
71
+ @media (min-width: 768px) {
72
+ .wurk-nav { transform: none !important; }
73
+ .wurk-nav--collapsed { width: var(--nav-rail); }
74
+ /* !important: the brand wordmark span carries an inline display:flex,
75
+ which a plain class rule can't beat — without this the "Wurk /
76
+ System Status" text stays rendered in the 64px rail and gets clipped. */
77
+ .wurk-nav--collapsed .nav-label { display: none !important; }
78
+ /* Collapsed: center each icon. The glyph lives in a FIXED 38px round
79
+ container at all times, so idle → hover → active only swaps its
80
+ background colour, never its size — the icon never shifts when you
81
+ click it, and the highlight is always a circle, never a square link
82
+ box. Tight link padding keeps the icons from drifting apart. */
83
+ /* !important: the &lt;A> carries an inline padding (0.5rem 0.85rem)
84
+ that outranks any class rule. Zero it in the rail so the fixed-size
85
+ round glyph container — not link padding — defines the footprint;
86
+ the horizontal inline padding would otherwise cramp the circle in
87
+ the 64px rail and make it shift when the active background appears.
88
+ width/margin pin each control to a fixed rail-width box anchored at
89
+ the nav's start edge, so the centred glyph sits on a constant x
90
+ (rail/2). Without this, justify-content:center re-centres against the
91
+ *animating* nav width (248→64px), so the icons leap right on collapse
92
+ and glide back — a visible jump (#272 follow-up). */
93
+ .wurk-nav--collapsed .wurk-navlink,
94
+ .wurk-nav--collapsed .nav-collapse-toggle {
95
+ justify-content: center;
96
+ width: var(--nav-rail) !important;
97
+ margin-inline: 0 !important;
98
+ padding: 0 !important;
99
+ }
100
+ .wurk-nav--collapsed .wurk-navlink__icon {
101
+ display: grid;
102
+ place-items: center;
103
+ width: 36px;
104
+ height: 36px;
105
+ border-radius: 50%;
106
+ }
107
+ /* The link/button never fills — the round glyph container carries the
108
+ highlight instead of a boxy pill. */
109
+ .wurk-nav--collapsed .wurk-navlink:hover,
110
+ .wurk-nav--collapsed .wurk-navlink.active {
111
+ background: transparent !important;
112
+ box-shadow: none !important;
113
+ }
114
+ .wurk-nav--collapsed .wurk-navlink:hover .wurk-navlink__icon {
115
+ background: var(--surface-hover);
116
+ color: var(--accent);
117
+ }
118
+ .wurk-nav--collapsed .wurk-navlink.active .wurk-navlink__icon {
119
+ background: var(--surface-strong);
120
+ box-shadow: inset 0 0 0 1px var(--border);
121
+ color: var(--accent);
122
+ }
123
+ /* Collapsed: drop the wordmark and show just the logo mark, centered
124
+ with balanced padding so it sits squarely in the rail instead of
125
+ hugging the top-left. */
126
+ /* !important: the wrap carries an inline padding (1.25rem 1rem 0.75rem)
127
+ whose 1rem sides a plain class rule can't beat — leaving it in place
128
+ offsets the fixed-width brand box below by 16px, so the centred logo
129
+ lands right-of-centre in the rail. Zero the sides so the box anchors
130
+ at the nav's start edge and the logo sits on the rail mid-line. */
131
+ .wurk-nav--collapsed .nav-brand-wrap { padding: 0.9rem 0 !important; }
132
+ /* Same fixed rail-width box as the nav controls above, so the logo
133
+ centres on the constant rail mid-line instead of leaping right
134
+ against the animating nav width on collapse. */
135
+ .wurk-nav--collapsed .nav-brand-wrap a { justify-content: center; gap: 0; width: var(--nav-rail); }
136
+ .wurk-nav--collapsed .nav-brand-wrap img { height: 38px !important; }
137
+ }
138
+ @media (min-width: 768px) and (prefers-reduced-motion: reduce) {
139
+ .wurk-nav { transition: none; }
140
+ }
141
+ `),pt=M(`<i aria-hidden=true>`),mt=M(`<span class=nav-label>`),ht=M(`<li>`),gt=M(`<i class="fa-solid fa-puzzle-piece wurk-navlink__icon"aria-hidden=true>`),_t=[{to:`/`,label:k(`nav.dashboard`),icon:`fa-gauge-high`,end:!0},{to:`/queues`,label:k(`nav.queues`),icon:`fa-layer-group`,end:!1},{to:`/retries`,label:k(`nav.retries`),icon:`fa-rotate-right`,end:!1},{to:`/scheduled`,label:k(`nav.scheduled`),icon:`fa-clock`,end:!1},{to:`/dead`,label:k(`nav.dead`),icon:`fa-skull`,end:!1},{to:`/busy`,label:k(`nav.busy`),icon:`fa-gears`,end:!1},{to:`/batches`,label:k(`nav.batches`),icon:`fa-table-cells-large`,end:!1},{to:`/limiters`,label:k(`nav.limiters`),icon:`fa-gauge`,end:!1},{to:`/cron`,label:k(`nav.cron`),icon:`fa-stopwatch`,end:!1},{to:`/metrics`,label:k(`nav.metrics`),icon:`fa-chart-line`,end:!1},{to:`/profiles`,label:k(`nav.profiles`),icon:`fa-fire`,end:!1},{to:`/search`,label:k(`nav.search`),icon:`fa-magnifying-glass`,end:!1}];function vt(e){let n=q(),r=()=>n.data?.custom_tabs??[],{connected:a}=it(),o=()=>e.onClose();return[i(t,{get when(){return e.open},get children(){var e=ot();return e.$$click=o,e}}),(()=>{var s=dt(),c=s.firstChild,l=c.nextSibling.nextSibling,u=l.nextSibling.nextSibling,f=u.firstChild,p=f.nextSibling;return u.nextSibling.nextSibling.firstChild,y(c,i(K,{href:`/`,end:!0,onClick:o,"aria-label":`Wurk — dashboard home`,style:{color:`var(--text)`,"text-decoration":`none`,display:`flex`,"align-items":`center`,gap:`0.6rem`},get children(){return[(()=>{var e=st();return x(e,`src`,at),e})(),(()=>{var e=lt(),r=e.firstChild;r.firstChild;var o=r.nextSibling,s=o.firstChild;return y(r,i(t,{get when(){return n.data?.version},get children(){var e=ct();return e.firstChild,y(e,()=>n.data?.version,null),e}}),null),y(o,(()=>{var e=j(()=>!!a());return()=>e()?k(`nav.status_active`):k(`nav.status_inactive`)})(),null),N(e=>se(s,`background`,a()?void 0:`var(--text-muted)`)),e})()]}})),y(l,i(d,{each:_t,children:e=>(()=>{var t=ht();return y(t,i(K,{get href(){return e.to},get end(){return e.end},onClick:o,get title(){return e.label},class:`wurk-navlink`,activeClass:`active`,get children(){return[(()=>{var t=pt();return N(()=>E(t,`fa-solid ${e.icon} wurk-navlink__icon`)),t})(),(()=>{var t=mt();return y(t,()=>e.label),t})()]}})),t})()}),null),y(l,i(t,{get when(){return r().length>0},get children(){var e=ut(),t=e.firstChild.nextSibling;return y(t,()=>k(`nav.extensions`)),e}}),null),y(l,i(d,{get each(){return r()},children:e=>(()=>{var t=ht();return y(t,i(K,{get href(){return`/ext/${e.path.replace(/\/+$/,``)}`},onClick:o,get title(){return e.name},class:`wurk-navlink`,activeClass:`active`,get children(){return[gt(),(()=>{var t=mt();return y(t,()=>e.name),t})()]}})),t})()}),null),u.$$click=()=>e.onToggleCollapse(),y(p,()=>k(`nav.collapse`)),N(t=>{var n=!!e.open,r=!!e.collapsed,i=e.collapsed?k(`nav.expand`):k(`nav.collapse`),a=!e.collapsed,o=e.collapsed?k(`nav.expand`):k(`nav.collapse`),c=`fa-solid ${e.collapsed?`fa-angles-right`:`fa-angles-left`} wurk-navlink__icon`;return n!==t.e&&s.classList.toggle(`wurk-nav--open`,t.e=n),r!==t.t&&s.classList.toggle(`wurk-nav--collapsed`,t.t=r),i!==t.a&&x(u,`aria-label`,t.a=i),a!==t.o&&x(u,`aria-expanded`,t.o=a),o!==t.i&&x(u,`title`,t.i=o),c!==t.n&&E(f,t.n=c),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),s})(),ft()]}T([`click`]);var yt=M(`<div class=empty-state role=alert><div style=font-size:15px;font-weight:600;color:var(--text);margin-bottom:0.4rem></div><p style="max-width:26rem;margin:0 auto 1.1rem;font-size:13px"></p><button class="btn btn-accent">`);function bt(e){return i(r,{fallback:e=>(console.error(`Dashboard route error:`,e),(()=>{var e=yt(),t=e.firstChild,n=t.nextSibling,r=n.nextSibling;return y(t,()=>k(`common.load_failed`)),y(n,()=>k(`common.load_failed_hint`)),r.$$click=()=>window.location.reload(),y(r,()=>k(`common.reload`)),e})()),get children(){return e.children}})}T([`click`]);var Z=class extends Error{status;constructor(e){super(`Request failed (${e})`),this.name=`RequestError`,this.status=e}};async function xt(e,t){let n=await fetch(e,{method:`POST`,headers:t===void 0?{}:{"Content-Type":`application/json`},body:t===void 0?void 0:JSON.stringify(t)});if(!n.ok)throw new Z(n.status);return n}async function St(e){let t=await fetch(e);if(!t.ok)throw new Z(t.status);return t.json()}var Ct=M(`<div class=toasts role=region aria-live=polite>`),wt=M(`<div role=alert><i aria-hidden=true></i><span class=toast__msg></span><button type=button class=toast__close><i class="fa-solid fa-xmark"aria-hidden=true>`),[Tt,Et]=g([]),Dt=6e3,Q=5,Ot=0;function kt(e,t=`error`){let n=Ot+=1,r=typeof window<`u`?window.setTimeout(()=>At(n),Dt):void 0;return Et(i=>{let a=[...i,{id:n,kind:t,message:e,timer:r}];if(a.length<=Q)return a;let o=a.slice(0,a.length-Q);for(let e of o)e.timer!==void 0&&window.clearTimeout(e.timer);return a.slice(a.length-Q)}),n}function At(e){Et(t=>{let n=t.find(t=>t.id===e);return n?.timer!==void 0&&window.clearTimeout(n.timer),t.filter(t=>t.id!==e)})}function jt(e){let t=e instanceof Z?e.status:0;kt(k(t===403?`toast.readonly`:t===404?`toast.gone`:t===503?`toast.unavailable`:`toast.failed`),`error`)}var Mt={error:`fa-circle-exclamation`,success:`fa-circle-check`};function Nt(){return(()=>{var e=Ct();return y(e,i(d,{get each(){return Tt()},children:e=>(()=>{var t=wt(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return y(r,()=>e.message),i.$$click=()=>At(e.id),N(r=>{var a=`toast toast--${e.kind}`,o=`fa-solid ${Mt[e.kind]} toast__icon`,s=k(`toast.dismiss`);return a!==r.e&&E(t,r.e=a),o!==r.t&&E(n,r.t=o),s!==r.a&&x(i,`aria-label`,r.a=s),r},{e:void 0,t:void 0,a:void 0}),t})()})),N(()=>x(e,`aria-label`,k(`toast.region`))),e})()}T([`click`]);var Pt=`modulepreload`,Ft=function(e){return`/wurk-assets/`+e},It={},$=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Ft(t,n),t=s(t),t in It)return;It[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Pt,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Lt=M(`<div role=status style="background:var(--warning);color:#1a1a1a;text-align:center;padding:0.5rem 1rem;font-weight:600;font-size:13px;letter-spacing:0.01em;border-radius:8px;margin-bottom:1.75rem">`),Rt=M(`<div style=display:flex;min-height:100vh><button class=hamburger aria-label="Toggle navigation"style=position:fixed;top:12px;inset-inline-start:12px;z-index:200><i class="fa-solid fa-bars"></i></button><main class=main-content style=flex:1;padding:1.5rem>`),zt=_(()=>$(()=>import(`./Dashboard-DNLu_WCg.js`),__vite__mapDeps([0,1,2,3,4]))),Bt=_(()=>$(()=>import(`./Queues-CIyPevOy.js`),__vite__mapDeps([5,1,2,6,7,3,8,9,10]))),Vt=_(()=>$(()=>import(`./Retries-DopwXkXl.js`),__vite__mapDeps([11,1,2,6,7,3,9,10,8,12]))),Ht=_(()=>$(()=>import(`./Scheduled-1-Z7i1zE.js`),__vite__mapDeps([13,1,2,6,7,3,9,10,8,12]))),Ut=_(()=>$(()=>import(`./Dead-dZ7VGlKS.js`),__vite__mapDeps([14,1,2,6,7,3,9,10,8,12]))),Wt=_(()=>$(()=>import(`./Busy-DC5EGM0g.js`),__vite__mapDeps([15,1,2,3,8,9]))),Gt=_(()=>$(()=>import(`./Batches-Cxan6Ngw.js`),__vite__mapDeps([16,1,2,6,7,3]))),Kt=_(()=>$(()=>import(`./BatchDetail-CUXJUQ3Q.js`),__vite__mapDeps([17,1,2]))),qt=_(()=>$(()=>import(`./Limiters-Cb4PKXNR.js`),__vite__mapDeps([18,1,6,7,3]))),Jt=_(()=>$(()=>import(`./Cron-Dlt8tXJA.js`),__vite__mapDeps([19,1,2,7,3,8]))),Yt=_(()=>$(()=>import(`./Metrics-CCGzgCsT.js`),__vite__mapDeps([20,1,2,3,8,4]))),Xt=_(()=>$(()=>import(`./Profiles-BnS82nR_.js`),__vite__mapDeps([21,1]))),Zt=_(()=>$(()=>import(`./Search-ByA6eTma.js`),__vite__mapDeps([22,1,2,3,9]))),Qt=_(()=>$(()=>import(`./Extension-DaFpEIJf.js`),__vite__mapDeps([23,1,3]))),$t=new D({defaultOptions:{queries:{staleTime:5e3,retry:1}}});function en(){let e=q();return i(t,{get when(){return e.data?.read_only},get children(){var t=Lt();return y(t,()=>e.data?.read_only_message||k(`readonly.banner`)),t}})}var tn=`wurk-nav-collapsed`;function nn(e){let[t,n]=g(!1),[r,a]=g((()=>{try{return typeof localStorage<`u`&&localStorage.getItem(tn)===`1`}catch{return!1}})()),[o,s]=g(typeof window<`u`&&window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches===!0);l(()=>{if(typeof window>`u`)return;let e=window.matchMedia?.(`(prefers-reduced-motion: reduce)`);if(!e)return;let t=()=>s(e.matches);e.addEventListener(`change`,t),O(()=>e.removeEventListener(`change`,t))});let c=()=>a(e=>{let t=!e;try{localStorage.setItem(tn,t?`1`:`0`)}catch{}return t});return i(oe,{client:$t,get children(){var a=Rt(),s=a.firstChild,l=s.nextSibling;return s.$$click=()=>n(e=>!e),y(l,i(en,{}),null),y(l,i(bt,{get children(){return i(re,{get fallback(){return i(ae,{})},get children(){return e.children}})}}),null),y(a,i(vt,{get open(){return t()},onClose:()=>n(!1),get collapsed(){return r()},onToggleCollapse:c}),null),y(a,i(Nt,{}),null),N(e=>{var t=r()?`var(--nav-rail)`:`var(--nav-width)`,n=o()?`none`:`margin var(--dur-page) var(--ease-emphasized)`;return t!==e.e&&se(l,`margin-inline-start`,e.e=t),n!==e.t&&se(l,`transition`,e.t=n),e},{e:void 0,t:void 0}),a}})}function rn(){return i(Ze,{root:nn,get base(){return S()},get children(){return[i(W,{path:`/`,component:zt}),i(W,{path:`/queues`,component:Bt}),i(W,{path:`/retries`,component:Vt}),i(W,{path:`/scheduled`,component:Ht}),i(W,{path:`/dead`,component:Ut}),i(W,{path:`/busy`,component:Wt}),i(W,{path:`/batches`,component:Gt}),i(W,{path:`/batches/:bid`,component:Kt}),i(W,{path:`/limiters`,component:qt}),i(W,{path:`/cron`,component:Jt}),i(W,{path:`/metrics`,component:Yt}),i(W,{path:`/profiles`,component:Xt}),i(W,{path:`/search`,component:Zt}),i(W,{path:`/ext/:tab`,component:Qt})]}})}T([`click`]);var an=M(`<div style=padding:2rem;text-align:center;color:var(--text-muted);font-size:14px;line-height:1.6>`);document.documentElement.dir=b,document.documentElement.lang=ie;var on=window.self!==window.top&&new URLSearchParams(window.location.search).has(`wurk_ext_embed`),sn=document.getElementById(`wurk-root`);sn&&(sn.dir=b,ce(()=>on?(()=>{var e=an();return y(e,()=>k(`extension.notRendered`)),e})():i(rn,{}),sn));export{q as a,Ae as c,it as i,St as n,K as o,xt as r,ke as s,jt as t};
@@ -1 +1 @@
1
- import{L as e,_ as t,g as n,s as r,w as i,x as a,z as o}from"./Skeleton-DzR7XNxz.js";import{c as s}from"./index-D_lSDwKw.js";var c=i(`<div class=pagination><button class=btn></button><span> <!> <!> </span><button class=btn>`);function l(e){let n=()=>Math.max(1,Math.ceil(e.total/e.count));return(()=>{var i=c(),s=i.firstChild,l=s.nextSibling,u=l.firstChild,d=u.nextSibling,f=d.nextSibling.nextSibling;f.nextSibling;var p=l.nextSibling;return s.$$click=()=>e.onChange(e.page-1),t(s,()=>r(`actions.prev`)),t(l,()=>r(`common.page`),u),t(l,()=>e.page,d),t(l,()=>r(`common.of`),f),t(l,n,null),p.$$click=()=>e.onChange(e.page+1),t(p,()=>r(`actions.next`)),o(t=>{var r=e.page<=1,i=e.page<=1?.4:1,o=e.page>=n(),c=e.page>=n()?.4:1;return r!==t.e&&(s.disabled=t.e=r),i!==t.t&&a(s,`opacity`,t.t=i),o!==t.a&&(p.disabled=t.a=o),c!==t.o&&a(p,`opacity`,t.o=c),t},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()}n([`click`]);function u(){let[e,t]=s();return[()=>{let t=parseInt(e.page??`1`,10);return Number.isFinite(t)&&t>0?t:1},e=>t({page:e<=1?void 0:String(e)})]}function d(t,n,r,i){e(()=>{t()>1&&r()&&i()&&n(1)})}export{u as n,l as r,d as t};
1
+ import{L as e,_ as t,g as n,s as r,w as i,x as a,z as o}from"./Skeleton-bC7HfQ9r.js";import{c as s}from"./index-B1N8hQUh.js";var c=i(`<div class=pagination><button class=btn></button><span> <!> <!> </span><button class=btn>`);function l(e){let n=()=>Math.max(1,Math.ceil(e.total/e.count));return(()=>{var i=c(),s=i.firstChild,l=s.nextSibling,u=l.firstChild,d=u.nextSibling,f=d.nextSibling.nextSibling;f.nextSibling;var p=l.nextSibling;return s.$$click=()=>e.onChange(e.page-1),t(s,()=>r(`actions.prev`)),t(l,()=>r(`common.page`),u),t(l,()=>e.page,d),t(l,()=>r(`common.of`),f),t(l,n,null),p.$$click=()=>e.onChange(e.page+1),t(p,()=>r(`actions.next`)),o(t=>{var r=e.page<=1,i=e.page<=1?.4:1,o=e.page>=n(),c=e.page>=n()?.4:1;return r!==t.e&&(s.disabled=t.e=r),i!==t.t&&a(s,`opacity`,t.t=i),o!==t.a&&(p.disabled=t.a=o),c!==t.o&&a(p,`opacity`,t.o=c),t},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()}n([`click`]);function u(){let[e,t]=s();return[()=>{let t=parseInt(e.page??`1`,10);return Number.isFinite(t)&&t>0?t:1},e=>t({page:e<=1?void 0:String(e)})]}function d(t,n,r,i){e(()=>{t()>1&&r()&&i()&&n(1)})}export{u as n,l as r,d as t};
@@ -1 +1 @@
1
- import{C as e,R as t,V as n,_ as r,b as i,g as a,h as o,w as s,z as c}from"./Skeleton-DzR7XNxz.js";var l=s(`<th class=th-sortable><button type=button class=th-sortable__btn><i aria-hidden=true>`);function u(t){let n=()=>t.sort.key===t.sortKey,a=()=>n()?t.sort.dir===`asc`?`fa-arrow-up-short-wide`:`fa-arrow-down-wide-short`:`fa-sort`;return(()=>{var s=l(),u=s.firstChild,d=u.firstChild;return u.$$click=()=>t.onSort(t.sortKey),r(u,()=>t.label,d),c(r=>{var c=n()?t.sort.dir===`asc`?`ascending`:`descending`:`none`,l=t.style,u=`fa-solid ${a()} th-sortable__icon${n()?` is-active`:``}`;return c!==r.e&&i(s,`aria-sort`,r.e=c),r.t=e(s,l,r.t),u!==r.a&&o(d,r.a=u),r},{e:void 0,t:void 0,a:void 0}),s})()}a([`click`]);function d(e,r,i){let[a,o]=n(i??{key:null,dir:`asc`});return{sorted:t(()=>{let t=a(),n=t.key?r[t.key]:void 0,i=e();if(!n)return i;let o=[...i];return o.sort((e,r)=>{let i=n(e),a=n(r);if(i==null&&a==null)return 0;if(i==null)return 1;if(a==null)return-1;let o=typeof i==`number`&&typeof a==`number`?i-a:String(i).localeCompare(String(a),void 0,{numeric:!0,sensitivity:`base`});return t.dir===`asc`?o:-o}),o}),sort:a,toggle:e=>o(t=>t.key===e?{key:e,dir:t.dir===`asc`?`desc`:`asc`}:{key:e,dir:`asc`})}}export{u as n,d as t};
1
+ import{C as e,R as t,V as n,_ as r,b as i,g as a,h as o,w as s,z as c}from"./Skeleton-bC7HfQ9r.js";var l=s(`<th class=th-sortable><button type=button class=th-sortable__btn><i aria-hidden=true>`);function u(t){let n=()=>t.sort.key===t.sortKey,a=()=>n()?t.sort.dir===`asc`?`fa-arrow-up-short-wide`:`fa-arrow-down-wide-short`:`fa-sort`;return(()=>{var s=l(),u=s.firstChild,d=u.firstChild;return u.$$click=()=>t.onSort(t.sortKey),r(u,()=>t.label,d),c(r=>{var c=n()?t.sort.dir===`asc`?`ascending`:`descending`:`none`,l=t.style,u=`fa-solid ${a()} th-sortable__icon${n()?` is-active`:``}`;return c!==r.e&&i(s,`aria-sort`,r.e=c),r.t=e(s,l,r.t),u!==r.a&&o(d,r.a=u),r},{e:void 0,t:void 0,a:void 0}),s})()}a([`click`]);function d(e,r,i){let[a,o]=n(i??{key:null,dir:`asc`});return{sorted:t(()=>{let t=a(),n=t.key?r[t.key]:void 0,i=e();if(!n)return i;let o=[...i];return o.sort((e,r)=>{let i=n(e),a=n(r);if(i==null&&a==null)return 0;if(i==null)return 1;if(a==null)return-1;let o=typeof i==`number`&&typeof a==`number`?i-a:String(i).localeCompare(String(a),void 0,{numeric:!0,sensitivity:`base`});return t.dir===`asc`?o:-o}),o}),sort:a,toggle:e=>o(t=>t.key===e?{key:e,dir:t.dir===`asc`?`desc`:`asc`}:{key:e,dir:`asc`})}}export{u as n,d as t};
@@ -40,8 +40,8 @@
40
40
  <meta name="twitter:image" content="/wurk-assets/og-image.png" />
41
41
 
42
42
  <title>Wurk — Background Jobs</title>
43
- <script type="module" crossorigin src="/wurk-assets/assets/index-D_lSDwKw.js"></script>
44
- <link rel="modulepreload" crossorigin href="/wurk-assets/assets/Skeleton-DzR7XNxz.js">
43
+ <script type="module" crossorigin src="/wurk-assets/assets/index-B1N8hQUh.js"></script>
44
+ <link rel="modulepreload" crossorigin href="/wurk-assets/assets/Skeleton-bC7HfQ9r.js">
45
45
  <link rel="stylesheet" crossorigin href="/wurk-assets/assets/index-BdiUEDXX.css">
46
46
  </head>
47
47
  <body>
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "1.4.0",
3
- "timestamp": "2026-08-02T20:09:35.104Z"
2
+ "version": "1.5.0",
3
+ "timestamp": "2026-08-08T00:49:21.562Z"
4
4
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wurk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - developerz.ai
@@ -213,6 +213,7 @@ files:
213
213
  - lib/wurk/embedded.rb
214
214
  - lib/wurk/encryption.rb
215
215
  - lib/wurk/engine.rb
216
+ - lib/wurk/errors.rb
216
217
  - lib/wurk/fetcher.rb
217
218
  - lib/wurk/fetcher/reaper.rb
218
219
  - lib/wurk/fetcher/reliable.rb
@@ -247,6 +248,8 @@ files:
247
248
  - lib/wurk/lua/loader.rb
248
249
  - lib/wurk/manager.rb
249
250
  - lib/wurk/metrics.rb
251
+ - lib/wurk/metrics/accumulator.rb
252
+ - lib/wurk/metrics/flusher.rb
250
253
  - lib/wurk/metrics/history.rb
251
254
  - lib/wurk/metrics/query.rb
252
255
  - lib/wurk/metrics/queue_rollup.rb
@@ -281,6 +284,7 @@ files:
281
284
  - lib/wurk/sentry/job_context.rb
282
285
  - lib/wurk/sentry/middleware.rb
283
286
  - lib/wurk/sentry/retry_policy.rb
287
+ - lib/wurk/shutdown_gate.rb
284
288
  - lib/wurk/sorted_entry.rb
285
289
  - lib/wurk/stats.rb
286
290
  - lib/wurk/swarm.rb
@@ -306,27 +310,27 @@ files:
306
310
  - lib/wurk/worker.rb
307
311
  - lib/wurk/worker/setter.rb
308
312
  - vendor/assets/dashboard/apple-touch-icon.png
309
- - vendor/assets/dashboard/assets/ArgsValue-D74zX0MI.js
310
- - vendor/assets/dashboard/assets/BatchDetail-OmC5NPgw.js
311
- - vendor/assets/dashboard/assets/Batches-CIpai7St.js
312
- - vendor/assets/dashboard/assets/Busy-A_kwSR6Q.js
313
- - vendor/assets/dashboard/assets/Cron-BG7HTqlp.js
314
- - vendor/assets/dashboard/assets/Dashboard-A_ToqHoo.js
315
- - vendor/assets/dashboard/assets/Dead-8J21jMyK.js
316
- - vendor/assets/dashboard/assets/Extension-B4Q9FIQu.js
317
- - vendor/assets/dashboard/assets/FilterBox-Fh_Ae7UW.js
318
- - vendor/assets/dashboard/assets/JobDetailModal-Ceng0PMB.js
319
- - vendor/assets/dashboard/assets/Limiters-CruDWvNZ.js
320
- - vendor/assets/dashboard/assets/Metrics-CIT7VCoN.js
321
- - vendor/assets/dashboard/assets/Modal-CN3rdKA_.js
322
- - vendor/assets/dashboard/assets/PageHeader-C44KNMGm.js
323
- - vendor/assets/dashboard/assets/Profiles-xEVTyS2N.js
324
- - vendor/assets/dashboard/assets/Queues-D86FYohJ.js
325
- - vendor/assets/dashboard/assets/Retries-Bz1O1D-i.js
326
- - vendor/assets/dashboard/assets/Scheduled-B6h2akTu.js
327
- - vendor/assets/dashboard/assets/Search-OOu22e5s.js
328
- - vendor/assets/dashboard/assets/Skeleton-DzR7XNxz.js
329
- - vendor/assets/dashboard/assets/charts-BVHHGof7.js
313
+ - vendor/assets/dashboard/assets/ArgsValue-CcR2ya6e.js
314
+ - vendor/assets/dashboard/assets/BatchDetail-CUXJUQ3Q.js
315
+ - vendor/assets/dashboard/assets/Batches-Cxan6Ngw.js
316
+ - vendor/assets/dashboard/assets/Busy-DC5EGM0g.js
317
+ - vendor/assets/dashboard/assets/Cron-Dlt8tXJA.js
318
+ - vendor/assets/dashboard/assets/Dashboard-DNLu_WCg.js
319
+ - vendor/assets/dashboard/assets/Dead-dZ7VGlKS.js
320
+ - vendor/assets/dashboard/assets/Extension-DaFpEIJf.js
321
+ - vendor/assets/dashboard/assets/FilterBox-CO3aYWIq.js
322
+ - vendor/assets/dashboard/assets/JobDetailModal-DSWbT6G0.js
323
+ - vendor/assets/dashboard/assets/Limiters-Cb4PKXNR.js
324
+ - vendor/assets/dashboard/assets/Metrics-CCGzgCsT.js
325
+ - vendor/assets/dashboard/assets/Modal-B86q6ruL.js
326
+ - vendor/assets/dashboard/assets/PageHeader-fPrCcp_-.js
327
+ - vendor/assets/dashboard/assets/Profiles-BnS82nR_.js
328
+ - vendor/assets/dashboard/assets/Queues-CIyPevOy.js
329
+ - vendor/assets/dashboard/assets/Retries-DopwXkXl.js
330
+ - vendor/assets/dashboard/assets/Scheduled-1-Z7i1zE.js
331
+ - vendor/assets/dashboard/assets/Search-ByA6eTma.js
332
+ - vendor/assets/dashboard/assets/Skeleton-bC7HfQ9r.js
333
+ - vendor/assets/dashboard/assets/charts-CLLzJ7vK.js
330
334
  - vendor/assets/dashboard/assets/fa-brands-400-Bs6tcqqs.woff2
331
335
  - vendor/assets/dashboard/assets/fa-regular-400-DRN8N0d1.woff2
332
336
  - vendor/assets/dashboard/assets/fa-solid-900-IAB4Droh.woff2
@@ -339,8 +343,8 @@ files:
339
343
  - vendor/assets/dashboard/assets/geist-sans-latin-600-normal-DFOURf8L.woff2
340
344
  - vendor/assets/dashboard/assets/geist-sans-latin-700-normal-BmN9tIp5.woff2
341
345
  - vendor/assets/dashboard/assets/geist-sans-latin-700-normal-CjScfYeH.woff
346
+ - vendor/assets/dashboard/assets/index-B1N8hQUh.js
342
347
  - vendor/assets/dashboard/assets/index-BdiUEDXX.css
343
- - vendor/assets/dashboard/assets/index-D_lSDwKw.js
344
348
  - vendor/assets/dashboard/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff
345
349
  - vendor/assets/dashboard/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2
346
350
  - vendor/assets/dashboard/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff
@@ -350,8 +354,8 @@ files:
350
354
  - vendor/assets/dashboard/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2
351
355
  - vendor/assets/dashboard/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff
352
356
  - vendor/assets/dashboard/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff
353
- - vendor/assets/dashboard/assets/useResetPageOnEmpty-dVPGEWzn.js
354
- - vendor/assets/dashboard/assets/useSort-BeYbztkN.js
357
+ - vendor/assets/dashboard/assets/useResetPageOnEmpty-DpBjkf6_.js
358
+ - vendor/assets/dashboard/assets/useSort-DvpwuNQE.js
355
359
  - vendor/assets/dashboard/assets/utils-DDJC7tJV.js
356
360
  - vendor/assets/dashboard/assets/wurk-logo-Vy3xW4K0.png
357
361
  - vendor/assets/dashboard/favicon-16.png
@@ -387,5 +391,5 @@ requirements: []
387
391
  rubygems_version: 3.6.9
388
392
  specification_version: 4
389
393
  summary: 100% drop-in replacement for Sidekiq + Sidekiq Pro + Sidekiq Enterprise.
390
- Free. Faster.
394
+ Free.
391
395
  test_files: []
@@ -1 +0,0 @@
1
- import{A as e,F as t,J as n,L as r,M as i,O as a,R as o,V as s,_ as c,b as l,c as u,f as d,g as f,h as p,i as m,k as h,n as ee,q as g,r as _,s as v,v as y,w as b,z as x}from"./Skeleton-DzR7XNxz.js";import{i as S,o as C}from"./index-D_lSDwKw.js";import{n as w}from"./utils-DDJC7tJV.js";import{r as T}from"./charts-BVHHGof7.js";var E=e=>1-(1-e)**3,D=()=>typeof window<`u`&&window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches;function O(e,t=700){let[n,i]=s(0),a=0,o=null;return r(()=>{let n=e();if(D()||!Number.isFinite(n)){a=n,i(n);return}let r=a;if(r===n)return;let s=performance.now(),c=e=>{let l=Math.min((e-s)/t,1),u=r+(n-r)*E(l);a=u,i(u),l<1&&(o=requestAnimationFrame(c))};o=requestAnimationFrame(c),g(()=>{o!==null&&cancelAnimationFrame(o)})}),n}function k(e){let t=O(()=>e.value);return y(()=>Math.round(t()).toLocaleString())}var A=b(`<span class=obs-metric__sub>`),j=b(`<span class=obs-metric__sub><span> <!>%</span> `),M=b(`<div class=obs>`),N=b(`<div class=empty-state style=color:var(--danger)>`),P=b(`<div class=empty-state>`),te=b(`<div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-circle-check obs-metric__icon"aria-hidden=true>`),F=b(`<span class=obs-metric__value>`),I=b(`<i class="fa-solid fa-arrow-right obs-card__go"aria-hidden=true>`),ne=b(`<div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-triangle-exclamation obs-metric__icon"aria-hidden=true>`),re=b(`<div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-ban obs-metric__icon"aria-hidden=true>`),ie=b(`<div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-spinner obs-metric__icon"aria-hidden=true>`),L=b(`<span class=obs-mono>`),R=b(`<span class=obs-stat__value>`),ae=b(`<i class="fa-solid fa-arrow-right"aria-hidden=true>`),oe=b(`<div class=obs-tablescroll><table><thead><tr><th>Name</th><th></th><th></th><th></th></tr></thead><tbody>`),se=b(`<div class=obs><div class=obs-metrics></div><div class="obs-card obs-panel"><div class=obs-panel__head><div><h2 class=obs-panel__title></h2><p class=obs-panel__sub></p></div><div class=obs-panel__controls><div class=obs-seg role=tablist aria-label="Time range"></div><div class=obs-legend><span><i class="dot dot--processed"></i> </span><span><i class="dot dot--failed"></i> </span></div></div></div><div class=obs-chartbox></div></div><div class=obs-stats></div><div class="obs-card obs-table"><div class=obs-table__head><h2 class=obs-table__title></h2></div></div><div class="obs-card obs-cta"><span class=obs-cta__icon><i class="fa-solid fa-bolt"aria-hidden=true></i></span><h2 class=obs-cta__title></h2><p class=obs-cta__text></p><div class=obs-cta__actions><a class="obs-btn obs-btn--primary"href=https://developerz-ai.github.io/wurk/ target=_blank rel=noreferrer><i class="fa-solid fa-download"aria-hidden=true></i> </a><a class="obs-btn obs-btn--ghost"href=https://github.com/developerz-ai/wurk/wiki target=_blank rel=noreferrer><i class="fa-solid fa-book"aria-hidden=true></i> `),z=b(`<button role=tab>`),B=b(`<div class=empty-state style=height:320px;display:grid;place-items:center>`),V=b(`<span class="obs-chip obs-chip--paused">`),H=b(`<tr><td style=font-weight:500;color:var(--obs-text)></td><td></td><td></td><td>`),U=b(`<span class="obs-chip obs-chip--active">`);function W(e,t){if(e.length<2)return null;let n=e[e.length-1].at,r=0,i=0;for(let a of e)a.at>n-3600?r+=a[t]:a.at>n-7200&&(i+=a[t]);return i===0?r===0?null:100:Math.round((r-i)/i*100)}var G=[{key:`1h`,bucket:`1m`,window:`24h`,slice:60,desc_key:`dashboard.range_1h_desc`},{key:`24h`,bucket:`1m`,window:`24h`,desc_key:`dashboard.range_24h_desc`},{key:`7d`,bucket:`5m`,window:`7d`,desc_key:`dashboard.range_7d_desc`},{key:`30d`,bucket:`1h`,window:`30d`,desc_key:`dashboard.range_30d_desc`}],K=(e,t)=>{let n=new Date(e*1e3),r=String(n.getHours()).padStart(2,`0`);return t===`1h`?`${n.getMonth()+1}/${n.getDate()} ${r}:00`:`${r}:${String(n.getMinutes()).padStart(2,`0`)}`};function q(n){return t(e,{get when(){return n.pct!==null},get fallback(){return(()=>{var e=A();return c(e,()=>v(`dashboard.vs_last_hour`)),e})()},get children(){return(()=>{let e=()=>n.pct>=0,t=()=>e()===n.goodWhenUp;return(()=>{var r=j(),i=r.firstChild,a=i.firstChild,o=a.nextSibling;return o.nextSibling,i.nextSibling,c(i,()=>e()?`▲`:`▼`,a),c(i,()=>e()?`+`:``,o),c(i,()=>n.pct,o),c(r,()=>v(`dashboard.vs_last_hour`),null),x(()=>p(i,t()?`up`:`down`)),r})()})()}})}function J(){let r=S(),[f,g]=s(0),b=()=>G[f()];n(()=>{document.title=`${v(`nav.dashboard`)} — Wurk`});let E=d(()=>({queryKey:[`stats`],queryFn:()=>fetch(`${u()}/api/stats`).then(e=>e.json()),enabled:!r.connected(),refetchInterval:!r.connected()&&5e3})),D=d(()=>({queryKey:[`history`,b().bucket,b().window],queryFn:()=>fetch(`${u()}/api/history/${b().bucket}?window=${b().window}`).then(e=>e.json()),refetchInterval:3e4})),O=()=>r.stats()??E.data??null,j=o(()=>(D.data?.series??[]).map(e=>({...e,label:K(e.at,b().bucket)}))),J=o(()=>{let e=b(),t=`slice`in e?e.slice:void 0;return t?j().slice(-t):j()}),Y=o(()=>J().some(e=>e.processed>0||e.failed>0));return t(i,{get children(){return[t(h,{get when(){return y(()=>!!E.isLoading)()&&!O()},get children(){var e=M();return c(e,t(_,{count:4}),null),c(e,t(m,{rows:6,cols:4}),null),e}}),t(h,{get when(){return y(()=>!!E.isError)()&&!O()},get children(){var e=N();return c(e,()=>v(`common.error`)),e}}),t(h,{get when(){return!O()},get children(){var e=P();return c(e,()=>v(`common.empty`)),e}}),t(h,{get when(){return O()},children:n=>(()=>{var r=se(),i=r.firstChild,o=i.nextSibling,s=o.firstChild,u=s.firstChild,d=u.firstChild,m=d.nextSibling,h=u.nextSibling.firstChild,_=h.nextSibling.firstChild;_.firstChild.nextSibling;var S=_.nextSibling;S.firstChild.nextSibling;var E=s.nextSibling,O=o.nextSibling,M=O.nextSibling,N=M.firstChild,K=N.firstChild,X=M.nextSibling.firstChild.nextSibling,Z=X.nextSibling,Q=Z.nextSibling.firstChild;Q.firstChild.nextSibling;var $=Q.nextSibling;return $.firstChild.nextSibling,c(i,t(C,{class:`obs-card obs-metric obs-card--link`,href:`/metrics`,get children(){return[(()=>{var e=te(),t=e.firstChild;return c(t,()=>v(`dashboard.processed`)),e})(),(()=>{var e=F();return c(e,t(k,{get value(){return n().processed}})),e})(),t(q,{get pct(){return W(j(),`processed`)},goodWhenUp:!0}),I()]}}),null),c(i,t(C,{class:`obs-card obs-metric obs-card--link`,href:`/retries`,get children(){return[(()=>{var e=ne(),t=e.firstChild;return c(t,()=>v(`dashboard.failed`)),e})(),(()=>{var e=F();return c(e,t(k,{get value(){return n().failed}})),e})(),t(q,{get pct(){return W(j(),`failed`)},goodWhenUp:!1}),I()]}}),null),c(i,t(C,{class:`obs-card obs-metric obs-card--link`,href:`/dead`,get children(){return[(()=>{var e=re(),t=e.firstChild;return c(t,()=>v(`dashboard.expired`)),e})(),(()=>{var e=F();return c(e,t(k,{get value(){return n().expired}})),e})(),(()=>{var e=A();return c(e,(()=>{var e=y(()=>n().expired===0);return()=>e()?v(`dashboard.stable_threshold`):v(`dashboard.above_threshold`)})()),e})(),I()]}}),null),c(i,t(C,{class:`obs-card obs-metric obs-card--link`,href:`/busy`,get children(){return[(()=>{var e=ie(),t=e.firstChild;return c(t,()=>v(`dashboard.busy`)),e})(),(()=>{var e=F();return c(e,t(k,{get value(){return n().busy}})),e})(),(()=>{var e=A();return c(e,(()=>{var e=y(()=>n().busy===0);return()=>e()?v(`dashboard.system_idle`):v(`dashboard.processing`)})()),e})(),I()]}}),null),c(d,()=>v(`dashboard.performance_insight`)),c(m,()=>v(`dashboard.perf_subtitle`,{range:v(b().desc_key)})),c(h,t(a,{each:G,children:(e,t)=>(()=>{var n=z();return n.$$click=()=>g(t()),c(n,()=>e.key),x(e=>{var r=t()===f(),i=t()===f()?`is-active`:``;return r!==e.e&&l(n,`aria-selected`,e.e=r),i!==e.t&&p(n,e.t=i),e},{e:void 0,t:void 0}),n})()})),c(_,()=>v(`dashboard.processed`),null),c(S,()=>v(`dashboard.failed`),null),c(E,t(e,{get when(){return!D.isPending},get fallback(){return t(ee,{height:320})},get children(){return t(e,{get when(){return Y()},get fallback(){return(()=>{var e=B();return c(e,()=>v(`dashboard.no_history`)),e})()},get children(){return t(T,{get data(){return J()},height:320,xMinTickGap:64,get series(){return[{key:`processed`,name:v(`dashboard.processed`),stroke:`#fafafa`,strokeWidth:2,fill:`gradient`},{key:`failed`,name:v(`dashboard.failed`),stroke:`#a1a1aa`,strokeWidth:1.5,strokeDasharray:`5 4`,fill:`none`}]}})}})}})),c(O,t(C,{class:`obs-card obs-stat obs-card--link`,href:`/queues`,get children(){return[(()=>{var e=L();return c(e,()=>v(`dashboard.enqueued`)),e})(),(()=>{var e=R();return c(e,t(k,{get value(){return n().enqueued}})),e})(),I()]}}),null),c(O,t(C,{class:`obs-card obs-stat obs-card--link`,href:`/retries`,get children(){return[(()=>{var e=L();return c(e,()=>v(`dashboard.retries`)),e})(),(()=>{var e=R();return c(e,t(k,{get value(){return n().retries}})),e})(),I()]}}),null),c(O,t(C,{class:`obs-card obs-stat obs-card--link`,href:`/scheduled`,get children(){return[(()=>{var e=L();return c(e,()=>v(`dashboard.scheduled`)),e})(),(()=>{var e=R();return c(e,t(k,{get value(){return n().scheduled}})),e})(),I()]}}),null),c(O,t(C,{class:`obs-card obs-stat obs-card--link`,href:`/dead`,get children(){return[(()=>{var e=L();return c(e,()=>v(`dashboard.dead`)),e})(),(()=>{var e=R();return c(e,t(k,{get value(){return n().dead}})),e})(),I()]}}),null),c(K,()=>v(`table.queues`)),c(N,t(C,{class:`obs-table__link`,href:`/queues`,get children(){return[`View All `,ae()]}}),null),c(M,t(e,{get when(){return n().queues.length>0},get fallback(){return(()=>{var e=P();return c(e,()=>v(`common.empty`)),e})()},get children(){var r=oe(),i=r.firstChild.firstChild,o=i.firstChild.firstChild.nextSibling,s=o.nextSibling,u=s.nextSibling,d=i.nextSibling;return c(o,()=>v(`table.size`)),c(s,()=>v(`table.latency`)),c(u,()=>v(`table.status`)),c(d,t(a,{get each(){return n().queues},children:n=>(()=>{var r=H(),i=r.firstChild,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling;return c(i,()=>n.name),c(a,t(k,{get value(){return n.size}})),c(o,()=>w(n.latency)),c(s,t(e,{get when(){return n.paused},get fallback(){return(()=>{var e=U();return c(e,()=>v(`dashboard.active`)),e})()},get children(){var e=V();return c(e,()=>v(`dashboard.paused`)),e}})),x(()=>l(o,`title`,`${n.latency.toFixed(3)}s`)),r})()})),r}}),null),c(X,()=>v(`dashboard.strapline`)),c(Z,()=>v(`dashboard.tagline`)),c(Q,()=>v(`dashboard.install`),null),c($,()=>v(`dashboard.docs`),null),r})()})]}})}f([`click`]);export{J as default};
@@ -1 +0,0 @@
1
- import{A as e,F as t,J as n,O as r,R as i,V as a,_ as o,b as s,c,f as l,g as u,h as ee,n as d,s as f,v as p,w as m,x as h,z as g}from"./Skeleton-DzR7XNxz.js";import{n as te,o as ne}from"./utils-DDJC7tJV.js";import{t as _}from"./Modal-CN3rdKA_.js";import{n as v,r as re,t as ie}from"./charts-BVHHGof7.js";var y=m(`<span style=font-size:12px;margin-inline-start:8px>%`),b=m(`<div role=status>`),ae=m(`<div class=obs-tablescroll><table><thead><tr><th></th><th style=text-align:end></th><th style=text-align:end></th></tr></thead><tbody>`),oe=m(`<div class=obs><div class=obs-toolbar><span class=obs-toolbar__label><i class="fa-regular fa-calendar"aria-hidden=true></i> </span><div class=obs-seg role=tablist></div></div><div class=obs-metrics><div class="obs-card obs-metric"><div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-circle-check obs-metric__icon"aria-hidden=true></i></div><span class=obs-metric__value></span><span class=obs-metric__sub></span></div><div class="obs-card obs-metric"><div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-triangle-exclamation obs-metric__icon"aria-hidden=true></i></div><span class=obs-metric__value></span><span class=obs-metric__sub></span></div><div class="obs-card obs-metric"><div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-stopwatch obs-metric__icon"aria-hidden=true></i></div><span class=obs-metric__value></span><span class=obs-metric__sub></span></div><div class="obs-card obs-metric"><div class=obs-metric__head><span class=obs-mono></span><i class="fa-solid fa-gears obs-metric__icon"aria-hidden=true></i></div><span class=obs-metric__value></span><span class=obs-metric__sub></span></div></div><div class="obs-card obs-panel"><div class=obs-panel__head><div><h2 class=obs-panel__title></h2><p class=obs-panel__sub></p></div><div class=obs-legend><span><i class="dot dot--processed"></i> </span><span><i class="dot dot--failed"></i> </span></div></div><div class=obs-chartbox></div></div><div class=obs-grid2><div class="obs-card obs-panel"><div class=obs-panel__head><h2 class=obs-panel__title style=font-size:18px></h2><span class=obs-mono></span></div><div class=obs-chartbox></div></div><div class="obs-card obs-table"><div class=obs-table__head><h2 class=obs-table__title style=font-size:18px>`),se=m(`<button role=tab>`),ce=m(`<div class=empty-state style=height:300px;display:grid;place-items:center>`),x=m(`<div class=empty-state style=height:240px;display:grid;place-items:center>`),le=m(`<div class=obs-empty>`),ue=m(`<tr><td style=color:var(--obs-text)><button type=button class=obs-jobbtn><span class=obs-jobdot></span></button></td><td style=text-align:end;font-variant-numeric:tabular-nums></td><td class=obs-pct style=text-align:end>%`),S=m(`<div style=display:flex;gap:1.5rem;margin-bottom:1rem><div><div class=obs-mono></div><div style=font-size:18px;font-weight:600></div></div><div><div class=obs-mono></div><div style=font-size:18px;font-weight:600;color:var(--danger)>`),C=m(`<div class="obs-card obs-panel"><div class=obs-panel__head><h2 class=obs-panel__title style=font-size:18px></h2></div><div class=obs-chartbox>`),w=[`var(--accent)`,`#e0b341`,`#46b3a8`,`#d4737e`,`#8a7fd1`,`#5fa8d3`,`#c08457`,`#7bb274`],T=e=>w[e%w.length],de=[`#fafafa`,`#d4d4d8`,`#a1a1aa`,`#71717a`,`#52525b`,`#3f3f46`],E=[{key:`1h`,bucket:`1m`,window:`24h`,slice:60,minutes:60},{key:`24h`,bucket:`1m`,window:`24h`,minutes:1440},{key:`7d`,bucket:`5m`,window:`7d`,minutes:10080},{key:`30d`,bucket:`1h`,window:`30d`,minutes:720*60}],D=(e,t)=>{let n=new Date(e*1e3),r=String(n.getHours()).padStart(2,`0`);return t===`1h`?`${n.getMonth()+1}/${n.getDate()} ${r}:00`:`${r}:${String(n.getMinutes()).padStart(2,`0`)}`};function O(e,t){if(e.length<2)return null;let n=e[e.length-1].at,r=0,i=0;for(let a of e)a.at>n-3600?r+=a[t]:a.at>n-7200&&(i+=a[t]);return i===0?r===0?null:100:Math.round((r-i)/i*100)}function k(n){return t(e,{get when(){return n.pct!==null},get children(){return(()=>{let e=()=>n.pct>=0,t=()=>e()===n.goodWhenUp;return(()=>{var r=y(),i=r.firstChild;return o(r,()=>e()?`↑`:`↓`,i),o(r,()=>Math.abs(n.pct),i),g(e=>h(r,`color`,t()?`var(--success)`:`var(--danger)`)),r})()})()}})}var A=(e,t)=>{if(t<=0)return[];if(e.length<=t)return e;if(t===1)return[e[e.length-1]];let n=(e.length-1)/(t-1);return Array.from({length:t},(t,r)=>e[Math.round(r*n)])};function j(e){return(()=>{var n=b();return o(n,t(d,{height:`100%`})),g(t=>{var r=`${e.height}px`,i=f(`common.loading`);return r!==t.e&&h(n,`height`,t.e=r),i!==t.t&&s(n,`aria-label`,t.t=i),t},{e:void 0,t:void 0}),n})()}function M(){let[u,d]=a(2),[m,_]=a(null),v=()=>E[u()];n(()=>{document.title=`${f(`nav.metrics`)} — Wurk`});let y=l(()=>({queryKey:[`stats`],queryFn:()=>fetch(`${c()}/api/stats`).then(e=>e.json()),refetchInterval:5e3})),b=l(()=>({queryKey:[`history`,v().bucket,v().window],queryFn:()=>fetch(`${c()}/api/history/${v().bucket}?window=${v().window}`).then(e=>e.json()),refetchInterval:3e4})),S=l(()=>({queryKey:[`metrics`,v().minutes],queryFn:()=>fetch(`${c()}/api/metrics?minutes=${v().minutes}`).then(e=>e.json()),refetchInterval:3e4})),C=l(()=>({queryKey:[`queue-history`,v().bucket,v().window],queryFn:async()=>{let e=await fetch(`${c()}/api/queue-history/${v().bucket}?window=${v().window}`);if(!e.ok)throw Error(`queue-history failed (${e.status})`);return e.json()},refetchInterval:3e4})),w=i(()=>(b.data?.series??[]).map(e=>({...e,label:D(e.at,v().bucket)}))),T=i(()=>{let e=v(),t=`slice`in e?e.slice:void 0;return t?w().slice(-t):w()}),M=i(()=>T().some(e=>e.processed>0||e.failed>0)),N=i(()=>C.data?.queues??[]),P=i(()=>N()[0]?.points.map(e=>e.at)??[]),F=i(()=>A(P().map((e,t)=>({label:D(e,v().bucket),depth:N().reduce((e,n)=>e+(n.points[t]?.size??0),0)})),16)),I=i(()=>Math.max(0,...F().map(e=>e.depth))),L=i(()=>(S.data?.top_jobs??[]).map(e=>({klass:e.klass,count:e.processed+e.failed})).sort((e,t)=>t.count-e.count)),R=i(()=>L().reduce((e,t)=>e+t.count,0)),z=i(()=>L().slice(0,6));return(()=>{var n=oe(),i=n.firstChild,a=i.firstChild;a.firstChild.nextSibling;var c=a.nextSibling,l=i.nextSibling,D=l.firstChild,A=D.firstChild,N=A.firstChild,P=A.nextSibling,L=P.nextSibling,B=D.nextSibling,V=B.firstChild,he=V.firstChild,H=V.nextSibling,ge=H.nextSibling,U=B.nextSibling,W=U.firstChild,_e=W.firstChild,G=W.nextSibling,ve=G.nextSibling,K=U.nextSibling.firstChild,ye=K.firstChild,q=K.nextSibling,be=q.nextSibling,J=l.nextSibling,Y=J.firstChild,X=Y.firstChild,Z=X.firstChild,xe=Z.nextSibling,Q=X.nextSibling.firstChild;Q.firstChild.nextSibling;var Se=Q.nextSibling;Se.firstChild.nextSibling;var Ce=Y.nextSibling,$=J.nextSibling.firstChild,we=$.firstChild,Te=we.firstChild,Ee=Te.nextSibling,De=we.nextSibling,Oe=$.nextSibling,ke=Oe.firstChild.firstChild;return o(a,()=>f(`metrics.time_range`),null),o(c,t(r,{each:E,children:(e,t)=>(()=>{var n=se();return n.$$click=()=>d(t()),o(n,()=>e.key),g(e=>{var r=t()===u(),i=t()===u()?`is-active`:``;return r!==e.e&&s(n,`aria-selected`,e.e=r),i!==e.t&&ee(n,e.t=i),e},{e:void 0,t:void 0}),n})()})),o(N,()=>f(`metrics.total_processed`)),o(P,()=>(y.data?.processed??0).toLocaleString(),null),o(P,t(k,{get pct(){return O(w(),`processed`)},goodWhenUp:!0}),null),o(L,()=>f(`metrics.across_all_queues`)),o(he,()=>f(`metrics.failed_jobs`)),o(H,()=>(y.data?.failed??0).toLocaleString(),null),o(H,t(k,{get pct(){return O(w(),`failed`)},goodWhenUp:!1}),null),o(ge,()=>f(`metrics.total_failures`)),o(_e,()=>f(`metrics.avg_latency`)),o(G,(()=>{var e=p(()=>!!y.data);return()=>e()?te(y.data.latency):`—`})()),o(ve,()=>f(`metrics.head_of_line`)),o(ye,()=>f(`metrics.active_workers`)),o(q,()=>(y.data?.processes??0).toLocaleString()),o(be,(()=>{var e=p(()=>(y.data?.processes??0)>0);return()=>e()?f(`metrics.stable`):f(`metrics.no_workers`)})()),o(Z,()=>f(`metrics.throughput_failures`)),o(xe,()=>f(`metrics.throughput_sub`,{range:v().key})),o(Q,()=>f(`dashboard.processed`),null),o(Se,()=>f(`dashboard.failed`),null),o(Ce,t(e,{get when(){return!b.isPending},get fallback(){return t(j,{height:300})},get children(){return t(e,{get when(){return M()},get fallback(){return(()=>{var e=ce();return o(e,()=>f(`dashboard.no_history`)),e})()},get children(){return t(re,{get data(){return T()},height:300,yAxisWidth:36,yDecimals:!1,xMinTickGap:56,get series(){return[{key:`processed`,name:f(`dashboard.processed`),stroke:`#fafafa`,strokeWidth:2,fill:`gradient`},{key:`failed`,name:f(`dashboard.failed`),stroke:`#a1a1aa`,strokeWidth:1.5,strokeDasharray:`5 4`,fill:`none`}]}})}})}})),o(Te,()=>f(`metrics.queue_depth`)),o(Ee,(()=>{var e=p(()=>I()>0);return()=>e()?f(`metrics.peak`,{n:I().toLocaleString()}):``})()),o(De,t(e,{get when(){return!C.isPending},get fallback(){return t(j,{height:240})},get children(){return t(e,{get when(){return F().length>0},get fallback(){return(()=>{var e=x();return o(e,()=>f(`metrics.no_queue_history`)),e})()},get children(){return t(ie,{get data(){return F().map(e=>({label:e.label,value:e.depth,color:e.depth===I()&&I()>0?`#fafafa`:`#3f3f46`}))},height:240,get name(){return f(`metrics.queue_depth`)},yAxisWidth:36,yDecimals:!1,xMinTickGap:40})}})}})),o(ke,()=>f(`metrics.top_job_types`)),o(Oe,t(e,{get when(){return!S.isPending},get fallback(){return t(j,{height:240})},get children(){return t(e,{get when(){return z().length>0},get fallback(){return(()=>{var e=le();return o(e,()=>f(`common.empty`)),e})()},get children(){var e=ae(),n=e.firstChild.firstChild,i=n.firstChild.firstChild,a=i.nextSibling,c=a.nextSibling,l=n.nextSibling;return o(i,()=>f(`metrics.job_class`)),o(a,()=>f(`table.count`)),o(c,()=>f(`metrics.pct_total`)),o(l,t(r,{get each(){return z()},children:(e,t)=>(()=>{var n=ue(),r=n.firstChild,i=r.firstChild,a=i.firstChild,c=r.nextSibling,l=c.nextSibling,u=l.firstChild;return i.$$click=()=>_(e.klass),o(i,()=>ne(e.klass.split(`::`).pop()??e.klass,36),null),o(c,()=>e.count.toLocaleString()),o(l,(()=>{var t=p(()=>R()>0);return()=>t()?Math.round(e.count/R()*100):0})(),u),g(n=>{var o=e.klass,c=f(`metrics.view_job_detail`),l=de[t()%de.length];return o!==n.e&&s(r,`title`,n.e=o),c!==n.t&&s(i,`title`,n.t=c),l!==n.a&&h(a,`background`,n.a=l),n},{e:void 0,t:void 0,a:void 0}),n})()})),e}})}}),null),o(n,t(pe,{get range(){return v()}}),null),o(n,t(me,{}),null),o(n,t(fe,{get klass(){return m()},get minutes(){return v().minutes},onClose:()=>_(null)}),null),g(()=>s(c,`aria-label`,f(`metrics.time_range`))),n})()}function fe(n){let r=l(()=>({queryKey:[`metrics-job`,n.klass,n.minutes],queryFn:async()=>{let e=await fetch(`${c()}/api/metrics/${encodeURIComponent(n.klass)}?minutes=${n.minutes}`);if(!e.ok)throw Error(`metrics-job failed (${e.status})`);return e.json()},enabled:n.klass!==null})),a=i(()=>(r.data?.series??[]).map(e=>({label:D(e.at,`1m`),processed:e.p,failed:e.f,runtime_ms:e.ms}))),s=i(()=>a().some(e=>e.processed>0||e.failed>0)),u=i(()=>a().reduce((e,t)=>({processed:e.processed+t.processed,failed:e.failed+t.failed}),{processed:0,failed:0}));return t(_,{get open(){return n.klass!==null},get onClose(){return n.onClose},get title(){return n.klass??``},width:720,get children(){return t(e,{get when(){return n.klass},get children(){return[(()=>{var e=S(),t=e.firstChild,n=t.firstChild,r=n.nextSibling,i=t.nextSibling.firstChild,a=i.nextSibling;return o(n,()=>f(`dashboard.processed`)),o(r,()=>u().processed.toLocaleString()),o(i,()=>f(`dashboard.failed`)),o(a,()=>u().failed.toLocaleString()),e})(),t(e,{get when(){return!r.isPending},get fallback(){return t(j,{height:240})},get children(){return t(e,{get when(){return!r.isError},get fallback(){return(()=>{var e=x();return o(e,()=>f(`common.error`)),e})()},get children(){return t(e,{get when(){return s()},get fallback(){return(()=>{var e=x();return o(e,()=>f(`dashboard.no_history`)),e})()},get children(){return t(v,{get data(){return a()},height:240,yAxisWidth:36,yDecimals:!1,xMinTickGap:48,legend:!0,get series(){return[{key:`processed`,name:f(`dashboard.processed`),stroke:`#fafafa`,strokeWidth:2},{key:`failed`,name:f(`dashboard.failed`),stroke:`#a1a1aa`,strokeWidth:1.5}]}})}})}})}})]}})}})}function pe(n){let r=l(()=>({queryKey:[`queue-history-lat`,n.range.bucket,n.range.window],queryFn:async()=>{let e=await fetch(`${c()}/api/queue-history/${n.range.bucket}?window=${n.range.window}`);if(!e.ok)throw Error(`queue-history failed (${e.status})`);return e.json()},refetchInterval:3e4})),a=i(()=>r.data?.queues??[]),s=i(()=>a().map((e,t)=>({key:`queue_${t}`,name:e.name}))),u=i(()=>a()[0]?.points.map(e=>e.at)??[]),ee=i(()=>u().map((e,t)=>{let r={label:D(e,n.range.bucket)};return a().forEach((e,n)=>{r[s()[n].key]=e.points[t]?.latency??0}),r})),d=i(()=>s().map((e,t)=>({key:e.key,name:e.name,stroke:T(t),strokeWidth:2}))),p=i(()=>a().some(e=>e.points.some(e=>e.latency>0)));return t(e,{get when(){return p()},get children(){var e=C(),n=e.firstChild,r=n.firstChild,i=n.nextSibling;return o(r,()=>f(`metrics.queue_latency_seconds`)),o(i,t(v,{get data(){return ee()},get series(){return d()},height:240,legend:!0,yAxisWidth:40,xMinTickGap:48})),e}})}var N=new Set([`processed`,`failures`]);function me(){let n=l(()=>({queryKey:[`history-snapshots`],queryFn:async()=>{let e=await fetch(`${c()}/api/history/snapshots?limit=1000`);if(!e.ok)throw Error(`history snapshots request failed (${e.status})`);return e.json()},refetchInterval:3e4})),r=i(()=>n.data?.snapshots??[]),a=i(()=>Array.from(new Set(r().flatMap(e=>Object.keys(e).filter(t=>t!==`at`&&!N.has(t)&&typeof e[t]==`number`))))),s=i(()=>r().map(e=>{let t=new Date(e.at*1e3),n={label:`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`};for(let t of Object.keys(e))n[t]=e[t];return n})),u=i(()=>a().map((e,t)=>({key:e,name:e,stroke:T(t),strokeWidth:2})));return t(e,{get when(){return p(()=>r().length>0)()&&a().length>0},get children(){var e=C(),n=e.firstChild,r=n.firstChild,i=n.nextSibling;return o(r,()=>f(`metrics.historical_snapshots`)),o(i,t(v,{get data(){return s()},get series(){return u()},height:240,legend:!0,yAxisWidth:40,yDecimals:!1,xMinTickGap:48})),e}})}u([`click`]);export{M as default};