PageSourceSearch

https://pointvolleyball.com/chunk-TAXT2GLR.js

js pointvolleyball.com collected 2026-10-02 01:41:03 UTC 64,384 bytes, 650 lines download raw bytes

1import{a as V,b as fe,c as I,d as _e}from"./chunk-3DOPPFZZ.js";import{a as be,b as He}from"./chunk-NE22VKN5.js";import"./chunk-AEK7Z5QZ.js";import{a as ke}from"./chunk-BFPYKIIC.js";import{a as Re}from"./chunk-4CVZBQNN.js";import{b as je}from"./chunk-4D5SN44G.js";import"./chunk-6Q5DDO7R.js";import"./chunk-U22BTVEZ.js";import{Cc as de,Ec as se,Gc as Ne,Hc as $e,Kb as re,Mb as le,Qc as me,Wc as pe,d as X,id as ce,jb as oe,k as ee,kh as We,re as xe,se as ue,ve as he,xb as Oe}from"./chunk-X5J6QTCG.js";import{$ as Y,$a as x,Ad as Ie,Fa as o,Hb as F,Ib as e,Jb as h,Ka as P,Kb as f,Lb as H,Lc as Z,Ma as G,Na as K,Qb as M,Rb as O,Sa as S,Sb as N,U as L,Xa as Te,Yc as z,_ as Le,ba as Fe,bb as u,cc as D,d as q,dc as w,ec as Q,fa as j,fi as Me,ga as J,gb as s,hb as i,hd as Be,ib as n,jb as p,lc as b,mc as v,nc as y,pj as ae,qb as B,qc as E,r as Ae,sb as T,tb as c,vd as te,xd as ie,yd as ne}from"./chunk-SMW7PHYX.js";import"./chunk-BMIYOSOG.js";var $=(()=>{let r=class r{constructor(l){this.webAPI=l,this.baseUrl="admin/job-performance"}getOverview(l,m){return this.webAPI.getData(`${this.baseUrl}/overview`,this.buildQueryParams(l,m))}getJobDetail(l,m){return this.webAPI.getData(`${this.baseUrl}/job/${l}`,this.buildQueryParams(m))}getFilterOptions(){return this.webAPI.getData("admin/job-log/filter-options")}buildQueryParams(l,m){let d=new Be().set("days",l.toString());return m&&(d=d.set("jobId",m.toString())),d}};r.\u0275fac=function(m){return new(m||r)(Fe(Me))},r.\u0275prov=Le({token:r,factory:r.\u0275fac,providedIn:"root"});let a=r;return a})();var R=(function(a){return a[a.LAST_1_DAY=1]="LAST_1_DAY",a[a.LAST_7_DAYS=7]="LAST_7_DAYS",a[a.LAST_30_DAYS=30]="LAST_30_DAYS",a[a.LAST_90_DAYS=90]="LAST_90_DAYS",a})(R||{}),ve=[{label:"24 Hours",value:R.LAST_1_DAY},{label:"7 Days",value:R.LAST_7_DAYS},{label:"30 Days",value:R.LAST_30_DAYS},{label:"90 Days",value:R.LAST_90_DAYS}],k=(function(a){return a.AVERAGE="average",a.P95="p95",a.TOTAL="total",a})(k||{}),Ue=[{label:"Average",value:k.AVERAGE},{label:"p95",value:k.P95},{label:"Total time",value:k.TOTAL}];function ge(a){return(a>0?"+":"")+a.toFixed(1)+"%"}function Se(a,r){return a?a>0===r?"text-success":"text-danger":""}function Ee(a){return a>0?"fa-regular fa-arrow-up":a<0?"fa-regular fa-arrow-down":"fa-regular fa-minus"}function A(){let a=getComputedStyle(document.documentElement),r=(t,l)=>a.getPropertyValue(t).trim()||l;return{neutral:r("--dashboard-color-default","#1D6AE5"),success:r("--dashboard-color-success","#00CE9B"),warning:r("--dashboard-color-medium","#FFAA02"),critical:r("--dashboard-color-critical","#EC4F2E"),muted:r("--dashboard-color-low","#c9d5dd"),grid:"#f0f0f0",surface:"#ffffff"}}function U(a){return{beginAtZero:!0,grid:a?{color:a}:{display:!1},ticks:{callback:r=>I(r)}}}function qe(a){let[r,t,l]=a.substring(0,10).split("-").map(Number);return new Date(r,t-1,l).toLocaleDateString(void 0,{month:"short",day:"numeric"})}function ye(a){if(!a?.length)return null;let r=A(),t=(l,m,d)=>({label:l,data:m,backgroundColor:d,borderColor:r.surface,borderWidth:2,borderRadius:3});
1return{type:"bar",data:{labels:a.map(l=>qe(l.date)),datasets:[t("Succeeded",a.map(l=>l.succeededRuns),r.success),t("Completed with errors",a.map(l=>l.completedWithErrorRuns),r.warning),t("Failed",a.map(l=>l.failedRuns),r.critical),t("Canceled",a.map(l=>l.canceledRuns),r.muted)]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{usePointStyle:!0,padding:16}},tooltip:{mode:"index",intersect:!1}},scales:{x:{stacked:!0,grid:{display:!1}},y:{stacked:!0,beginAtZero:!0,grid:{color:r.grid},title:{display:!0,text:"Runs"}}}}}}function we(a){if(!a?.length)return null;let r=A();return{type:"line",data:{labels:a.map(t=>qe(t.date)),datasets:[{label:"Average run",data:a.map(t=>t.averageDurationSeconds??null),borderColor:r.neutral,backgroundColor:"rgba(29, 106, 229, 0.08)",borderWidth:2,fill:!0,tension:.3,pointRadius:3,spanGaps:!0},{label:"Slowest run",data:a.map(t=>t.maxDurationSeconds??null),borderColor:r.warning,backgroundColor:"transparent",borderWidth:2,borderDash:[5,4],fill:!1,tension:.3,pointRadius:3,spanGaps:!0}]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{usePointStyle:!0,padding:16}},tooltip:{mode:"index",intersect:!1,callbacks:{label:t=>`${t.dataset.label}: ${I(t.parsed.y)}`}}},scales:{x:{grid:{display:!1}},y:U(r.grid)}}}}var Je=()=>["/admin/job-logs"],bt=a=>({jobId:a}),ft=()=>({}),Ye=a=>({"text-danger":a}),_t=()=>[25,50,100],Ge=a=>({jobLogId:a}),Ct=(a,r)=>({"text-danger fw-800":a,"text-success":r});function vt(a,r){if(a&1){let t=B();e(0,`
2    `),i(1,"div",12),e(2,`
3      `),i(3,"app-inline-alert",13),e(4),i(5,"button",14),T("click",function(){j(t);let m=c();return J(m.load())}),e(6,`
4          `),p(7,"i",15),e(8,`Retry
5        `),n(),e(9,`
6      `),n(),e(10,`
7    `),n(),e(11,`
8  `)}if(a&2){let t=c();o(4),f(`
9        `,t.error,`
10        `)}}function gt(a,r){a&1&&(e(0,`
11    `),p(1,"app-skeleton-template",16),e(2,`
12  `))}function St(a,r){if(a&1&&(e(0,`
13              `),i(1,"div",31),e(2,`
14                `),p(3,"i"),e(4),n(),e(5,`
15            `)),a&2){let t=c(2);o(),s("ngClass",t.changeClass(t.overview.runsChangePercent,!0)),o(2),F(t.changeIcon(t.overview.runsChangePercent)),o(),f(`
16                `,t.formatChange(t.overview.runsChangePercent),` vs prior window
17              `)}}function Et(a,r){if(a&1&&(e(0,`
18              `),i(1,"div",31),e(2,`
19                `),p(3,"i"),e(4),n(),e(5,`
20            `)),a&2){let t=c(2);o(),s("ngClass",t.changeClass(t.overview.successRateChangePoints,!0)),o(2),F(t.changeIcon(t.overview.successRateChangePoints)),o(),f(`
21                `,t.formatChange(t.overview.successRateChangePoints),` pts vs prior window
22              `)}}function yt(a,r){if(a&1&&(e(0,`
23              `),i(1,"div",31),e(2,`
24                `),p(3,"i"),e(4),n(),e(5,`
25            `)),a&2){let t=c(2);o(),s("ngClass",t.changeClass(t.overview.averageDurationChangePercent,!1)),o(2),F(t.changeIcon(t.overview.averageDurationChangePercent)),o(),f(`
26                `,t.formatChange(t.overview.averageDurationChangePercent),` vs prior window
27              `)}}function wt(a,r){a&1&&(e(0,`
28                    `),i(1,"tr"),e(2,`
29                      `),i(3,"th"),e(4,"Run"),n(),e(5,`
30                      `),i(6,"th"),e(7,"Job"),n(),e(8,`
31                      `),i(9,"th"),e(10,"Started"),n(),e(11,`
32                    `),n(),e(12,`
33                  `))}function Dt(a,r){if(a&1&&(e(0,`
34                    `),i(1,"tr"),e(2,`
35                      `),i(3,"td"),e(4,`
36                        `),i(5,"a",53),e(6),n(),e(7,`
37                      `),n(),e(8,`
38                      `),i(9,"td")(10,"span",54),e(11),n()(),e(12,`
39                      `),i(13,"td"),e(14,`
40                        `),i(15,"span",55),e(16),b(17,"utcDate"),n(),e(18,`
41                      `),n(),e(19,`
42                    `),n(),e(20,`
43                  `)),a&2){let t=r.$implicit;o(5),s("routerLink",D(8,Je))("queryParams",w(9,Ge,t.jobLogId)),o(),f("#",t.jobLogId),o(5),h(t.jobName),o(5),h(y(17,5,t.startDate,"MM/dd/yyyy hh:mm a"))}}function Pt(a,r){if(a&1&&(e(0,`
44          `),i(1,"div",49),e(2,`
45            `),i(3,"app-admin-dashboard-card",50),e(4,`
46              `),p(5,"app-tooltip",51),e(6,`
47              `),i(7,"div",47),e(8,`
48                `),i(9,"p-table",52),e(10,`
49                  `),S(11,wt,13,0,"ng-template",null,0,E),e(13,`
50                  `),S(14,Dt,21,11,"ng-template",null,1,E),e(16,`
51                `),n(),e(17,`
52              `),n(),e(18,`
53            `),n(),e(19,`
54          `),n(),e(20,`
55        `)),a&2){let t=c(3);o(5),s("renderAsLink",!1),o(4),s("value",t.overview.stuckRuns)}}function Tt(a,r){a&1&&(e(0,`
56                    `),i(1,"tr"),e(2,`
57                      `),i(3,"th"),e(4,"Job"),n(),e(5,`
58                      `),i(6,"th"),e(7,"Schedule"),n(),e(8,`
59                      `),i(9,"th"),e(10,"Last Run"),n(),e(11,`
60                    `),n(),e(12,`
61                  `))}function It(a,r){if(a&1&&(e(0,`
62                          `),i(1,"span",55),e(2),b(3,"utcDate"),n(),e(4,`
63                          `),i(5,"div",26),e(6),b(7,"number"),n(),e(8,`
64                        `)),a&2){let t=c().$implicit;o(2),h(y(3,2,t.lastRunDate,"MM/dd/yyyy")),o(4),f("",y(7,5,t.daysSinceLastRun,"1.0-0")," days ago")}}function Rt(a,r){a&1&&(e(0,`
65                          `),i(1,"span",59),e(2,"Never"),n(),e(3,`
66                        `))}function kt(a,r){if(a&1&&(e(0,`
67                    `),i(1,"tr"),e(2,`
68                      `),i(3,"td")(4,"span",54),e(5),n()(),e(6,`
69                      `),i(7,"td")(8,"span",26),e(9),n()(),e(10,`
70                      `),i(11,"td"),e(12,`
71                        `),x(13,It,9,8)(14,Rt,4,0),n(),e(15,`
72                    `),n(),e(16,`
73                  `)),a&2){let t=r.$implicit;o(5),h(t.jobName),o(4),h(t.scheduleDescription||t.cronExpression||"\u2014"),o(4),u(t.lastRunDate?13:14)}}function jt(a,r){if(a&1&&(e(0,`
74          `),i(1,"div",49),e(2,`
75            `),i(3,"app-admin-dashboard-card",56),e(4,`
76              `),p(5,"app-tooltip",57),e(6,`
77              `),i(7,"div",47),e(8,`
78                `),i(9,"p-table",58),e(10,`
79                  `),S(11,Tt,13,0,"ng-template",null,0,E),e(13,`
80                  `),S(14,kt,17,3,"ng-template",null,1,E),e(16,`
81                `),n(),e(17,`
82              `),n(),e(18,`
83            `),n(),e(19,`
84          `),n(),e(20,`
85        `)),a&2){let t=c(3);o(5),s("renderAsLink",!1),o(4),s("value",t.overview.idleJobs)}}function Jt(a,r){if(a&1&&(e(0,`
86      `),i(1,"div",18),e(2,`
87        `),x(3,Pt,21,2),x(4,jt,21,2),n(),e(5,`
88    `)),a&2){let t=c(2);o(3),u(t.overview.stuckRuns!=null&&t.overview.stuckRuns.length?3:-1),o(),u(t.overview.idleJobs!=null&&t.overview.idleJobs.length?4:-1)}}function At(a,r){if(a&1&&(e(0,`
89            `),p(1,"p-chart",60),e(2,`
90          `)),a&2){let t=c(2);o(),s("data",t.slowestJobsChartData)("options",t.slowestJobsChartOptions)}}function Lt(a,r){a&1&&(e(0,`
91            `),i(1,"div",61),e(2,"No completed runs in this window."),n(),e(3,`
92          `))}function Ft(a,r){if(a&1&&(e(0,`
93            `),p(1,"p-chart",62),e(2,`
94          `)),a&2){let t=c(2);o(),s("type",t.outcomeChart.type)("data",t.outcomeChart.data)("options",t.outcomeChart.options)}}function Bt(a,r){a&1&&(e(0,`
95            `),i(1,"div",61),e(2,"No runs in this window."),n(),e(3,`
96          `))}function Mt(a,r){if(a&1&&(e(0,`
97            `),p(1,"p-chart",63),e(2,`
98          `)),a&2){let t=c(2);o(),s("data",t.failuresByJobChartData)("options",t.failuresByJobChartOptions)}}function Ot(a,r){a&1&&(e(0,`
99            `),i(1,"div",61),e(2,`
100              `),p(3,"i",64),e(4,`No failed runs in this window.
101            `),n(),e(5,`
102          `))}function Nt(a,r){if(a&1&&(e(0,`
103            `),p(1,"p-chart",65),e(2,`
104          `)),a&2){let t=c(2);o(),s("type",t.runLengthChart.type)("data",t.runLengthChart.data)("options",t.runLengthChart.options)}}function $t(a,r){a&1&&(e(0,`
105            `),i(1,"div",61),e(2,"No completed runs in this window."),n(),e(3,`
106          `))}function Wt(a,r){a&1&&(e(0,`
107                `),i(1,"tr"),e(2,`
108                  `),i(3,"th",66),e(4,`
109                    `),i(5,"div",67),e(6,"Job"),p(7,"p-sortIcon",68),n(),e(8,`
110                  `),n(),e(9,`
111                  `),i(10,"th",69),e(11,`
112                    `),i(12,"div",67),e(13,"Runs"),p(14,"p-sortIcon",70),n(),e(15,`
113                  `),n(),e(16,`
114                  `),i(17,"th",71),e(18,`
115                    `),i(19,"div",67),e(20,"Success"),p(21,"p-sortIcon",72),e(22,`
116                    `),n(),e(23,`
117                  `),n(),e(24,`
118                  `),i(25,"th",73),e(26,`
119                    `),i(27,"div",67),e(28,"Avg"),p(29,"p-sortIcon",74),e(30,`
120                    `),n(),e(31,`
121                  `),n(),e(32,`
122                  `),i(33,"th",75),e(34,`
123                    `),i(35,"div",67),e(36,"p50"),p(37,"p-sortIcon",76),e(38,`
124                    `),n(),e(39,`
125                  `),n(),e(40,`
126                  `),i(41,"th",77),e(42,`
127                    `),i(43,"div",67),e(44,"p95"),p(45,"p-sortIcon",78),n(),e(46,`
128                  `),n(),e(47,`
129                  `),i(48,"th",79),e(49,`
130                    `),i(50,"div",67),e(51,"Max"),p(52,"p-sortIcon",80),n(),e(53,`
131                  `),n(),e(54,`
132                  `),i(55,"th",81),e(56,`
133                    `),i(57,"div",67),e(58,"Total"),p(59,"p-sortIcon",82),e(60,`
134                    `),n(),e(61,`
135                  `),n(),e(62,`
136                  `),i(63,"th",83),e(64,`
137                    `),i(65,"div",67),e(66,"Items"),p(67,"p-sortIcon",84),n(),e(68,`
138                  `),n(),e(69,`
139                  `),i(70,"th",85),e(71,`
140                    `),i(72,"div",67),e(73,"Last Run"),p(74,"p-sortIcon",86),n(),e(75,`
141                  `),n(),e(76,`
142                  `),p(77,"th"),e(78,`
143                `),n(),e(79,`
144              `))}function Ht(a,r){a&1&&(e(0,`
145                          `),i(1,"span",91),e(2,"(disabled)"),n(),e(3,`
146                        `))}function Vt(a,r){if(a&1&&(e(0,`
147                      `),i(1,"div",26),e(2,`
148                        `),p(3,"i",90),e(4),x(5,Ht,4,0),n(),e(6,`
149                    `)),a&2){let t=c().$implicit;o(4),f("",t.scheduleDescription||t.cronExpression,`
150                        `),o(),u(t.enabled?-1:5)}}function Ut(a,r){if(a&1&&(e(0,`
151                      `),i(1,"div",26),e(2),n(),e(3,`
152                    `)),a&2){let t=c().$implicit;o(2),f("",t.inProgressRuns," running")}}function qt(a,r){if(a&1&&(e(0,`
153                      `),i(1,"div",26),e(2),b(3,"number"),n(),e(4,`
154                    `)),a&2){let t=c().$implicit;o(2),f(`
155                        `,v(3,1,t.failedRuns+t.completedWithErrorRuns),` unclean
156                      `)}}function Yt(a,r){if(a&1&&(e(0,`
157                      `),i(1,"div",31),e(2,`
158                        `),p(3,"i"),e(4),n(),e(5,`
159                    `)),a&2){let t=c().$implicit,l=c(2);o(),s("ngClass",l.changeClass(t.averageDurationChangePercent,!1)),o(2),F(l.changeIcon(t.averageDurationChangePercent)),o(),f(`
160                        `,l.formatChange(t.averageDurationChangePercent),`
161                      `)}}function Gt(a,r){if(a&1&&(e(0,`
162                      `),i(1,"div",59),e(2),b(3,"number"),n(),e(4,`
163                    `)),a&2){let t=c().$implicit;o(2),f("",v(3,1,t.itemsFailed)," failed")}}function Kt(a,r){if(a&1&&(e(0,`
164                      `),i(1,"div",55),e(2),b(3,"utcDate"),n(),e(4,`
165                      `),p(5,"app-pill",92),e(6,`
166                    `)),a&2){let t=c().$implicit,l=c(2);o(2),h(y(3,4,t.lastRunDate,"MM/dd hh:mm a")),o(3),s("text",t.lastRunStatusName)("status",l.statusPill(t.lastRunStatusId))("nowrap",!0)}}function Qt(a,r){a&1&&(e(0,`
167                      `),i(1,"span",54),e(2,"\u2014"),n(),e(3,`
168                    `))}function Zt(a,r){if(a&1){let t=B();e(0,`
169                `),i(1,"tr"),e(2,`
170                  `),i(3,"td"),e(4,`
171                    `),i(5,"button",87),T("click",function(){let m=j(t).$implicit,d=c(2);return J(d.openJob(m.jobId))}),e(6),n(),e(7,`
172                    `),x(8,Vt,7,2),n(),e(9,`
173                  `),i(10,"td"),e(11,`
174                    `),i(12,"span",54),e(13),b(14,"number"),n(),e(15,`
175                    `),x(16,Ut,4,1),n(),e(17,`
176                  `),i(18,"td"),e(19,`
177                    `),i(20,"span",88),e(21),b(22,"number"),n(),e(23,`
178                    `),x(24,qt,5,3),n(),e(25,`
179                  `),i(26,"td"),e(27,`
180                    `),i(28,"span",54),e(29),n(),e(30,`
181                    `),x(31,Yt,6,4),n(),e(32,`
182                  `),i(33,"td")(34,"span",54),e(35),n()(),e(36,`
183                  `),i(37,"td")(38,"span",54),e(39),n()(),e(40,`
184                  `),i(41,"td")(42,"span",54),e(43),n()(),e(44,`
185                  `),i(45,"td")(46,"span",54),e(47),n()(),e(48,`
186                  `),i(49,"td"),e(50,`
187                    `),i(51,"span",54),e(52),b(53,"number"),n(),e(54,`
188                    `),x(55,Gt,5,3),n(),e(56,`
189                  `),i(57,"td"),e(58,`
190                    `),x(59,Kt,7,7)(60,Qt,4,0),n(),e(61,`
191                  `),i(62,"td"),e(63,`
192                    `),i(64,"button",89),T("click",function(){let m=j(t).$implicit,d=c(2);return J(d.openJob(m.jobId))}),e(65,`
193                      Drill In
194                    `),n(),e(66,`
195                  `),n(),e(67,`
196                `),n(),e(68,`
197              `)}if(a&2){let t=r.$implicit,l=c(2);o(5),Te("aria-label","Drill into "+t.jobName),o(),f(`
198                      `,t.jobName,`
199                    `),o(2),u(t.cronExpression||!t.enabled?8:-1),o(5),h(v(14,18,t.runs)),o(3),u(t.inProgressRuns?16:-1),o(4),s("ngClass",Q(25,Ct,t.failureRatePercent>=25,t.failureRatePercent===0)),o(),f(`
200                      `,y(22,20,t.successRatePercent,"1.0-1"),`%
201                    `),o(3),u(t.failedRuns+t.completedWithErrorRuns>0?24:-1),o(5),h(l.formatDuration(t.averageDurationSeconds)),o(2),u(t.averageDurationChangePercent?31:-1),o(4),h(l.formatDuration(t.medianDurationSeconds)),o(4),h(l.formatDuration(t.p95DurationSeconds)),o(4),h(l.formatDuration(t.maxDurationSeconds)),o(4),h(l.formatDuration(t.totalDurationSeconds)),o(5),h(v(53,23,t.itemsProcessed)),o(3),u(t.itemsFailed?55:-1),o(4),u(t.lastRunDate?59:60),o(5),Te("aria-label","Drill into "+t.jobName)}}function zt(a,r){a&1&&(e(0,`
202                `),i(1,"tr"),e(2,`
203                  `),i(3,"td",93),e(4,`
204                    `),i(5,"app-inline-alert",94),e(6,"No jobs ran in this window."),n(),e(7,`
205                  `),n(),e(8,`
206                `),n(),e(9,`
207              `)),a&2&&(o(5),s("isInline",!0))}function Xt(a,r){a&1&&(e(0,`
208                  `),i(1,"tr"),e(2,`
209                    `),i(3,"th"),e(4,"Run"),n(),e(5,`
210                    `),i(6,"th"),e(7,"Job"),n(),e(8,`
211                    `),i(9,"th"),e(10,"Status"),n(),e(11,`
212                    `),i(12,"th"),e(13,"Started"),n(),e(14,`
213                    `),i(15,"th"),e(16,"Duration"),n(),e(17,`
214                    `),i(18,"th"),e(19,"Processed"),n(),e(20,`
215                    `),i(21,"th",97),e(22,"Summary"),n(),e(23,`
216                  `),n(),e(24,`
217                `))}function ei(a,r){if(a&1&&(e(0,`
218                  `),i(1,"tr"),e(2,`
219                    `),i(3,"td"),e(4,`
220                      `),i(5,"a",53),e(6),n(),e(7,`
221                    `),n(),e(8,`
222                    `),i(9,"td")(10,"span",54),e(11),n()(),e(12,`
223                    `),i(13,"td"),e(14,`
224                      `),p(15,"app-pill",92),e(16,`
225                    `),n(),e(17,`
226                    `),i(18,"td")(19,"span",55),e(20),b(21,"utcDate"),n()(),e(22,`
227                    `),i(23,"td")(24,"span",98),e(25),n()(),e(26,`
228                    `),i(27,"td")(28,"span",54),e(29),n()(),e(30,`
229                    `),i(31,"td")(32,"span",99),e(33),n()(),e(34,`
230                  `),n(),e(35,`
231                `)),a&2){let t=r.$implicit,l=c(3);o(5),s("routerLink",D(14,Je))("queryParams",w(15,Ge,t.jobLogId)),o(),f("#",t.jobLogId),o(5),h(t.jobName),o(4),s("text",t.jobStatusName)("status",l.statusPill(t.jobStatusId))("nowrap",!0),o(5),h(y(21,11,t.startDate,"MM/dd/yyyy hh:mm a")),o(5),h(l.formatDuration(t.durationSeconds)),o(4),h(t.itemsProcessed??"\u2014"),o(4),h(t.summary||"\u2014")}}function ti(a,r){if(a&1&&(e(0,`
232        `),i(1,"div",32),e(2,`
233          `),i(3,"app-admin-dashboard-card",95),e(4,`
234            `),p(5,"app-tooltip",96),e(6,`
235            `),i(7,"div",47),e(8,`
236              `),i(9,"p-table",52),e(10,`
237                `),S(11,Xt,25,0,"ng-template",null,0,E),e(13,`
238                `),S(14,ei,36,17,"ng-template",null,1,E),e(16,`
239              `),n(),e(17,`
240            `),n(),e(18,`
241          `),n(),e(19,`
242        `),n(),e(20,`
243      `)),a&2){let t=c(2);o(5),s("renderAsLink",!1),o(4),s("value",t.overview.slowestRuns)}}function ii(a,r){if(a&1){let t=B();e(0,`
244    `),e(1,`
245    `),i(2,"div",17),e(3,`
246      `),i(4,"div",18),e(5,`
247        `),i(6,"div",19),e(7,`
248          `),i(8,"div",20),e(9,`
249            `),i(10,"span",21),e(11,"Runs"),n(),e(12,`
250            `),i(13,"div",22),e(14),b(15,"number"),n(),e(16,`
251            `),x(17,St,6,4),n(),e(18,`
252        `),n(),e(19,`
253        `),i(20,"div",19),e(21,`
254          `),i(22,"div",20),e(23,`
255            `),i(24,"span",23),e(25,`Success
256              Rate`),n(),e(26,`
257            `),i(27,"div",22),e(28),b(29,"number"),n(),e(30,`
258            `),x(31,Et,6,4),n(),e(32,`
259        `),n(),e(33,`
260        `),i(34,"div",19),e(35,`
261          `),i(36,"div",20),e(37,`
262            `),i(38,"span",24),e(39,`Unclean
263              Runs`),n(),e(40,`
264            `),i(41,"div",25),e(42),b(43,"number"),n(),e(44,`
265            `),i(45,"div",26),e(46),b(47,"number"),b(48,"number"),n(),e(49,`
266          `),n(),e(50,`
267        `),n(),e(51,`
268        `),i(52,"div",19),e(53,`
269          `),i(54,"div",20),e(55,`
270            `),i(56,"span",27),e(57,`Time
271              Running`),n(),e(58,`
272            `),i(59,"div",22),e(60),b(61,"number"),n(),e(62,`
273            `),i(63,"div",26),e(64),b(65,"number"),n(),e(66,`
274          `),n(),e(67,`
275        `),n(),e(68,`
276        `),i(69,"div",19),e(70,`
277          `),i(71,"div",20),e(72,`
278            `),i(73,"span",28),e(74,`Average
279              Run`),n(),e(75,`
280            `),i(76,"div",22),e(77),n(),e(78,`
281            `),x(79,yt,6,4),n(),e(80,`
282        `),n(),e(81,`
283        `),i(82,"div",29),e(83,`
284          `),i(84,"div",20),e(85,`
285            `),i(86,"span",30),e(87,`Items
286              Processed`),n(),e(88,`
287            `),i(89,"div",22),e(90),b(91,"number"),n(),e(92,`
288            `),i(93,"div",31),e(94),b(95,"number"),n(),e(96,`
289          `),n(),e(97,`
290        `),n(),e(98,`
291      `),n(),e(99,`
292    `),n(),e(100,`
293
294    `),e(101,`
295    `),x(102,Jt,6,2),i(103,"div",18),e(104,`
296      `),i(105,"div",32),e(106,`
297        `),i(107,"app-admin-dashboard-card",33),e(108,`
298          `),p(109,"app-tooltip",34),e(110,`
299
300          `),i(111,"div",35),e(112,`
301            `),i(113,"span",36),e(114,"Rank by"),n(),e(115,`
302            `),i(116,"p-selectButton",9),N("ngModelChange",function(m){j(t);let d=c();return O(d.rankMetric,m)||(d.rankMetric=m),J(m)}),T("onChange",function(){j(t);let m=c();return J(m.onRankMetricChange())}),n(),e(117,`
303          `),n(),e(118,`
304
305          `),x(119,At,3,2)(120,Lt,4,0),n(),e(121,`
306      `),n(),e(122,`
307
308      `),i(123,"div",37),e(124,`
309        `),i(125,"app-admin-dashboard-card",38),e(126,`
310          `),p(127,"app-tooltip",39),e(128,`
311          `),x(129,Ft,3,3)(130,Bt,4,0),n(),e(131,`
312      `),n(),e(132,`
313
314      `),i(133,"div",40),e(134,`
315        `),i(135,"app-admin-dashboard-card",41),e(136,`
316          `),p(137,"app-tooltip",42),e(138,`
317          `),x(139,Mt,3,2)(140,Ot,6,0),n(),e(141,`
318      `),n(),e(142,`
319
320      `),i(143,"div",32),e(144,`
321        `),i(145,"app-admin-dashboard-card",43),e(146,`
322          `),p(147,"app-tooltip",44),e(148,`
323          `),x(149,Nt,3,3)(150,$t,4,0),n(),e(151,`
324      `),n(),e(152,`
325    `),n(),e(153,`
326
327    `),e(154,`
328    `),i(155,"div",18),e(156,`
329      `),i(157,"div",32),e(158,`
330        `),i(159,"app-admin-dashboard-card",45),e(160,`
331          `),p(161,"app-tooltip",46),e(162,`
332          `),i(163,"div",47),e(164,`
333            `),i(165,"p-table",48),e(166,`
334              `),S(167,Wt,80,0,"ng-template",null,0,E),e(169,`
335
336              `),S(170,Zt,69,28,"ng-template",null,1,E),e(172,`
337
338              `),S(173,zt,10,1,"ng-template",null,2,E),e(175,`
339            `),n(),e(176,`
340          `),n(),e(177,`
341        `),n(),e(178,`
342      `),n(),e(179,`
343
344      `),x(180,ti,21,2),n(),e(181,`
345  `)}if(a&2){let t=c();o(14),h(v(15,34,t.overview.runs)),o(3),u(t.overview.runsChangePercent!==null&&t.overview.runsChangePercent!==void 0?17:-1),o(11),f("",y(29,36,t.overview.successRatePercent,"1.0-1"),"%"),o(3),u(t.overview.successRateChangePoints!==null&&t.overview.successRateChangePoints!==void 0?31:-1),o(10),s("ngClass",w(54,Ye,t.overview.failedRuns+t.overview.completedWithErrorRuns>0)),o(),f(`
346              `,v(43,39,t.overview.failedRuns+t.overview.completedWithErrorRuns),`
347            `),o(4),H(`
348              `,v(47,41,t.overview.failedRuns)," failed \xB7 ",v(48,43,t.overview.completedWithErrorRuns),` with
349              errors
350            `),o(14),f("",y(61,45,t.overview.totalDurationHours,"1.0-1"),"h"),o(4),f("",v(65,48,t.overview.jobsRun)," jobs ran"),o(13),h(t.formatDuration(t.overview.averageDurationSeconds)),o(2),u(t.overview.averageDurationChangePercent!==null&&t.overview.averageDurationChangePercent!==void 0?79:-1),o(11),h(v(91,50,t.overview.itemsProcessed)),o(3),s("ngClass",w(56,Ye,t.overview.itemsFailed>0)),o(),f(`
351              `,v(95,52,t.overview.itemsFailed),` failed
352            `),o(8),u(t.overview.stuckRuns!=null&&t.overview.stuckRuns.length||t.overview.idleJobs!=null&&t.overview.idleJobs.length?102:-1),o(7),s("renderAsLink",!1),o(7),s("options",t.rankOptions),M("ngModel",t.rankMetric),s("allowEmpty",!1),o(3),u(t.slowestJobsChartData?119:120),o(8),s("renderAsLink",!1),o(2),u(t.outcomeChart?129:130),o(8),s("renderAsLink",!1),o(2),u(t.failuresByJobChartData?139:140),o(8),s("renderAsLink",!1),o(2),u(t.runLengthChart?149:150),o(12),s("renderAsLink",!1),o(4),s("value",t.overview.jobs)("paginator",t.overview.jobs.length>25)("rows",25)("rowsPerPageOptions",D(58,_t))("sortOrder",-1),o(15),u(t.overview.slowestRuns!=null&&t.overview.slowestRuns.length?180:-1)}}var Ke=(()=>
352{let r=class r{constructor(l,m,d,g){this.jobPerformanceService=l,this.siteDataService=m,this.router=d,this.route=g,this.unsubscribe$=new q,this.loading=!0,this.error="",this.selectedRange=R.LAST_7_DAYS,this.rangeOptions=ve,this.selectedJobId=null,this.jobFilterOptions=[{label:"All Jobs",value:null}],this.rankMetric=k.AVERAGE,this.rankOptions=Ue,this.formatDuration=I,this.statusPill=fe,this.formatChange=ge,this.changeClass=Se,this.changeIcon=Ee,this.chartJobLimit=12}ngOnInit(){this.loadFilterOptions(),this.route.queryParams.pipe(L(this.unsubscribe$)).subscribe({next:l=>{this.selectedRange=l.days?+l.days:R.LAST_7_DAYS,this.selectedJobId=l.jobId?+l.jobId:null,this.load()},error:()=>{this.error="Unable to read the dashboard parameters from the URL.",this.siteDataService.hideSiteLoader()}})}ngOnDestroy(){this.unsubscribe$.next(),this.unsubscribe$.complete()}load(){this.loading=!0,this.error="",this.jobPerformanceService.getOverview(this.selectedRange,this.selectedJobId??void 0).pipe(L(this.unsubscribe$)).subscribe({next:l=>{this.overview=l,this.buildCharts(),this.loading=!1,this.siteDataService.hideSiteLoader()},error:l=>{this.error=`Failed to load job performance${l?.status?` (HTTP ${l.status})`:""}. Please try again.`,this.loading=!1,this.siteDataService.hideSiteLoader()}})}onRangeChange(){this.syncFiltersToUrl()}onJobFilterChange(){this.syncFiltersToUrl()}onRankMetricChange(){this.buildSlowestJobsChart()}syncFiltersToUrl(){this.router.navigate([],{relativeTo:this.route,queryParams:{days:this.selectedRange,jobId:this.selectedJobId||null},queryParamsHandling:"merge"})}openJob(l){this.router.navigate(["/admin/job-performance",l],{queryParams:{days:this.selectedRange}})}rankValue(l){switch(this.rankMetric){case k.P95:return l.p95DurationSeconds??0;case k.TOTAL:return l.totalDurationSeconds;default:return l.averageDurationSeconds??0}}get rankMetricLabel(){switch(this.rankMetric){case k.P95:return"95th percentile run";case k.TOTAL:return"Total time spent running";default:return"Average run"}}buildCharts(){this.buildSlowestJobsChart(),this.buildFailuresByJobChart(),this.outcomeChart=ye(this.overview?.trend),this.runLengthChart=we(this.overview?.trend)}buildSlowestJobsChart(){let l=[...this.overview?.jobs??[]].filter(d=>this.rankValue(d)>0).sort((d,g)=>this.rankValue(g)-this.rankValue(d)).slice(0,this.chartJobLimit).reverse();if(!l.length){this.slowestJobsChartData=null;return}let m=A();this.slowestJobsChartData={labels:l.map(d=>d.jobName),datasets:[{label:this.rankMetricLabel,data:l.map(d=>this.rankValue(d)),backgroundColor:m.neutral,borderRadius:4,borderWidth:0,barPercentage:.7}]},this.slowestJobsChartOptions={indexAxis:"y",responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{label:d=>`${this.rankMetricLabel}: ${I(d.parsed.x)}`}}},scales:{x:U(),y:{grid:{display:!1},ticks:{autoSkip:!1,font:{size:11}}}}}}buildFailuresByJobChart(){let l=[...this.overview?.jobs??[]].map(d=>({row:d,unclean:d.failedRuns+d.completedWithErrorRuns})).filter(d=>d.unclean>0).sort((d,g)=>g.unclean-d.unclean).slice(0,this.chartJobLimit).reverse();if(!l.length){this.failuresByJobChartData=null;return}let m=A();this.failuresByJobChartData={labels:l.map(d=>d.row.jobName),datasets:[{label:"Failed",data:l.map(d=>d.row.failedRuns),backgroundColor:m.critical,borderColor:m.surface,borderWidth:2,borderRadius:3,barPercentage:.7},{label:"Completed with errors",data:l.map(d=>d.row.completedWithErrorRuns),backgroundColor:m.warning,borderColor:m.surface,borderWidth:2,borderRadius:3,barPercentage:.7}]},this.failuresByJobChartOptions={indexAxis:"y",responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{usePointStyle:!0,padding:16}},tooltip:{mode:"index",intersect:!1}},scales:{x:{stacked:!0,beginAtZero:!0,grid:{color:m.grid},title:{display:!0,text:"Runs"}},y:{stacked:!0,grid:{display:!1},ticks:{autoSkip:!1,font:{size:11}}}}}}loadFilterOptions(){this.jobPerformanceService.getFilterOptions().pipe(L(this.unsubscribe$)).subscribe({next:l=>{this.jobFilterOptions=[{label:"All Jobs",value:null},...l.jobs||[]]},error:()=>{this.siteDataService.showSiteErrorAlert("Unable to load the job filter list.")}})}};r.\u0275fac=function(m){return new(m||r)(P($),P(ae),P(ie),P(te))},r.\u0275cmp=G({type:r,selectors:[["app-job-performance-dashboard"]],standalone:!1,decls:26,vars:15,consts:[["header",""],["body",""],["emptymessage",""],["role","main"],[1,"d-flex","justify-content-between","align-items-center","flex-wrap","border-bottom","mb-3"],["pageTitle","Job Performance",3,"hideBorder"],[1,"d-flex","align-items-center","flex-wrap","mb
352-2"],["for","jobFilter",1,"sr-only"],["inputId","jobFilter","filterBy","label","appendTo","body",1,"mr-3",3,"ngModelChange","onChange","options","ngModel","filter"],["optionLabel","label","optionValue","value",3,"ngModelChange","onChange","options","ngModel","allowEmpty"],[1,"btn","btn-sm","btn-naked","ml-3",3,"routerLink","queryParams"],[1,"fa-regular","fa-list","mr-1"],[1,"mb-3"],["alertType","error"],["type","button",1,"btn","btn-red","btn-sm","ml-2",3,"click"],[1,"fa-regular","fa-rotate-right","mr-1"],["height","220px"],[1,"card","dashboard-card","p-4","mb-3"],[1,"row"],[1,"col-6","col-lg-2","border-right"],[1,"full-height","py-2","text-center"],["pTooltip","Job runs that started inside the window, whatever their outcome.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"dashboard-big-number"],["pTooltip","Share of finished runs that ended clean. Runs still in progress are left out of the denominator rather than counted as failures.",1,"dashboard-big-number--title","mb-2","hover-dotted"],["pTooltip","Runs that failed outright plus runs that finished but reported item-level errors.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"dashboard-big-number",3,"ngClass"],[1,"text-smallest","text-muted"],["pTooltip","Wall-clock time all jobs spent running in the window. Jobs run in parallel, so this exceeds the elapsed length of the window itself.",1,"dashboard-big-number--title","mb-2","hover-dotted"],["pTooltip","Mean run length, weighted by run count \u2014 a job that ran ten thousand times moves this figure more than a nightly report.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"col-6","col-lg-2"],["pTooltip","Items the jobs reported processing. Only jobs that report item counts contribute.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"text-smallest",3,"ngClass"],[1,"col-12","mb-3","d-flex","flex-column"],["panelTitle","Longest Running Jobs","skeletonHeight","480px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Average is the typical run. p95 is what the slow tail looks like \u2014 a job whose p95 is far above its average is spiky rather than slow. Total time is how much of the worker the job consumed, which a fast job that runs constantly can dominate.",3,"renderAsLink"],["slot","filters",1,"d-flex","align-items-center","flex-wrap","pb-2"],[1,"text-small","text-muted","mr-2"],[1,"col-lg-7","mb-3","d-flex","flex-column"],["panelTitle","Run Outcomes by Day","skeletonHeight","400px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Every run that started each day, stacked by how it ended. A day with no bar is a day on which nothing ran at all \u2014 the trend keeps empty days rather than closing the gap.",3,"renderAsLink"],[1,"col-lg-5","mb-3","d-flex","flex-column"],["panelTitle","Failures by Job","skeletonHeight","400px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Jobs with the most unclean runs, ranked by count rather than rate: a job that failed both of its two runs matters less than one that failed two hundred times. The failure rate for each is in the table below.",3,"renderAsLink"],["panelTitle","Run Length by Day","skeletonHeight","360px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Average and worst run length each day across the jobs in view. Plotted apart from run counts on purpose \u2014 seconds and runs are different scales, and sharing one plot would need a second axis that makes the two lines look comparable when they are not.",3,"renderAsLink"],["panelTitle","All Jobs","bodyClass","card-body p-0","skeletonHeight","420px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Every job that ran in the window. Select a row to drill into its distribution, outliers and failures.",3,"renderAsLink"],[1,"table-responsive"],["dataKey","jobId","sortField","totalDurationSeconds",1,"table","table-striped","table-sm",3,"value","paginator","rows","rowsPerPageOptions","sortOrder"],[1,"col-lg-6","mb-3","d-flex","flex-column"],["panelTitle","Stuck Runs","skeletonHeight","240px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Runs still marked in progress hours after they started. Almost always a worker that died without stamping an end date, which also means their duration never lands in any average.",3,"renderAsLink"],["dataKey","jobLogId",1,"table","table-striped","table-sm",3,"value"],[3,"routerLink","queryParams"],[1,"text-small"],[1,"text-smallest"],["panelTitle","Scheduled But Silent","skeletonHeight","240px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Enabled jobs with a schedule that recorded no run at all in this window. A job that stopped firing leaves no failure behind, so it is invisible on every other chart here.",3,"renderAsLink"],["dataKey","jobId",1,"table","table-striped","table-sm",3,"value"],[1,"text-smallest","text-danger"],["type","bar","height","420px",3,"data","options"],[1,"text-center","text-muted","py-4"],["height","340px",3,"type","data","options"],["type","bar","height","340px",3,"data","options"],[1,"fa-regular","fa-circle-check","text-success","mr-1"],["height","300px",3,"type","data","options"],["pSortableColumn","jobName"],[1,"d-flex","align-items-center"],["field","jobName"],["pSortableColumn","runs"],["field","runs"],["pSortableColumn","successRatePercent"],["field","successRatePercent"],["pSortableColumn","averageDurationSeconds"],["field","averageDurationSeconds"],["pSortableColumn","medianDurationSeconds"],["field","medianDurationSeconds"],["pSortableColumn","p95DurationSeconds"],["field","p95DurationSeconds"],["pSortableColumn","maxDurationSeconds"],["field","maxDurationSeconds"],["pSortableColumn","totalDurationSeconds"],["field","totalDurationSeconds"],["pSortableColumn","itemsProcessed"],["field","itemsProcessed"],["pSortableColumn","lastRunDate"],["field","lastRunDate"],["type","button",1,"btn","btn-naked","btn-sm","px-0","text-left",3,"click"],[1,"text-small",3,"ngClass"],["type","button",1,"btn","btn-sm",3,"click"],[1,"fa-regular","fa-clock","mr-1"],[1,"text-danger","ml-1"],[3,"text","status","nowrap"],["colspan","11",1,"text-center","py-4"],[3,"isInline"],["panelTitle","Each Job's Slowe
352st Run","bodyClass","card-body p-0","skeletonHeight","320px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Every job's own worst run in the window, ranked against the other jobs \u2014 the ones worth opening when a chart shows a job's p95 pulling away from its average. One run per job, so a single pathological job cannot fill the list; drill into a job to see its ten slowest.",3,"renderAsLink"],[2,"width","30%"],[1,"text-small","fw-800"],[1,"text-small","text-break"]],template:function(m,d){m&1&&(i(0,"main",3),e(1,`
353  `),i(2,"div",4),e(3,`
354    `),p(4,"app-admin-header",5),e(5,`
355    `),i(6,"div",6),e(7,`
356      `),i(8,"label",7),e(9,"Job"),n(),e(10,`
357      `),i(11,"p-select",8),N("ngModelChange",function(_){return O(d.selectedJobId,_)||(d.selectedJobId=_),_}),T("onChange",function(){return d.onJobFilterChange()}),n(),e(12,`
358      `),i(13,"p-selectButton",9),N("ngModelChange",function(_){return O(d.selectedRange,_)||(d.selectedRange=_),_}),T("onChange",function(){return d.onRangeChange()}),n(),e(14,`
359      `),i(15,"a",10),e(16,`
360        `),p(17,"i",11),e(18,`Job Logs
361      `),n(),e(19,`
362    `),n(),e(20,`
363  `),n(),e(21,`
364
365  `),x(22,vt,12,1),x(23,gt,3,0)(24,ii,182,59),n(),e(25,`
366`)),m&2&&(o(4),s("hideBorder",!0),o(7),s("options",d.jobFilterOptions),M("ngModel",d.selectedJobId),s("filter",!0),o(2),s("options",d.rangeOptions),M("ngModel",d.selectedRange),s("allowEmpty",!1),o(2),s("routerLink",D(11,Je))("queryParams",d.selectedJobId?w(12,bt,d.selectedJobId):D(14,ft)),o(7),u(d.error?22:-1),o(),u(d.loading?23:d.overview?24:-1))},dependencies:[Z,X,ee,ne,me,re,pe,le,ue,xe,he,se,Ne,$e,Oe,oe,de,be,z,ce],encapsulation:2});let a=r;return a})();var ni=a=>({days:a}),De=()=>["/admin/job-logs"],ai=a=>({jobId:a}),Qe=a=>({jobLogId:a}),oi=a=>["/admin/error-logs",a],ri=(a,r)=>({jobId:a,clubId:r});function li(a,r){if(a&1){let t=B();e(0,`
367    `),i(1,"div",10),e(2,`
368      `),i(3,"app-inline-alert",11),e(4),i(5,"button",12),T("click",function(){j(t);let m=c();return J(m.load())}),e(6,`
369          `),p(7,"i",13),e(8,`Retry
370        `),n(),e(9,`
371      `),n(),e(10,`
372    `),n(),e(11,`
373  `)}if(a&2){let t=c();o(4),f(`
374        `,t.error,`
375        `)}}function di(a,r){a&1&&(e(0,`
376    `),p(1,"app-skeleton-template",14),e(2,`
377  `))}function si(a,r){if(a&1&&(e(0,`
378          `),i(1,"span",45),e(2,`
379            `),p(3,"i",46),e(4),i(5,"code",47),e(6),n(),e(7,`
380          `),n(),e(8,`
381        `)),a&2){let t=c(2);o(4),f("",t.detail.summary.scheduleDescription||"Schedule",`
382            `),o(2),h(t.detail.summary.cronExpression)}}function mi(a,r){a&1&&(e(0,`
383          `),p(1,"app-pill",48),e(2,`
384        `)),a&2&&(o(),s("nowrap",!0))}function pi(a,r){if(a&1&&(e(0,`
385          `),i(1,"span",49),e(2,"Last run"),n(),e(3,`
386          `),p(4,"app-pill",50),e(5,`
387          `),i(6,"span",51),e(7),b(8,"utcDate"),n(),e(9,`
388        `)),a&2){let t=c(2);o(4),s("text",t.detail.summary.lastRunStatusName)("status",t.statusPill(t.detail.summary.lastRunStatusId))("nowrap",!0),o(3),h(y(8,4,t.detail.summary.lastRunDate,"MM/dd/yyyy hh:mm a"))}}function ci(a,r){if(a&1&&(e(0,`
389              `),i(1,"div",52),e(2),b(3,"number"),n(),e(4,`
390            `)),a&2){let t=c(2);o(),s("pTooltip","The schedule implies about "+t.detail.expectedRuns+" runs over this window. Approximate \u2014 the cadence is read off the cron expression, and a fire is skipped while the previous run is still going."),o(),f(`
391                `,y(3,2,t.detail.scheduleAdherencePercent,"1.0-0"),`% of schedule
392              `)}}function xi(a,r){if(a&1&&(e(0,`
393              `),i(1,"div",53),e(2,`
394                `),p(3,"i"),e(4),n(),e(5,`
395            `)),a&2){let t=c(2);o(),s("ngClass",t.changeClass(t.detail.summary.averageDurationChangePercent,!1)),o(2),F(t.changeIcon(t.detail.summary.averageDurationChangePercent)),o(),f(`
396                `,t.formatChange(t.detail.summary.averageDurationChangePercent),` vs prior window
397              `)}}function ui(a,r){if(a&1&&(e(0),b(1,"number")),a&2){let t=c(2);f(`
398                `,y(1,1,t.detail.summary.itemsPerSecond,"1.0-2"),`/s
399              `)}}function hi(a,r){if(a&1&&(e(0,`
400                `),i(1,"span",54),e(2),b(3,"number"),n(),e(4,`
401              `)),a&2){let t=c(2);o(2),f("",v(3,1,t.detail.summary.itemsFailed)," failed")}}function bi(a,r){if(a&1&&(e(0,`
402        `),i(1,"div",55),e(2,`
403          `),p(3,"i",56),e(4),n(),e(5,`
404      `)),a&2){let t=c(2);o(4),H(`
405          Longest quiet stretch between runs: `,t.formatDuration(t.detail.longestGapMinutes*60),` (average
406          `,t.formatDuration(t.detail.averageGapMinutes*60),`).
407        `)}}function fi(a,r){if(a&1&&(e(0,`
408            `),i(1,"app-inline-alert",57),e(2),b(3,"number"),b(4,"number"),n(),e(5,`
409          `)),a&2){let t=c(2);o(),s("isInline",!0),o(),H(`
410              Showing the `,v(3,3,t.detail.runsSampled)," most recent of ",v(4,5,t.detail.summary.runs),` runs. The
411              charts below cover the whole window.
412            `)}}function _i(a,r){if(a&1&&(e(0,`
413              `),i(1,"div",59),e(2),b(3,"number"),n(),e(4,`
414            `)),a&2){let t=c(3);o(2),f(`
415                `,v(3,1,t.outlierCount),` of the plotted runs ran longer than the p95.
416              `)}}function Ci(a,r){if(a&1&&(e(0,`
417            `),p(1,"p-chart",58),e(2,`
418            `),x(3,_i,5,3)),a&2){let t=c(2);o(),s("type",t.scatterChart.type)("data",t.scatterChart.data)("options",t.scatterChart.options),o(2),u(t.outlierCount?3:-1)}}function vi(a,r){a&1&&(e(0,`
419            `),i(1,"div",60),e(2,"No completed runs in this window."),n(),e(3,`
420          `))}function gi(a,r){if(a&1&&(e(0,`
421            `),p(1,"p-chart",61),e(2,`
422          `)),a&2){let t=c(2);o(),s("type",t.histogramChart.type)("data",t.histogramChart.data)("options",t.histogramChart.options)}}function Si(a,r){a&1&&(e(0,`
423            `),i(1,"div",60),e(2,"No completed runs in this window."),n(),e(3,`
424          `))}function Ei(a,r){if(a&1&&(e(0,`
425            `),p(1,"p-chart",61),e(2,`
426          `)),a&2){let t=c(2);o(),s("type",t.outcomeChart.type)("data",t.outcomeChart.data)("options",t.outcomeChart.options)}}function yi(a,r){a&1&&(e(0,`
427            `),i(1,"div",60),e(2,"No runs in this window."),n(),e(3,`
428          `))}function wi(a,r){if(a&1&&(e(0,`
429            `),p(1,"p-chart",62),e(2,`
430          `)),a&2){let t=c(2);o(),s("type",t.runLengthChart.type)("data",t.runLengthChart.data)("options",t.runLengthChart.options)}}function Di(a,r){a&1&&(e(0,`
431            `),i(1,"div",60),e(2,"No completed runs in this window."),n(),e(3,`
432          `))}function Pi(a,r){a&1&&(e(0,`
433                `),i(1,"tr"),e(2,`
434                  `),i(3,"th"),e(4,"Run"),n(),e(5,`
435                  `),i(6,"th"),e(7,"Started"),n(),e(8,`
436                  `),i(9,"th"),e(10,"Duration"),n(),e(11,`
437                  `),i(12,"th"),e(13,"Processed"),n(),e(14,`
438                  `),i(15,"th"),e(16,"Status"),n(),e(17,`
439                `),n(),e(18,`
440              `))}function Ti(a,r){if(a&1&&(e(0,`
441                `),i(1,"tr"),e(2,`
442                  `),i(3,"td"),e(4,`
443                    `),i(5,"a",63),e(6),n(),e(7,`
444                  `),n(),e(8,`
445                  `),i(9,"td")(10,"span",64),e(11),b(12,"utcDate"),n()(),e(13,`
446                  `),i(14,"td")(15,"span",65),e(16),n()(),e(17,`
447                  `),i(18,"td")(19,"span",66),e(20),n()(),e(21,`
448                  `),i(22,"td"),e(23,`
449                    `),p(24,"app-pill",67),e(25,`
450                  `),n(),e(26,`
451                `),n(),e(27,`
452              `)),a&2){let t=r.$implicit,l=c(2);o(5),s("routerLink",D(12,De))("queryParams",w(13,Qe,t.jobLogId)),o(),f("#",t.jobLogId),o(5),h(y(12,9,t.startDate,"MM/dd hh:mm a")),o(5),h(l.formatDuration(t.durationSeconds)),o(4),h(t.itemsProcessed??"\u2014"),o(4),s("text",t.jobStatusName)("status",l.statusPill(t.jobStatusId))("nowrap",!0)}}function Ii(a,r){a&1&&(e(0,`
453                `),i(1,"tr"),e(2,`
454                  `),i(3,"td",68),e(4,`
455                    `),i(5,"app-inline-alert",69),e(6,"No completed runs in this window."),n(),e(7,`
456                  `),n(),e(8,`
457                `),n(),e(9,`
458              `)),a&2&&(o(5),s("isInline",!0))}function Ri(a,r){a&1&&(e(0,`
459                `),i(1,"tr"),e(2,`
460                  `),i(3,"th"),e(4,"Run"),n(),e(5,`
461                  `),i(6,"th"),e(7,"Started"),n(),e(8,`
462                  `),i(9,"th"),e(10,"Status"),n(),e(11,`
463                  `),i(12,"th"),e(13,"Failed"),n(),e(14,`
464                  `),i(15,"th",70),e(16,"Summary"),n(),e(17,`
465                `),n(),e(18,`
466              `))}function ki(a,r){if(a&1&&(e(0,`
467                      `),i(1,"a",73),e(2,`
468                        `),p(3,"i",74),e(4),n(),e(5,`
469                    `)),a&2){let t=c().$implicit;o(),s("routerLink",w(2,oi,t.errorId)),o(3),f("Error #",t.errorId,`
470                      `)}}function ji(a,r){if(a&1&&(e(0,`
471                `),i(1,"tr"),e(2,`
472                  `),i(3,"td"),e(4,`
473                    `),i(5,"a",63),e(6),n(),e(7,`
474                  `),n(),e(8,`
475                  `),i(9,"td")(10,"span",64),e(11),b(12,"utcDate"),n()(),e(13,`
476                  `),i(14,"td"),e(15,`
477                    `),p(16,"app-pill",67),e(17,`
478                  `),n(),e(18,`
479                  `),i(19,"td")(20,"span",71),e(21),n()(),e(22,`
480                  `),i(23,"td"),e(24,`
481                    `),i(25,"span",72),e(26),n(),e(27,`
482                    `),x(28,ki,6,4),n(),e(29,`
483                `),n(),e(30,`
484              `)),a&2){let t=r.$implicit,l=c(2);o(5),s("routerLink",D(13,De))("queryParams",w(14,Qe,t.jobLogId)),o(),f("#",t.jobLogId),o(5),h(y(12,10,t.startDate,"MM/dd hh:mm a")),o(5),s("text",t.jobStatusName)("status",l.statusPill(t.jobStatusId))("nowrap",!0),o(5),h(t.itemsFailed??"\u2014"),o(5),h(t.summary||"\u2014"),o(2),u(t.errorId?28:-1)}}function Ji(a,r){a&1&&(e(0,`
485                `),i(1,"tr"),e(2,`
486                  `),i(3,"td",68),e(4,`
487                    `),i(5,"app-inline-alert",69),e(6,`
488                      `),p(7,"i",75),e(8,`No failures in this window.
489                    `),n(),e(9,`
490                  `),n(),e(10,`
491                `),n(),e(11,`
492              `)),a&2&&(o(5),s("isInline",!0))}function Ai(a,r){a&1&&(e(0,`
493                  `),i(1,"tr"),e(2,`
494                    `),i(3,"th"),e(4,"Club"),n(),e(5,`
495                    `),i(6,"th"),e(7,"Runs Affected"),n(),e(8,`
496                    `),i(9,"th"),e(10,"Items Failed"),n(),e(11,`
497                    `),p(12,"th"),e(13,`
498                  `),n(),e(14,`
499                `))}function Li(a,r){if(a&1&&(e(0,`
500                        `),i(1,"a",79),e(2,`
501                          View runs
502                        `),n(),e(3,`
503                      `)),a&2){let t=c().$implicit,l=c(3);o(),s("routerLink",D(2,De))("queryParams",Q(3,ri,l.jobId,t.clubId))}}function Fi(a,r){if(a&1&&(e(0,`
504                  `),i(1,"tr"),e(2,`
505                    `),i(3,"td"),e(4,`
506                      `),i(5,"span",66),e(6),n(),e(7,`
507                    `),n(),e(8,`
508                    `),i(9,"td")(10,"span",66),e(11),b(12,"number"),n()(),e(13,`
509                    `),i(14,"td")(15,"span",71),e(16),b(17,"number"),n()(),e(18,`
510                    `),i(19,"td"),e(20,`
511                      `),x(21,Li,4,6),n(),e(22,`
512                  `),n(),e(23,`
513                `)),a&2){let t=r.$implicit;o(6),h(t.clubName||(t.clubId?"Club "+t.clubId:"No club")),o(5),h(v(12,4,t.failedDetails)),o(5),h(v(17,6,t.itemsFailed)),o(5),u(t.clubId?21:-1)}}function Bi(a,r){if(a&1&&(e(0,`
514        `),i(1,"div",29),e(2,`
515          `),i(3,"app-admin-dashboard-card",76),e(4,`
516            `),p(5,"app-tooltip",77),e(6,`
517            `),i(7,"div",41),e(8,`
518              `),i(9,"p-table",78),e(10,`
519                `),S(11,Ai,15,0,"ng-template",null,0,E),e(13,`
520                `),S(14,Fi,24,8,"ng-template",null,1,E),e(16,`
521              `),n(),e(17,`
522            `),n(),e(18,`
523          `),n(),e(19,`
524        `),n(),e(20,`
525      `)),a&2){let t=c(2);o(5),s("renderAsLink",!1),o(4),s("value",t.detail.topFailingClubs)}}function Mi(a,r){if(a&1&&(e(0,`
526    `),e(1,`
527    `),i(2,"div",15),e(3,`
528      `),i(4,"div",16),e(5,`
529        `),x(6,si,9,2),x(7,mi,3,1),x(8,pi,10,7),n(),e(9,`
530
531      `),i(10,"div",17),e(11,`
532        `),i(12,"div",18),e(13,`
533          `),i(14,"div",19),e(15,`
534            `),i(16,"span",20),e(17,"Runs"),n(),e(18,`
535            `),i(19,"div",21),e(20),b(21,"number"),n(),e(22,`
536            `),x(23,ci,5,5),n(),e(24,`
537        `),n(),e(25,`
538        `),i(26,"div",18),e(27,`
539          `),i(28,"div",19),e(29,`
540            `),i(30,"span",22),e(31,"Success Rate"),n(),e(32,`
541            `),i(33,"div",21),e(34),b(35,"number"),n(),e(36,`
542            `),i(37,"div",23),e(38),b(39,"number"),n(),e(40,`
543          `),n(),e(41,`
544        `),n(),e(42,`
545        `),i(43,"div",18),e(44,`
546          `),i(45,"div",19),e(46,`
547            `),i(47,"span",24),e(48,`Average
548              Run`),n(),e(49,`
549            `),i(50,"div",21),e(51),n(),e(52,`
550            `),x(53,xi,6,4),n(),e(54,`
551        `),n(),e(55,`
552        `),i(56,"div",18),e(57,`
553          `),i(58,"div",19),e(59,`
554            `),i(60,"span",25),e(61,`p50
555              / p95`),n(),e(62,`
556            `),i(63,"div",21),e(64),n(),e(65,`
557            `),i(66,"div",23),e(67),n(),e(68,`
558          `),n(),e(69,`
559        `),n(),e(70,`
560        `),i(71,"div",18),e(72,`
561          `),i(73,"div",19),e(74,`
562            `),i(75,"span",26),e(76,"Time Running"),n(),e(77,`
563            `),i(78,"div",21),e(79),n(),e(80,`
564            `),i(81,"div",23),e(82),n(),e(83,`
565          `),n(),e(84,`
566        `),n(),e(85,`
567        `),i(86,"div",27),e(87,`
568          `),i(88,"div",19),e(89,`
569            `),i(90,"span",28),e(91,"Items"),n(),e(92,`
570            `),i(93,"div",21),e(94),b(95,"number"),n(),e(96,`
571            `),i(97,"div",23),e(98,`
572              `),x(99,ui,2,4),x(100,hi,5,3),n(),e(101,`
573          `),n(),e(102,`
574        `),n(),e(103,`
575      `),n(),e(104,`
576
577      `),x(105,bi,6,2),n(),e(106,`
578
579    `),i(107,"div",17),e(108,`
580      `),e(109,`
581      `),i(110,"div",29),e(111,`
582        `),i(112,"app-admin-dashboard-card",30),e(113,`
583          `),p(114,"app-tooltip",31),e(115,`
584
585          `),x(116,fi,6,7),x(117,Ci,4,4)(118,vi,4,0),n(),e(119,`
586      `),n(),e(120,`
587
588      `),i(121,"div",32),e(122,`
589        `),i(123,"app-admin-dashboard-card",33),e(124,`
590          `),p(125,"app-tooltip",34),e(126,`
591          `),x(127,gi,3,3)(128,Si,4,0),n(),e(129,`
592      `),n(),e(130,`
593
594      `),i(131,"div",32),e(132,`
595        `),i(133,"app-admin-dashboard-card",35),e(134,`
596          `),p(135,"app-tooltip",36),e(136,`
597          `),x(137,Ei,3,3)(138,yi,4,0),n(),e(139,`
598      `),n(),e(140,`
599
600      `),i(141,"div",29),e(142,`
601        `),i(143,"app-admin-dashboard-card",37),e(144,`
602          `),p(145,"app-tooltip",38),e(146,`
603          `),x(147,wi,3,3)(148,Di,4,0),n(),e(149,`
604      `),n(),e(150,`
605    `),n(),e(151,`
606
607    `),i(152,"div",17),e(153,`
608      `),e(154,`
609      `),i(155,"div",32),e(156,`
610        `),i(157,"app-admin-dashboard-card",39),e(158,`
611          `),p(159,"app-tooltip",40),e(160,`
612          `),i(161,"div",41),e(162,`
613            `),i(163,"p-table",42),e(164,`
614              `),S(165,Pi,19,0,"ng-template",null,0,E),e(167,`
615              `),S(168,Ti,28,15,"ng-template",null,1,E),e(170,`
616              `),S(171,Ii,10,1,"ng-template",null,2,E),e(173,`
617            `),n(),e(174,`
618          `),n(),e(175,`
619        `),n(),e(176,`
620      `),n(),e(177,`
621
622      `),i(178,"div",32),e(179,`
623        `),i(180,"app-admin-dashboard-card",43),e(181,`
624          `),p(182,"app-tooltip",44),e(183,`
625          `),i(184,"div",41),e(185,`
626            `),i(186,"p-table",42),e(187,`
627              `),S(188,Ri,19,0,"ng-template",null,0,E),e(190,`
628              `),S(191,ji,31,16,"ng-template",null,1,E),e(193,`
629              `),S(194,Ji,12,1,"ng-template",null,2,E),e(196,`
630            `),n(),e(197,`
631          `),n(),e(198,`
632        `),n(),e(199,`
633      `),n(),e(200,`
634
635      `),x(201,Bi,21,2),n(),e(202,`
636  `)),a&2){let t=c();o(6),u(t.detail.summary.cronExpression?6:-1),o(),u(t.detail.summary.enabled?-1:7),o(),u(t.detail.summary.lastRunStatusName?8:-1),o(12),h(v(21,31,t.detail.summary.runs)),o(3),u(t.detail.scheduleAdherencePercent!==null&&t.detail.scheduleAdherencePercent!==void 0?23:-1),o(11),f("",y(35,33,t.detail.summary.successRatePercent,"1.0-1"),"%"),o(4),f(`
637              `,v(39,36,t.detail.summary.failedRuns+t.detail.summary.completedWithErrorRuns),` unclean
638            `),o(13),h(t.formatDuration(t.detail.summary.averageDurationSeconds)),o(2),u(t.detail.summary.averageDurationChangePercent?53:-1),o(11),h(t.formatDuration(t.detail.summary.medianDurationSeconds)),o(3),f("p95 ",t.formatDuration(t.detail.summary.p95DurationSeconds)),o(12),h(t.formatDuration(t.detail.summary.totalDurationSeconds)),o(3),f("max ",t.formatDuration(t.detail.summary.maxDurationSeconds)),o(12),h(v(95,38,t.detail.summary.itemsProcessed)),o(5),u(t.detail.summary.itemsPerSecond?99:-1),o(),u(t.detail.summary.itemsFailed?100:-1),o(5),u(t.detail.longestGapMinutes?105:-1),o(9),s("renderAsLink",!1),o(2),u(t.runsTruncated?116:-1),o(),u(t.scatterChart?117:118),o(8),s("renderAsLink",!1),o(2),u(t.histogramChart?127:128),o(8),s("renderAsLink",!1),o(2),u(t.outcomeChart?137:138),o(8),s("renderAsLink",!1),o(2),u(t.runLengthChart?147:148),o(12),s("renderAsLink",!1),o(4),s("value",t.detail.slowestRuns),o(19),s("renderAsLink",!1),o(4),s("value",t.detail.recentFailures),o(15),u(t.detail.topFailingClubs!=null&&t.detail.topFailingClubs.length?201:-1)}}var Ze=(()=>{let r=class r{constructor(l,m,d,g){this.jobPerformanceService=l,this.siteDataService=m,this.router=d,this.route=g,this.unsubscribe$=new q,this.loading=!0,this.error="",this.selectedRange=R.LAST_7_DAYS,this.rangeOptions=ve,this.formatDuration=I,this.statusPill=fe,this.formatChange=ge,this.changeClass=Se,this.changeIcon=Ee}ngOnInit(){Ae([this.route.params,this.route.queryParams]).pipe(L(this.unsubscribe$)).subscribe({next:([l,m])=>{this.jobId=+l.jobID,m.days&&(this.selectedRange=+m.days),this.jobId>0?this.load():(this.error="No job was named in the URL.",this.loading=!1,this.siteDataService.hideSiteLoader())},error:()=>{this.error="Unable to read the job from the URL.",this.loading=!1,this.siteDataService.hideSiteLoader()}})}ngOnDestroy(){this.unsubscribe$.next(),this.unsubscribe$.complete()}load(){this.loading=!0,this.error="",this.jobPerformanceService.getJobDetail(this.jobId,this.selectedRange).pipe(L(this.unsubscribe$)).subscribe({next:l=>{this.detail=l,this.buildCharts(),this.loading=!1,this.siteDataService.hideSiteLoader()},error:l=>{this.error=l?.status===404?"That job no longer exists.":`Failed to load this job's performance${l?.status?` (HTTP ${l.status})`:""}. Please try again.`,this.loading=!1,this.siteDataService.hideSiteLoader()}})}onRangeChange(){this.router.navigate([],{relativeTo:this.route,queryParams:{days:this.selectedRange},queryParamsHandling:"merge"})}get runsTruncated(){return!!this.detail&&this.detail.runsSampled<this.detail.summary.runs}get outlierCount(){return this.detail?.runs?.filter(l=>l.isOutlier).length??0}buildCharts(){this.outcomeChart=ye(this.detail?.trend),this.runLengthChart=we(this.detail?.trend),this.buildScatterChart(),this.buildHistogramChart()}buildScatterChart(){let l=(this.detail?.runs??[]).filter(C=>C.durationSeconds!==null&&C.durationSeconds!==void 0);if(!l.length){this.scatterChart=null;return}let m=A(),d=(C,W,Xe)=>({label:C,data:l.filter(Xe).map(Pe=>({x:_e(Pe.startDate),y:Pe.durationSeconds,jobLogId:Pe.jobLogId})),backgroundColor:W,borderColor:m.surface,borderWidth:1,pointRadius:4,pointHoverRadius:7}),g=[d("Succeeded",m.success,C=>C.jobStatusId===V.SUCCESS),d("Completed with errors",m.warning,C=>C.jobStatusId===V.COMPLETED_WITH_ERRORS),d("Failed",m.critical,C=>C.jobStatusId===V.FAILURE),d("Canceled",m.muted,C=>C.jobStatusId===V.CANCELED)].filter(C=>C.data.length),_=this.detail.summary.p95DurationSeconds;if(_){let C=_e(l[0].startDate),W=_e(l[l.length-1].startDate);g.push({type:"line",label:`p95 (${I(_)})`,data:[{x:C,y:_},{x:W,y:_}],borderColor:m.neutral,borderWidth:2,borderDash:[6,4],pointRadius:0,fill:!1})}this.scatterChart={type:"scatter",data:{datasets:g},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{usePointStyle:!0,padding:16}},tooltip:{callbacks:{title:C=>
638new Date(C[0].parsed.x).toLocaleString(),label:C=>{let W=C.raw?.jobLogId?` \u2014 run #${C.raw.jobLogId}`:"";return`${C.dataset.label}: ${I(C.parsed.y)}${W}`}}}},scales:{x:{type:"linear",grid:{display:!1},ticks:{maxTicksLimit:8,callback:C=>new Date(C).toLocaleDateString(void 0,{month:"short",day:"numeric"})}},y:U(m.grid)}}}}buildHistogramChart(){let l=this.detail?.durationHistogram??[],m=l.map(_=>_.runs>0).lastIndexOf(!0);if(m<0){this.histogramChart=null;return}let d=A(),g=l.slice(0,m+1);this.histogramChart={type:"bar",data:{labels:g.map(_=>_.label),datasets:[{label:"Runs",data:g.map(_=>_.runs),backgroundColor:d.neutral,borderColor:d.surface,borderWidth:2,borderRadius:4}]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{label:_=>`${_.parsed.y} run${_.parsed.y===1?"":"s"}`}}},scales:{x:{grid:{display:!1},title:{display:!0,text:"Run length"}},y:{beginAtZero:!0,grid:{color:d.grid},title:{display:!0,text:"Runs"}}}}}}};r.\u0275fac=function(m){return new(m||r)(P($),P(ae),P(ie),P(te))},r.\u0275cmp=G({type:r,selectors:[["app-job-performance-detail"]],standalone:!1,decls:21,vars:15,consts:[["header",""],["body",""],["emptymessage",""],["role","main"],[1,"d-flex","justify-content-between","align-items-center","flex-wrap","border-bottom","mb-3"],["parentLinkText","Job Performance","parentLinkUrl","/admin/job-performance",3,"pageTitle","hideBorder","parentLinkQueryParams"],[1,"d-flex","align-items-center","flex-wrap","mb-2"],["optionLabel","label","optionValue","value",3,"ngModelChange","onChange","options","ngModel","allowEmpty"],[1,"btn","btn-sm","btn-naked","ml-3",3,"routerLink","queryParams"],[1,"fa-regular","fa-list","mr-1"],[1,"mb-3"],["alertType","error"],["type","button",1,"btn","btn-red","btn-sm","ml-2",3,"click"],[1,"fa-regular","fa-rotate-right","mr-1"],["height","220px"],[1,"card","dashboard-card","p-4","mb-3"],[1,"d-flex","align-items-center","flex-wrap","mb-3"],[1,"row"],[1,"col-6","col-lg-2","border-right"],[1,"full-height","py-2","text-center"],["pTooltip","Runs that started inside the window.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"dashboard-big-number"],["pTooltip","Share of finished runs that ended clean.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"text-smallest","text-muted"],["pTooltip","The typical run. Compare against p95 below: a job whose p95 sits far above its average is spiky rather than uniformly slow.",1,"dashboard-big-number--title","mb-2","hover-dotted"],["pTooltip","Median (p50) and 95th percentile run lengths. Half of runs finish inside the median; one in twenty takes longer than the p95.",1,"dashboard-big-number--title","mb-2","hover-dotted"],["pTooltip","Wall-clock time this job spent running across the whole window.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"col-6","col-lg-2"],["pTooltip","Items this job reported processing, and how fast it got through them.",1,"dashboard-big-number--title","mb-2","hover-dotted"],[1,"col-12","mb-3","d-flex","flex-column"],["panelTitle","Run Length Over Time","skeletonHeight","420px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","One point per run, coloured by how it ended. The dashed line is this window's 95th percentile \u2014 points above it are the slow tail worth opening.",3,"renderAsLink"],[1,"col-lg-6","mb-3","d-flex","flex-column"],["panelTitle","Run Length Distribution","skeletonHeight","380px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","How this job's run lengths are spread. One tall bar means a job that behaves the same every time; two separated humps mean it has two modes \u2014 usually a cheap no-op run and a real one.",3,"renderAsLink"],["panelTitle","Outcomes by Day","skeletonHeight","380px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","This job's runs each day, stacked by how they ended. A day with no bar is a day the job did not run at all.",3,"renderAsLink"],["panelTitle","Run Length by Day","skeletonHeight","340px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Average against worst run each day. The gap between the two lines is how spiky the job is \u2014 a rising average with a flat worst case is a different problem from a rising worst case alone.",3,"renderAsLink"],["panelTitle","Slowest Runs","bodyClass","card-body p-0","skeletonHeight","320px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","This job's longest runs in the window. Open one to see the summary, per-club detail and result payload it recorded.",3,"renderAsLink"],[1,"table-responsive"],["dataKey","jobLogId",1,"table","table-striped","table-sm",3,"value"],["panelTitle","Recent Failures","bodyClass","card-body p-0","skeletonHeight","320px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Runs that failed outright, finished with errors, or reported failed items \u2014 most recent first, with a link to the error each one logged.",3,"renderAsLink"],[1,"text-small","text-muted","mr-3"],[1,"fa-regular","fa-clock","mr-1"],[1,"ml-1"],["text","Disabled","status","error",3,"nowrap"],[1,"text-small","text-muted","mr-2"],[1,"mr-2",3,"text","status","nowrap"],[1,"text-small","text-muted"],[1,"text-smallest","text-muted","hover-dotted",3,"pTooltip"],[1,"text-smallest",3,"ngClass"],[1,"text-danger","ml-1"],[1,"text-smallest","text-muted","mt-3"],[1,"fa-regular","fa-circle-info","mr-1"],[1,"mb-2",3,"isInline"],["height","360px",3,"type","data","options"],[1,"text-smallest","text-muted","mt-2"],[1,"text-center","text-muted","py-4"],["height","320px",3,"type","data","options"],["height","280px",3,"type","data","options"],[3,"routerLink","queryParams"],[1,"text-smallest"],[1,"text-small","fw-800"],[1,"text-small"],[3,"text","status","nowrap"],["colspan","5",1,"text-center","py-4"],[3,"isInline"],[2,"width","40%"],[1,"text-small","text-danger","fw-800"],[1,"text-smallest","text-break"],[1,"d-block","text-smallest",3,"routerLink"],[1,"fa-regular","fa-triangle-exclamation","mr-1"],[1,"fa-regular","fa-circle-check","text-success","mr-1"],["panelTitle","Clubs With The Most Failures","bodyClass","card-body p-0","skeletonHeight","300px"],["slot","titleSuffix","tooltipPosition","top","tooltipText","Built from the per-club detail rows this job records. A single club dominating the list usually means bad data for that club rather than a broken job.",3,"renderAsLink"],["dataKey","clubId",1,"table","table-striped","table-sm",3,"value"],[1,"text-small",3,"routerLink","queryParams"]],template:function(m,d){m&1&&(i(0,"main",3),e(1,`
639  `),i(2,"div",4),e(3,`
640    `),p(4,"app-admin-header",5),e(5,`
641    `),i(6,"div",6),e(7,`
642      `),i(8,"p-selectButton",7),N("ngModelChange",function(_){return O(d.selectedRange,_)||(
642d.selectedRange=_),_}),T("onChange",function(){return d.onRangeChange()}),n(),e(9,`
643      `),i(10,"a",8),e(11,`
644        `),p(12,"i",9),e(13,`Runs
645      `),n(),e(14,`
646    `),n(),e(15,`
647  `),n(),e(16,`
648
649  `),x(17,li,12,1),x(18,di,3,0)(19,Mi,203,40),n(),e(20,`
650`)),m&2&&(o(4),s("pageTitle",(d.detail==null||d.detail.summary==null?null:d.detail.summary.jobName)||"Job Performance")("hideBorder",!0)("parentLinkQueryParams",w(10,ni,d.selectedRange)),o(4),s("options",d.rangeOptions),M("ngModel",d.selectedRange),s("allowEmpty",!1),o(2),s("routerLink",D(12,De))("queryParams",w(13,ai,d.jobId)),o(7),u(d.error?17:-1),o(),u(d.loading?18:d.detail?19:-1))},dependencies:[Z,X,ee,ne,me,re,pe,le,ue,xe,he,se,oe,de,be,z,ce],encapsulation:2});let a=r;return a})();var Oi=[{path:"",component:Ke,canActivate:[Re,ke,je],data:{admin:!0,metaTitle:"Job Performance"}},{path:":jobID",component:Ze,canActivate:[Re,ke,je],data:{admin:!0,metaTitle:"Job Performance"}}],ze=(()=>{let r=class r{};r.\u0275fac=function(m){return new(m||r)},r.\u0275mod=K({type:r}),r.\u0275inj=Y({imports:[Ie.forChild(Oi),Ie]});let a=r;return a})();var Rn=(()=>{let r=class r{};r.\u0275fac=function(m){return new(m||r)},r.\u0275mod=K({type:r}),r.\u0275inj=Y({providers:[$],imports:[We,He,ze]});let a=r;return a})();export{Rn as JobPerformanceModule};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.