1import{c as ae}from"./BaJcISE3.js";import{S as re}from"./CXVeLfBb.js";import{E as D,_ as E,r as $,o as b,c as v,a as k,aB as I,d as o,g as n,e as s,h as C,f as g,t as d,V as G,ab as m,eX as oe,a4 as V,z as T,a7 as X,aA as Y,aC as ie}from"./Cwz_WouP.js";import{U as P}from"./BRxYuIZ2.js";import{U as le}from"./BhJfXzvr.js";import{g as de,c as ce}from"./CnUJMEDP.js";import{U as pe}from"./u3mHYVTa.js";import{U as ue}from"./CHBmHQ0b.js";import"./Df9Fqs_l.js";import{U as me}from"./ClinoSA1.js";import{U as he}from"./bf1TkpW5.js";import{B as ge}from"./BQF8roka.js";import"./B4HPuSoq.js";import{U as fe}from"./D3MWzMF6.js";import{c as q}from"./Kg3O6Ei-.js";import{V as A,a as N,b as J}from"./DFGCUIv2.js";import{V as z}from"./EMO8Ef0j.js";import{a as Q,V as U}from"./3uNWqCd7.js";import{V as O}from"./BBor53VI.js";import{V as _}from"./CTdVocTC.js";import{r as Z}from"./D__jHXkW.js";import{V as B}from"./BzmqKkR-.js";import{V as ee}from"./CfgDvM8M.js";import{V as te}from"./CY3mqz-c.js";import{a as W,V as Se}from"./D_2XSvGx.js";import"./BEMJ86Yt.js";import"./DW2lbNFA.js";import"./B6ZByeEo.js";import"./U5qy42Yi.js";import"./CA_ukTPq.js";import"./BGe03BFN.js";import"./DgXOY76Q.js";import"./a5WZRLWG.js";import"./CRBiUrO-.js";import"./W-3E663_.js";import"./1xxwYsP6.js";import"./CK6wUuGO.js";import"./B8w0u1Rf.js";const ye=D({name:"ScannerSparkline",props:{states:{type:Array,default:()=>[]},metric:{type:String,required:!0},multiSeries:{type:Array,default:null}},emits:["click"],computed:{hasData(){return this.multiSeries!==null&&this.multiSeries!==void 0?this.multiSeries.length>0&&this.multiSeries.some(e=>e.data!==null&&e.data!==void 0&&e.data.length>0):this.states.length>0},scanIds(){return this.states.map(e=>e?.scanId?.toString()||"-")},timestamps(){return this.states.map(e=>e?.createdTime?new Date(e.createdTime).getTime():0)},series(){if(this.multiSeries!==null&&this.multiSeries!==void 0)return this.multiSeries;if(this.hasData===!1)return[{name:this.metric,data:[]}];const e=this.states.map(t=>t&&t[this.metric]||0);return[{name:this.metric,data:e}]},chartOptions(){const e=this.metric,t="%",a=this.$t.bind(this),r=this.multiSeries!==null&&this.multiSeries!==void 0,c=r?["#03A9F4","#66BB6A","#FFA726","#AB47BC","#EC407A","#26A69A","#78909C","#5C6BC0","#D4E157","#FF7043","#8D6E63","#26C6DA"]:e==="cpuLoad"?["#4078c0"]:e==="memoryLoad"?["#1f883d"]:["#c9510c"],h=this.scanIds,i=this.timestamps,l={chart:{type:r?"line":"area",sparkline:{enabled:!0},animations:{enabled:!1}},stroke:{width:r?1.5:2,curve:"smooth"},fill:{type:"solid",opacity:r?1:.15},markers:{size:0,hover:{size:r?2:3}},colors:c};return r===!0?(l.xaxis={type:"datetime"},l.tooltip={enabled:!0,shared:!0,intersect:!1,fixed:{enabled:!0,position:"topLeft",offsetX:0,offsetY:-90},y:{formatter:f=>`${Number(f).toFixed(1)}%`}}):(l.tooltip={enabled:!0,fixed:{enabled:!0,position:"topLeft",offsetX:0,offsetY:-90},custom:({series:f,seriesIndex:S,dataPointIndex:p})=>{const y=f[S][p],w=h[p],F=i[p],L=F?new Date(F):null,H=L?L.toLocaleDateString("en-US",{month:"numeric",day:"numeric"}):"-",M=L?L.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}):"-";return` 2 <div class="pa-2"> 3 <div class="text-body-2">${Number(y).toFixed(2)}${t}</div> 4 <div class="text-caption text-grey mt-1">${H} ${M}</div> 5 <div class="text-caption text-grey">${a("scanners.components.ScannerSparkline.scanId",{scanId:w})}</div> 6 </div> 7 `}},l.labels=this.timestamps),l}}}),be={key:1,class:"text-caption text-grey"};function $e(e,t,a,r,c,h){const i=$("apexchart");return b(),v("div",{class:"sparkline-wrapper",onClick:t[0]||(t[0]=I(l=>e.$emit("click"),["stop"]))},[e.hasData===!0?(b(),k(i,{key:0,ref:"sparkline",height:"50",width:"80",options:e.chartOptions,series:e.series},null,8,["options","series"])):(b(),v("span",be,"-"))])}const se=E(ye,[["render",$e],["__scopeId","data-v-4ed9bd71"]]),ve=D({name:"ScannerChartModal",props:{modelValue:{type:Boolean,default:!1},scanner:{type:Object,default:null}},emits:["update:modelValue"],computed:{dialog:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},states(){return this.scanner?.states?.scannerStates||[]},scanIds(){return this.states.map(e=>e?.scanId?.toString()||"-")},timestamps(){return this.states.map(e=>e?.createdTime?new Date(e.createdTime).getTime():0)},cpuSeries(){const e=this.states.map(t=>({x:t?.createdTime?new Date(t.createdTime).getTime():0,y:t?.cpuLoad||0}
7));return[{name:this.$t("scanners.components.ScannerChartModal.cpuLoad"),data:e}]},memorySeries(){const e=this.states.map(t=>({x:t?.createdTime?new Date(t.createdTime).getTime():0,y:t?.memoryLoad||0}));return[{name:this.$t("scanners.components.ScannerChartModal.memoryLoad"),data:e}]},diskSeries(){const e=this.states.map(t=>({x:t?.createdTime?new Date(t.createdTime).getTime():0,y:t?.diskUsage||0}));return[{name:this.$t("scanners.components.ScannerChartModal.diskLoad"),data:e}]},baseOptions(){return{chart:{type:"area",fontFamily:q.fontFamily,toolbar:{show:!1},animations:{enabled:!1}},fill:{type:"solid",opacity:.3},stroke:{width:2,curve:"smooth"},dataLabels:{enabled:!1},markers:{size:4,hover:{size:6}},xaxis:{type:"datetime",tooltip:{enabled:!0,format:"dd MMM HH:mm"},labels:{format:"HH:mm"}},yaxis:{labels:{formatter:e=>`${e}%`},min:0,max:100},grid:{strokeDashArray:4},noData:q.noData}},cpuOptions(){return this.buildChartOptions("#4078c0",e=>{const t=this.states[e];return t==null?"-":`${((t.cpuLoad||0)/100*(t.totalCpu||0)).toFixed(2)} / ${Number(t.totalCpu).toFixed(2)} cores`})},memoryOptions(){return this.buildChartOptions("#1f883d",e=>{const t=this.states[e];if(t==null)return"-";const a=(t.memoryLoad||0)/100*(t.totalMemory||0);return`${this.formatBytes(a)} / ${this.formatBytes(t.totalMemory||0)}`})},diskOptions(){return this.buildChartOptions("#c9510c",e=>{const t=this.states[e];if(t==null)return"-";const a=(t.diskUsage||0)/100*(t.totalDisk||0);return`${this.formatBytes(a)} / ${this.formatBytes(t.totalDisk||0)}`})}},methods:{formatBytes(e){return e>=1024**3?`${(e/1024**3).toFixed(2)} GB`:e>=1024**2?`${(e/1024**2).toFixed(2)} GB`:`${Number(e).toFixed(2)} GB`},buildChartOptions(e,t){const a=this.timestamps;return{...this.baseOptions,colors:[e],tooltip:{enabled:!0,shared:!1,custom:({series:r,seriesIndex:c,dataPointIndex:h})=>{const i=r[c][h],l=t(h),f=this.scanIds[h],S=a[h],p=S?new Date(S):null,y=p?p.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}):"-";return this.tooltipHtml({value:i,actualValue:l,scanId:f,timeStr:y})}},chart:{...this.baseOptions.chart,events:{markerClick:(r,c,{dataPointIndex:h})=>{if(h<0||h>=this.states.length)return;const i=this.states[h]?.scanId;i!=null&&this.$router.push(this.$orgPath(`/scan/${i}`))}}}}},tooltipHtml({value:e,actualValue:t,scanId:a,timeStr:r}){return` 8 <div class="pa-2"> 9 <div class="text-body-2">${t}</div> 10 <div class="text-caption text-grey mt-1">${Number(e).toFixed(2)}%</div> 11 <div class="text-caption text-grey mt-1">${r}</div> 12 <div class="text-caption text-grey mt-1">${this.$t("scanners.components.ScannerChartModal.scanId",{scanId:a})}</div> 13 </div> 14 `}}}),we={class:"pa-4 border-b bg-grey-lighten-5 d-flex align-center"},ke={class:"d-flex align-center justify-center mr-3 rounded-md",style:{width:"36px",height:"36px","background-color":"#ffffff",border:"1px solid #e2e8f0"}},Ce={class:"text-subtitle-1 font-weight-bold text-grey-darken-4 text-truncate",style:{"max-width":"650px"}},xe={class:"text-caption text-grey-darken-1"},Ge={class:"text-caption font-weight-bold text-grey-darken-3 mb-2 d-flex align-center ga-2"},Te={class:"text-caption font-weight-bold text-grey-darken-3 mb-2 d-flex align-center ga-2"},Le={class:"text-caption font-weight-bold text-grey-darken-3 mb-2 d-flex align-center ga-2"};function Me(e,t,a,r,c,h){const i=$("apexchart");return b(),k(O,{modelValue:e.dialog,"onUpdate:modelValue":t[1]||(t[1]=l=>e.dialog=l),"max-width":"900"},{default:o(()=>[e.scanner!==null&&e.scanner!==void 0?(b(),k(A,{key:0,class:"rounded-md border pa-0"},{default:o(()=>[n("div",we,[n("div",ke,[s(C,{size:"20",color:"grey-darken-3"},{default:o(()=>[...t[2]||(t[2]=[g(" mdi-chart-timeline-variant-shimmer ",-1)])]),_:1})]),n("div",null,[n("div",Ce,d(e.scanner.name),1),n("div",xe,d(e.$t("scanners.components.ScannersTable.openMetricsTooltip")),1)]),s(z),s(G,{icon:"mdi-close",variant:"text",density:"compact",size:"small",onClick:t[0]||(t[0]=l=>e.dialog=!1)})]),s(N,{class:"pa-5"},{default:o(()=>[s(Q,null,{default:o(()=>[s(U,{cols:"12"},{default:o(()=>[n("div",Ge,[s(C,{size:"16",color:"grey-darken-2"},{default:o(()=>[...t[3]||(t[3]=[g("mdi-cpu-64-bit",-1)])]),_:1}),g(" "+d(e.$t("scanners.components.ScannerChartModal.cpuLoad"))+" (%) ",1)]),s(i,{height:"200",options:e.cpuOptions,series:e.cpuSeries},null,8,["options","series"])]),_:1}),s(U,{cols:"12",class:"mt-2"},{default:o(()=>[n("div",Te,[s(C,{size:"16",color:"grey-darken-2"},{default:o(()=>[...t[4]||(t[4]=[g("mdi-memory",-1)])]),_:1}),g(" "+d(e.$t("scanners.components.ScannerChartModal.memoryLoad"))+" (%) ",1)]),s(i,{height:"200",options:e.memoryOptions,series:e.memorySeries},null,8,["options","series"])]),_:1}),s(U,{cols:"12",class:"mt-2"},{default:o(()=>[n("div",Le,[s(C,{size:"16",color:"grey-darken-2"},{default:o(()=>[...t[5]||(t[5]=[g("mdi-harddisk",-1)])]),_:1}),g(" "+d(e.$t("scanners.components.ScannerChartModal.diskLoad"))+" (%) ",1)]),s(i,{height:"200",options:e.diskOptions,series:e.diskSeries},null,8,["options","series"])]),_:1})]),_:1})]),_:1})]),_:1})):m("",!0)]),_:1},8,["modelValue"])}const Ve=E(ve,[["render",Me]]),Ie=1800*1e3,Ue=D({name:"ScannersTable",components:{ScannerSparkline:se,ScannerChartModal:Ve,UiStatusChip:ce,UiCopyButton:de},props:{scanners:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},scannerGroups:{type:Array,default:()=>[]}},emits:["deleteScanner","editScanner","updateScanner","viewGroup"],data(){return{showChartModal:!1,modalScanner:null}},computed:{sortableScanners(){return this.scanners.map(e=>{const t=this.latestState(e);return{...e,_cpuLoad:t?.cpuLoad??null,_memoryLoad:t?.memoryLoad??null,_diskLoad:t?.diskUsage??null}})},headers(){return[{title:this.$t("scanners.components.ScannersTable.headers.name"),key:"name",sortable:!0,align:"start"},{title:this.$t("scanners.components.ScannersTable.headers.description"),key:"description",sortable:!1,align:"start",width:"280px"},{title:this.$t("scanners.components.ScannersTable.headers.groups"),key:"groups",sortable:!1,align:"center",width:"160px"},{title:this.$t("scanners.components.ScannersTable.headers.identifier"),key:"uuid",sortable:!1,align:"center",width:"170px"},{title:this.$t("scanners.components.ScannersTable.headers.status"),key:"status",sortable:!1,align:"center",width:"110px"},{title:this.$t("scanners.components.ScannersTable.headers.ipAddress"),key:"ipAddress",sortable:!1,align:"center",width:"120px"},{title:this.$t("scanners.components.ScannersTable.headers.resources"),key:"resources",sortable:!1,align:"center",width:"180px"},{title:this.$t("scanners.components.ScannersTable.headers.cpuLoad"),key:"_cpuLoad",sortable:!0,align:"center",width:"90px",cellProps:{class:"chart-cell"},headerProps:{class:"chart-cell"}},{title:this.$t("scanners.components.ScannersTable.headers.memoryLoad"),key:"_memoryLoad",sortable:!0,align:"center",width:"90px",cellProps:{class:"chart-cell"},headerProps:{class:"chart-cell"}},{title:this.$t("scanners.components.ScannersTable.headers.diskLoad"),key:"_diskLoad",sortable:!0,align:"center",width:"90px",cellProps:{class:"chart-cell"},headerProps:{class:"chart-cell"}},{title:this.$t("scanners.components.ScannersTable.headers.actions"),key:"actions",sortable:!1,align:"end",width:"100px"}]},groupsByScannerId(){const e=new Map;return this.scannerGroups.forEach(t=>
14{(t.scannerIds??[]).forEach(a=>{const r=String(a);e.has(r)||e.set(r,[]),e.get(r).push(t)})}),e}},methods:{formatShortUuid(e){return e?e.length<=16?e:`${e.slice(0,8)}â¦${e.slice(-6)}`:"-"},getScannerGroups(e){return this.scannerGroups.filter(t=>t.scannerIds&&t.scannerIds.map(String).includes(String(e.id)))},latestState(e){const t=e.states?.scannerStates;return t==null||t.length===0?null:t[0]},isUp(e){const t=this.latestState(e);if(t==null||t.createdTime===void 0||t.createdTime===null)return!1;const a=Date.now()-Ie;return new Date(t.createdTime).getTime()>a},statusColor(e){return this.isUp(e)?"success":"error"},statusIcon(e){return this.isUp(e)?"mdi-server":"mdi-server-off"},statusText(e){return this.isUp(e)?this.$t("scanners.components.ScannersTable.status.up"):this.$t("scanners.components.ScannersTable.status.down")},formatMemory(e){return e==null?"-":`${e} GB`},formatDisk(e){return e==null?"-":`${e} GB`},async copyIdentifier(e){try{await oe(e),await this.$store.dispatch("contextui/reportSuccess",this.$t("scanners.components.ScannersTable.messages.copySuccess"))}catch(t){await this.$store.dispatch("contextui/reportError",this.$t("scanners.components.ScannersTable.messages.copyError",{message:t.message}))}},formatLoad(e,t){const a=this.latestState(e),r={cpuLoad:{value:a?.cpuLoad},memoryLoad:{value:a?.memoryLoad},diskLoad:{value:a?.diskUsage}},{value:c}=r[t];return c!=null?`${c.toFixed(1)} %`:"-"},openChartModal(e){this.modalScanner=e,this.showChartModal=!0}}}),De={class:"scanners-table-row"},Ee={class:"td-limited py-3",style:{"min-width":"180px","max-width":"240px"}},Ae={class:"d-flex align-center"},Be={class:"scanner-icon-container d-flex align-center justify-center mr-3 rounded-md flex-shrink-0"},Fe={class:"text-body-2 text-grey-darken-2 py-3",style:{"max-width":"280px"}},_e={class:"text-truncate d-inline-block",style:{"max-width":"260px"}},Ne={class:"text-center py-3",style:{"min-width":"160px","max-width":"220px"}},ze={class:"d-flex flex-wrap justify-center ga-1"},Oe={key:0,class:"text-caption text-medium-emphasis"},He={class:"text-center py-3 text-no-wrap",style:{"min-width":"170px"}},je={key:0,class:"uuid-badge d-inline-flex align-center rounded-md px-2 py-1"},Pe={key:1,class:"text-caption text-medium-emphasis"},Re={class:"text-center py-3",style:{width:"110px"}},qe={class:"text-center text-body-2 text-grey-darken-3 py-3",style:{width:"120px"}},We={class:"font-family-monospace text-caption"},Ke={class:"text-center text-body-2 text-grey-darken-3 py-3",style:{width:"180px"}},Xe={class:"font-weight-medium"},Ye={class:"font-weight-medium"},Je={class:"font-weight-medium"},Qe={class:"text-center py-2 chart-cell"},Ze=["title","onClick"],et={class:"text-caption font-weight-medium text-grey-darken-4 mt-1"},tt={class:"text-center py-2 chart-cell"},st=["title","onClick"],nt={class:"text-caption font-weight-medium text-grey-darken-4 mt-1"},at={class:"text-center py-2 chart-cell"},rt=["title","onClick"],ot={class:"text-caption font-weight-medium text-grey-darken-4 mt-1"},it={class:"text-end py-3 px-4",style:{"min-width":"100px"}},lt={class:"d-flex align-center justify-end ga-1"};function dt(e,t,a,r,c,h){const i=$("ScannerChartModal"),l=$("UiCopyButton"),f=$("UiStatusChip"),S=$("ScannerSparkline");return b(),v("div",null,[s(i,{modelValue:e.showChartModal,"onUpdate:modelValue":t[0]||(t[0]=p=>e.showChartModal=p),scanner:e.modalScanner},null,8,["modelValue","scanner"]),s(Z,{headers:e.headers,items:e.sortableScanners,loading:e.loading,"item-value":"id",class:"scanners-table elevation-0",hover:""},{item:o(({item:p})=>[n("tr",De,[m(" Name Column "),n("td",Ee,[n("div",Ae,[n("div",Be,[s(C,{size:"18",color:"grey-darken-3"},{default:o(()=>[...t[1]||(t[1]=[g(" mdi-shield-search ",-1)])]),_:1})]),s(V,{text:p.name,location:"top"},{activator:o(({props:y})=>[n("span",T(y,{class:"text-truncate d-inline-block text-body-2 font-weight-bold text-grey-darken-4"}),d(p.name),17)]),_:2},1032,["text"])])]),m(" Description Column "),n("td",Fe,[n("span",_e,d(p.description||"-"),1)]),m(" Groups Column "),n("td",Ne,[n("div",ze,[(b(!0),v(X,null,Y(e.groupsByScannerId.get(String(p.id))??[],y=>(b(),k(_,{key:y.id,size:"x-small",color:"accent",variant:"flat",label:"",class:"font-weight-bold cursor-pointer group-chip-hover",onClick:I(w=>e.$emit("viewGroup",y.id),["stop"])},{default:o(()=>[g(d(y.name),1)]),_:2},1032,["onClick"]))),128)),(e.groupsByScannerId.get(String(p.id))??[]).length===0?(b(),v("span",Oe,"-")):m("",!0)])]),m(" Identifier Column "),n("td",He,[p.uuid?(b(),v("div",je,[s(V,{location:"top",text:p.uuid},{activator:o(({props:y})=>[n("span",T(y,{class:"uuid-text text-caption font-weight-medium select-all mr-1 cursor-default"}),d(e.formatShortUuid(p.uuid)),17)]),_:2},1032,["text"]),s(l,{text:p.uuid,size:"x-small",variant:"ghost",tooltip:e.$t("scanners.components.ScannersTable.copyTooltip"),"custom-class":"uuid-copy-btn"},null,8,["text","tooltip"])])):(b(),v("span",Pe,"-"))]),m(" Status Column "),n("td",Re,[s(f,{color:e.statusColor(p),icon:e.isUp(p)?"mdi-check-circle":"mdi-alert-circle",size:"x-small"},{default:o(()=>[g(d(e.statusText(p)),1)]),_:2},1032,["color","icon"])]),m(" IP Address Column "),n("td",qe,[n("span",We,d(e.latestState(p)?.ipAddress??"-"),1)]),m(" Resources Column "),n("td",Ke,[n("span",Xe,d(e.latestState(p)?.totalCpu??"-"),1),t[2]||(t[2]=n("span",{class:"text-grey-lighten-1 mx-1"},"|",-1)),n("span",Ye,d(e.formatMemory(e.latestState(p)?.totalMemory)),1),t[3]||(t[3]=n("span",{class:"text-grey-lighten-1 mx-1"},"|",-1)),n("span",Je,d(e.formatDisk(e.latestState(p)?.totalDisk)),1)]),m(" CPU Load Chart "),n("td",Qe,[n("div",{class:"d-flex flex-column align-center cursor-pointer metric-cell-hover pa-1 rounded",title:e.$t("scanners.components.ScannersTable.o
14penMetricsTooltip"),onClick:y=>e.openChartModal(p)},[s(S,{states:p.states?.scannerStates||[],metric:"cpuLoad"},null,8,["states"]),n("span",et,d(e.formatLoad(p,"cpuLoad")),1)],8,Ze)]),m(" Memory Load Chart "),n("td",tt,[n("div",{class:"d-flex flex-column align-center cursor-pointer metric-cell-hover pa-1 rounded",title:e.$t("scanners.components.ScannersTable.openMetricsTooltip"),onClick:y=>e.openChartModal(p)},[s(S,{states:p.states?.scannerStates||[],metric:"memoryLoad"},null,8,["states"]),n("span",nt,d(e.formatLoad(p,"memoryLoad")),1)],8,st)]),m(" Disk Load Chart "),n("td",at,[n("div",{class:"d-flex flex-column align-center cursor-pointer metric-cell-hover pa-1 rounded",title:e.$t("scanners.components.ScannersTable.openMetricsTooltip"),onClick:y=>e.openChartModal(p)},[s(S,{states:p.states?.scannerStates||[],metric:"diskUsage"},null,8,["states"]),n("span",ot,d(e.formatLoad(p,"diskLoad")),1)],8,rt)]),m(" Actions Column "),n("td",it,[n("div",lt,[s(V,{location:"top",text:e.$t("scanners.components.ScannersTable.actions.edit")},{activator:o(({props:y})=>[s(G,T(y,{icon:"mdi-pencil-outline",size:"small",variant:"text",color:"grey-darken-3",class:"action-btn-edit rounded-md",onClick:I(w=>e.$emit("editScanner",p),["stop"])}),null,16,["onClick"])]),_:2},1032,["text"]),s(V,{location:"top",text:e.$t("scanners.components.ScannersTable.actions.delete")},{activator:o(({props:y})=>[s(G,T(y,{icon:"mdi-trash-can-outline",size:"small",variant:"text",color:"error",class:"action-btn-delete rounded-md",onClick:I(w=>e.$emit("deleteScanner",p),["stop"])}),null,16,["onClick"])]),_:2},1032,["text"])])])])]),_:1},8,["headers","items","loading"])])}const ct=E(Ue,[["render",dt],["__scopeId","data-v-36061ae6"]]),pt=D({name:"NewScannerDialog",components:{UiButton:P},props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:"Add New Scanner"},scanner:{type:Object,default:null},initialGroupIds:{type:Array,default:()=>[]},cancelButtonText:{type:String,default:"Cancel"},confirmButtonText:{type:String,default:""},cancelIcon:{type:String,default:"mdi-cancel"},confirmIcon:{type:String,default:"mdi-check"},confirmButtonColor:{type:String,default:"success"},scannerGroups:{type:Array,default:()=>[]}},emits:["update:modelValue","cancel","confirm"],data(){return{form:{name:"",description:"",groupIds:[]}}},watch:{modelValue:{immediate:!0,handler(e){e&&this.initForm()}},scanner:{immediate:!0,handler(){this.modelValue&&this.initForm()}}},methods:{initForm(){this.scanner!==null&&this.scanner!==void 0?this.form={name:this.scanner.name||"",description:this.scanner.description||"",groupIds:[...this.initialGroupIds||[]]}:this.resetForm()},resetForm(){this.form={name:"",description:"",groupIds:[]}},handleCancel(){this.$emit("update:modelValue",!1),this.$emit("cancel")},handleConfirm(){this.$emit("confirm",{name:this.form.name,description:this.form.description,groupIds:this.form.groupIds,id:this.scanner?.id})}}}),ut={class:"pa-4 border-b bg-grey-lighten-5 d-flex align-center"},mt={class:"d-flex align-center justify-center mr-3 rounded-md",style:{width:"36px",height:"36px","background-color":"#ffffff",border:"1px solid #e2e8f0"}},ht={class:"text-subtitle-1 font-weight-bold text-grey-darken-4"},gt={class:"text-caption text-grey-darken-1"},ft={class:"mb-4"},St={class:"text-caption font-weight-bold text-grey-darken-3 mb-1 d-block"},yt={class:"mb-4"},bt={class:"text-caption font-weight-bold text-grey-darken-3 mb-1 d-block"},$t={class:"mb-2"},vt={class:"text-caption font-weight-bold text-grey-darken-3 mb-1 d-block"};function wt(e,t,a,r,c,h){const i=$("UiButton");return b(),k(O,{"model-value":e.modelValue,"max-width":"600px","onUpdate:modelValue":t[3]||(t[3]=l=>e.$emit("update:modelValue",l))},{default:o(()=>[s(A,{class:"rounded-md border pa-0"},{default:o(()=>[n("div",ut,[n("div",mt,[s(C,{size:"20",color:"grey-darken-3"},{default:o(()=>[g(d(e.scanner!==null?"mdi-shield-edit-outline":"mdi-shield-plus-outline"),1)]),_:1})]),n("div",null,[n("div",ht,d(e.scanner!==null?e.$t("pages.scan.scanners.index.dialog.editTitle"):e.title),
141),n("div",gt,d(e.scanner!==null?e.$t("scanners.components.NewScanner.description"):e.$t("pages.scan.scanners.index.emptyState.addScannerDescription")),1)]),s(z),s(G,{icon:"mdi-close",variant:"text",density:"compact",size:"small",onClick:e.handleCancel},null,8,["onClick"])]),s(N,{class:"pa-5"},{default:o(()=>[n("div",ft,[n("label",St,[g(d(e.$t("scanners.components.NewScanner.name"))+" ",1),t[4]||(t[4]=n("span",{class:"text-error"},"*",-1))]),s(B,{modelValue:e.form.name,"onUpdate:modelValue":t[0]||(t[0]=l=>e.form.name=l),placeholder:e.$t("scanners.components.NewScanner.name"),density:"compact",variant:"outlined",rounded:"md",required:"","hide-details":"auto","prepend-inner-icon":"mdi-rename-box"},null,8,["modelValue","placeholder"])]),n("div",yt,[n("label",bt,d(e.$t("scanners.components.NewScanner.description")),1),s(B,{modelValue:e.form.description,"onUpdate:modelValue":t[1]||(t[1]=l=>e.form.description=l),placeholder:e.$t("scanners.components.NewScanner.description"),density:"compact",variant:"outlined",rounded:"md","hide-details":"auto","prepend-inner-icon":"mdi-card-text-outline"},null,8,["modelValue","placeholder"])]),n("div",$t,[n("label",vt,d(e.$t("pages.scan.scanners.index.groups.scannerField")),1),s(ee,{modelValue:e.form.groupIds,"onUpdate:modelValue":t[2]||(t[2]=l=>e.form.groupIds=l),items:e.scannerGroups,"item-title":"name","item-value":"id",multiple:"",chips:"","closable-chips":"",density:"compact",variant:"outlined",rounded:"md","hide-details":"auto","prepend-inner-icon":"mdi-folder-multiple-outline"},null,8,["modelValue","items"])])]),_:1}),s(te),s(J,{class:"pa-4 bg-grey-lighten-5 d-flex justify-end ga-2"},{default:o(()=>[s(i,{intent:"secondary",onClick:e.handleCancel},{default:o(()=>[g(d(e.$t("pages.scan.scanners.index.dialog.cancel")),1)]),_:1},8,["onClick"]),s(i,{intent:"success",disabled:!e.form.name||e.form.name.trim()==="",onClick:e.handleConfirm},{default:o(()=>[g(d(e.scanner!==null?e.$t("pages.scan.scanners.index.dialog.save"):e.confirmButtonText||e.$t("pages.scan.scanners.index.dialog.create")),1)]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})]),_:1},8,["model-value"])}const kt=E(pt,[["render",wt]]),Ct=D({name:"NewScannerGroupDialog",components:{UiButton:P},props:{modelValue:{type:Boolean,default:!1},scanners:{type:Array,default:()=>[]},group:{type:Object,default:()=>null},cancelIcon:{type:String,default:"mdi-close"},confirmIcon:{type:String,default:"mdi-check"},confirmButtonColor:{type:String,default:"success"}},emits:["update:modelValue","confirm","cancel"],data(){return{form:{name:"",description:"",scannerIds:[]}}},watch:{modelValue(e){e===!0&&(this.group!==null&&this.group!==void 0?this.form={name:this.group.name,description:this.group.description||"",scannerIds:[...this.group.scannerIds!==void 0&&this.group.scannerIds!==null?this.group.scannerIds:[]]}:this.resetForm())}},methods:{resetForm(){this.form={name:"",description:"",scannerIds:[]}},handleCancel(){this.$emit("update:modelValue",!1),this.$emit("cancel")},handleConfirm(){this.$emit("confirm",{name:this.form.name,description:this.form.description,scannerIds:this.form.scannerIds})}}}),xt={class:"pa-4 border-b bg-grey-lighten-5 d-flex align-center"},Gt={class:"d-flex align-center justify-center mr-3 rounded-md",style:{width:"36px",height:"36px","background-color":"#ffffff",border:"1px solid #e2e8f0"}},Tt={class:"text-subtitle-1 font-weight-bold text-grey-darken-4"},Lt={class:"text-caption text-grey-darken-1"},Mt={class:"mb-4"},Vt={class:"text-caption font-weight-bold text-grey-darken-3 mb-1 d-block"},It={class:"mb-4"},Ut={class:"text-caption font-weight-bold text-grey-darken-3 mb-1 d-block"},Dt={class:"mb-2"},Et={class:"text-caption font-weight-bold text-grey-darken-3 mb-1 d-block"};function At(e,t,a,r,c,h){const i=$("UiButton");return b(),k(O,{"model-value":e.modelValue,"max-width":"600px","onUpdate:modelValue":t[3]||(t[3]=l=>e.$emit("update:modelValue",l))},{default:o(()=>[s(A,{class:"rounded-md border pa-0"},{default:o(()=>[n("div",xt,[n("div",Gt,[s(C,{size:"20",color:"grey-darken-3"},{default:o(()=>[...t[4]||(t[4]=[g(" mdi-folder-multiple-outline ",-1)])]),_:1})]),n("div",null,[n("div",Tt,d(e.group!==null?e.$t("pages.scan.scanners.index.groups.dialog.editTitle"):e.$t("pages.scan.scanners.index.groups.dialog.title")),1),n("div",Lt,d(e.$t("pages.scan.scanners.index.groups.addButtonDescription")),1)]),s(z),s(G,{icon:"mdi-close",variant:"text",density:"compact",size:"small",onClick:e.handleCancel},null,8,["onClick"])]),s(N,{class:"pa-5"},{default:o(()=>[n("div",Mt,[n("label",Vt,[g(d(e.$t("pages.scan.scanners.index.groups.dialog.nameLabel"))+" ",1),t[5]||(t[5]=n("span",{class:"text-error"},"*",-1))]),s(B,{modelValue:e.form.name,"onUpdate:modelValue":t[0]||(t[0]=l=>e.form.name=l),placeholder:e.$t("pages.scan.scanners.index.groups.dialog.nameLabel"),density:"compact",variant:"outlined",rounded:"md",required:"","hide-details":"auto","prepe
14nd-inner-icon":"mdi-rename-box"},null,8,["modelValue","placeholder"])]),n("div",It,[n("label",Ut,d(e.$t("pages.scan.scanners.index.groups.dialog.descriptionLabel")),1),s(B,{modelValue:e.form.description,"onUpdate:modelValue":t[1]||(t[1]=l=>e.form.description=l),placeholder:e.$t("pages.scan.scanners.index.groups.dialog.descriptionLabel"),density:"compact",variant:"outlined",rounded:"md","hide-details":"auto","prepend-inner-icon":"mdi-card-text-outline"},null,8,["modelValue","placeholder"])]),n("div",Dt,[n("label",Et,d(e.$t("pages.scan.scanners.index.groups.dialog.selectScannersLabel")),1),s(ee,{modelValue:e.form.scannerIds,"onUpdate:modelValue":t[2]||(t[2]=l=>e.form.scannerIds=l),items:e.scanners,"item-title":"name","item-value":"id",multiple:"",chips:"","closable-chips":"",density:"compact",variant:"outlined",rounded:"md","hide-details":"auto","prepend-inner-icon":"mdi-shield-check-outline"},null,8,["modelValue","items"])])]),_:1}),s(te),s(J,{class:"pa-4 bg-grey-lighten-5 d-flex justify-end ga-2"},{default:o(()=>[s(i,{intent:"secondary",onClick:e.handleCancel},{default:o(()=>[g(d(e.$t("pages.scan.scanners.index.cancel")),1)]),_:1},8,["onClick"]),s(i,{intent:"success",disabled:!e.form.name||e.form.name.trim()==="",onClick:e.handleConfirm},{default:o(()=>[g(d(e.group!==null?e.$t("pages.scan.scanners.index.groups.dialog.save"):e.$t("pages.scan.scanners.index.groups.dialog.create")),1)]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})]),_:1},8,["model-value"])}const Bt=E(Ct,[["render",At]]),K=6e4,Ft=D({name:"Scanners",components:{UiPageHeader:pe,UiCard:le,UiButton:P,UiConfirmModal:fe,UiEmptyState:he,UiSegmentedControl:ue,UiDropdownMenu:me,ScannersTable:ct,NewScannerDialog:kt,NewScannerGroupDialog:Bt,Breadcrumbs:ge,ScannerSparkline:se},mixins:[ae],data(){return{scannersService:new re(this.$axios),loading:!1,search:"",showAddScanner:!1,showAddScannerGroup:!1,scanners:[],scannerGroups:[],scannerToDelete:null,deleteDialog:!1,deleteGroupDialog:!1,scannerGroupToDelete:null,activeTab:"scanners",scannerToEdit:null,scannerToEditGroupIds:[],scannerGroupToEdit:null,deletingGroupId:null,showGroupChartModal:!1,selectedGroupForChart:null}},watch:{showGroupChartModal(e){e===!1&&(this.selectedGroupForChart=null)}},computed:{addMenuItems(){return[{title:this.$t("pages.scan.scanners.index.actions.addScanner"),subtitle:this.$t("pages.scan.scanners.index.emptyState.addScannerDescription"),icon:"mdi-shield-plus-outline",iconColor:"success",action:this.openAddScanner},{divider:!0},{title:this.$t("pages.scan.scanners.index.actions.addScannerGroup"),subtitle:this.$t("pages.scan.scanners.index.groups.addButtonDescription"),icon:"mdi-folder-plus-outline",iconColor:"success",action:this.openAddScannerGroup}]},segmentedTabs(){return[{label:this.$t("pages.scan.scanners.index.groups.scannersTab"),value:"scanners",icon:"mdi-shield-search",count:this.scanners.length},{label:this.$t("pages.scan.scanners.index.groups.tabTitle"),value:"groups",icon:"mdi-folder-multiple-outline",count:this.scannerGroups.length}]},breadcrumbs(){return[{text:this.$t("pages.scan.scanners.index.breadcrumbs.scanners"),disabled:!0,to:this.$orgPath("/scan/scanners"),exact:!0}]},filteredScanners(){if(!this.search||this.search.trim()==="")return this.scanners;const e=this.search.toLowerCase().trim();return this.scanners.filter(t=>{const a=(t.name||"").toLowerCase(),r=(t.description||"").toLowerCase(),c=(t.uuid||"").toLowerCase(),h=(this.latestState(t)?.ipAddress||"").toLowerCase(),i=(this.groupsByScannerId.get(String(t.id))??[]).map(l=>l.name.toLowerCase()).join(" ");return a.includes(e)||r.includes(e)||c.includes(e)||h.includes(e)||i.includes(e)})},filteredScannerGroups(){if(!this.search||this.search.trim()==="")return this.scannerGroups;const e=this.search.toLowerCase().trim();return this.scannerGroups.filter(t=>{const a=(t.name||"").toLowerCase(),r=(t.description||"").toLowerCase(),c=(this.scannersByGroupId.get(String(t.id))??[]).map(h=>h.name.toLowerCase()).join(" ");return a.includes(e)||r.includes(e)||c.includes(e)})},groupHeaders(){return[{title:this.$t("pages.scan.scanners.index.groups.table.name"),key:"name",sortable:!0,align:"start"},{title:this.$t("pages.scan.scanners.index.groups.table.description"),key:"description",sortable:!1,align:"start",width:"280px"},{title:this.$t("pages.scan.scanners.index.groups.table.scannersCount"),key:"scannersCount",value:e=>e.scannerIds?.length??0,sortable:!0,align:"center",width:"120px"},{title:this.$t("pages.scan.scanners.index.groups.table.associatedScanners"),key:"associatedScanners",sortable:!1,align:"start"},{title:this.$t("scanners.components.ScannerChartModal.cpuLoad"),key:"cpuLoad",sortable:!1,align:"center",width:"90px",cellProps:{class:"chart-cell"},headerProps:{class:"chart-cell"}},{title:this.$t("scanners.components.ScannerChartModal.memoryLoad"),key:"memoryLoad",sortable:!1,align:"center",width:"90px",cellProps:{class:"chart-cell"},headerProps:{class:"chart-cell"}},{title:this.$t("scanners.components.ScannerChartModal.diskLoad"),key:"diskLoad",sortable:!1,align:"center",width:"90px",cellProps:{class:"chart-cell"},headerProps:{class:"chart-cell"}},{title:this.$t("pages.scan.scanners.index.groups.table.actions"),key:"actions",sortable:!1,align:"end",width:"100px"}]},scannersByGroupId(){const e=new Map;
14return this.scanners.forEach(t=>{this.scannerGroups.forEach(a=>{if((a.scannerIds??[]).map(String).includes(String(t.id))){const r=String(a.id);e.has(r)||e.set(r,[]),e.get(r).push(t)}})}),e},groupsByScannerId(){const e=new Map;return this.scannerGroups.forEach(t=>{(t.scannerIds??[]).forEach(a=>{const r=String(a);e.has(r)||e.set(r,[]),e.get(r).push(t)})}),e},groupAggregatedStatesMap(){const e=new Map;return this.scannerGroups.forEach(t=>{const a=String(t.id),r=this.scannersByGroupId.get(a)??[];if(r.length===0){e.set(a,[]);return}const c=new Map;r.forEach(l=>{(l.states?.scannerStates??[]).forEach(S=>{if(S!=null&&S.createdTime!==null&&S.createdTime!==void 0){const p=new Date(S.createdTime).getTime();if(!isNaN(p)){const y=Math.floor(p/K)*K;c.has(y)||c.set(y,{cpuSum:0,cpuCount:0,memSum:0,memCount:0,diskSum:0,diskCount:0,createdTime:S.createdTime});const w=c.get(y);S.cpuLoad!==null&&S.cpuLoad!==void 0&&(w.cpuSum+=Number(S.cpuLoad),w.cpuCount+=1),S.memoryLoad!==null&&S.memoryLoad!==void 0&&(w.memSum+=Number(S.memoryLoad),w.memCount+=1),S.diskUsage!==null&&S.diskUsage!==void 0&&(w.diskSum+=Number(S.diskUsage),w.diskCount+=1)}}})});const i=Array.from(c.keys()).sort((l,f)=>l-f).map(l=>{const f=c.get(l);return{createdTime:f.createdTime,cpuLoad:f.cpuCount>0?f.cpuSum/f.cpuCount:null,memoryLoad:f.memCount>0?f.memSum/f.memCount:null,diskUsage:f.diskCount>0?f.diskSum/f.diskCount:null,scanId:"-"}});e.set(a,i)}),e},groupMultiSeriesMap(){const e=new Map;return this.scannerGroups.forEach(t=>{const a=String(t.id),r=this.scannersByGroupId.get(a)??[];e.set(a,{cpuLoad:this.buildSeriesForMetric(r,"cpuLoad"),memoryLoad:this.buildSeriesForMetric(r,"memoryLoad"),diskUsage:this.buildSeriesForMetric(r,"diskUsage")})}),e},groupCpuSeries(){return this.getGroupSeries("cpuLoad")},groupMemorySeries(){return this.getGroupSeries("memoryLoad")},groupDiskSeries(){return this.getGroupSeries("diskUsage")},groupCpuChartOptions(){return this.buildGroupChartOptions()},groupMemoryChartOptions(){return this.buildGroupChartOptions()},groupDiskChartOptions(){return this.buildGroupChartOptions()},groupChartTimeRange(){const e=[...this.groupCpuSeries,...this.groupMemorySeries,...this.groupDiskSeries];let t=null,a=null;for(let r=0;r<e.length;r++){const c=e[r].data;for(let h=0;h<c.length;h++){const i=c[h][0];(t===null||i<t)&&(t=i),(a===null||i>a)&&(a=i)}}return{minTs:t,maxTs:a}}},async mounted(){this.loading=!0;try{await Promise.all([this.fetchScanners(),this.fetchScannerGroups()])}finally{this.loading=!1}},methods:{buildGroupChartOptions(){const{minTs:e,maxTs:t}=this.groupChartTimeRange;return{chart:{animations:{enabled:!1},toolbar:{show:!1},zoom:{enabled:!1},events:{legendClick:function(a,r,c){const h=c.config.series.map(l=>l.name),i=c.globals.visibleSeriesIndices||[];if(i.length===1&&i[0]===r)for(let l=0;l<h.length;l++)a.showSeries(h[l]);else for(let l=0;l<h.length;l++)l===r?a.showSeries(h[l]):a.hideSeries(h[l])}}},colors:["#03A9F4","#66BB6A","#FFA726","#AB47BC","#EC407A","#26A69A","#78909C","#5C6BC0","#D4E157","#FF7043","#8D6E63","#26C6DA"],dataLabels:{enabled:!1},grid:{borderColor:"#e2e8f0",padding:{left:8,right:8}},legend:{position:"top",horizontalAlign:"left",fontSize:"11px",onItemClick:{toggleDataSeries:!1}},stroke:{curve:"smooth",width:2},tooltip:{x:{format:"MMM dd, HH:mm"}},xaxis:{type:"datetime",min:e!==null?e:void 0,max:t!==null?t:void 0,labels:{datetimeUTC:!1}},yaxis:{min:0,tickAmount:5,labels:{formatter:a=>a.toFixed(0)+"%"}}}},async fetchScannerGroups(){try{const e=await this.scannersService.getScannerGroups();this.scannerGroups=e.map(t=>({id:t.id,name:t.name,description:t.description||"",scannerIds:(t.scanners?.scanners||[]).map(a=>a.id)}))}catch(e){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.groups.messages.fetchError",{message:e.message}))}},setScannerToDelete(e){this.scannerToDelete=e,this.deleteDialog=!0},async refresh(){this.loading=!0;try{await Promise.all([this.fetchScanners(),this.fetchScannerGroups()])}finally{this.loading=!1}},async fetchScanners(){try{this.scanners=await this.scannersService.getScanners()}catch(e){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.messages.fetchError",{message:e.message}))}},setScannerToEdit(e){this.scannerToEdit=e;const t=this.groupsByScannerId.get(String(e.id))??[];this.scannerToEditGroupIds=t.map(a=>a.id),this.showAddScanner=!0},onCancelScanner(){this.showAddScanner=!1,this.scannerToEdit=null,this.scannerToEditGroupIds=[]},openAddScanner(){this.scannerToEdit=null,this.scannerToEditGroupIds=[],this.showAddScanner=!0},async saveScanner(e){this.scannerToEdit!==null?await this.updateScanner({id:this.scannerToEdit.id,name:e.name,description:e.description,scannerGroupIds:e.groupIds}):await this.addNewScanner(e),this.showAddScanner=!1,this.scannerToEdit=null,this.scannerToEditGroupIds=[]}
14,async addNewScanner(e){try{this.loading=!0,this.showAddScanner=!1;const{groupIds:t,...a}=e,r={...a,scannerGroupIds:(t??[]).map(c=>Number(c))};await this.scannersService.addScanner(r),await this.refresh(),await this.$store.dispatch("contextui/reportSuccess",this.$t("pages.scan.scanners.index.messages.addSuccess"))}catch(t){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.messages.addError",{message:t.message}))}finally{this.loading=!1}},async deleteScanner(e){try{this.loading=!0,await this.scannersService.deleteScanner(e),this.scannerToDelete=null,this.deleteDialog=!1,await this.refresh(),await this.$store.dispatch("contextui/reportSuccess",this.$t("pages.scan.scanners.index.messages.deleteSuccess"))}catch(t){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.messages.deleteError",{message:t.message}))}finally{this.loading=!1}},async updateScanner(e){const t={name:e.name,description:e.description,scannerGroupIds:(e.scannerGroupIds??[]).map(a=>Number(a))};try{this.loading=!0,await this.scannersService.updateScanner(t,e.id),await this.refresh(),await this.$store.dispatch("contextui/reportSuccess",this.$t("pages.scan.scanners.index.messages.updateSuccess"))}catch(a){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.messages.updateError",{message:a.message}))}finally{this.loading=!1}},async saveScannerGroup(e){this.scannerGroupToEdit!==null?await this.updateScannerGroup(e):await this.addNewScannerGroup(e)},onCancelScannerGroup(){this.showAddScannerGroup=!1,this.scannerGroupToEdit=null},openAddScannerGroup(){this.scannerGroupToEdit=null,this.showAddScannerGroup=!0},async addNewScannerGroup(e){try{this.loading=!0,this.showAddScannerGroup=!1;const t={name:e.name,description:e.description,scannerIds:(e.scannerIds??[]).map(a=>Number(a))};await this.scannersService.addScannerGroup(t),await this.refresh(),await this.$store.dispatch("contextui/reportSuccess",this.$t("pages.scan.scanners.index.groups.messages.addSuccess"))}catch(t){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.groups.messages.addError",{message:t.message}))}finally{this.loading=!1}},setScannerGroupToEdit(e){this.scannerGroupToEdit=e,this.showAddScannerGroup=!0},async updateScannerGroup(e){if(this.scannerGroupToEdit!==null)try{this.loading=!0,this.showAddScannerGroup=!1;const t={name:e.name,description:e.description,scannerIds:(e.scannerIds??[]).map(a=>Number(a))};await this.scannersService.updateScannerGroup(this.scannerGroupToEdit.id,t),this.scannerGroupToEdit=null,await this.refresh(),await this.$store.dispatch("contextui/reportSuccess",this.$t("pages.scan.scanners.index.groups.messages.updateSuccess"))}catch(t){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.groups.messages.updateError",{message:t.message}))}finally{this.loading=!1}},async deleteScannerGroup(e){try{this.deletingGroupId=e,await this.scannersService.deleteScannerGroup(e),await this.refresh(),await this.$store.dispatch("contextui/reportSuccess",this.$t("pages.scan.scanners.index.groups.messages.deleteSuccess"))}catch(t){await this.$store.dispatch("contextui/reportError",this.$t("pages.scan.scanners.index.groups.messages.deleteError",{message:t.message}))}finally{this.deletingGroupId=null}},setScannerGroupToDelete(e){this.scannerGroupToDelete=e,this.deleteGroupDialog=!0},async confirmDeleteScannerGroup(){if(this.scannerGroupToDelete===null)return;const e=this.scannerGroupToDelete.id;this.deleteGroupDialog=!1,this.scannerGroupToDelete=null,await this.deleteScannerGroup(e)},getScannersInGroup(e){return e.scannerIds===void 0||e.scannerIds===null?[]:this.scanners.filter(t=>e.scannerIds.map(String).includes(String(t.id)))},onViewGroup(e){this.activeTab="groups";const t=this.scannerGroups.find(a=>String(a.id)===String(e));t!=null&&this.openGroupMultiChartModal(t)},getGroupSeries(e){if(this.selectedGroupForChart===null||this.selectedGroupForChart===void 0)return[];const t=this.scannersByGroupId.get(String(this.selectedGroupForChart.id))??[];return this.buildSeriesForMetric(t,e)},buildSeriesForMetric(e,t){return e.map(r=>{const h=[...r.states?.scannerStates??[]].reverse().filter(i=>i!=null&&i.createdTime!==null&&i.createdTime!==void 0&&i[t]!==null&&i[t]!==void 0);return{name:r.name,data:h.map(i=>[new Date(i.createdTime).getTime(),Number(i[t])])}}).filter(r=>r.data!==null&&r.data!==void 0&&r.data.length>0)},latestState(e){const t=e.states?.scannerStates;return t&&t.length>0?t[0]:null},isUp(e){const t=this.latestState(e);if(t===null||t.createdTime===void 0||t.createdTime===null)return!1;const a=1800*1e3,r=Date.now()-a;return new Date(t.createdTime).getTime()>r},formatLoad(e,t){const a=this.latestState(e),c={cpuLoad:a?.cpuLoad,memoryLoad:a?.memoryLoad,diskLoad:a?.diskUsage}[t];return c!=null?`${c.toFixed(1)} %`:"-"},getGroupAggregatedStates(e){return this.groupAggregatedStatesMap.get(String(e))??[]},formatGroupAvgLoad(e,t){const a=this.scannersByGroupId.get(String(e))??[];let r=0,c=0;return a.forEach(h=>{const i=this.latestState(h);if(i!=null&&this.isUp(h)){const f={cpuLoad:i.cpuLoad,memoryLoad:i.memoryLoad,diskUsage:i.diskUsage}[t];f!=null&&(r+=Number(f),c+=1)}}),c>0?`${(r/c).toFixed(1)}%`:"-"},getGroupMultiSeries(e,t){const a=this.groupMultiSeriesMap.get(String(e));return a!=null?a[t]:[]},openGroupMultiChartModal(e){this.selectedGroupForChart=e,this.showGroupChartModal=!0}}}),_t={class:"scanners-page py-4 px-2 px-md-4"},Nt={class:"pa-4 border-b bg-grey-lighten-5 d-flex align-center"},zt={class:"d-flex align-center justify-center mr-3 rounded-md",style:{width:"36px",height:"36px","background-color":"#ffffff",border:"1px solid #e2e8f0"}},Ot={class:"text-subtitle-1 font-weight-bold text-grey-darken-4 text-truncate",style:{"max-width":"650px"}},Ht={class:"text-caption text-grey-darken-1"},jt={class:"text-caption font-weight-bold text-grey-darken-3 mb-2 d-flex align-center ga-2"},Pt={class:"text-caption font-weight-bold text-grey-darken-3 mb-2 d-flex align-center ga-2"},Rt={class:"text-caption font-weight-bold text-grey-darken-3 mb-2 d-flex align-center ga-2"},qt={class:"d-flex align-center justify-space-between flex-wrap ga-3"},Wt={class:"d-flex align-center ga-2 min-w-0 flex-grow-1 justify-end"},Kt={key:1,class:"pa-8"},Xt={key:2,class:"pa-8"},Yt={class:"d-flex align-center ga-3 flex-wrap justify-center"},Jt={href:"https://docs.ostorlab.co/guide/",target:"_blank",rel:"noopener noreferrer",class:"text-decoration-none"},Qt={class:"scanners-table-row"},Zt={class:"py-3",style:{"min-width":"180px","max-width":"240px"}},es={class:"d-flex align-center"},ts={class:"scanner-icon-container d-flex align-center justify-center mr-3 rounded-md flex-shrink-0"},ss={class:"text-body-2 font-weight-bold text-grey-darken-4 text-truncate"},ns={class:"text-body-2 text-grey-darken-2 py-3",style:{"max-width":"280px"}},as={class:"text-truncate d-inline-block",style:{"max-width":"260px"}},rs={class:"text-center py-3",style:{width:"120px"}},os={class:"py-3",style:{"min-width":"200px"}},is={class:"d-flex flex-wrap ga-1"},ls={key:0,class:"text-caption text-medium-emphasis"},ds={class:"text-center py-2 chart-cell"},cs=["title","onClick"],ps={class:"text-caption font-weight-medium text-grey-darken-4 mt-1"},us={class:"text-center py-2 chart-cell"},ms=["title","onClick"],hs={class:"text-caption font-weight-medium text-grey-darken-4 mt-1"},gs={class:"text-center py-2 chart-cell"},fs=["title","onClick"],Ss={class:"text-caption font-weight-medium text-grey-darken-4 mt-1"},ys={class:"text-end py-3 px-4",style:{"min-width":"100px"}},bs={class:"d-flex align-center justify-end ga-1"},$s={key:1,class:"pa-8"},vs={key:2,class:"pa-8"};function ws(e,t,a,r,c,h){const i=$("apexchart"),l=$("UiConfirmModal"),f=$("NewScannerDialog"),S=$("NewScannerGroupDialog"),p=$("Breadcrumbs"),y=$("UiButton"),w=$("UiDropdownMenu"),F=$("UiPageHeader"),L=$("UiSegmentedControl"),H=$("ScannersTable"),M=$("UiEmptyState"),R=$("UiCard"),j=$("ScannerSparkline");return b(),v("div",_t,[m(" Group Chart Modal "),s(O,{modelValue:e.showGroupChartModal,"onUpdate:modelValue":t[1]||(t[1]=u=>e.showGroupChartModal=u),"max-width":"900"},{default:o(()=>[e.selectedGroupForChart!==null&&e.selectedGroupForChart!==void 0?(b(),k(A,{key:0,class:"rounded-md border pa-0"},{default:o(()=>[n("div",Nt,[n("div",zt,[s(C,{size:"20",color:"grey-darken-3"},{default:o(()=>[...t[14]||(t[14]=[g(" mdi-folder-multiple-outline ",-1)])]),_:1})]),n("div",null,[n("div",Ot,d(e.selectedGroupForChart.name)+" - "+d(e.$t("pages.scan.scanners.index.groups.table.groupHardwareMetrics")),1
14),n("div",Ht,d(e.$t("pages.scan.scanners.index.groups.tabTitle")),1)]),s(z),s(G,{icon:"mdi-close",variant:"text",density:"compact",size:"small",onClick:t[0]||(t[0]=u=>e.showGroupChartModal=!1)})]),s(N,{class:"pa-5"},{default:o(()=>[s(Q,null,{default:o(()=>[s(U,{cols:"12"},{default:o(()=>[n("div",jt,[s(C,{size:"16",color:"grey-darken-2"},{default:o(()=>[...t[15]||(t[15]=[g("mdi-cpu-64-bit",-1)])]),_:1}),g(" "+d(e.$t("scanners.components.ScannerChartModal.cpuLoad"))+" (%) ",1)]),s(i,{height:"200",type:"line",options:e.groupCpuChartOptions,series:e.groupCpuSeries},null,8,["options","series"])]),_:1}),s(U,{cols:"12",class:"mt-2"},{default:o(()=>[n("div",Pt,[s(C,{size:"16",color:"grey-darken-2"},{default:o(()=>[...t[16]||(t[16]=[g("mdi-memory",-1)])]),_:1}),g(" "+d(e.$t("scanners.components.ScannerChartModal.memoryLoad"))+" (%) ",1)]),s(i,{height:"200",type:"line",options:e.groupMemoryChartOptions,series:e.groupMemorySeries},null,8,["options","series"])]),_:1}),s(U,{cols:"12",class:"mt-2"},{default:o(()=>[n("div",Rt,[s(C,{size:"16",color:"grey-darken-2"},{default:o(()=>[...t[17]||(t[17]=[g("mdi-harddisk",-1)])]),_:1}),g(" "+d(e.$t("scanners.components.ScannerChartModal.diskLoad"))+" (%) ",1)]),s(i,{height:"200",type:"line",options:e.groupDiskChartOptions,series:e.groupDiskSeries},null,8,["options","series"])]),_:1})]),_:1})]),_:1})]),_:1})):m("",!0)]),_:1},8,["modelValue"]),m(" Delete Scanner Confirmation Modal "),s(l,{modelValue:e.deleteDialog,"onUpdate:modelValue":t[2]||(t[2]=u=>e.deleteDialog=u),title:e.$t("pages.scan.scanners.index.deleteTitle"),description:e.$t("pages.scan.scanners.index.deleteDescription"),intent:"danger","confirm-text":e.$t("pages.scan.scanners.index.delete"),"cancel-text":e.$t("pages.scan.scanners.index.cancel"),loading:e.loading,onConfirm:t[3]||(t[3]=u=>e.scannerToDelete&&e.deleteScanner(e.scannerToDelete.id)),onCancel:t[4]||(t[4]=u=>e.deleteDialog=!1)},null,8,["modelValue","title","description","confirm-text","cancel-text","loading"]),m(" Delete Scanner Group Confirmation Modal "),s(l,{modelValue:e.deleteGroupDialog,"onUpdate:modelValue":t[5]||(t[5]=u=>e.deleteGroupDialog=u),title:e.$t("pages.scan.scanners.index.deleteGroupTitle"),description:e.$t("pages.scan.scanners.index.deleteGroupDescription"),intent:"danger","confirm-text":e.$t("pages.scan.scanners.index.delete"),"cancel-text":e.$t("pages.scan.scanners.index.cancel"),loading:e.loading,onConfirm:e.confirmDeleteScannerGroup,onCancel:t[6]||(t[6]=u=>e.deleteGroupDialog=!1)},null,8,["modelValue","title","description","confirm-text","cancel-text","loading","onConfirm"]),m(" Add/Edit Scanner Modal "),s(f,{modelValue:e.showAddScanner,"onUpdate:modelValue":t[7]||(t[7]=u=>e.showAddScanner=u),title:e.$t("pages.scan.scanners.index.dialog.title"),scanner:e.scannerToEdit,"initial-group-ids":e.scannerToEditGroupIds,"scanner-groups":e.scannerGroups,onConfirm:e.saveScanner,onCancel:e.onCancelScanner},null,8,["modelValue","title","scanner","initial-group-ids","scanner-groups","onConfirm","onCancel"]),m(" Add/Edit Scanner Group Modal "),s(S,{modelValue:e.showAddScannerGroup,"onUpdate:modelValue":t[8]||(t[8]=u=>e.showAddScannerGroup=u),scanners:e.scanners,group:e.scannerGroupToEdit,onConfirm:e.saveScannerGroup,onCancel:e.onCancelScannerGroup},null,8,["modelValue","scanners","group","onConfirm","onCancel"]),m(" Breadcrumbs "),s(p,{breadcrumbs:e.breadcrumbs,class:"mb-4"},null,8,["breadcrumbs"]),m(" Page Header "),s(F,{title:e.$t("pages.scan.scanners.index.header.title"),subtitle:e.$t("pages.scan.scanners.index.header.subtitle"),icon:"mdi-shield-search",class:"mb-4"},{"title-append":o(()=>[s(_,{size:"small",variant:"flat",color:"grey-lighten-4",class:"font-weight-bold text-caption text-grey-darken-3 border ml-2"},{default:o(()=>[g(d(e.activeTab==="scanners"?e.scanners.length:e.scannerGroups.length),1)]),_:1})]),actions:o(()=>[s(w,{location:"bottom end","min-width":"300","max-width":"380","close-on-content-click":!0,items:e.addMenuItems},{activator:o(({props:u})=>[s(y,T(u,{intent:"success","prepend-icon":"mdi-plus","append-icon":"mdi-chevron-down"}),{default:o(()=>[g(d(e.$t("pages.scan.scanners.index.actions.add")),1)]),_:1},16)]),_:1},8,["items"])]),_:1},8,["title","subtitle"]),m(" Filter & Tab Toolbar "),s(A,{variant:"flat",class:"rounded-md border pa-3 mb-4 bg-grey-lighten-5"},{default:o(()=>[n("div",qt,[m(" Segmented Tab Selector (Cockpit / Fast pattern) "),s(L,{modelValue:e.activeTab,"onUpdate:modelValue":t[9]||(t[9]=u=>e.activeTab=u),items:e.segmentedTabs},null,8,["modelValue","items"]),m(" Search Input "),n("div",Wt,[s(B,{modelValue:e.search,"onUpdate:modelValue":t[10]||(t[10]=u=>e.search=u),density:"compact",variant:"outlined",rounded:"md","prepe
14nd-inner-icon":"mdi-magnify",placeholder:e.$t("pages.scan.scanners.index.filterBar.searchPlaceholder"),"hide-details":"",clearable:"",style:{"max-width":"320px"},class:"flex-grow-1"},null,8,["modelValue","placeholder"])])])]),_:1}),m(" Main Content Tabs "),s(Se,{modelValue:e.activeTab,"onUpdate:modelValue":t[13]||(t[13]=u=>e.activeTab=u)},{default:o(()=>[m(" Scanners Window Item "),s(W,{value:"scanners"},{default:o(()=>[s(R,{"no-padding":"",class:"overflow-hidden mb-4"},{default:o(()=>[m(" Scanners Table "),e.filteredScanners.length>0||e.loading?(b(),k(H,{key:0,scanners:e.filteredScanners,"scanner-groups":e.scannerGroups,loading:e.loading,onDeleteScanner:e.setScannerToDelete,onEditScanner:e.setScannerToEdit,onUpdateScanner:e.updateScanner,onViewGroup:e.onViewGroup},null,8,["scanners","scanner-groups","loading","onDeleteScanner","onEditScanner","onUpdateScanner","onViewGroup"])):e.scanners.length>0&&e.filteredScanners.length===0?(b(),v("div",Kt,[s(M,{icon:"mdi-magnify",title:e.$t("pages.scan.scanners.index.emptyState.noFilteredScanners"),"action-text":e.$t("pages.scan.scanners.index.filterBar.clearFilters"),"action-intent":"secondary",onAction:t[11]||(t[11]=u=>e.search="")},null,8,["title","action-text"])])):(b(),v("div",Xt,[s(M,{icon:"mdi-shield-search",title:e.$t("pages.scan.scanners.index.emptyState.title"),description:e.$t("pages.scan.scanners.index.emptyState.message")},{actions:o(()=>[n("div",Yt,[n("a",Jt,[s(y,{intent:"secondary","prepend-icon":"mdi-book-open-variant-outline"},{default:o(()=>[g(d(e.$t("pages.scan.scanners.index.emptyState.docs")),1)]),_:1})]),s(y,{intent:"success","prepend-icon":"mdi-shield-plus-outline",onClick:e.openAddScanner},{default:o(()=>[g(d(e.$t("pages.scan.scanners.index.emptyState.addScanner")),1)]),_:1},8,["onClick"])])]),_:1},8,["title","description"])]))]),_:1})]),_:1}),m(" Groups Window Item "),s(W,{value:"groups"},{default:o(()=>[s(R,{"no-padding":"",class:"overflow-hidden mb-4"},{default:o(()=>[m(" Groups Table "),e.filteredScannerGroups.length>0||e.loading?(b(),k(Z,{key:0,headers:e.groupHeaders,items:e.filteredScannerGroups,loading:e.loading,"item-value":"id",class:"scanners-table elevation-0",hover:""},{item:o(({item:u})=>[n("tr",Qt,[m(" Group Name "),n("td",Zt,[n("div",es,[n("div",ts,[s(C,{size:"18",color:"grey-darken-3"},{default:o(()=>[...t[18]||(t[18]=[g(" mdi-folder-multiple-outline ",-1)])]),_:1})]),n("span",ss,d(u.name),1)])]),m(" Description "),n("td",ns,[n("span",as,d(u.description||"-"),1)]),m(" Node Count "),n("td",rs,[s(_,{size:"small",variant:"flat",color:"grey-lighten-4",class:"font-weight-bold text-caption text-grey-darken-3 border"},{default:o(()=>[g(d((u.scannerIds||[]).length),1)]),_:2},1024)]),m(" Associated Scanners "),n("td",os,[n("div",is,[(b(!0),v(X,null,Y(e.scannersByGroupId.get(String(u.id))??[],x=>(b(),k(_,{key:x.id,size:"x-small",color:"accent",variant:"flat",label:"",class:"font-weight-bold"},{default:o(()=>[g(d(x.name),1)]),_:2},1024))),128)),(e.scannersByGroupId.get(String(u.id))??[]).length===0?(b(),v("span",ls,"-")):m("",!0)])]),m(" CPU Load Sparkline "),n("td",ds,[n("div",{class:"d-flex flex-column align-center cursor-pointer metric-cell-hover pa-1 rounded",title:e.$t("pages.scan.scanners.index.groups.table.groupHardwareMetrics"),onClick:x=>e.openGroupMultiChartModal(u)},[s(j,{"multi-series":e.getGroupMultiSeries(u.id,"cpuLoad"),metric:"cpuLoad"},null,8,["multi-series"]),n("span",ps,d(e.formatGroupAvgLoad(u.id,"cpuLoad")),1)],8,cs)]),m(" Memory Load Sparkline "),n("td",us,[n("div",{class:"d-flex flex-column align-center cursor-pointer metric-cell-hover pa-1 rounded",title:e.$t("pages.scan.scanners.index.groups.table.groupHardwareMetrics"),onClick:x=>e.openGroupMultiChartModal(u)},[s(j,{"multi-series":e.getGroupMultiSeries(u.id,"memoryLoad"),metric:"memoryLoad"},null,8,["multi-series"]),n("span",hs,d(e.formatGroupAvgLoad(u.id,"memoryLoad")),1)],8,ms)]),m(" Disk Usage Sparkline "),n("td",gs,[n("div",{class:"d-flex flex-column align-center cursor-pointer metric-cell-hover pa-1 rounded",title:e.$t("pages.scan.scanners.index.groups.table.groupHardwareMetrics"),onClick:x=>e.openGroupMultiChartModal(u)},[s(j,{"multi-series":e.getGroupMultiSeries(u.id,"diskUsage"),metric:"diskUsage"},null,8,["multi-series"]),n("span",Ss,d(e.formatGroupAvgLoad(u.id,"diskUsage")),1)],8,fs)]),m(" Actions Column "),n("td",ys,[n("div",bs,[s(V,{location:"top",text:e.$t("scanners.components.ScannersTable.actions.edit")},{activator:o(({props:x})=>[s(G,T(x,{icon:"mdi-pencil-outline",size:"small",color:"grey-darken-3",variant:"text",class:"action-btn-edit rounded-md",onClick:I(ne=>e.setScannerGroupToEdit(u),["stop"])}),null,16,["onClick"])]),_:2},1032,["text"]),s(V,{location:"top",text:e.$t("scanners.components.ScannersTable.actions.delete")},{activator:o(({props:x})=>[e.deletingGroupId!==u.id?(b(),k(G,T({key:0},x,{icon:"mdi-trash-can-outline",size:"small",color:"error",variant:"text",class:"action-btn-delete rounded-md",onClick:I(ne=>e.setScannerGroupToDelete(u),["stop"])}),null,16,["onClick"])):(b(),k(ie,{key:1,indeterminate:"",size:"20",width:"2",color:"error"}))]),_:2},1032,["text"])])])])]),_:1},8,["headers","items","loading"])):e.scannerGroups.length>0&&e.filteredScannerGroups.length===0?(b(),v("div",$s,[s(M,{icon:"mdi-magnify",title:e.$t("pages.scan.scanners.index.groups.emptyState.noFilteredGroups"),"action-text":e.$t("pages.scan.scanners.index.filterBar.clearFilters"),"action-intent":"secondary",onAction:t[12]||(t[12]=u=>e.search="")},null,8,["title","action-text"])])):(b(),v("div",vs,[s(M,{icon:"mdi-folder-multiple-outline",title:e.$t("pages.scan.scanners.index.groups.table.noGroups"),"action-text":e.$t("pages.scan.scanners.index.groups.addButton"),"action-intent":"success","action-icon":"mdi-folder-plus-outline",onAction:e.openAddScannerGroup},null,8,["title","action-text","onAction"])]))]),_:1})]),_:1})]),_:1},8,["modelValue"])])}const ln=E(Ft,[["render",ws],["__scopeId","data-v-88270b4d"]]);export{ln as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.