diff --git a/.gradle/8.5/checksums/checksums.lock b/.gradle/8.5/checksums/checksums.lock index e5ff4c4..282d0d4 100644 Binary files a/.gradle/8.5/checksums/checksums.lock and b/.gradle/8.5/checksums/checksums.lock differ diff --git a/.gradle/8.5/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.5/dependencies-accessors/dependencies-accessors.lock index c188e58..0f016ce 100644 Binary files a/.gradle/8.5/dependencies-accessors/dependencies-accessors.lock and b/.gradle/8.5/dependencies-accessors/dependencies-accessors.lock differ diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin index 1096660..b717e89 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.bin and b/.gradle/8.5/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.5/executionHistory/executionHistory.lock b/.gradle/8.5/executionHistory/executionHistory.lock index 3ecfd31..df3a103 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.lock and b/.gradle/8.5/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.5/fileHashes/fileHashes.bin b/.gradle/8.5/fileHashes/fileHashes.bin index 1ea7372..3b81e3b 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.bin and b/.gradle/8.5/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.5/fileHashes/fileHashes.lock b/.gradle/8.5/fileHashes/fileHashes.lock index 5aefd1c..1378b5e 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.lock and b/.gradle/8.5/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.5/fileHashes/resourceHashesCache.bin b/.gradle/8.5/fileHashes/resourceHashesCache.bin index ac4df70..4305dff 100644 Binary files a/.gradle/8.5/fileHashes/resourceHashesCache.bin and b/.gradle/8.5/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index aac924b..c7e1ca6 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$DailyStat.class b/build/classes/java/main/research/loghunter/service/ScanService$DailyStat.class index 2dc0dd6..fb184a4 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$DailyStat.class and b/build/classes/java/main/research/loghunter/service/ScanService$DailyStat.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$FileErrorStats.class b/build/classes/java/main/research/loghunter/service/ScanService$FileErrorStats.class index 4920e7a..7d67b38 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$FileErrorStats.class and b/build/classes/java/main/research/loghunter/service/ScanService$FileErrorStats.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$PatternErrorStats.class b/build/classes/java/main/research/loghunter/service/ScanService$PatternErrorStats.class index c12f2f7..9bcfb52 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$PatternErrorStats.class and b/build/classes/java/main/research/loghunter/service/ScanService$PatternErrorStats.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$ResetResult.class b/build/classes/java/main/research/loghunter/service/ScanService$ResetResult.class index b9eea6d..dd9cf71 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$ResetResult.class and b/build/classes/java/main/research/loghunter/service/ScanService$ResetResult.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$ScanProgress.class b/build/classes/java/main/research/loghunter/service/ScanService$ScanProgress.class index 3f7a3b5..7d948a9 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$ScanProgress.class and b/build/classes/java/main/research/loghunter/service/ScanService$ScanProgress.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$ScanResult.class b/build/classes/java/main/research/loghunter/service/ScanService$ScanResult.class index 6909022..6a914bd 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$ScanResult.class and b/build/classes/java/main/research/loghunter/service/ScanService$ScanResult.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$ServerDailyStats.class b/build/classes/java/main/research/loghunter/service/ScanService$ServerDailyStats.class index e2ba987..f26f78e 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$ServerDailyStats.class and b/build/classes/java/main/research/loghunter/service/ScanService$ServerDailyStats.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$ServerErrorStats.class b/build/classes/java/main/research/loghunter/service/ScanService$ServerErrorStats.class index 1b6d2db..6f0610f 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$ServerErrorStats.class and b/build/classes/java/main/research/loghunter/service/ScanService$ServerErrorStats.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$ServerTimeStats.class b/build/classes/java/main/research/loghunter/service/ScanService$ServerTimeStats.class index 1203a7a..dc9a287 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$ServerTimeStats.class and b/build/classes/java/main/research/loghunter/service/ScanService$ServerTimeStats.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService$TimeStat.class b/build/classes/java/main/research/loghunter/service/ScanService$TimeStat.class index 402139e..c2c2149 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService$TimeStat.class and b/build/classes/java/main/research/loghunter/service/ScanService$TimeStat.class differ diff --git a/build/classes/java/main/research/loghunter/service/ScanService.class b/build/classes/java/main/research/loghunter/service/ScanService.class index 1010628..e3a834b 100644 Binary files a/build/classes/java/main/research/loghunter/service/ScanService.class and b/build/classes/java/main/research/loghunter/service/ScanService.class differ diff --git a/build/resources/main/static/assets/Badge-DzuJKoKk.js b/build/resources/main/static/assets/Badge-SZTgBg80.js similarity index 66% rename from build/resources/main/static/assets/Badge-DzuJKoKk.js rename to build/resources/main/static/assets/Badge-SZTgBg80.js index 9eb3cef..8be0598 100644 --- a/build/resources/main/static/assets/Badge-DzuJKoKk.js +++ b/build/resources/main/static/assets/Badge-SZTgBg80.js @@ -1 +1 @@ -import"./index-09HB4Lmg.js";import{_ as e,a as s,h as r,G as n,i as o,t as c,n as d}from"./index-BB0X_WMV.js";const l={__name:"Badge",props:{text:String,variant:{type:String,default:"default"}},setup(a){return(t,i)=>(r(),s("span",{class:d(["badge",`badge-${a.variant}`])},[n(t.$slots,"default",{},()=>[o(c(a.text),1)])],2))}},g=e(l,[["__scopeId","data-v-b7bd2350"]]);export{g as B}; +import"./index--fsvNaiQ.js";import{_ as e,a as s,h as r,G as n,i as o,t as c,n as d}from"./index-DFoOAXeQ.js";const l={__name:"Badge",props:{text:String,variant:{type:String,default:"default"}},setup(a){return(t,i)=>(r(),s("span",{class:d(["badge",`badge-${a.variant}`])},[n(t.$slots,"default",{},()=>[o(c(a.text),1)])],2))}},g=e(l,[["__scopeId","data-v-b7bd2350"]]);export{g as B}; diff --git a/src/main/resources/static/assets/Button-CoXLXkk7.js b/build/resources/main/static/assets/Button-Ddldcbk7.js similarity index 83% rename from src/main/resources/static/assets/Button-CoXLXkk7.js rename to build/resources/main/static/assets/Button-Ddldcbk7.js index f0ef131..27d5d1c 100644 --- a/src/main/resources/static/assets/Button-CoXLXkk7.js +++ b/build/resources/main/static/assets/Button-Ddldcbk7.js @@ -1 +1 @@ -import"./index-09HB4Lmg.js";import{_ as d,r,a,e as c,G as u,n as f,h as o}from"./index-BB0X_WMV.js";const m=["type","disabled"],b={key:0,class:"spinner"},y={__name:"Button",props:{type:{type:String,default:"button"},variant:{type:String,default:"primary"},size:{type:String,default:"md"},disabled:Boolean,loading:Boolean},emits:["click"],setup(e,{expose:l}){const n=r(null);return l({focus:()=>{var t;(t=n.value)==null||t.focus()}}),(t,s)=>(o(),a("button",{ref_key:"buttonRef",ref:n,type:e.type,class:f(["btn",`btn-${e.variant}`,{"btn-sm":e.size==="sm","btn-lg":e.size==="lg"}]),disabled:e.disabled||e.loading,onClick:s[0]||(s[0]=i=>t.$emit("click",i))},[e.loading?(o(),a("span",b)):c("",!0),u(t.$slots,"default",{},void 0)],10,m))}},B=d(y,[["__scopeId","data-v-c92354e1"]]);export{B}; +import"./index--fsvNaiQ.js";import{_ as d,r,a,e as c,G as u,n as f,h as o}from"./index-DFoOAXeQ.js";const m=["type","disabled"],b={key:0,class:"spinner"},y={__name:"Button",props:{type:{type:String,default:"button"},variant:{type:String,default:"primary"},size:{type:String,default:"md"},disabled:Boolean,loading:Boolean},emits:["click"],setup(e,{expose:l}){const n=r(null);return l({focus:()=>{var t;(t=n.value)==null||t.focus()}}),(t,s)=>(o(),a("button",{ref_key:"buttonRef",ref:n,type:e.type,class:f(["btn",`btn-${e.variant}`,{"btn-sm":e.size==="sm","btn-lg":e.size==="lg"}]),disabled:e.disabled||e.loading,onClick:s[0]||(s[0]=i=>t.$emit("click",i))},[e.loading?(o(),a("span",b)):c("",!0),u(t.$slots,"default",{},void 0)],10,m))}},B=d(y,[["__scopeId","data-v-c92354e1"]]);export{B}; diff --git a/src/main/resources/static/assets/DailyStats-C_oquM7K.js b/build/resources/main/static/assets/DailyStats-03BWk9_D.js similarity index 93% rename from src/main/resources/static/assets/DailyStats-C_oquM7K.js rename to build/resources/main/static/assets/DailyStats-03BWk9_D.js index 2796f3f..62fb146 100644 --- a/src/main/resources/static/assets/DailyStats-C_oquM7K.js +++ b/build/resources/main/static/assets/DailyStats-03BWk9_D.js @@ -1 +1 @@ -import{_ as C,r as g,o as x,a as l,b as s,l as w,s as I,t as d,F as B,g as T,h as o,d as R,w as m,f as L,u as _}from"./index-BB0X_WMV.js";import{a as A,C as F}from"./index-09HB4Lmg.js";import{C as O,a as W,L as N,B as V,p as E,b as M,c as $,d as P,e as z}from"./chartjs-plugin-datalabels.esm-DiDzp_cw.js";const U={class:"daily-stats"},Y={class:"page-header"},Z={class:"filter-section"},j={key:0,class:"loading"},q={key:1,class:"no-data"},G={key:2,class:"server-charts"},H={class:"chart-header"},J={class:"chart-subtitle"},K={class:"chart-wrapper"},Q={class:"chart-container"},X={__name:"DailyStats",setup(tt){O.register(W,N,V,E,M,$,P);const c=g(!1),r=g([]),n=g(f());function f(){return new Date().toISOString().split("T")[0]}function b(){const t=new Date(n.value);t.setDate(t.getDate()-1),n.value=t.toISOString().split("T")[0],i()}function y(){const t=new Date(n.value);t.setDate(t.getDate()+1),n.value=t.toISOString().split("T")[0],i()}const S={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"top"},tooltip:{mode:"index",intersect:!1},datalabels:{display:t=>{if(t.datasetIndex!==2)return!1;const e=t.chart.data.datasets,a=t.dataIndex;return e.reduce((u,p)=>u+(p.data[a]||0),0)>0},anchor:"end",align:"end",offset:0,font:{size:9},color:"#666",formatter:(t,e)=>{const a=e.chart.data.datasets,v=e.dataIndex;return a.reduce((u,p)=>u+(p.data[v]||0),0)}}},scales:{x:{stacked:!0,ticks:{maxRotation:0,autoSkip:!0,maxTicksLimit:24,callback:function(t,e){const a=this.getLabelForValue(t);return a&&a.endsWith(":00")?a:""}},grid:{display:!1}},y:{stacked:!0,beginAtZero:!0}},barPercentage:.8,categoryPercentage:.9},D=t=>({labels:t.timeStats.map(a=>a.time),datasets:[{label:"CRITICAL",data:t.timeStats.map(a=>a.critical),backgroundColor:"#9b59b6",borderWidth:0},{label:"ERROR",data:t.timeStats.map(a=>a.error),backgroundColor:"#e74c3c",borderWidth:0},{label:"WARN",data:t.timeStats.map(a=>a.warn),backgroundColor:"#f39c12",borderWidth:0}]}),i=async()=>{c.value=!0;try{r.value=await A.getTimeStatsByServer(n.value,15)}catch(t){console.error("Failed to load stats:",t),r.value=[]}finally{c.value=!1}},h=t=>{const e=new Date(t);return`${e.getFullYear()}년 ${e.getMonth()+1}월 ${e.getDate()}일`},k=t=>t.timeStats.reduce((e,a)=>e+a.total,0);return x(()=>{i()}),(t,e)=>(o(),l("div",U,[s("div",Y,[e[1]||(e[1]=s("h2",null,"일별 에러현황",-1)),s("div",Z,[s("button",{class:"nav-btn",onClick:b},"◀ 이전"),w(s("input",{type:"date","onUpdate:modelValue":e[0]||(e[0]=a=>n.value=a),onChange:i},null,544),[[I,n.value]]),s("button",{class:"nav-btn",onClick:y},"다음 ▶")])]),c.value?(o(),l("div",j,[...e[2]||(e[2]=[s("p",null,"로딩중...",-1)])])):r.value.length===0?(o(),l("div",q,[s("p",null,d(h(n.value))+"에 분석된 에러 데이터가 없습니다.",1)])):(o(),l("div",G,[(o(!0),l(B,null,T(r.value,a=>(o(),R(_(F),{key:a.serverId,class:"server-chart-card"},{header:m(()=>[s("div",H,[s("h3",null,"🖥️ "+d(a.serverName),1),s("span",J,d(h(n.value))+" 15분 단위 에러 ("+d(k(a))+"건)",1)])]),default:m(()=>[s("div",K,[s("div",Q,[L(_(z),{data:D(a),options:S},null,8,["data"])])])]),_:2},1024))),128))]))]))}},nt=C(X,[["__scopeId","data-v-b7241be8"]]);export{nt as default}; +import{_ as C,r as g,o as x,a as l,b as s,l as w,s as I,t as d,F as B,g as T,h as o,d as R,w as m,f as L,u as _}from"./index-DFoOAXeQ.js";import{a as A,C as F}from"./index--fsvNaiQ.js";import{C as O,a as W,L as N,B as V,p as E,b as M,c as $,d as P,e as z}from"./chartjs-plugin-datalabels.esm-B8xtR40N.js";const U={class:"daily-stats"},Y={class:"page-header"},Z={class:"filter-section"},j={key:0,class:"loading"},q={key:1,class:"no-data"},G={key:2,class:"server-charts"},H={class:"chart-header"},J={class:"chart-subtitle"},K={class:"chart-wrapper"},Q={class:"chart-container"},X={__name:"DailyStats",setup(tt){O.register(W,N,V,E,M,$,P);const c=g(!1),r=g([]),n=g(f());function f(){return new Date().toISOString().split("T")[0]}function b(){const t=new Date(n.value);t.setDate(t.getDate()-1),n.value=t.toISOString().split("T")[0],i()}function y(){const t=new Date(n.value);t.setDate(t.getDate()+1),n.value=t.toISOString().split("T")[0],i()}const S={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"top"},tooltip:{mode:"index",intersect:!1},datalabels:{display:t=>{if(t.datasetIndex!==2)return!1;const e=t.chart.data.datasets,a=t.dataIndex;return e.reduce((u,p)=>u+(p.data[a]||0),0)>0},anchor:"end",align:"end",offset:0,font:{size:9},color:"#666",formatter:(t,e)=>{const a=e.chart.data.datasets,v=e.dataIndex;return a.reduce((u,p)=>u+(p.data[v]||0),0)}}},scales:{x:{stacked:!0,ticks:{maxRotation:0,autoSkip:!0,maxTicksLimit:24,callback:function(t,e){const a=this.getLabelForValue(t);return a&&a.endsWith(":00")?a:""}},grid:{display:!1}},y:{stacked:!0,beginAtZero:!0}},barPercentage:.8,categoryPercentage:.9},D=t=>({labels:t.timeStats.map(a=>a.time),datasets:[{label:"CRITICAL",data:t.timeStats.map(a=>a.critical),backgroundColor:"#9b59b6",borderWidth:0},{label:"ERROR",data:t.timeStats.map(a=>a.error),backgroundColor:"#e74c3c",borderWidth:0},{label:"WARN",data:t.timeStats.map(a=>a.warn),backgroundColor:"#f39c12",borderWidth:0}]}),i=async()=>{c.value=!0;try{r.value=await A.getTimeStatsByServer(n.value,15)}catch(t){console.error("Failed to load stats:",t),r.value=[]}finally{c.value=!1}},h=t=>{const e=new Date(t);return`${e.getFullYear()}년 ${e.getMonth()+1}월 ${e.getDate()}일`},k=t=>t.timeStats.reduce((e,a)=>e+a.total,0);return x(()=>{i()}),(t,e)=>(o(),l("div",U,[s("div",Y,[e[1]||(e[1]=s("h2",null,"일별 에러현황",-1)),s("div",Z,[s("button",{class:"nav-btn",onClick:b},"◀ 이전"),w(s("input",{type:"date","onUpdate:modelValue":e[0]||(e[0]=a=>n.value=a),onChange:i},null,544),[[I,n.value]]),s("button",{class:"nav-btn",onClick:y},"다음 ▶")])]),c.value?(o(),l("div",j,[...e[2]||(e[2]=[s("p",null,"로딩중...",-1)])])):r.value.length===0?(o(),l("div",q,[s("p",null,d(h(n.value))+"에 분석된 에러 데이터가 없습니다.",1)])):(o(),l("div",G,[(o(!0),l(B,null,T(r.value,a=>(o(),R(_(F),{key:a.serverId,class:"server-chart-card"},{header:m(()=>[s("div",H,[s("h3",null,"🖥️ "+d(a.serverName),1),s("span",J,d(h(n.value))+" 15분 단위 에러 ("+d(k(a))+"건)",1)])]),default:m(()=>[s("div",K,[s("div",Q,[L(_(z),{data:D(a),options:S},null,8,["data"])])])]),_:2},1024))),128))]))]))}},nt=C(X,[["__scopeId","data-v-b7241be8"]]);export{nt as default}; diff --git a/src/main/resources/static/assets/Dashboard-CWQb9z6Z.js b/build/resources/main/static/assets/Dashboard-D7yH75no.js similarity index 95% rename from src/main/resources/static/assets/Dashboard-CWQb9z6Z.js rename to build/resources/main/static/assets/Dashboard-D7yH75no.js index 7aaba10..68e62c9 100644 --- a/src/main/resources/static/assets/Dashboard-CWQb9z6Z.js +++ b/build/resources/main/static/assets/Dashboard-D7yH75no.js @@ -1 +1 @@ -import{C as F,s as U,a as k}from"./index-09HB4Lmg.js";import{_ as V,r as u,c as W,o as G,a as f,b as e,d as A,e as I,f as c,w as o,u as d,F as B,g as N,h as i,i as _,t as n,n as O,j}from"./index-BB0X_WMV.js";import{B as w}from"./Button-CoXLXkk7.js";import{B as R}from"./Badge-DzuJKoKk.js";import{C as K,a as Z,L as q,B as H,p as J,b as Q,c as X,d as Y,e as aa}from"./chartjs-plugin-datalabels.esm-DiDzp_cw.js";const ta={class:"dashboard"},sa={class:"dashboard-header"},ea={class:"header-actions"},la={class:"server-grid"},na={class:"server-header"},oa={class:"server-title"},da={class:"server-actions"},ia={class:"server-info"},ra={class:"info-row"},ua={class:"value"},ca={class:"info-row"},va={class:"value"},fa={class:"info-row"},_a={key:0,class:"progress-section"},ha={class:"progress-header"},pa={class:"status-text"},ga={class:"progress-bar-container"},ma={class:"progress-details"},ba={class:"empty-content"},ya={key:1,class:"daily-charts"},Sa={class:"chart-list"},Ca={class:"chart-header"},Fa={class:"chart-total"},ka={class:"chart-container"},Aa={__name:"Dashboard",setup(Ia){K.register(Z,q,H,J,Q,X,Y);const h=u([]),g=u([]),m=u(!1),p=u(null),v=u(!1),l=u({}),x=W(()=>h.value.filter(a=>a.active)),E={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{mode:"index",intersect:!1},datalabels:{display:a=>{if(a.datasetIndex!==2)return!1;const s=a.chart.data.datasets,t=a.dataIndex;return s.reduce((S,C)=>S+(C.data[t]||0),0)>0},anchor:"end",align:"end",offset:2,font:{size:10,weight:"bold"},color:"#666",formatter:(a,s)=>{const t=s.chart.data.datasets,r=s.dataIndex;return t.reduce((S,C)=>S+(C.data[r]||0),0)}}},scales:{x:{stacked:!0,grid:{display:!1}},y:{stacked:!0,beginAtZero:!0,grid:{color:"#f0f0f0"}}}},$=a=>({labels:a.dailyStats.map(t=>{const r=new Date(t.date);return`${r.getMonth()+1}/${r.getDate()}`}),datasets:[{label:"CRITICAL",data:a.dailyStats.map(t=>t.critical),backgroundColor:"#9b59b6",borderRadius:2},{label:"ERROR",data:a.dailyStats.map(t=>t.error),backgroundColor:"#e74c3c",borderRadius:2},{label:"WARN",data:a.dailyStats.map(t=>t.warn),backgroundColor:"#f39c12",borderRadius:2}]}),L=a=>a.dailyStats.reduce((s,t)=>s+t.total,0),b=async()=>{m.value=!0;try{h.value=await U.getAll()}catch(a){console.error("Failed to load servers:",a)}finally{m.value=!1}},y=async()=>{try{g.value=await k.getDailyStatsByServer(30)}catch(a){console.error("Failed to load daily stats:",a)}},P=a=>{p.value=a.id,l.value[a.id]={status:"RUNNING",currentPath:"",currentFile:"",totalFiles:0,scannedFiles:0,errorsFound:0},k.startWithProgress(a.id,s=>{l.value[a.id]=s},s=>{p.value=null,s.success?l.value[a.id]={...l.value[a.id],status:"SUCCESS",message:`완료: ${s.filesScanned}개 파일, ${s.errorsFound}개 에러`}:l.value[a.id]={...l.value[a.id],status:"FAILED",message:s.error},b(),y(),setTimeout(()=>{delete l.value[a.id]},5e3)},s=>{p.value=null,l.value[a.id]={...l.value[a.id],status:"FAILED",message:s}})},T=()=>{v.value=!0,k.startAllWithProgress(a=>{l.value[a.serverId]=a},a=>{v.value=!1,b(),y(),setTimeout(()=>{l.value={}},5e3)},a=>{v.value=!1,alert("분석 실패: "+a)})},D=a=>a?new Date(a).toLocaleString("ko-KR"):"-",z=a=>a.status==="SUCCESS"?a.message||"완료":a.status==="FAILED"?a.message||"실패":a.currentFile?`분석중: ${a.currentFile}`:a.currentPath?`경로: ${a.currentPath}`:"준비중...",M=a=>a.totalFiles===0?0:Math.round(a.scannedFiles/a.totalFiles*100);return G(()=>{b(),y()}),(a,s)=>(i(),f("div",ta,[e("div",sa,[s[2]||(s[2]=e("h2",null,"대시보드",-1)),e("div",ea,[c(d(w),{onClick:T,loading:v.value,disabled:x.value.length===0},{default:o(()=>[...s[1]||(s[1]=[_(" 전체 분석 실행 ",-1)])]),_:1},8,["loading","disabled"])])]),e("div",la,[(i(!0),f(B,null,N(h.value,t=>(i(),A(d(F),{key:t.id,class:"server-card"},{header:o(()=>[e("div",na,[e("div",oa,[c(d(R),{variant:t.active?"success":"default",size:"sm"},{default:o(()=>[_(n(t.active?"활성":"비활성"),1)]),_:2},1032,["variant"]),e("h4",null,n(t.name),1)]),e("div",da,[c(d(w),{size:"sm",onClick:r=>P(t),loading:p.value===t.id,disabled:!t.active||v.value},{default:o(()=>[...s[3]||(s[3]=[_(" 분석 실행 ",-1)])]),_:1},8,["onClick","loading","disabled"])])])]),default:o(()=>[e("div",ia,[e("div",ra,[s[4]||(s[4]=e("span",{class:"label"},"호스트",-1)),e("span",ua,n(t.host)+":"+n(t.port),1)]),e("div",ca,[s[5]||(s[5]=e("span",{class:"label"},"마지막 분석",-1)),e("span",va,n(D(t.lastScanAt)),1)]),e("div",fa,[s[6]||(s[6]=e("span",{class:"label"},"마지막 에러",-1)),e("span",{class:O(["value",{"has-error":t.lastErrorAt}])},n(D(t.lastErrorAt)),3)])]),l.value[t.id]?(i(),f("div",_a,[e("div",ha,[e("span",pa,n(z(l.value[t.id])),1),c(d(R),{variant:l.value[t.id].status==="RUNNING"?"warn":"success"},{default:o(()=>[_(n(l.value[t.id].status),1)]),_:2},1032,["variant"])]),e("div",ga,[e("div",{class:"progress-bar",style:j({width:M(l.value[t.id])+"%"})},null,4)]),e("div",ma,[e("span",null,"파일: "+n(l.value[t.id].scannedFiles)+" / "+n(l.value[t.id].totalFiles),1),e("span",null,"에러: "+n(l.value[t.id].errorsFound)+"건",1)])])):I("",!0)]),_:2},1024))),128))]),h.value.length===0&&!m.value?(i(),A(d(F),{key:0,class:"empty-card"},{default:o(()=>[e("div",ba,[s[8]||(s[8]=e("p",null,"등록된 서버가 없습니다.",-1)),c(d(w),{onClick:s[0]||(s[0]=t=>a.$router.push("/servers"))},{default:o(()=>[...s[7]||(s[7]=[_("서버 등록하기",-1)])]),_:1})])]),_:1})):I("",!0),g.value.length>0?(i(),f("div",ya,[s[9]||(s[9]=e("h3",null,"최근 30일 에러 추이",-1)),e("div",Sa,[(i(!0),f(B,null,N(g.value,t=>(i(),A(d(F),{key:t.serverId,class:"chart-card"},{header:o(()=>[e("div",Ca,[e("span",null,"🖥️ "+n(t.serverName),1),e("span",Fa,"총 "+n(L(t))+"건",1)])]),default:o(()=>[e("div",ka,[c(d(aa),{data:$(t),options:E},null,8,["data"])])]),_:2},1024))),128))])])):I("",!0)]))}},xa=V(Aa,[["__scopeId","data-v-abd43acf"]]);export{xa as default}; +import{C as F,s as U,a as k}from"./index--fsvNaiQ.js";import{_ as V,r as u,c as W,o as G,a as f,b as e,d as A,e as I,f as c,w as o,u as d,F as B,g as N,h as i,i as _,t as n,n as O,j}from"./index-DFoOAXeQ.js";import{B as w}from"./Button-Ddldcbk7.js";import{B as R}from"./Badge-SZTgBg80.js";import{C as K,a as Z,L as q,B as H,p as J,b as Q,c as X,d as Y,e as aa}from"./chartjs-plugin-datalabels.esm-B8xtR40N.js";const ta={class:"dashboard"},sa={class:"dashboard-header"},ea={class:"header-actions"},la={class:"server-grid"},na={class:"server-header"},oa={class:"server-title"},da={class:"server-actions"},ia={class:"server-info"},ra={class:"info-row"},ua={class:"value"},ca={class:"info-row"},va={class:"value"},fa={class:"info-row"},_a={key:0,class:"progress-section"},ha={class:"progress-header"},pa={class:"status-text"},ga={class:"progress-bar-container"},ma={class:"progress-details"},ba={class:"empty-content"},ya={key:1,class:"daily-charts"},Sa={class:"chart-list"},Ca={class:"chart-header"},Fa={class:"chart-total"},ka={class:"chart-container"},Aa={__name:"Dashboard",setup(Ia){K.register(Z,q,H,J,Q,X,Y);const h=u([]),g=u([]),m=u(!1),p=u(null),v=u(!1),l=u({}),x=W(()=>h.value.filter(a=>a.active)),E={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{mode:"index",intersect:!1},datalabels:{display:a=>{if(a.datasetIndex!==2)return!1;const s=a.chart.data.datasets,t=a.dataIndex;return s.reduce((S,C)=>S+(C.data[t]||0),0)>0},anchor:"end",align:"end",offset:2,font:{size:10,weight:"bold"},color:"#666",formatter:(a,s)=>{const t=s.chart.data.datasets,r=s.dataIndex;return t.reduce((S,C)=>S+(C.data[r]||0),0)}}},scales:{x:{stacked:!0,grid:{display:!1}},y:{stacked:!0,beginAtZero:!0,grid:{color:"#f0f0f0"}}}},$=a=>({labels:a.dailyStats.map(t=>{const r=new Date(t.date);return`${r.getMonth()+1}/${r.getDate()}`}),datasets:[{label:"CRITICAL",data:a.dailyStats.map(t=>t.critical),backgroundColor:"#9b59b6",borderRadius:2},{label:"ERROR",data:a.dailyStats.map(t=>t.error),backgroundColor:"#e74c3c",borderRadius:2},{label:"WARN",data:a.dailyStats.map(t=>t.warn),backgroundColor:"#f39c12",borderRadius:2}]}),L=a=>a.dailyStats.reduce((s,t)=>s+t.total,0),b=async()=>{m.value=!0;try{h.value=await U.getAll()}catch(a){console.error("Failed to load servers:",a)}finally{m.value=!1}},y=async()=>{try{g.value=await k.getDailyStatsByServer(30)}catch(a){console.error("Failed to load daily stats:",a)}},P=a=>{p.value=a.id,l.value[a.id]={status:"RUNNING",currentPath:"",currentFile:"",totalFiles:0,scannedFiles:0,errorsFound:0},k.startWithProgress(a.id,s=>{l.value[a.id]=s},s=>{p.value=null,s.success?l.value[a.id]={...l.value[a.id],status:"SUCCESS",message:`완료: ${s.filesScanned}개 파일, ${s.errorsFound}개 에러`}:l.value[a.id]={...l.value[a.id],status:"FAILED",message:s.error},b(),y(),setTimeout(()=>{delete l.value[a.id]},5e3)},s=>{p.value=null,l.value[a.id]={...l.value[a.id],status:"FAILED",message:s}})},T=()=>{v.value=!0,k.startAllWithProgress(a=>{l.value[a.serverId]=a},a=>{v.value=!1,b(),y(),setTimeout(()=>{l.value={}},5e3)},a=>{v.value=!1,alert("분석 실패: "+a)})},D=a=>a?new Date(a).toLocaleString("ko-KR"):"-",z=a=>a.status==="SUCCESS"?a.message||"완료":a.status==="FAILED"?a.message||"실패":a.currentFile?`분석중: ${a.currentFile}`:a.currentPath?`경로: ${a.currentPath}`:"준비중...",M=a=>a.totalFiles===0?0:Math.round(a.scannedFiles/a.totalFiles*100);return G(()=>{b(),y()}),(a,s)=>(i(),f("div",ta,[e("div",sa,[s[2]||(s[2]=e("h2",null,"대시보드",-1)),e("div",ea,[c(d(w),{onClick:T,loading:v.value,disabled:x.value.length===0},{default:o(()=>[...s[1]||(s[1]=[_(" 전체 분석 실행 ",-1)])]),_:1},8,["loading","disabled"])])]),e("div",la,[(i(!0),f(B,null,N(h.value,t=>(i(),A(d(F),{key:t.id,class:"server-card"},{header:o(()=>[e("div",na,[e("div",oa,[c(d(R),{variant:t.active?"success":"default",size:"sm"},{default:o(()=>[_(n(t.active?"활성":"비활성"),1)]),_:2},1032,["variant"]),e("h4",null,n(t.name),1)]),e("div",da,[c(d(w),{size:"sm",onClick:r=>P(t),loading:p.value===t.id,disabled:!t.active||v.value},{default:o(()=>[...s[3]||(s[3]=[_(" 분석 실행 ",-1)])]),_:1},8,["onClick","loading","disabled"])])])]),default:o(()=>[e("div",ia,[e("div",ra,[s[4]||(s[4]=e("span",{class:"label"},"호스트",-1)),e("span",ua,n(t.host)+":"+n(t.port),1)]),e("div",ca,[s[5]||(s[5]=e("span",{class:"label"},"마지막 분석",-1)),e("span",va,n(D(t.lastScanAt)),1)]),e("div",fa,[s[6]||(s[6]=e("span",{class:"label"},"마지막 에러",-1)),e("span",{class:O(["value",{"has-error":t.lastErrorAt}])},n(D(t.lastErrorAt)),3)])]),l.value[t.id]?(i(),f("div",_a,[e("div",ha,[e("span",pa,n(z(l.value[t.id])),1),c(d(R),{variant:l.value[t.id].status==="RUNNING"?"warn":"success"},{default:o(()=>[_(n(l.value[t.id].status),1)]),_:2},1032,["variant"])]),e("div",ga,[e("div",{class:"progress-bar",style:j({width:M(l.value[t.id])+"%"})},null,4)]),e("div",ma,[e("span",null,"파일: "+n(l.value[t.id].scannedFiles)+" / "+n(l.value[t.id].totalFiles),1),e("span",null,"에러: "+n(l.value[t.id].errorsFound)+"건",1)])])):I("",!0)]),_:2},1024))),128))]),h.value.length===0&&!m.value?(i(),A(d(F),{key:0,class:"empty-card"},{default:o(()=>[e("div",ba,[s[8]||(s[8]=e("p",null,"등록된 서버가 없습니다.",-1)),c(d(w),{onClick:s[0]||(s[0]=t=>a.$router.push("/servers"))},{default:o(()=>[...s[7]||(s[7]=[_("서버 등록하기",-1)])]),_:1})])]),_:1})):I("",!0),g.value.length>0?(i(),f("div",ya,[s[9]||(s[9]=e("h3",null,"최근 30일 에러 추이",-1)),e("div",Sa,[(i(!0),f(B,null,N(g.value,t=>(i(),A(d(F),{key:t.serverId,class:"chart-card"},{header:o(()=>[e("div",Ca,[e("span",null,"🖥️ "+n(t.serverName),1),e("span",Fa,"총 "+n(L(t))+"건",1)])]),default:o(()=>[e("div",ka,[c(d(aa),{data:$(t),options:E},null,8,["data"])])]),_:2},1024))),128))])])):I("",!0)]))}},xa=V(Aa,[["__scopeId","data-v-abd43acf"]]);export{xa as default}; diff --git a/build/resources/main/static/assets/DataTable-DHBS0NNE.js b/build/resources/main/static/assets/DataTable-DHBS0NNE.js deleted file mode 100644 index d331892..0000000 --- a/build/resources/main/static/assets/DataTable-DHBS0NNE.js +++ /dev/null @@ -1 +0,0 @@ -import"./index-09HB4Lmg.js";import{_ as h,a as e,h as a,b as o,e as u,F as d,g as i,j as f,t as c,G as y,i as g}from"./index-BB0X_WMV.js";const b={class:"data-table-wrapper"},p={class:"data-table"},$={key:0,class:"actions-col"},_={key:0},D=["colspan"],S={key:1},T=["colspan"],B=["onClick"],N={key:0,class:"actions-col"},V={__name:"DataTable",props:{columns:{type:Array,required:!0},data:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},emptyText:{type:String,default:"데이터가 없습니다."}},emits:["row-click"],setup(n){const m=(t,r)=>t==null?"-":r.type==="date"&&t?new Date(t).toLocaleString("ko-KR"):r.type==="boolean"?t?"Y":"N":t;return(t,r)=>(a(),e("div",b,[o("table",p,[o("thead",null,[o("tr",null,[(a(!0),e(d,null,i(n.columns,s=>(a(),e("th",{key:s.key,style:f({width:s.width})},c(s.label),5))),128)),t.$slots.actions?(a(),e("th",$,"작업")):u("",!0)])]),o("tbody",null,[n.loading?(a(),e("tr",_,[o("td",{colspan:n.columns.length+(t.$slots.actions?1:0),class:"loading-cell"}," 로딩 중... ",8,D)])):!n.data||n.data.length===0?(a(),e("tr",S,[o("td",{colspan:n.columns.length+(t.$slots.actions?1:0),class:"empty-cell"},c(n.emptyText),9,T)])):(a(!0),e(d,{key:2},i(n.data,(s,k)=>(a(),e("tr",{key:s.id||k,onClick:l=>t.$emit("row-click",s)},[(a(!0),e(d,null,i(n.columns,l=>(a(),e("td",{key:l.key},[y(t.$slots,l.key,{row:s,value:s[l.key]},()=>[g(c(m(s[l.key],l)),1)])]))),128)),t.$slots.actions?(a(),e("td",N,[y(t.$slots,"actions",{row:s},void 0)])):u("",!0)],8,B))),128))])])]))}},A=h(V,[["__scopeId","data-v-db5e24a9"]]);export{A as D}; diff --git a/build/resources/main/static/assets/ErrorLogs-C4tZmC_2.js b/build/resources/main/static/assets/ErrorLogs-DWDLe7x0.js similarity index 97% rename from build/resources/main/static/assets/ErrorLogs-C4tZmC_2.js rename to build/resources/main/static/assets/ErrorLogs-DWDLe7x0.js index a51731e..596b105 100644 --- a/build/resources/main/static/assets/ErrorLogs-C4tZmC_2.js +++ b/build/resources/main/static/assets/ErrorLogs-DWDLe7x0.js @@ -1 +1 @@ -import{_ as ke,r as i,k as ge,c as Q,o as Ce,a as o,b as t,f as u,w as v,u as c,l as he,v as be,F as R,g as A,n as Y,t as a,h as n,i as p,e as _,m as Z,p as Ie}from"./index-BB0X_WMV.js";import{C as we,e as B,p as xe}from"./index-09HB4Lmg.js";import{M as ee}from"./Modal-iKIn6dGt.js";import{F as U}from"./FormInput-BwPgkOAn.js";import{B as k}from"./Button-CoXLXkk7.js";import{B as te}from"./Badge-DzuJKoKk.js";const Ve={class:"error-history"},Pe={class:"layout-container"},Ne={class:"tree-panel"},Re={class:"tree-header"},Ae={class:"server-select"},Fe=["value"],$e={class:"tree-content"},Ee={key:0,class:"tree-loading"},De={key:1,class:"tree-empty"},Le={key:2,class:"tree-list"},Te={class:"tree-count"},Be=["onClick"],Se={class:"tree-toggle"},ze=["title"],Me={class:"tree-count"},Oe={key:0,class:"tree-files"},Ue=["onClick","title"],We={class:"tree-label"},He={class:"tree-count-detail"},Xe={key:0,class:"critical"},je={key:1,class:"error"},qe={key:2,class:"warn"},Ge=["onClick"],Je={class:"list-panel"},Ke={class:"card-header-content"},Qe={key:0},Ye={key:1},Ze={class:"header-actions"},et={class:"filters"},tt={class:"filter-row"},lt={class:"filter-actions"},st={class:"results-section"},at={class:"results-header"},ot={key:0},nt={class:"table-wrapper"},rt={key:0,class:"error-table"},it={class:"sort-icon"},dt={class:"sort-icon"},ut={class:"sort-icon"},vt={class:"sort-icon"},ct={class:"col-time"},pt={class:"col-severity"},mt={class:"col-pattern"},yt={class:"col-summary"},ft=["onClick"],_t={key:0,class:"empty-result"},kt={key:1,class:"loading-result"},gt={key:2,class:"pagination"},Ct={class:"page-info"},ht={key:0,class:"error-detail"},bt={class:"detail-grid"},It={class:"detail-item"},wt={class:"detail-item"},xt={class:"detail-item"},Vt={class:"detail-item"},Pt={class:"file-path"},Nt={class:"detail-item"},Rt={class:"detail-item"},At={class:"detail-section"},Ft={class:"summary-box"},$t={class:"detail-section"},Et={class:"context-box"},Dt=100,Lt={__name:"ErrorLogs",setup(Tt){const h=i([]),F=i(!1),b=i(null),I=i([]),d=i(null),$=i(!1),x=i([]),S=i(0),E=i(0),y=i(0),V=i("occurredAt"),w=i("desc"),r=ge({patternId:"",severity:"",keyword:""}),W=i([]),le=[{value:"",label:"전체"},{value:"CRITICAL",label:"CRITICAL"},{value:"ERROR",label:"ERROR"},{value:"WARN",label:"WARN"}],P=i(!1),f=i(null),N=i(!1),H=i(null),z=i(null),X=i(""),M=i(!1),j=i(null),D=Q(()=>b.value?h.value.filter(l=>l.serverId===b.value):h.value),se=Q(()=>D.value.reduce((l,e)=>l+e.totalErrorCount,0)),O=async()=>{F.value=!0;try{h.value=await B.getTree(),h.value.length>0&&h.value[0].paths.length>0&&(I.value=[h.value[0].serverId+":"+h.value[0].paths[0].path])}catch(l){console.error("Failed to load tree:",l)}finally{F.value=!1}},ae=async()=>{try{const l=await xe.getAll();W.value=[{value:"",label:"전체"},...l.map(e=>({value:e.id,label:e.name}))]}catch(l){console.error("Failed to load options:",l)}},oe=()=>{d.value=null,I.value=[];const l=D.value[0];l&&l.paths.length>0&&(I.value=[l.serverId+":"+l.paths[0].path]),y.value=0,g()},ne=l=>{const e=I.value.indexOf(l);e>=0?I.value.splice(e,1):I.value.push(l)},re=()=>{d.value=null,y.value=0,g()},ie=(l,e)=>{d.value={serverId:l,...e},y.value=0,g()},de=l=>l.length>30?"..."+l.slice(-27):l,L=l=>{V.value===l?w.value=w.value==="asc"?"desc":"asc":(V.value=l,w.value="desc"),y.value=0,g()},T=l=>V.value!==l?"↕":w.value==="asc"?"↑":"↓",g=async()=>{$.value=!0;try{const l={page:y.value,size:Dt,sort:`${V.value},${w.value}`};d.value?(l.serverId=d.value.serverId,l.filePath=d.value.filePath):b.value&&(l.serverId=b.value),r.patternId&&(l.patternId=r.patternId),r.severity&&(l.severity=r.severity),r.keyword&&(l.keyword=r.keyword);const e=await B.search(l);x.value=e.content||[],S.value=e.totalElements||0,E.value=e.totalPages||0}catch(l){console.error("Failed to search errors:",l),x.value=[]}finally{$.value=!1}},ue=()=>{r.patternId="",r.severity="",r.keyword="",V.value="occurredAt",w.value="desc",y.value=0,g()},q=l=>{y.value=l,g()},ve=(l,e)=>{H.value=l,z.value=e.filePath,X.value=e.fileName,N.value=!0,Ie(()=>{var s;(s=j.value)==null||s.focus()})},ce=async()=>{M.value=!0;try{await B.deleteByFile(H.value,z.value),N.value=!1,d.value&&d.value.filePath===z.value&&(d.value=null),await O(),g()}catch(l){console.error("Failed to delete:",l),alert("삭제 실패")}finally{M.value=!1}},pe=async l=>{try{f.value=await B.getById(l.id),P.value=!0}catch{f.value=l,P.value=!0}},G=()=>{const l=new URLSearchParams;return d.value?(l.append("serverId",d.value.serverId),l.append("filePath",d.value.filePath)):b.value&&l.append("serverId",b.value),r.patternId&&l.append("patternId",r.patternId),r.severity&&l.append("severity",r.severity),r.keyword&&l.append("keyword",r.keyword),l.toString()},me=()=>{const l=G();window.open(`/api/export/html?${l}`,"_blank")},ye=()=>{const l=G();window.open(`/api/export/txt?${l}`,"_blank")},J=l=>l?new Date(l).toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}):"-",fe=(l,e)=>l?l.length>e?l.substring(0,e)+"...":l:"",K=l=>({CRITICAL:"critical",ERROR:"error",WARN:"warn"})[l]||"default";return Ce(()=>{O(),ae(),g()}),(l,e)=>(n(),o("div",Ve,[t("div",Pe,[t("div",Ne,[t("div",Re,[e[15]||(e[15]=t("h4",null,"파일 탐색",-1)),u(c(k),{size:"sm",variant:"secondary",onClick:O,loading:F.value},{default:v(()=>[...e[14]||(e[14]=[p(" 새로고침 ",-1)])]),_:1},8,["loading"])]),t("div",Ae,[he(t("select",{"onUpdate:modelValue":e[0]||(e[0]=s=>b.value=s),onChange:oe},[e[16]||(e[16]=t("option",{value:null},"전체 서버",-1)),(n(!0),o(R,null,A(h.value,s=>(n(),o("option",{key:s.serverId,value:s.serverId},a(s.serverName)+" ("+a(s.totalErrorCount)+"건) ",9,Fe))),128))],544),[[be,b.value]])]),t("div",$e,[F.value?(n(),o("div",Ee,"로딩중...")):D.value.length===0?(n(),o("div",De," 분석된 파일이 없습니다. ")):(n(),o("div",Le,[t("div",{class:Y(["tree-item tree-all",{active:!d.value}]),onClick:re},[e[17]||(e[17]=t("span",{class:"tree-icon"},"📊",-1)),e[18]||(e[18]=t("span",{class:"tree-label"},"전체",-1)),t("span",Te,a(se.value)+"건",1)],2),(n(!0),o(R,null,A(D.value,s=>(n(),o("div",{key:s.serverId},[(n(!0),o(R,null,A(s.paths,C=>(n(),o("div",{key:C.path,class:"tree-path"},[t("div",{class:"tree-item tree-path-item",onClick:m=>ne(s.serverId+":"+C.path)},[t("span",Se,a(I.value.includes(s.serverId+":"+C.path)?"▼":"▶"),1),e[19]||(e[19]=t("span",{class:"tree-icon"},"📁",-1)),t("span",{class:"tree-label",title:C.path},a(de(C.path)),9,ze),t("span",Me,a(C.totalErrorCount)+"건",1)],8,Be),I.value.includes(s.serverId+":"+C.path)?(n(),o("div",Oe,[(n(!0),o(R,null,A(C.files,m=>(n(),o("div",{key:m.filePath,class:Y(["tree-item tree-file-item",{active:d.value&&d.value.filePath===m.filePath&&d.value.serverId===s.serverId}]),onClick:_e=>ie(s.serverId,m),title:m.fileName},[e[20]||(e[20]=t("span",{class:"tree-icon"},"📄",-1)),t("span",We,a(m.fileName),1),t("span",He,[m.criticalCount?(n(),o("span",Xe,a(m.criticalCount),1)):_("",!0),m.errorLevelCount?(n(),o("span",je,a(m.errorLevelCount),1)):_("",!0),m.warnCount?(n(),o("span",qe,a(m.warnCount),1)):_("",!0)]),t("button",{class:"tree-delete",onClick:Z(_e=>ve(s.serverId,m),["stop"]),title:"삭제"}," 🗑️ ",8,Ge)],10,Ue))),128))])):_("",!0)]))),128))]))),128))]))])]),t("div",Je,[u(c(we),null,{header:v(()=>[t("div",Ke,[t("h3",null,[d.value?(n(),o("span",Qe,a(d.value.fileName),1)):(n(),o("span",Ye,"전체 에러 이력"))]),t("div",Ze,[u(c(k),{size:"sm",variant:"secondary",onClick:me},{default:v(()=>[...e[21]||(e[21]=[p("HTML",-1)])]),_:1}),u(c(k),{size:"sm",variant:"secondary",onClick:ye},{default:v(()=>[...e[22]||(e[22]=[p("TXT",-1)])]),_:1})])])]),default:v(()=>[t("div",et,[t("div",tt,[u(c(U),{modelValue:r.patternId,"onUpdate:modelValue":e[1]||(e[1]=s=>r.patternId=s),label:"패턴",type:"select",options:W.value,placeholder:"전체"},null,8,["modelValue","options"]),u(c(U),{modelValue:r.severity,"onUpdate:modelValue":e[2]||(e[2]=s=>r.severity=s),label:"심각도",type:"select",options:le,placeholder:"전체"},null,8,["modelValue"]),u(c(U),{modelValue:r.keyword,"onUpdate:modelValue":e[3]||(e[3]=s=>r.keyword=s),label:"키워드",placeholder:"검색어 입력..."},null,8,["modelValue"]),t("div",lt,[u(c(k),{onClick:g},{default:v(()=>[...e[23]||(e[23]=[p("검색",-1)])]),_:1}),u(c(k),{variant:"secondary",onClick:ue},{default:v(()=>[...e[24]||(e[24]=[p("초기화",-1)])]),_:1})])])]),t("div",st,[t("div",at,[S.value>0?(n(),o("span",ot,"총 "+a(S.value)+"건",1)):_("",!0)]),t("div",nt,[x.value.length>0?(n(),o("table",rt,[t("thead",null,[t("tr",null,[t("th",{class:"col-time sortable",onClick:e[4]||(e[4]=s=>L("occurredAt"))},[e[25]||(e[25]=p(" 발생시간 ",-1)),t("span",it,a(T("occurredAt")),1)]),t("th",{class:"col-severity sortable",onClick:e[5]||(e[5]=s=>L("severity"))},[e[26]||(e[26]=p(" 심각도 ",-1)),t("span",dt,a(T("severity")),1)]),t("th",{class:"col-pattern sortable",onClick:e[6]||(e[6]=s=>L("patternName"))},[e[27]||(e[27]=p(" 패턴 ",-1)),t("span",ut,a(T("patternName")),1)]),t("th",{class:"col-summary sortable",onClick:e[7]||(e[7]=s=>L("summary"))},[e[28]||(e[28]=p(" 요약 ",-1)),t("span",vt,a(T("summary")),1)])])]),t("tbody",null,[(n(!0),o(R,null,A(x.value,s=>(n(),o("tr",{key:s.id},[t("td",ct,a(J(s.occurredAt)),1),t("td",pt,[u(c(te),{variant:K(s.severity)},{default:v(()=>[p(a(s.severity),1)]),_:2},1032,["variant"])]),t("td",mt,a(s.patternName),1),t("td",yt,[t("a",{href:"#",class:"summary-link",onClick:Z(C=>pe(s),["prevent"])},a(fe(s.summary,100)),9,ft)])]))),128))])])):_("",!0)]),x.value.length===0&&!$.value?(n(),o("div",_t,[...e[29]||(e[29]=[t("p",null,"검색 결과가 없습니다.",-1)])])):_("",!0),$.value?(n(),o("div",kt,[...e[30]||(e[30]=[t("p",null,"로딩중...",-1)])])):_("",!0),E.value>1?(n(),o("div",gt,[u(c(k),{size:"sm",variant:"secondary",disabled:y.value===0,onClick:e[8]||(e[8]=s=>q(y.value-1))},{default:v(()=>[...e[31]||(e[31]=[p(" 이전 ",-1)])]),_:1},8,["disabled"]),t("span",Ct,a(y.value+1)+" / "+a(E.value),1),u(c(k),{size:"sm",variant:"secondary",disabled:y.value>=E.value-1,onClick:e[9]||(e[9]=s=>q(y.value+1))},{default:v(()=>[...e[32]||(e[32]=[p(" 다음 ",-1)])]),_:1},8,["disabled"])])):_("",!0)])]),_:1})])]),u(c(ee),{modelValue:P.value,"onUpdate:modelValue":e[11]||(e[11]=s=>P.value=s),title:"에러 상세",width:"900px"},{footer:v(()=>[u(c(k),{variant:"secondary",onClick:e[10]||(e[10]=s=>P.value=!1)},{default:v(()=>[...e[41]||(e[41]=[p("닫기",-1)])]),_:1})]),default:v(()=>[f.value?(n(),o("div",ht,[t("div",bt,[t("div",It,[e[33]||(e[33]=t("label",null,"서버",-1)),t("span",null,a(f.value.serverName),1)]),t("div",wt,[e[34]||(e[34]=t("label",null,"심각도",-1)),u(c(te),{variant:K(f.value.severity)},{default:v(()=>[p(a(f.value.severity),1)]),_:1},8,["variant"])]),t("div",xt,[e[35]||(e[35]=t("label",null,"패턴",-1)),t("span",null,a(f.value.patternName),1)]),t("div",Vt,[e[36]||(e[36]=t("label",null,"파일",-1)),t("span",Pt,a(f.value.filePath),1)]),t("div",Nt,[e[37]||(e[37]=t("label",null,"라인",-1)),t("span",null,a(f.value.lineNumber),1)]),t("div",Rt,[e[38]||(e[38]=t("label",null,"발생시간",-1)),t("span",null,a(J(f.value.occurredAt)),1)])]),t("div",At,[e[39]||(e[39]=t("label",null,"요약",-1)),t("div",Ft,a(f.value.summary),1)]),t("div",$t,[e[40]||(e[40]=t("label",null,"컨텍스트",-1)),t("pre",Et,a(f.value.context),1)])])):_("",!0)]),_:1},8,["modelValue"]),u(c(ee),{modelValue:N.value,"onUpdate:modelValue":e[13]||(e[13]=s=>N.value=s),title:"파일 삭제",width:"400px"},{footer:v(()=>[u(c(k),{variant:"secondary",onClick:e[12]||(e[12]=s=>N.value=!1)},{default:v(()=>[...e[42]||(e[42]=[p("취소",-1)])]),_:1}),u(c(k),{ref_key:"deleteBtn",ref:j,variant:"danger",onClick:ce,loading:M.value},{default:v(()=>[...e[43]||(e[43]=[p("삭제",-1)])]),_:1},8,["loading"])]),default:v(()=>[t("p",null,a(X.value)+" 파일의 분석 결과를 삭제하시겠습니까?",1),e[44]||(e[44]=t("p",{class:"warning-text"},"에러 로그와 스캔 기록이 삭제되어 재분석이 가능해집니다.",-1))]),_:1},8,["modelValue"])]))}},Wt=ke(Lt,[["__scopeId","data-v-1cff7c91"]]);export{Wt as default}; +import{_ as ke,r as i,k as ge,c as Q,o as Ce,a as o,b as t,f as u,w as v,u as c,l as he,v as be,F as R,g as A,n as Y,t as a,h as n,i as p,e as _,m as Z,p as Ie}from"./index-DFoOAXeQ.js";import{C as we,e as B,p as xe}from"./index--fsvNaiQ.js";import{M as ee}from"./Modal-BaZTW7NU.js";import{F as U}from"./FormInput-BsW78DWl.js";import{B as k}from"./Button-Ddldcbk7.js";import{B as te}from"./Badge-SZTgBg80.js";const Ve={class:"error-history"},Pe={class:"layout-container"},Ne={class:"tree-panel"},Re={class:"tree-header"},Ae={class:"server-select"},Fe=["value"],$e={class:"tree-content"},Ee={key:0,class:"tree-loading"},De={key:1,class:"tree-empty"},Le={key:2,class:"tree-list"},Te={class:"tree-count"},Be=["onClick"],Se={class:"tree-toggle"},ze=["title"],Me={class:"tree-count"},Oe={key:0,class:"tree-files"},Ue=["onClick","title"],We={class:"tree-label"},He={class:"tree-count-detail"},Xe={key:0,class:"critical"},je={key:1,class:"error"},qe={key:2,class:"warn"},Ge=["onClick"],Je={class:"list-panel"},Ke={class:"card-header-content"},Qe={key:0},Ye={key:1},Ze={class:"header-actions"},et={class:"filters"},tt={class:"filter-row"},lt={class:"filter-actions"},st={class:"results-section"},at={class:"results-header"},ot={key:0},nt={class:"table-wrapper"},rt={key:0,class:"error-table"},it={class:"sort-icon"},dt={class:"sort-icon"},ut={class:"sort-icon"},vt={class:"sort-icon"},ct={class:"col-time"},pt={class:"col-severity"},mt={class:"col-pattern"},yt={class:"col-summary"},ft=["onClick"],_t={key:0,class:"empty-result"},kt={key:1,class:"loading-result"},gt={key:2,class:"pagination"},Ct={class:"page-info"},ht={key:0,class:"error-detail"},bt={class:"detail-grid"},It={class:"detail-item"},wt={class:"detail-item"},xt={class:"detail-item"},Vt={class:"detail-item"},Pt={class:"file-path"},Nt={class:"detail-item"},Rt={class:"detail-item"},At={class:"detail-section"},Ft={class:"summary-box"},$t={class:"detail-section"},Et={class:"context-box"},Dt=100,Lt={__name:"ErrorLogs",setup(Tt){const h=i([]),F=i(!1),b=i(null),I=i([]),d=i(null),$=i(!1),x=i([]),S=i(0),E=i(0),y=i(0),V=i("occurredAt"),w=i("desc"),r=ge({patternId:"",severity:"",keyword:""}),W=i([]),le=[{value:"",label:"전체"},{value:"CRITICAL",label:"CRITICAL"},{value:"ERROR",label:"ERROR"},{value:"WARN",label:"WARN"}],P=i(!1),f=i(null),N=i(!1),H=i(null),z=i(null),X=i(""),M=i(!1),j=i(null),D=Q(()=>b.value?h.value.filter(l=>l.serverId===b.value):h.value),se=Q(()=>D.value.reduce((l,e)=>l+e.totalErrorCount,0)),O=async()=>{F.value=!0;try{h.value=await B.getTree(),h.value.length>0&&h.value[0].paths.length>0&&(I.value=[h.value[0].serverId+":"+h.value[0].paths[0].path])}catch(l){console.error("Failed to load tree:",l)}finally{F.value=!1}},ae=async()=>{try{const l=await xe.getAll();W.value=[{value:"",label:"전체"},...l.map(e=>({value:e.id,label:e.name}))]}catch(l){console.error("Failed to load options:",l)}},oe=()=>{d.value=null,I.value=[];const l=D.value[0];l&&l.paths.length>0&&(I.value=[l.serverId+":"+l.paths[0].path]),y.value=0,g()},ne=l=>{const e=I.value.indexOf(l);e>=0?I.value.splice(e,1):I.value.push(l)},re=()=>{d.value=null,y.value=0,g()},ie=(l,e)=>{d.value={serverId:l,...e},y.value=0,g()},de=l=>l.length>30?"..."+l.slice(-27):l,L=l=>{V.value===l?w.value=w.value==="asc"?"desc":"asc":(V.value=l,w.value="desc"),y.value=0,g()},T=l=>V.value!==l?"↕":w.value==="asc"?"↑":"↓",g=async()=>{$.value=!0;try{const l={page:y.value,size:Dt,sort:`${V.value},${w.value}`};d.value?(l.serverId=d.value.serverId,l.filePath=d.value.filePath):b.value&&(l.serverId=b.value),r.patternId&&(l.patternId=r.patternId),r.severity&&(l.severity=r.severity),r.keyword&&(l.keyword=r.keyword);const e=await B.search(l);x.value=e.content||[],S.value=e.totalElements||0,E.value=e.totalPages||0}catch(l){console.error("Failed to search errors:",l),x.value=[]}finally{$.value=!1}},ue=()=>{r.patternId="",r.severity="",r.keyword="",V.value="occurredAt",w.value="desc",y.value=0,g()},q=l=>{y.value=l,g()},ve=(l,e)=>{H.value=l,z.value=e.filePath,X.value=e.fileName,N.value=!0,Ie(()=>{var s;(s=j.value)==null||s.focus()})},ce=async()=>{M.value=!0;try{await B.deleteByFile(H.value,z.value),N.value=!1,d.value&&d.value.filePath===z.value&&(d.value=null),await O(),g()}catch(l){console.error("Failed to delete:",l),alert("삭제 실패")}finally{M.value=!1}},pe=async l=>{try{f.value=await B.getById(l.id),P.value=!0}catch{f.value=l,P.value=!0}},G=()=>{const l=new URLSearchParams;return d.value?(l.append("serverId",d.value.serverId),l.append("filePath",d.value.filePath)):b.value&&l.append("serverId",b.value),r.patternId&&l.append("patternId",r.patternId),r.severity&&l.append("severity",r.severity),r.keyword&&l.append("keyword",r.keyword),l.toString()},me=()=>{const l=G();window.open(`/api/export/html?${l}`,"_blank")},ye=()=>{const l=G();window.open(`/api/export/txt?${l}`,"_blank")},J=l=>l?new Date(l).toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}):"-",fe=(l,e)=>l?l.length>e?l.substring(0,e)+"...":l:"",K=l=>({CRITICAL:"critical",ERROR:"error",WARN:"warn"})[l]||"default";return Ce(()=>{O(),ae(),g()}),(l,e)=>(n(),o("div",Ve,[t("div",Pe,[t("div",Ne,[t("div",Re,[e[15]||(e[15]=t("h4",null,"파일 탐색",-1)),u(c(k),{size:"sm",variant:"secondary",onClick:O,loading:F.value},{default:v(()=>[...e[14]||(e[14]=[p(" 새로고침 ",-1)])]),_:1},8,["loading"])]),t("div",Ae,[he(t("select",{"onUpdate:modelValue":e[0]||(e[0]=s=>b.value=s),onChange:oe},[e[16]||(e[16]=t("option",{value:null},"전체 서버",-1)),(n(!0),o(R,null,A(h.value,s=>(n(),o("option",{key:s.serverId,value:s.serverId},a(s.serverName)+" ("+a(s.totalErrorCount)+"건) ",9,Fe))),128))],544),[[be,b.value]])]),t("div",$e,[F.value?(n(),o("div",Ee,"로딩중...")):D.value.length===0?(n(),o("div",De," 분석된 파일이 없습니다. ")):(n(),o("div",Le,[t("div",{class:Y(["tree-item tree-all",{active:!d.value}]),onClick:re},[e[17]||(e[17]=t("span",{class:"tree-icon"},"📊",-1)),e[18]||(e[18]=t("span",{class:"tree-label"},"전체",-1)),t("span",Te,a(se.value)+"건",1)],2),(n(!0),o(R,null,A(D.value,s=>(n(),o("div",{key:s.serverId},[(n(!0),o(R,null,A(s.paths,C=>(n(),o("div",{key:C.path,class:"tree-path"},[t("div",{class:"tree-item tree-path-item",onClick:m=>ne(s.serverId+":"+C.path)},[t("span",Se,a(I.value.includes(s.serverId+":"+C.path)?"▼":"▶"),1),e[19]||(e[19]=t("span",{class:"tree-icon"},"📁",-1)),t("span",{class:"tree-label",title:C.path},a(de(C.path)),9,ze),t("span",Me,a(C.totalErrorCount)+"건",1)],8,Be),I.value.includes(s.serverId+":"+C.path)?(n(),o("div",Oe,[(n(!0),o(R,null,A(C.files,m=>(n(),o("div",{key:m.filePath,class:Y(["tree-item tree-file-item",{active:d.value&&d.value.filePath===m.filePath&&d.value.serverId===s.serverId}]),onClick:_e=>ie(s.serverId,m),title:m.fileName},[e[20]||(e[20]=t("span",{class:"tree-icon"},"📄",-1)),t("span",We,a(m.fileName),1),t("span",He,[m.criticalCount?(n(),o("span",Xe,a(m.criticalCount),1)):_("",!0),m.errorLevelCount?(n(),o("span",je,a(m.errorLevelCount),1)):_("",!0),m.warnCount?(n(),o("span",qe,a(m.warnCount),1)):_("",!0)]),t("button",{class:"tree-delete",onClick:Z(_e=>ve(s.serverId,m),["stop"]),title:"삭제"}," 🗑️ ",8,Ge)],10,Ue))),128))])):_("",!0)]))),128))]))),128))]))])]),t("div",Je,[u(c(we),null,{header:v(()=>[t("div",Ke,[t("h3",null,[d.value?(n(),o("span",Qe,a(d.value.fileName),1)):(n(),o("span",Ye,"전체 에러 이력"))]),t("div",Ze,[u(c(k),{size:"sm",variant:"secondary",onClick:me},{default:v(()=>[...e[21]||(e[21]=[p("HTML",-1)])]),_:1}),u(c(k),{size:"sm",variant:"secondary",onClick:ye},{default:v(()=>[...e[22]||(e[22]=[p("TXT",-1)])]),_:1})])])]),default:v(()=>[t("div",et,[t("div",tt,[u(c(U),{modelValue:r.patternId,"onUpdate:modelValue":e[1]||(e[1]=s=>r.patternId=s),label:"패턴",type:"select",options:W.value,placeholder:"전체"},null,8,["modelValue","options"]),u(c(U),{modelValue:r.severity,"onUpdate:modelValue":e[2]||(e[2]=s=>r.severity=s),label:"심각도",type:"select",options:le,placeholder:"전체"},null,8,["modelValue"]),u(c(U),{modelValue:r.keyword,"onUpdate:modelValue":e[3]||(e[3]=s=>r.keyword=s),label:"키워드",placeholder:"검색어 입력..."},null,8,["modelValue"]),t("div",lt,[u(c(k),{onClick:g},{default:v(()=>[...e[23]||(e[23]=[p("검색",-1)])]),_:1}),u(c(k),{variant:"secondary",onClick:ue},{default:v(()=>[...e[24]||(e[24]=[p("초기화",-1)])]),_:1})])])]),t("div",st,[t("div",at,[S.value>0?(n(),o("span",ot,"총 "+a(S.value)+"건",1)):_("",!0)]),t("div",nt,[x.value.length>0?(n(),o("table",rt,[t("thead",null,[t("tr",null,[t("th",{class:"col-time sortable",onClick:e[4]||(e[4]=s=>L("occurredAt"))},[e[25]||(e[25]=p(" 발생시간 ",-1)),t("span",it,a(T("occurredAt")),1)]),t("th",{class:"col-severity sortable",onClick:e[5]||(e[5]=s=>L("severity"))},[e[26]||(e[26]=p(" 심각도 ",-1)),t("span",dt,a(T("severity")),1)]),t("th",{class:"col-pattern sortable",onClick:e[6]||(e[6]=s=>L("patternName"))},[e[27]||(e[27]=p(" 패턴 ",-1)),t("span",ut,a(T("patternName")),1)]),t("th",{class:"col-summary sortable",onClick:e[7]||(e[7]=s=>L("summary"))},[e[28]||(e[28]=p(" 요약 ",-1)),t("span",vt,a(T("summary")),1)])])]),t("tbody",null,[(n(!0),o(R,null,A(x.value,s=>(n(),o("tr",{key:s.id},[t("td",ct,a(J(s.occurredAt)),1),t("td",pt,[u(c(te),{variant:K(s.severity)},{default:v(()=>[p(a(s.severity),1)]),_:2},1032,["variant"])]),t("td",mt,a(s.patternName),1),t("td",yt,[t("a",{href:"#",class:"summary-link",onClick:Z(C=>pe(s),["prevent"])},a(fe(s.summary,100)),9,ft)])]))),128))])])):_("",!0)]),x.value.length===0&&!$.value?(n(),o("div",_t,[...e[29]||(e[29]=[t("p",null,"검색 결과가 없습니다.",-1)])])):_("",!0),$.value?(n(),o("div",kt,[...e[30]||(e[30]=[t("p",null,"로딩중...",-1)])])):_("",!0),E.value>1?(n(),o("div",gt,[u(c(k),{size:"sm",variant:"secondary",disabled:y.value===0,onClick:e[8]||(e[8]=s=>q(y.value-1))},{default:v(()=>[...e[31]||(e[31]=[p(" 이전 ",-1)])]),_:1},8,["disabled"]),t("span",Ct,a(y.value+1)+" / "+a(E.value),1),u(c(k),{size:"sm",variant:"secondary",disabled:y.value>=E.value-1,onClick:e[9]||(e[9]=s=>q(y.value+1))},{default:v(()=>[...e[32]||(e[32]=[p(" 다음 ",-1)])]),_:1},8,["disabled"])])):_("",!0)])]),_:1})])]),u(c(ee),{modelValue:P.value,"onUpdate:modelValue":e[11]||(e[11]=s=>P.value=s),title:"에러 상세",width:"900px"},{footer:v(()=>[u(c(k),{variant:"secondary",onClick:e[10]||(e[10]=s=>P.value=!1)},{default:v(()=>[...e[41]||(e[41]=[p("닫기",-1)])]),_:1})]),default:v(()=>[f.value?(n(),o("div",ht,[t("div",bt,[t("div",It,[e[33]||(e[33]=t("label",null,"서버",-1)),t("span",null,a(f.value.serverName),1)]),t("div",wt,[e[34]||(e[34]=t("label",null,"심각도",-1)),u(c(te),{variant:K(f.value.severity)},{default:v(()=>[p(a(f.value.severity),1)]),_:1},8,["variant"])]),t("div",xt,[e[35]||(e[35]=t("label",null,"패턴",-1)),t("span",null,a(f.value.patternName),1)]),t("div",Vt,[e[36]||(e[36]=t("label",null,"파일",-1)),t("span",Pt,a(f.value.filePath),1)]),t("div",Nt,[e[37]||(e[37]=t("label",null,"라인",-1)),t("span",null,a(f.value.lineNumber),1)]),t("div",Rt,[e[38]||(e[38]=t("label",null,"발생시간",-1)),t("span",null,a(J(f.value.occurredAt)),1)])]),t("div",At,[e[39]||(e[39]=t("label",null,"요약",-1)),t("div",Ft,a(f.value.summary),1)]),t("div",$t,[e[40]||(e[40]=t("label",null,"컨텍스트",-1)),t("pre",Et,a(f.value.context),1)])])):_("",!0)]),_:1},8,["modelValue"]),u(c(ee),{modelValue:N.value,"onUpdate:modelValue":e[13]||(e[13]=s=>N.value=s),title:"파일 삭제",width:"400px"},{footer:v(()=>[u(c(k),{variant:"secondary",onClick:e[12]||(e[12]=s=>N.value=!1)},{default:v(()=>[...e[42]||(e[42]=[p("취소",-1)])]),_:1}),u(c(k),{ref_key:"deleteBtn",ref:j,variant:"danger",onClick:ce,loading:M.value},{default:v(()=>[...e[43]||(e[43]=[p("삭제",-1)])]),_:1},8,["loading"])]),default:v(()=>[t("p",null,a(X.value)+" 파일의 분석 결과를 삭제하시겠습니까?",1),e[44]||(e[44]=t("p",{class:"warning-text"},"에러 로그와 스캔 기록이 삭제되어 재분석이 가능해집니다.",-1))]),_:1},8,["modelValue"])]))}},Wt=ke(Lt,[["__scopeId","data-v-1cff7c91"]]);export{Wt as default}; diff --git a/build/resources/main/static/assets/FormInput-BwPgkOAn.js b/build/resources/main/static/assets/FormInput-BsW78DWl.js similarity index 93% rename from build/resources/main/static/assets/FormInput-BwPgkOAn.js rename to build/resources/main/static/assets/FormInput-BsW78DWl.js index b33b7db..7fabaaa 100644 --- a/build/resources/main/static/assets/FormInput-BwPgkOAn.js +++ b/build/resources/main/static/assets/FormInput-BsW78DWl.js @@ -1 +1 @@ -import"./index-09HB4Lmg.js";import{_ as i,c as s,a as t,h as l,e as o,i as c,t as n,F as m,g as y}from"./index-BB0X_WMV.js";const h={class:"form-group"},v=["for"],b={key:0,class:"required"},g=["id","type","value","placeholder","disabled","readonly"],f=["id","value","placeholder","disabled","readonly","rows"],k=["id","value","disabled"],V={key:0,value:""},S=["value"],x={key:4,class:"error-text"},I={key:5,class:"hint-text"},B={__name:"FormInput",props:{modelValue:{type:[String,Number],default:""},label:String,type:{type:String,default:"text"},placeholder:String,required:Boolean,disabled:Boolean,readonly:Boolean,error:String,hint:String,rows:{type:Number,default:3},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e){const r=s(()=>`input-${Math.random().toString(36).slice(2,9)}`);return(u,d)=>(l(),t("div",h,[e.label?(l(),t("label",{key:0,for:r.value},[c(n(e.label)+" ",1),e.required?(l(),t("span",b,"*")):o("",!0)],8,v)):o("",!0),e.type!=="textarea"&&e.type!=="select"?(l(),t("input",{key:1,id:r.value,type:e.type,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,readonly:e.readonly,class:"form-input",onInput:d[0]||(d[0]=a=>u.$emit("update:modelValue",a.target.value))},null,40,g)):e.type==="textarea"?(l(),t("textarea",{key:2,id:r.value,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,readonly:e.readonly,rows:e.rows,class:"form-input",onInput:d[1]||(d[1]=a=>u.$emit("update:modelValue",a.target.value))},null,40,f)):e.type==="select"?(l(),t("select",{key:3,id:r.value,value:e.modelValue,disabled:e.disabled,class:"form-input",onChange:d[2]||(d[2]=a=>u.$emit("update:modelValue",a.target.value))},[e.placeholder?(l(),t("option",V,n(e.placeholder),1)):o("",!0),(l(!0),t(m,null,y(e.options,a=>(l(),t("option",{key:a.value,value:a.value},n(a.label),9,S))),128))],40,k)):o("",!0),e.error?(l(),t("span",x,n(e.error),1)):o("",!0),e.hint?(l(),t("span",I,n(e.hint),1)):o("",!0)]))}},N=i(B,[["__scopeId","data-v-45f49038"]]);export{N as F}; +import"./index--fsvNaiQ.js";import{_ as i,c as s,a as t,h as l,e as o,i as c,t as n,F as m,g as y}from"./index-DFoOAXeQ.js";const h={class:"form-group"},v=["for"],b={key:0,class:"required"},g=["id","type","value","placeholder","disabled","readonly"],f=["id","value","placeholder","disabled","readonly","rows"],k=["id","value","disabled"],V={key:0,value:""},S=["value"],x={key:4,class:"error-text"},I={key:5,class:"hint-text"},B={__name:"FormInput",props:{modelValue:{type:[String,Number],default:""},label:String,type:{type:String,default:"text"},placeholder:String,required:Boolean,disabled:Boolean,readonly:Boolean,error:String,hint:String,rows:{type:Number,default:3},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e){const r=s(()=>`input-${Math.random().toString(36).slice(2,9)}`);return(u,d)=>(l(),t("div",h,[e.label?(l(),t("label",{key:0,for:r.value},[c(n(e.label)+" ",1),e.required?(l(),t("span",b,"*")):o("",!0)],8,v)):o("",!0),e.type!=="textarea"&&e.type!=="select"?(l(),t("input",{key:1,id:r.value,type:e.type,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,readonly:e.readonly,class:"form-input",onInput:d[0]||(d[0]=a=>u.$emit("update:modelValue",a.target.value))},null,40,g)):e.type==="textarea"?(l(),t("textarea",{key:2,id:r.value,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,readonly:e.readonly,rows:e.rows,class:"form-input",onInput:d[1]||(d[1]=a=>u.$emit("update:modelValue",a.target.value))},null,40,f)):e.type==="select"?(l(),t("select",{key:3,id:r.value,value:e.modelValue,disabled:e.disabled,class:"form-input",onChange:d[2]||(d[2]=a=>u.$emit("update:modelValue",a.target.value))},[e.placeholder?(l(),t("option",V,n(e.placeholder),1)):o("",!0),(l(!0),t(m,null,y(e.options,a=>(l(),t("option",{key:a.value,value:a.value},n(a.label),9,S))),128))],40,k)):o("",!0),e.error?(l(),t("span",x,n(e.error),1)):o("",!0),e.hint?(l(),t("span",I,n(e.hint),1)):o("",!0)]))}},N=i(B,[["__scopeId","data-v-45f49038"]]);export{N as F}; diff --git a/build/resources/main/static/assets/Modal-iKIn6dGt.js b/build/resources/main/static/assets/Modal-BaZTW7NU.js similarity index 85% rename from build/resources/main/static/assets/Modal-iKIn6dGt.js rename to build/resources/main/static/assets/Modal-BaZTW7NU.js index b1efbde..01b1263 100644 --- a/build/resources/main/static/assets/Modal-iKIn6dGt.js +++ b/build/resources/main/static/assets/Modal-BaZTW7NU.js @@ -1 +1 @@ -import{_ as r,d as m,a as d,e as i,b as e,t as u,G as c,j as f,m as p,T as h,h as s}from"./index-BB0X_WMV.js";import"./index-09HB4Lmg.js";const y={class:"modal-header"},_={class:"modal-body"},k={key:0,class:"modal-footer"},v={__name:"Modal",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},width:{type:String,default:"500px"}},emits:["update:modelValue","close"],setup(t,{emit:n}){const a=n,l=()=>{a("update:modelValue",!1),a("close")};return(o,V)=>(s(),m(h,{to:"body"},[t.modelValue?(s(),d("div",{key:0,class:"modal-overlay",onClick:p(l,["self"])},[e("div",{class:"modal",style:f({width:t.width})},[e("div",y,[e("h3",null,u(t.title),1),e("button",{class:"close-btn",onClick:l},"×")]),e("div",_,[c(o.$slots,"default",{},void 0)]),o.$slots.footer?(s(),d("div",k,[c(o.$slots,"footer",{},void 0)])):i("",!0)],4)])):i("",!0)]))}},S=r(v,[["__scopeId","data-v-90993dd3"]]);export{S as M}; +import{_ as r,d as m,a as d,e as i,b as e,t as u,G as c,j as f,m as p,T as h,h as s}from"./index-DFoOAXeQ.js";import"./index--fsvNaiQ.js";const y={class:"modal-header"},_={class:"modal-body"},k={key:0,class:"modal-footer"},v={__name:"Modal",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},width:{type:String,default:"500px"}},emits:["update:modelValue","close"],setup(t,{emit:n}){const a=n,l=()=>{a("update:modelValue",!1),a("close")};return(o,V)=>(s(),m(h,{to:"body"},[t.modelValue?(s(),d("div",{key:0,class:"modal-overlay",onClick:p(l,["self"])},[e("div",{class:"modal",style:f({width:t.width})},[e("div",y,[e("h3",null,u(t.title),1),e("button",{class:"close-btn",onClick:l},"×")]),e("div",_,[c(o.$slots,"default",{},void 0)]),o.$slots.footer?(s(),d("div",k,[c(o.$slots,"footer",{},void 0)])):i("",!0)],4)])):i("",!0)]))}},S=r(v,[["__scopeId","data-v-90993dd3"]]);export{S as M}; diff --git a/build/resources/main/static/assets/MonthlyStats-DT15P2RG.js b/build/resources/main/static/assets/MonthlyStats-BMU-a3Ge.js similarity index 93% rename from build/resources/main/static/assets/MonthlyStats-DT15P2RG.js rename to build/resources/main/static/assets/MonthlyStats-BMU-a3Ge.js index 7300213..fc2bb63 100644 --- a/build/resources/main/static/assets/MonthlyStats-DT15P2RG.js +++ b/build/resources/main/static/assets/MonthlyStats-BMU-a3Ge.js @@ -1 +1 @@ -import{_ as M,r as g,o as w,a as l,b as s,l as x,s as R,t as c,F as $,g as B,h as o,d as D,w as v,f as I,u as _}from"./index-BB0X_WMV.js";import{a as N,C as F}from"./index-09HB4Lmg.js";import{C as A,a as L,L as E,B as T,p as V,b as Y,c as O,d as z,e as U}from"./chartjs-plugin-datalabels.esm-DiDzp_cw.js";const W={class:"monthly-stats"},Z={class:"page-header"},j={class:"filter-section"},q={key:0,class:"loading"},G={key:1,class:"no-data"},H={key:2,class:"server-charts"},J={class:"chart-header"},K={class:"chart-subtitle"},P={class:"chart-container"},Q={__name:"MonthlyStats",setup(X){A.register(L,E,T,V,Y,O,z);const i=g(!1),r=g([]),n=g(f());function f(){const a=new Date;return`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}`}function b(){const[a,e]=n.value.split("-").map(Number),t=new Date(a,e-2,1);n.value=`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`,d()}function y(){const[a,e]=n.value.split("-").map(Number),t=new Date(a,e,1);n.value=`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`,d()}const S={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"top"},tooltip:{mode:"index",intersect:!1},datalabels:{display:a=>{if(a.datasetIndex!==2)return!1;const e=a.chart.data.datasets,t=a.dataIndex;return e.reduce((p,h)=>p+(h.data[t]||0),0)>0},anchor:"end",align:"end",offset:2,font:{size:10,weight:"bold"},color:"#666",formatter:(a,e)=>{const t=e.chart.data.datasets,u=e.dataIndex;return t.reduce((p,h)=>p+(h.data[u]||0),0)}}},scales:{x:{stacked:!0},y:{stacked:!0,beginAtZero:!0}}},C=a=>({labels:a.dailyStats.map(t=>`${new Date(t.date).getDate()}일`),datasets:[{label:"CRITICAL",data:a.dailyStats.map(t=>t.critical),backgroundColor:"#9b59b6",borderRadius:2},{label:"ERROR",data:a.dailyStats.map(t=>t.error),backgroundColor:"#e74c3c",borderRadius:2},{label:"WARN",data:a.dailyStats.map(t=>t.warn),backgroundColor:"#f39c12",borderRadius:2}]}),d=async()=>{i.value=!0;try{const[a,e]=n.value.split("-").map(Number);r.value=await N.getMonthlyStatsByServer(a,e)}catch(a){console.error("Failed to load stats:",a),r.value=[]}finally{i.value=!1}},m=a=>{const[e,t]=a.split("-");return`${e}년 ${parseInt(t)}월`},k=a=>a.dailyStats.reduce((e,t)=>e+t.total,0);return w(()=>{d()}),(a,e)=>(o(),l("div",W,[s("div",Z,[e[1]||(e[1]=s("h2",null,"월별 에러현황",-1)),s("div",j,[s("button",{class:"nav-btn",onClick:b},"◀ 이전"),x(s("input",{type:"month","onUpdate:modelValue":e[0]||(e[0]=t=>n.value=t),onChange:d},null,544),[[R,n.value]]),s("button",{class:"nav-btn",onClick:y},"다음 ▶")])]),i.value?(o(),l("div",q,[...e[2]||(e[2]=[s("p",null,"로딩중...",-1)])])):r.value.length===0?(o(),l("div",G,[s("p",null,c(m(n.value))+"에 분석된 에러 데이터가 없습니다.",1)])):(o(),l("div",H,[(o(!0),l($,null,B(r.value,t=>(o(),D(_(F),{key:t.serverId,class:"server-chart-card"},{header:v(()=>[s("div",J,[s("h3",null,"🖥️ "+c(t.serverName),1),s("span",K,c(m(n.value))+" 일별 에러 ("+c(k(t))+"건)",1)])]),default:v(()=>[s("div",P,[I(_(U),{data:C(t),options:S},null,8,["data"])])]),_:2},1024))),128))]))]))}},st=M(Q,[["__scopeId","data-v-7c1c78fe"]]);export{st as default}; +import{_ as M,r as g,o as w,a as l,b as s,l as x,s as R,t as c,F as $,g as B,h as o,d as D,w as v,f as I,u as _}from"./index-DFoOAXeQ.js";import{a as N,C as F}from"./index--fsvNaiQ.js";import{C as A,a as L,L as E,B as T,p as V,b as Y,c as O,d as z,e as U}from"./chartjs-plugin-datalabels.esm-B8xtR40N.js";const W={class:"monthly-stats"},Z={class:"page-header"},j={class:"filter-section"},q={key:0,class:"loading"},G={key:1,class:"no-data"},H={key:2,class:"server-charts"},J={class:"chart-header"},K={class:"chart-subtitle"},P={class:"chart-container"},Q={__name:"MonthlyStats",setup(X){A.register(L,E,T,V,Y,O,z);const i=g(!1),r=g([]),n=g(f());function f(){const a=new Date;return`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}`}function b(){const[a,e]=n.value.split("-").map(Number),t=new Date(a,e-2,1);n.value=`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`,d()}function y(){const[a,e]=n.value.split("-").map(Number),t=new Date(a,e,1);n.value=`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`,d()}const S={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"top"},tooltip:{mode:"index",intersect:!1},datalabels:{display:a=>{if(a.datasetIndex!==2)return!1;const e=a.chart.data.datasets,t=a.dataIndex;return e.reduce((p,h)=>p+(h.data[t]||0),0)>0},anchor:"end",align:"end",offset:2,font:{size:10,weight:"bold"},color:"#666",formatter:(a,e)=>{const t=e.chart.data.datasets,u=e.dataIndex;return t.reduce((p,h)=>p+(h.data[u]||0),0)}}},scales:{x:{stacked:!0},y:{stacked:!0,beginAtZero:!0}}},C=a=>({labels:a.dailyStats.map(t=>`${new Date(t.date).getDate()}일`),datasets:[{label:"CRITICAL",data:a.dailyStats.map(t=>t.critical),backgroundColor:"#9b59b6",borderRadius:2},{label:"ERROR",data:a.dailyStats.map(t=>t.error),backgroundColor:"#e74c3c",borderRadius:2},{label:"WARN",data:a.dailyStats.map(t=>t.warn),backgroundColor:"#f39c12",borderRadius:2}]}),d=async()=>{i.value=!0;try{const[a,e]=n.value.split("-").map(Number);r.value=await N.getMonthlyStatsByServer(a,e)}catch(a){console.error("Failed to load stats:",a),r.value=[]}finally{i.value=!1}},m=a=>{const[e,t]=a.split("-");return`${e}년 ${parseInt(t)}월`},k=a=>a.dailyStats.reduce((e,t)=>e+t.total,0);return w(()=>{d()}),(a,e)=>(o(),l("div",W,[s("div",Z,[e[1]||(e[1]=s("h2",null,"월별 에러현황",-1)),s("div",j,[s("button",{class:"nav-btn",onClick:b},"◀ 이전"),x(s("input",{type:"month","onUpdate:modelValue":e[0]||(e[0]=t=>n.value=t),onChange:d},null,544),[[R,n.value]]),s("button",{class:"nav-btn",onClick:y},"다음 ▶")])]),i.value?(o(),l("div",q,[...e[2]||(e[2]=[s("p",null,"로딩중...",-1)])])):r.value.length===0?(o(),l("div",G,[s("p",null,c(m(n.value))+"에 분석된 에러 데이터가 없습니다.",1)])):(o(),l("div",H,[(o(!0),l($,null,B(r.value,t=>(o(),D(_(F),{key:t.serverId,class:"server-chart-card"},{header:v(()=>[s("div",J,[s("h3",null,"🖥️ "+c(t.serverName),1),s("span",K,c(m(n.value))+" 일별 에러 ("+c(k(t))+"건)",1)])]),default:v(()=>[s("div",P,[I(_(U),{data:C(t),options:S},null,8,["data"])])]),_:2},1024))),128))]))]))}},st=M(Q,[["__scopeId","data-v-7c1c78fe"]]);export{st as default}; diff --git a/build/resources/main/static/assets/PatternManage-13drcwyX.css b/build/resources/main/static/assets/PatternManage-13drcwyX.css deleted file mode 100644 index ff067d0..0000000 --- a/build/resources/main/static/assets/PatternManage-13drcwyX.css +++ /dev/null @@ -1 +0,0 @@ -.card-header-content[data-v-fc6fccb5]{display:flex;justify-content:space-between;align-items:center}.card-header-content h3[data-v-fc6fccb5]{margin:0}.action-buttons[data-v-fc6fccb5]{display:flex;gap:4px}.regex-code[data-v-fc6fccb5]{font-family:monospace;background:#f1f3f4;padding:2px 6px;border-radius:3px;font-size:12px}.form-group[data-v-fc6fccb5]{margin-bottom:16px}.form-group label[data-v-fc6fccb5]{display:flex;align-items:center;gap:8px;cursor:pointer}.test-section[data-v-fc6fccb5]{display:flex;flex-direction:column;gap:16px}.test-pattern label[data-v-fc6fccb5]{display:block;font-weight:500;margin-bottom:6px}.regex-display[data-v-fc6fccb5]{display:block;font-family:monospace;background:#f8f9fa;padding:12px;border-radius:4px;font-size:13px;word-break:break-all}.test-result[data-v-fc6fccb5]{padding:16px;border-radius:8px;margin-top:8px}.test-result.success[data-v-fc6fccb5]{background:#d4edda;border:1px solid #c3e6cb}.test-result.fail[data-v-fc6fccb5]{background:#f8d7da;border:1px solid #f5c6cb}.test-result h4[data-v-fc6fccb5]{margin:0 0 12px}.test-result p[data-v-fc6fccb5]{margin:0}.match-info[data-v-fc6fccb5]{margin-top:8px}.match-info label[data-v-fc6fccb5]{font-weight:500;margin-right:8px}.match-info code[data-v-fc6fccb5]{background:#0000001a;padding:2px 6px;border-radius:3px}.error-msg[data-v-fc6fccb5]{color:#721c24} diff --git a/build/resources/main/static/assets/PatternManage-BexqVEVy.css b/build/resources/main/static/assets/PatternManage-BexqVEVy.css new file mode 100644 index 0000000..64806cc --- /dev/null +++ b/build/resources/main/static/assets/PatternManage-BexqVEVy.css @@ -0,0 +1 @@ +.page-header[data-v-821062ae]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.page-header h2[data-v-821062ae]{margin:0}.loading[data-v-821062ae],.empty-state[data-v-821062ae]{text-align:center;padding:60px;background:#fff;border-radius:8px;color:#666}.empty-state p[data-v-821062ae]{margin-bottom:16px}.pattern-grid[data-v-821062ae]{display:grid;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));gap:20px}.pattern-card[data-v-821062ae]{transition:box-shadow .2s,transform .2s}.pattern-card[data-v-821062ae]:hover{box-shadow:0 4px 12px #00000026;transform:translateY(-2px)}.pattern-header[data-v-821062ae]{display:flex;justify-content:space-between;align-items:center}.pattern-title[data-v-821062ae]{display:flex;align-items:center;gap:10px}.pattern-title h4[data-v-821062ae]{margin:0;font-size:16px;font-weight:600}.pattern-body[data-v-821062ae]{padding:4px 0}.pattern-info[data-v-821062ae]{margin-bottom:12px}.pattern-info label[data-v-821062ae]{display:block;font-size:12px;color:#666;margin-bottom:4px}.regex-box[data-v-821062ae]{display:block;font-family:Consolas,Monaco,monospace;background:#f1f3f5;padding:10px 12px;border-radius:6px;font-size:13px;word-break:break-all;line-height:1.4;border-left:3px solid #3498db}.regex-box.exclude[data-v-821062ae]{border-left-color:#e67e22;background:#fef5e7}.pattern-meta[data-v-821062ae]{display:flex;flex-wrap:wrap;gap:12px;padding-top:8px;border-top:1px solid #eee;font-size:13px}.meta-item[data-v-821062ae]{display:flex;align-items:center;gap:4px}.meta-label[data-v-821062ae]{color:#888}.meta-value[data-v-821062ae]{font-weight:500;color:#333}.meta-item.description[data-v-821062ae]{flex-basis:100%;color:#666;font-style:italic}.pattern-actions[data-v-821062ae]{display:flex;gap:8px;padding-top:12px;border-top:1px solid #eee;margin-top:12px}.action-btn[data-v-821062ae]{flex:1;display:flex;align-items:center;justify-content:center;gap:4px;padding:10px 12px;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:500;transition:all .2s}.action-btn.test[data-v-821062ae]{background:#e8f4fd;color:#2980b9}.action-btn.test[data-v-821062ae]:hover{background:#d4e9f7}.action-btn.edit[data-v-821062ae]{background:#fef3e2;color:#d68910}.action-btn.edit[data-v-821062ae]:hover{background:#fce8c9}.action-btn.delete[data-v-821062ae]{background:#fdeaea;color:#c0392b}.action-btn.delete[data-v-821062ae]:hover{background:#f9d6d6}.form-group[data-v-821062ae]{margin-bottom:16px}.form-group label[data-v-821062ae]{display:flex;align-items:center;gap:8px;cursor:pointer}.test-section[data-v-821062ae]{display:flex;flex-direction:column;gap:16px}.test-pattern label[data-v-821062ae]{display:block;font-weight:500;margin-bottom:6px}.regex-display[data-v-821062ae]{display:block;font-family:monospace;background:#f8f9fa;padding:12px;border-radius:4px;font-size:13px;word-break:break-all}.test-result[data-v-821062ae]{padding:16px;border-radius:8px;margin-top:8px}.test-result.success[data-v-821062ae]{background:#d4edda;border:1px solid #c3e6cb}.test-result.fail[data-v-821062ae]{background:#f8d7da;border:1px solid #f5c6cb}.test-result h4[data-v-821062ae]{margin:0 0 12px}.test-result p[data-v-821062ae]{margin:0}.match-info[data-v-821062ae]{margin-top:8px}.match-info label[data-v-821062ae]{font-weight:500;margin-right:8px}.match-info code[data-v-821062ae]{background:#0000001a;padding:2px 6px;border-radius:3px}.error-msg[data-v-821062ae]{color:#721c24} diff --git a/build/resources/main/static/assets/PatternManage-CxrI6HBG.js b/build/resources/main/static/assets/PatternManage-CxrI6HBG.js new file mode 100644 index 0000000..cc36efb --- /dev/null +++ b/build/resources/main/static/assets/PatternManage-CxrI6HBG.js @@ -0,0 +1 @@ +import{_ as J,r as u,o as G,a as p,b as t,f as n,w as i,u as s,F as H,g as K,h as v,i as d,d as Q,e as F,t as r,m as X,l as Y,q as Z,n as h}from"./index-DFoOAXeQ.js";import{p as V,C as ee}from"./index--fsvNaiQ.js";import{M as I}from"./Modal-BaZTW7NU.js";import{F as c}from"./FormInput-BsW78DWl.js";import{B as f}from"./Button-Ddldcbk7.js";import{B as $}from"./Badge-SZTgBg80.js";const le={class:"pattern-manage"},te={class:"page-header"},ae={key:0,class:"loading"},se={key:1,class:"empty-state"},oe={key:2,class:"pattern-grid"},ne={class:"pattern-header"},ie={class:"pattern-title"},ue={class:"pattern-body"},de={class:"pattern-info"},re={class:"regex-box"},ve={key:0,class:"pattern-info"},me={class:"regex-box exclude"},pe={class:"pattern-meta"},fe={class:"meta-item"},ce={class:"meta-value"},xe={key:0,class:"meta-item description"},ge={class:"pattern-actions"},ye=["onClick"],Ve=["onClick"],be=["onClick"],Re={class:"form-group"},ke={class:"test-section"},Ce={class:"test-pattern"},we={class:"regex-display"},Ee={key:0,class:"error-msg"},Me={key:1},Le={class:"match-info"},Te={class:"match-info"},Ae={key:2},Ue={__name:"PatternManage",setup(_e){const O=[{value:"CRITICAL",label:"CRITICAL"},{value:"ERROR",label:"ERROR"},{value:"WARN",label:"WARN"}],w=u([]),E=u(!1),M=u(!1),L=u(!1),T=u(!1),x=u(!1),b=u(!1),A=u(null),o=u({name:"",regex:"",excludeRegex:"",severity:"ERROR",contextLines:5,description:"",active:!0}),R=u(!1),k=u(null),g=u(""),m=u(null),y=u(!1),U=u(null),_=async()=>{E.value=!0;try{w.value=await V.getAll()}catch(a){console.error("Failed to load patterns:",a),alert("패턴 목록을 불러오는데 실패했습니다.")}finally{E.value=!1}},B=()=>{b.value=!1,A.value=null,o.value={name:"",regex:"",excludeRegex:"",severity:"ERROR",contextLines:5,description:"",active:!0},x.value=!0},S=a=>{b.value=!0,A.value=a.id,o.value={name:a.name,regex:a.regex,excludeRegex:a.excludeRegex||"",severity:a.severity,contextLines:a.contextLines,description:a.description||"",active:a.active},x.value=!0},N=async()=>{if(!o.value.name||!o.value.regex){alert("필수 항목을 입력해주세요.");return}M.value=!0;try{b.value?await V.update(A.value,o.value):await V.create(o.value),x.value=!1,await _()}catch(a){console.error("Failed to save pattern:",a),alert("저장에 실패했습니다. 정규식 문법을 확인해주세요.")}finally{M.value=!1}},q=a=>{U.value=a,y.value=!0},D=async()=>{L.value=!0;try{await V.delete(U.value.id),y.value=!1,await _()}catch(a){console.error("Failed to delete pattern:",a),alert("삭제에 실패했습니다.")}finally{L.value=!1}},z=a=>{k.value=a,g.value="",m.value=null,R.value=!0},W=async()=>{if(g.value){T.value=!0;try{m.value=await V.test(k.value.regex,g.value)}catch(a){console.error("Failed to test pattern:",a),alert("테스트 실행에 실패했습니다.")}finally{T.value=!1}}},j=a=>({CRITICAL:"critical",ERROR:"error",WARN:"warn"})[a]||"default";return G(()=>{_()}),(a,e)=>{var P;return v(),p("div",le,[t("div",te,[e[15]||(e[15]=t("h2",null,"패턴 관리",-1)),n(s(f),{onClick:B},{default:i(()=>[...e[14]||(e[14]=[d("+ 패턴 추가",-1)])]),_:1})]),E.value?(v(),p("div",ae,[...e[16]||(e[16]=[t("p",null,"로딩중...",-1)])])):w.value.length===0?(v(),p("div",se,[e[18]||(e[18]=t("p",null,"등록된 패턴이 없습니다.",-1)),n(s(f),{onClick:B},{default:i(()=>[...e[17]||(e[17]=[d("첫 패턴 추가하기",-1)])]),_:1})])):(v(),p("div",oe,[(v(!0),p(H,null,K(w.value,l=>(v(),Q(s(ee),{key:l.id,class:"pattern-card"},{header:i(()=>[t("div",ne,[t("div",ie,[n(s($),{variant:j(l.severity),size:"sm"},{default:i(()=>[d(r(l.severity),1)]),_:2},1032,["variant"]),t("h4",null,r(l.name),1)]),n(s($),{variant:l.active?"success":"default",size:"sm"},{default:i(()=>[d(r(l.active?"활성":"비활성"),1)]),_:2},1032,["variant"])])]),default:i(()=>[t("div",ue,[t("div",de,[e[19]||(e[19]=t("label",null,"정규식",-1)),t("code",re,r(l.regex),1)]),l.excludeRegex?(v(),p("div",ve,[e[20]||(e[20]=t("label",null,"제외 정규식",-1)),t("code",me,r(l.excludeRegex),1)])):F("",!0),t("div",pe,[t("span",fe,[e[21]||(e[21]=t("span",{class:"meta-label"},"컨텍스트",-1)),t("span",ce,r(l.contextLines)+"줄",1)]),l.description?(v(),p("span",xe,r(l.description),1)):F("",!0)])]),t("div",ge,[t("button",{class:"action-btn test",onClick:C=>z(l),title:"테스트"}," 🧪 테스트 ",8,ye),t("button",{class:"action-btn edit",onClick:C=>S(l),title:"수정"}," ✏️ 수정 ",8,Ve),t("button",{class:"action-btn delete",onClick:C=>q(l),title:"삭제"}," 🗑️ 삭제 ",8,be)])]),_:2},1024))),128))])),n(s(I),{modelValue:x.value,"onUpdate:modelValue":e[8]||(e[8]=l=>x.value=l),title:b.value?"패턴 수정":"패턴 추가",width:"600px"},{footer:i(()=>[n(s(f),{variant:"secondary",onClick:e[7]||(e[7]=l=>x.value=!1)},{default:i(()=>[...e[23]||(e[23]=[d("취소",-1)])]),_:1}),n(s(f),{onClick:N,loading:M.value},{default:i(()=>[...e[24]||(e[24]=[d("저장",-1)])]),_:1},8,["loading"])]),default:i(()=>[t("form",{onSubmit:X(N,["prevent"])},[n(s(c),{modelValue:o.value.name,"onUpdate:modelValue":e[0]||(e[0]=l=>o.value.name=l),label:"패턴명",placeholder:"예: NullPointerException",required:""},null,8,["modelValue"]),n(s(c),{modelValue:o.value.regex,"onUpdate:modelValue":e[1]||(e[1]=l=>o.value.regex=l),label:"정규식",type:"textarea",rows:3,placeholder:"예: (Exception|Error|SEVERE|FATAL)",required:"",hint:"Java 정규식 문법을 사용합니다."},null,8,["modelValue"]),n(s(c),{modelValue:o.value.excludeRegex,"onUpdate:modelValue":e[2]||(e[2]=l=>o.value.excludeRegex=l),label:"제외 정규식",type:"textarea",rows:2,placeholder:"예: throws\\\\s+(Exception|java\\\\.lang\\\\.Exception)",hint:"이 패턴에 매칭되면 에러에서 제외됩니다. (선택)"},null,8,["modelValue"]),n(s(c),{modelValue:o.value.severity,"onUpdate:modelValue":e[3]||(e[3]=l=>o.value.severity=l),label:"심각도",type:"select",options:O,required:""},null,8,["modelValue"]),n(s(c),{modelValue:o.value.contextLines,"onUpdate:modelValue":e[4]||(e[4]=l=>o.value.contextLines=l),label:"컨텍스트 라인 수",type:"number",placeholder:"5",hint:"에러 전후로 캡처할 라인 수"},null,8,["modelValue"]),n(s(c),{modelValue:o.value.description,"onUpdate:modelValue":e[5]||(e[5]=l=>o.value.description=l),label:"설명",type:"textarea",rows:2,placeholder:"이 패턴에 대한 설명"},null,8,["modelValue"]),t("div",Re,[t("label",null,[Y(t("input",{type:"checkbox","onUpdate:modelValue":e[6]||(e[6]=l=>o.value.active=l)},null,512),[[Z,o.value.active]]),e[22]||(e[22]=d(" 활성화 ",-1))])])],32)]),_:1},8,["modelValue","title"]),n(s(I),{modelValue:R.value,"onUpdate:modelValue":e[11]||(e[11]=l=>R.value=l),title:`패턴 테스트 - ${((P=k.value)==null?void 0:P.name)||""}`,width:"700px"},{footer:i(()=>[n(s(f),{variant:"secondary",onClick:e[10]||(e[10]=l=>R.value=!1)},{default:i(()=>[...e[32]||(e[32]=[d("닫기",-1)])]),_:1})]),default:i(()=>{var l;return[t("div",ke,[t("div",Ce,[e[25]||(e[25]=t("label",null,"정규식",-1)),t("code",we,r((l=k.value)==null?void 0:l.regex),1)]),n(s(c),{modelValue:g.value,"onUpdate:modelValue":e[9]||(e[9]=C=>g.value=C),label:"테스트할 텍스트",type:"textarea",rows:6,placeholder:"로그 텍스트를 붙여넣으세요..."},null,8,["modelValue"]),n(s(f),{onClick:W,loading:T.value,disabled:!g.value},{default:i(()=>[...e[26]||(e[26]=[d(" 테스트 실행 ",-1)])]),_:1},8,["loading","disabled"]),m.value?(v(),p("div",{key:0,class:h(["test-result",{success:m.value.matched,fail:!m.value.matched}])},[e[31]||(e[31]=t("h4",null,"테스트 결과",-1)),m.value.validRegex?m.value.matched?(v(),p("div",Me,[e[29]||(e[29]=t("p",null,"✅ 매칭 성공!",-1)),t("div",Le,[e[27]||(e[27]=t("label",null,"매칭된 텍스트:",-1)),t("code",null,r(m.value.matchedText),1)]),t("div",Te,[e[28]||(e[28]=t("label",null,"위치:",-1)),t("span",null,r(m.value.matchStart)+" ~ "+r(m.value.matchEnd),1)])])):(v(),p("div",Ae,[...e[30]||(e[30]=[t("p",null,"❌ 매칭 없음",-1)])])):(v(),p("div",Ee," ❌ 정규식 오류: "+r(m.value.errorMessage),1))],2)):F("",!0)])]}),_:1},8,["modelValue","title"]),n(s(I),{modelValue:y.value,"onUpdate:modelValue":e[13]||(e[13]=l=>y.value=l),title:"패턴 삭제",width:"400px"},{footer:i(()=>[n(s(f),{variant:"secondary",onClick:e[12]||(e[12]=l=>y.value=!1)},{default:i(()=>[...e[35]||(e[35]=[d("취소",-1)])]),_:1}),n(s(f),{variant:"danger",onClick:D,loading:L.value},{default:i(()=>[...e[36]||(e[36]=[d("삭제",-1)])]),_:1},8,["loading"])]),default:i(()=>{var l;return[t("p",null,[e[33]||(e[33]=d("정말로 ",-1)),t("strong",null,r((l=U.value)==null?void 0:l.name),1),e[34]||(e[34]=d(" 패턴을 삭제하시겠습니까?",-1))])]}),_:1},8,["modelValue"])])}}},Oe=J(Ue,[["__scopeId","data-v-821062ae"]]);export{Oe as default}; diff --git a/build/resources/main/static/assets/PatternManage-DGWm8Jrq.js b/build/resources/main/static/assets/PatternManage-DGWm8Jrq.js deleted file mode 100644 index 45db847..0000000 --- a/build/resources/main/static/assets/PatternManage-DGWm8Jrq.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as H,r as d,o as K,a as y,f as a,w as o,u as n,h as c,b as s,i,t as m,m as Q,l as X,q as Y,e as Z,n as h}from"./index-BB0X_WMV.js";import{D as _}from"./DataTable-DHBS0NNE.js";import{M as I}from"./Modal-iKIn6dGt.js";import{F as p}from"./FormInput-BwPgkOAn.js";import{B as v}from"./Button-CoXLXkk7.js";import{B as F}from"./Badge-DzuJKoKk.js";import{C as ee,p as V}from"./index-09HB4Lmg.js";const le={class:"pattern-manage"},te={class:"card-header-content"},ae={class:"regex-code"},oe={class:"action-buttons"},ne={class:"form-group"},se={class:"test-section"},ue={class:"test-pattern"},de={class:"regex-display"},ie={key:0,class:"error-msg"},re={key:1},ve={class:"match-info"},me={class:"match-info"},pe={key:2},fe={__name:"PatternManage",setup(xe){const $=[{key:"name",label:"패턴명",width:"150px"},{key:"regex",label:"정규식"},{key:"severity",label:"심각도",width:"100px"},{key:"contextLines",label:"컨텍스트",width:"90px"},{key:"active",label:"상태",width:"80px"}],D=[{value:"CRITICAL",label:"CRITICAL"},{value:"ERROR",label:"ERROR"},{value:"WARN",label:"WARN"}],N=d([]),C=d(!1),E=d(!1),M=d(!1),T=d(!1),f=d(!1),b=d(!1),A=d(null),u=d({name:"",regex:"",excludeRegex:"",severity:"ERROR",contextLines:5,description:"",active:!0}),R=d(!1),k=d(null),x=d(""),r=d(null),g=d(!1),L=d(null),U=async()=>{C.value=!0;try{N.value=await V.getAll()}catch(t){console.error("Failed to load patterns:",t),alert("패턴 목록을 불러오는데 실패했습니다.")}finally{C.value=!1}},O=()=>{b.value=!1,A.value=null,u.value={name:"",regex:"",excludeRegex:"",severity:"ERROR",contextLines:5,description:"",active:!0},f.value=!0},S=t=>{b.value=!0,A.value=t.id,u.value={name:t.name,regex:t.regex,excludeRegex:t.excludeRegex||"",severity:t.severity,contextLines:t.contextLines,description:t.description||"",active:t.active},f.value=!0},P=async()=>{if(!u.value.name||!u.value.regex){alert("필수 항목을 입력해주세요.");return}E.value=!0;try{b.value?await V.update(A.value,u.value):await V.create(u.value),f.value=!1,await U()}catch(t){console.error("Failed to save pattern:",t),alert("저장에 실패했습니다. 정규식 문법을 확인해주세요.")}finally{E.value=!1}},q=t=>{L.value=t,g.value=!0},z=async()=>{M.value=!0;try{await V.delete(L.value.id),g.value=!1,await U()}catch(t){console.error("Failed to delete pattern:",t),alert("삭제에 실패했습니다.")}finally{M.value=!1}},W=t=>{k.value=t,x.value="",r.value=null,R.value=!0},j=async()=>{if(x.value){T.value=!0;try{r.value=await V.test(k.value.regex,x.value)}catch(t){console.error("Failed to test pattern:",t),alert("테스트 실행에 실패했습니다.")}finally{T.value=!1}}},J=t=>({CRITICAL:"critical",ERROR:"error",WARN:"warn"})[t]||"default",G=(t,e)=>t?t.length>e?t.substring(0,e)+"...":t:"";return K(()=>{U()}),(t,e)=>{var B;return c(),y("div",le,[a(n(ee),null,{header:o(()=>[s("div",te,[e[15]||(e[15]=s("h3",null,"패턴 관리",-1)),a(n(v),{onClick:O},{default:o(()=>[...e[14]||(e[14]=[i("+ 패턴 추가",-1)])]),_:1})])]),default:o(()=>[a(n(_),{columns:$,data:N.value,loading:C.value,"empty-text":"등록된 패턴이 없습니다."},{severity:o(({value:l})=>[a(n(F),{variant:J(l)},{default:o(()=>[i(m(l),1)]),_:2},1032,["variant"])]),regex:o(({value:l})=>[s("code",ae,m(G(l,50)),1)]),active:o(({value:l})=>[a(n(F),{variant:l?"success":"default"},{default:o(()=>[i(m(l?"활성":"비활성"),1)]),_:2},1032,["variant"])]),actions:o(({row:l})=>[s("div",oe,[a(n(v),{size:"sm",variant:"secondary",onClick:w=>W(l)},{default:o(()=>[...e[16]||(e[16]=[i("테스트",-1)])]),_:1},8,["onClick"]),a(n(v),{size:"sm",onClick:w=>S(l)},{default:o(()=>[...e[17]||(e[17]=[i("수정",-1)])]),_:1},8,["onClick"]),a(n(v),{size:"sm",variant:"danger",onClick:w=>q(l)},{default:o(()=>[...e[18]||(e[18]=[i("삭제",-1)])]),_:1},8,["onClick"])])]),_:1},8,["data","loading"])]),_:1}),a(n(I),{modelValue:f.value,"onUpdate:modelValue":e[8]||(e[8]=l=>f.value=l),title:b.value?"패턴 수정":"패턴 추가",width:"600px"},{footer:o(()=>[a(n(v),{variant:"secondary",onClick:e[7]||(e[7]=l=>f.value=!1)},{default:o(()=>[...e[20]||(e[20]=[i("취소",-1)])]),_:1}),a(n(v),{onClick:P,loading:E.value},{default:o(()=>[...e[21]||(e[21]=[i("저장",-1)])]),_:1},8,["loading"])]),default:o(()=>[s("form",{onSubmit:Q(P,["prevent"])},[a(n(p),{modelValue:u.value.name,"onUpdate:modelValue":e[0]||(e[0]=l=>u.value.name=l),label:"패턴명",placeholder:"예: NullPointerException",required:""},null,8,["modelValue"]),a(n(p),{modelValue:u.value.regex,"onUpdate:modelValue":e[1]||(e[1]=l=>u.value.regex=l),label:"정규식",type:"textarea",rows:3,placeholder:"예: (Exception|Error|SEVERE|FATAL)",required:"",hint:"Java 정규식 문법을 사용합니다."},null,8,["modelValue"]),a(n(p),{modelValue:u.value.excludeRegex,"onUpdate:modelValue":e[2]||(e[2]=l=>u.value.excludeRegex=l),label:"제외 정규식",type:"textarea",rows:2,placeholder:"예: throws\\\\s+(Exception|java\\\\.lang\\\\.Exception)",hint:"이 패턴에 매칭되면 에러에서 제외됩니다. (선택)"},null,8,["modelValue"]),a(n(p),{modelValue:u.value.severity,"onUpdate:modelValue":e[3]||(e[3]=l=>u.value.severity=l),label:"심각도",type:"select",options:D,required:""},null,8,["modelValue"]),a(n(p),{modelValue:u.value.contextLines,"onUpdate:modelValue":e[4]||(e[4]=l=>u.value.contextLines=l),label:"컨텍스트 라인 수",type:"number",placeholder:"5",hint:"에러 전후로 캡처할 라인 수"},null,8,["modelValue"]),a(n(p),{modelValue:u.value.description,"onUpdate:modelValue":e[5]||(e[5]=l=>u.value.description=l),label:"설명",type:"textarea",rows:2,placeholder:"이 패턴에 대한 설명"},null,8,["modelValue"]),s("div",ne,[s("label",null,[X(s("input",{type:"checkbox","onUpdate:modelValue":e[6]||(e[6]=l=>u.value.active=l)},null,512),[[Y,u.value.active]]),e[19]||(e[19]=i(" 활성화 ",-1))])])],32)]),_:1},8,["modelValue","title"]),a(n(I),{modelValue:R.value,"onUpdate:modelValue":e[11]||(e[11]=l=>R.value=l),title:`패턴 테스트 - ${((B=k.value)==null?void 0:B.name)||""}`,width:"700px"},{footer:o(()=>[a(n(v),{variant:"secondary",onClick:e[10]||(e[10]=l=>R.value=!1)},{default:o(()=>[...e[29]||(e[29]=[i("닫기",-1)])]),_:1})]),default:o(()=>{var l;return[s("div",se,[s("div",ue,[e[22]||(e[22]=s("label",null,"정규식",-1)),s("code",de,m((l=k.value)==null?void 0:l.regex),1)]),a(n(p),{modelValue:x.value,"onUpdate:modelValue":e[9]||(e[9]=w=>x.value=w),label:"테스트할 텍스트",type:"textarea",rows:6,placeholder:"로그 텍스트를 붙여넣으세요..."},null,8,["modelValue"]),a(n(v),{onClick:j,loading:T.value,disabled:!x.value},{default:o(()=>[...e[23]||(e[23]=[i(" 테스트 실행 ",-1)])]),_:1},8,["loading","disabled"]),r.value?(c(),y("div",{key:0,class:h(["test-result",{success:r.value.matched,fail:!r.value.matched}])},[e[28]||(e[28]=s("h4",null,"테스트 결과",-1)),r.value.validRegex?r.value.matched?(c(),y("div",re,[e[26]||(e[26]=s("p",null,"✅ 매칭 성공!",-1)),s("div",ve,[e[24]||(e[24]=s("label",null,"매칭된 텍스트:",-1)),s("code",null,m(r.value.matchedText),1)]),s("div",me,[e[25]||(e[25]=s("label",null,"위치:",-1)),s("span",null,m(r.value.matchStart)+" ~ "+m(r.value.matchEnd),1)])])):(c(),y("div",pe,[...e[27]||(e[27]=[s("p",null,"❌ 매칭 없음",-1)])])):(c(),y("div",ie," ❌ 정규식 오류: "+m(r.value.errorMessage),1))],2)):Z("",!0)])]}),_:1},8,["modelValue","title"]),a(n(I),{modelValue:g.value,"onUpdate:modelValue":e[13]||(e[13]=l=>g.value=l),title:"패턴 삭제",width:"400px"},{footer:o(()=>[a(n(v),{variant:"secondary",onClick:e[12]||(e[12]=l=>g.value=!1)},{default:o(()=>[...e[32]||(e[32]=[i("취소",-1)])]),_:1}),a(n(v),{variant:"danger",onClick:z,loading:M.value},{default:o(()=>[...e[33]||(e[33]=[i("삭제",-1)])]),_:1},8,["loading"])]),default:o(()=>{var l;return[s("p",null,[e[30]||(e[30]=i("정말로 ",-1)),s("strong",null,m((l=L.value)==null?void 0:l.name),1),e[31]||(e[31]=i(" 패턴을 삭제하시겠습니까?",-1))])]}),_:1},8,["modelValue"])])}}},we=H(fe,[["__scopeId","data-v-fc6fccb5"]]);export{we as default}; diff --git a/build/resources/main/static/assets/ServerManage-8NeMNC-c.css b/build/resources/main/static/assets/ServerManage-8NeMNC-c.css new file mode 100644 index 0000000..e98c8d6 --- /dev/null +++ b/build/resources/main/static/assets/ServerManage-8NeMNC-c.css @@ -0,0 +1 @@ +.page-header[data-v-18b9f6a3]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.page-header h2[data-v-18b9f6a3]{margin:0}.loading[data-v-18b9f6a3],.empty-state[data-v-18b9f6a3]{text-align:center;padding:60px;background:#fff;border-radius:8px;color:#666}.empty-state p[data-v-18b9f6a3]{margin-bottom:16px}.server-grid[data-v-18b9f6a3]{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:20px}.server-card[data-v-18b9f6a3]{transition:box-shadow .2s,transform .2s}.server-card[data-v-18b9f6a3]:hover{box-shadow:0 4px 12px #00000026;transform:translateY(-2px)}.server-header[data-v-18b9f6a3]{display:flex;justify-content:space-between;align-items:center}.server-title[data-v-18b9f6a3]{display:flex;align-items:center;gap:10px}.server-title h4[data-v-18b9f6a3]{margin:0;font-size:16px;font-weight:600}.server-body[data-v-18b9f6a3]{padding:4px 0}.progress-section[data-v-18b9f6a3]{padding:12px;background:#f8f9fa;border-radius:8px;margin-top:12px}.progress-header[data-v-18b9f6a3]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.status-text[data-v-18b9f6a3]{font-size:13px;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:250px}.progress-bar-container[data-v-18b9f6a3]{height:8px;background:#e0e0e0;border-radius:4px;overflow:hidden;margin-bottom:8px}.progress-bar[data-v-18b9f6a3]{height:100%;background:#3498db;transition:width .3s}.progress-details[data-v-18b9f6a3]{display:flex;justify-content:space-between;font-size:12px;color:#666}.server-info-grid[data-v-18b9f6a3]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.info-item[data-v-18b9f6a3]{display:flex;align-items:flex-start;gap:8px}.info-icon[data-v-18b9f6a3]{font-size:16px;line-height:1;margin-top:2px}.info-content[data-v-18b9f6a3]{display:flex;flex-direction:column}.info-label[data-v-18b9f6a3]{font-size:11px;color:#888;text-transform:uppercase}.info-value[data-v-18b9f6a3]{font-size:14px;font-weight:500;color:#333}.server-actions[data-v-18b9f6a3]{display:flex;gap:8px;padding-top:12px;border-top:1px solid #eee;margin-top:12px}.action-btn[data-v-18b9f6a3]{display:flex;align-items:center;justify-content:center;gap:4px;padding:10px 12px;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:500;transition:all .2s}.action-btn.scan[data-v-18b9f6a3]{flex:1.5;background:#3498db;color:#fff}.action-btn.scan[data-v-18b9f6a3]:hover:not(:disabled){background:#2980b9}.action-btn.scan[data-v-18b9f6a3]:disabled{opacity:.6;cursor:not-allowed}.action-btn.test[data-v-18b9f6a3]{flex:0;padding:10px 14px;background:#e8f8f0;color:#27ae60}.action-btn.test[data-v-18b9f6a3]:hover:not(:disabled){background:#d4f0e3}.action-btn.test[data-v-18b9f6a3]:disabled{opacity:.7;cursor:not-allowed}.action-btn.path[data-v-18b9f6a3]{flex:0;padding:10px 14px;background:#e8f4fd;color:#2980b9}.action-btn.path[data-v-18b9f6a3]:hover{background:#d4e9f7}.action-btn.edit[data-v-18b9f6a3]{flex:0;padding:10px 14px;background:#fef3e2;color:#d68910}.action-btn.edit[data-v-18b9f6a3]:hover{background:#fce8c9}.action-btn.delete[data-v-18b9f6a3]{flex:0;padding:10px 14px;background:#fdeaea;color:#c0392b}.action-btn.delete[data-v-18b9f6a3]:hover{background:#f9d6d6}.form-group[data-v-18b9f6a3]{margin-bottom:16px}.form-group label[data-v-18b9f6a3]{display:flex;align-items:center;gap:8px;cursor:pointer}.log-path-section h4[data-v-18b9f6a3]{margin:0 0 12px;font-size:14px;color:#333}.log-path-form[data-v-18b9f6a3]{padding:16px;background:#f8f9fa;border-radius:8px;margin-bottom:20px}.log-path-inputs[data-v-18b9f6a3]{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:12px;margin-bottom:12px}.log-path-list[data-v-18b9f6a3]{padding:16px;background:#fff;border:1px solid #eee;border-radius:8px}.empty-paths[data-v-18b9f6a3]{text-align:center;padding:20px;color:#888}.path-cards[data-v-18b9f6a3]{display:flex;flex-direction:column;gap:10px}.path-card[data-v-18b9f6a3]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:#f8f9fa;border-radius:6px;border-left:3px solid #3498db}.path-info[data-v-18b9f6a3]{flex:1}.path-main[data-v-18b9f6a3]{display:flex;align-items:center;gap:12px;margin-bottom:4px}.path-value[data-v-18b9f6a3]{font-family:monospace;font-size:13px;background:#e9ecef;padding:4px 8px;border-radius:4px}.path-pattern[data-v-18b9f6a3]{font-size:12px;color:#666;background:#fff3cd;padding:2px 8px;border-radius:4px}.path-meta[data-v-18b9f6a3]{display:flex;align-items:center;gap:8px}.path-desc[data-v-18b9f6a3]{font-size:12px;color:#888}.path-delete[data-v-18b9f6a3]{background:none;border:none;cursor:pointer;font-size:16px;padding:8px;border-radius:4px;transition:background .2s}.path-delete[data-v-18b9f6a3]:hover{background:#fdeaea}.warning-text[data-v-18b9f6a3]{color:#e74c3c;font-size:14px}.test-result[data-v-18b9f6a3]{padding:16px;border-radius:8px}.test-result.success[data-v-18b9f6a3]{background:#d4edda;border:1px solid #c3e6cb}.test-result.fail[data-v-18b9f6a3]{background:#f8d7da;border:1px solid #f5c6cb}.test-result p[data-v-18b9f6a3]{margin:0} diff --git a/build/resources/main/static/assets/ServerManage-CzucXmaz.js b/build/resources/main/static/assets/ServerManage-CzucXmaz.js deleted file mode 100644 index 544079a..0000000 --- a/build/resources/main/static/assets/ServerManage-CzucXmaz.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as ee,r,o as le,a as k,f as s,w as u,u as a,h as m,b as t,i as d,t as f,m as ae,d as $,e as E,l as te,q as oe,F as se,g as ue,n as ne}from"./index-BB0X_WMV.js";import{D as de}from"./DataTable-DHBS0NNE.js";import{M as x}from"./Modal-iKIn6dGt.js";import{F as p}from"./FormInput-BwPgkOAn.js";import{B as v}from"./Button-CoXLXkk7.js";import{B as N}from"./Badge-DzuJKoKk.js";import{C as re,s as C,l as S}from"./index-09HB4Lmg.js";const ie={class:"server-manage"},ve={class:"card-header-content"},pe={class:"action-buttons"},me={class:"form-group"},fe={class:"log-path-section"},ye={class:"log-path-form"},ge={class:"log-path-inputs"},Ve={class:"log-path-list"},ke={key:0},he={key:1,class:"empty-text"},we={key:0},be={key:1},ce={__name:"ServerManage",setup(Pe){const W=[{key:"name",label:"서버명",width:"150px"},{key:"host",label:"호스트"},{key:"port",label:"포트",width:"80px"},{key:"authType",label:"인증방식",width:"100px"},{key:"active",label:"상태",width:"80px"},{key:"lastScanAt",label:"마지막 분석",width:"150px"}],K=[{value:"PASSWORD",label:"비밀번호"},{value:"KEY_FILE",label:"키 파일"}],L=r([]),T=r(!1),U=r(!1),M=r(!1),h=r(!1),y=r(!1),D=r(null),n=r({name:"",host:"",port:22,username:"",authType:"PASSWORD",password:"",keyFilePath:"",passphrase:"",active:!0}),F=r(!1),b=r(null),w=r([]),i=r({path:"",filePattern:"",description:""}),c=r(!1),A=r(null),B=r(null),P=r(!1),g=r(null),I=async()=>{T.value=!0;try{L.value=await C.getAll()}catch(o){console.error("Failed to load servers:",o),alert("서버 목록을 불러오는데 실패했습니다.")}finally{T.value=!1}},Y=()=>{y.value=!1,D.value=null,n.value={name:"",host:"",port:22,username:"",authType:"PASSWORD",password:"",keyFilePath:"",passphrase:"",active:!0},h.value=!0},j=o=>{y.value=!0,D.value=o.id,n.value={name:o.name,host:o.host,port:o.port,username:o.username,authType:o.authType,password:"",keyFilePath:o.keyFilePath||"",passphrase:"",active:o.active},h.value=!0},q=async()=>{if(!n.value.name||!n.value.host||!n.value.username){alert("필수 항목을 입력해주세요.");return}U.value=!0;try{y.value?await C.update(D.value,n.value):await C.create(n.value),h.value=!1,await I()}catch(o){console.error("Failed to save server:",o),alert("저장에 실패했습니다.")}finally{U.value=!1}},G=o=>{A.value=o,c.value=!0},H=async()=>{M.value=!0;try{await C.delete(A.value.id),c.value=!1,await I()}catch(o){console.error("Failed to delete server:",o),alert("삭제에 실패했습니다.")}finally{M.value=!1}},J=async o=>{B.value=o.id;try{g.value=await C.testConnection(o.id),P.value=!0}catch(e){console.error("Failed to test connection:",e),g.value={success:!1,error:"연결 테스트 실패: "+e.message},P.value=!0}finally{B.value=null}},Q=async o=>{b.value=o,i.value={path:"",filePattern:"",description:""};try{w.value=await S.getByServerId(o.id)}catch(e){console.error("Failed to load log paths:",e),w.value=[]}F.value=!0},X=async()=>{try{await S.create({serverId:b.value.id,path:i.value.path,filePattern:i.value.filePattern,description:i.value.description,active:!0}),w.value=await S.getByServerId(b.value.id),i.value={path:"",filePattern:"",description:""}}catch(o){console.error("Failed to add log path:",o),alert("경로 추가에 실패했습니다.")}},Z=async o=>{if(confirm("이 경로를 삭제하시겠습니까?"))try{await S.delete(o),w.value=await S.getByServerId(b.value.id)}catch(e){console.error("Failed to delete log path:",e),alert("경로 삭제에 실패했습니다.")}},_=o=>new Date(o).toLocaleString("ko-KR");return le(()=>{I()}),(o,e)=>{var R;return m(),k("div",ie,[s(a(re),null,{header:u(()=>[t("div",ve,[e[21]||(e[21]=t("h3",null,"서버 관리",-1)),s(a(v),{onClick:Y},{default:u(()=>[...e[20]||(e[20]=[d("+ 서버 추가",-1)])]),_:1})])]),default:u(()=>[s(a(de),{columns:W,data:L.value,loading:T.value,"empty-text":"등록된 서버가 없습니다."},{active:u(({value:l})=>[s(a(N),{variant:l?"success":"default"},{default:u(()=>[d(f(l?"활성":"비활성"),1)]),_:2},1032,["variant"])]),authType:u(({value:l})=>[d(f(l==="PASSWORD"?"비밀번호":"키 파일"),1)]),lastScanAt:u(({value:l})=>[d(f(l?_(l):"-"),1)]),actions:u(({row:l})=>[t("div",pe,[s(a(v),{size:"sm",variant:"success",onClick:V=>J(l),loading:B.value===l.id},{default:u(()=>[...e[22]||(e[22]=[d("테스트",-1)])]),_:1},8,["onClick","loading"]),s(a(v),{size:"sm",variant:"secondary",onClick:V=>Q(l)},{default:u(()=>[...e[23]||(e[23]=[d("경로",-1)])]),_:1},8,["onClick"]),s(a(v),{size:"sm",onClick:V=>j(l)},{default:u(()=>[...e[24]||(e[24]=[d("수정",-1)])]),_:1},8,["onClick"]),s(a(v),{size:"sm",variant:"danger",onClick:V=>G(l)},{default:u(()=>[...e[25]||(e[25]=[d("삭제",-1)])]),_:1},8,["onClick"])])]),_:1},8,["data","loading"])]),_:1}),s(a(x),{modelValue:h.value,"onUpdate:modelValue":e[10]||(e[10]=l=>h.value=l),title:y.value?"서버 수정":"서버 추가",width:"500px"},{footer:u(()=>[s(a(v),{variant:"secondary",onClick:e[9]||(e[9]=l=>h.value=!1)},{default:u(()=>[...e[27]||(e[27]=[d("취소",-1)])]),_:1}),s(a(v),{onClick:q,loading:U.value},{default:u(()=>[...e[28]||(e[28]=[d("저장",-1)])]),_:1},8,["loading"])]),default:u(()=>[t("form",{onSubmit:ae(q,["prevent"])},[s(a(p),{modelValue:n.value.name,"onUpdate:modelValue":e[0]||(e[0]=l=>n.value.name=l),label:"서버명",placeholder:"예: 운영서버1",required:""},null,8,["modelValue"]),s(a(p),{modelValue:n.value.host,"onUpdate:modelValue":e[1]||(e[1]=l=>n.value.host=l),label:"호스트",placeholder:"예: 192.168.1.100",required:""},null,8,["modelValue"]),s(a(p),{modelValue:n.value.port,"onUpdate:modelValue":e[2]||(e[2]=l=>n.value.port=l),label:"포트",type:"number",placeholder:"22"},null,8,["modelValue"]),s(a(p),{modelValue:n.value.username,"onUpdate:modelValue":e[3]||(e[3]=l=>n.value.username=l),label:"사용자명",placeholder:"예: root",required:""},null,8,["modelValue"]),s(a(p),{modelValue:n.value.authType,"onUpdate:modelValue":e[4]||(e[4]=l=>n.value.authType=l),label:"인증 방식",type:"select",options:K,required:""},null,8,["modelValue"]),n.value.authType==="PASSWORD"?(m(),$(a(p),{key:0,modelValue:n.value.password,"onUpdate:modelValue":e[5]||(e[5]=l=>n.value.password=l),label:"비밀번호",type:"password",placeholder:y.value?"변경 시에만 입력":"비밀번호 입력",required:!y.value},null,8,["modelValue","placeholder","required"])):E("",!0),n.value.authType==="KEY_FILE"?(m(),$(a(p),{key:1,modelValue:n.value.keyFilePath,"onUpdate:modelValue":e[6]||(e[6]=l=>n.value.keyFilePath=l),label:"키 파일 경로",placeholder:"예: C:\\Users\\user\\.ssh\\id_rsa",required:""},null,8,["modelValue"])):E("",!0),n.value.authType==="KEY_FILE"?(m(),$(a(p),{key:2,modelValue:n.value.passphrase,"onUpdate:modelValue":e[7]||(e[7]=l=>n.value.passphrase=l),label:"Passphrase",type:"password",placeholder:y.value?"변경 시에만 입력":"Passphrase (없으면 비워두세요)"},null,8,["modelValue","placeholder"])):E("",!0),t("div",me,[t("label",null,[te(t("input",{type:"checkbox","onUpdate:modelValue":e[8]||(e[8]=l=>n.value.active=l)},null,512),[[oe,n.value.active]]),e[26]||(e[26]=d(" 활성화 ",-1))])])],32)]),_:1},8,["modelValue","title"]),s(a(x),{modelValue:F.value,"onUpdate:modelValue":e[15]||(e[15]=l=>F.value=l),title:`로그 경로 관리 - ${((R=b.value)==null?void 0:R.name)||""}`,width:"700px"},{footer:u(()=>[s(a(v),{variant:"secondary",onClick:e[14]||(e[14]=l=>F.value=!1)},{default:u(()=>[...e[34]||(e[34]=[d("닫기",-1)])]),_:1})]),default:u(()=>[t("div",fe,[t("div",ye,[e[30]||(e[30]=t("h4",null,"경로 추가",-1)),t("div",ge,[s(a(p),{modelValue:i.value.path,"onUpdate:modelValue":e[11]||(e[11]=l=>i.value.path=l),label:"경로",placeholder:"예: /var/log/tomcat/"},null,8,["modelValue"]),s(a(p),{modelValue:i.value.filePattern,"onUpdate:modelValue":e[12]||(e[12]=l=>i.value.filePattern=l),label:"파일 패턴",placeholder:"예: *.log, catalina.*.log"},null,8,["modelValue"]),s(a(p),{modelValue:i.value.description,"onUpdate:modelValue":e[13]||(e[13]=l=>i.value.description=l),label:"설명",placeholder:"예: Tomcat 로그"},null,8,["modelValue"])]),s(a(v),{size:"sm",onClick:X,disabled:!i.value.path||!i.value.filePattern},{default:u(()=>[...e[29]||(e[29]=[d(" 추가 ",-1)])]),_:1},8,["disabled"])]),t("div",Ve,[e[33]||(e[33]=t("h4",null,"등록된 경로",-1)),w.value.length>0?(m(),k("table",ke,[e[32]||(e[32]=t("thead",null,[t("tr",null,[t("th",null,"경로"),t("th",null,"파일 패턴"),t("th",null,"설명"),t("th",null,"활성"),t("th")])],-1)),t("tbody",null,[(m(!0),k(se,null,ue(w.value,l=>(m(),k("tr",{key:l.id},[t("td",null,f(l.path),1),t("td",null,f(l.filePattern),1),t("td",null,f(l.description||"-"),1),t("td",null,[s(a(N),{variant:l.active?"success":"default"},{default:u(()=>[d(f(l.active?"Y":"N"),1)]),_:2},1032,["variant"])]),t("td",null,[s(a(v),{size:"sm",variant:"danger",onClick:V=>Z(l.id)},{default:u(()=>[...e[31]||(e[31]=[d("삭제",-1)])]),_:1},8,["onClick"])])]))),128))])])):(m(),k("p",he,"등록된 경로가 없습니다."))])])]),_:1},8,["modelValue","title"]),s(a(x),{modelValue:c.value,"onUpdate:modelValue":e[17]||(e[17]=l=>c.value=l),title:"서버 삭제",width:"400px"},{footer:u(()=>[s(a(v),{variant:"secondary",onClick:e[16]||(e[16]=l=>c.value=!1)},{default:u(()=>[...e[37]||(e[37]=[d("취소",-1)])]),_:1}),s(a(v),{variant:"danger",onClick:H,loading:M.value},{default:u(()=>[...e[38]||(e[38]=[d("삭제",-1)])]),_:1},8,["loading"])]),default:u(()=>{var l;return[t("p",null,[e[35]||(e[35]=d("정말로 ",-1)),t("strong",null,f((l=A.value)==null?void 0:l.name),1),e[36]||(e[36]=d(" 서버를 삭제하시겠습니까?",-1))]),e[39]||(e[39]=t("p",{class:"warning-text"},"관련된 모든 로그 경로와 에러 이력도 함께 삭제됩니다.",-1))]}),_:1},8,["modelValue"]),s(a(x),{modelValue:P.value,"onUpdate:modelValue":e[19]||(e[19]=l=>P.value=l),title:"연결 테스트 결과",width:"450px"},{footer:u(()=>[s(a(v),{variant:"secondary",onClick:e[18]||(e[18]=l=>P.value=!1)},{default:u(()=>[...e[40]||(e[40]=[d("닫기",-1)])]),_:1})]),default:u(()=>{var l,V,z,O;return[t("div",{class:ne(["test-result",{success:(l=g.value)==null?void 0:l.success,fail:!((V=g.value)!=null&&V.success)}])},[(z=g.value)!=null&&z.success?(m(),k("div",we,[t("p",null,"✅ "+f(g.value.message),1)])):(m(),k("div",be,[t("p",null,"❌ "+f((O=g.value)==null?void 0:O.error),1)]))],2)]}),_:1},8,["modelValue"])])}}},De=ee(ce,[["__scopeId","data-v-6f59a208"]]);export{De as default}; diff --git a/build/resources/main/static/assets/ServerManage-DG-6txhK.css b/build/resources/main/static/assets/ServerManage-DG-6txhK.css deleted file mode 100644 index 311ef6a..0000000 --- a/build/resources/main/static/assets/ServerManage-DG-6txhK.css +++ /dev/null @@ -1 +0,0 @@ -.card-header-content[data-v-6f59a208]{display:flex;justify-content:space-between;align-items:center}.card-header-content h3[data-v-6f59a208]{margin:0}.action-buttons[data-v-6f59a208]{display:flex;gap:4px}.form-group[data-v-6f59a208]{margin-bottom:16px}.form-group label[data-v-6f59a208]{display:flex;align-items:center;gap:8px;cursor:pointer}.log-path-section h4[data-v-6f59a208]{margin:0 0 12px;font-size:14px;color:#333}.log-path-form[data-v-6f59a208]{padding:16px;background:#f8f9fa;border-radius:8px;margin-bottom:20px}.log-path-inputs[data-v-6f59a208]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:12px}.log-path-list table[data-v-6f59a208]{width:100%;border-collapse:collapse}.log-path-list th[data-v-6f59a208],.log-path-list td[data-v-6f59a208]{padding:10px 12px;text-align:left;border-bottom:1px solid #eee}.log-path-list th[data-v-6f59a208]{background:#f8f9fa;font-weight:600;font-size:13px}.empty-text[data-v-6f59a208]{color:#6c757d;text-align:center;padding:20px}.warning-text[data-v-6f59a208]{color:#e74c3c;font-size:14px}.test-result[data-v-6f59a208]{padding:16px;border-radius:8px}.test-result.success[data-v-6f59a208]{background:#d4edda;border:1px solid #c3e6cb}.test-result.fail[data-v-6f59a208]{background:#f8d7da;border:1px solid #f5c6cb}.test-result p[data-v-6f59a208]{margin:0} diff --git a/build/resources/main/static/assets/ServerManage-cIpW_dU_.js b/build/resources/main/static/assets/ServerManage-cIpW_dU_.js new file mode 100644 index 0000000..38615c5 --- /dev/null +++ b/build/resources/main/static/assets/ServerManage-cIpW_dU_.js @@ -0,0 +1 @@ +import{_ as ne,r as d,o as ie,a as m,b as a,f as n,w as i,u as o,F as Y,g as G,h as v,i as p,d as A,e as w,t as u,j as ue,m as de,l as re,q as ve,n as pe}from"./index-DFoOAXeQ.js";import{s as P,C as ce,a as me,l as U}from"./index--fsvNaiQ.js";import{M as E}from"./Modal-BaZTW7NU.js";import{F as f}from"./FormInput-BsW78DWl.js";import{B as h}from"./Button-Ddldcbk7.js";import{B as R}from"./Badge-SZTgBg80.js";const fe={class:"server-manage"},he={class:"page-header"},ye={key:0,class:"loading"},ge={key:1,class:"empty-state"},Ve={key:2,class:"server-grid"},ke={class:"server-header"},be={class:"server-title"},_e={class:"server-body"},Se={class:"server-info-grid"},Fe={class:"info-item"},Ce={class:"info-content"},we={class:"info-value"},Pe={class:"info-item"},Ue={class:"info-content"},Ie={class:"info-value"},Te={class:"info-item"},Me={class:"info-content"},Ae={class:"info-value"},Ee={class:"info-item"},$e={class:"info-content"},xe={class:"info-value"},De={key:0,class:"progress-section"},Le={class:"progress-header"},Be={class:"status-text"},Ne={class:"progress-bar-container"},Re={class:"progress-details"},qe={class:"server-actions"},Oe=["onClick","disabled"],We=["onClick","disabled"],ze=["onClick"],Ke=["onClick"],Ye=["onClick"],Ge={class:"form-group"},je={class:"log-path-section"},He={class:"log-path-form"},Je={class:"log-path-inputs"},Qe={class:"log-path-list"},Xe={key:0,class:"empty-paths"},Ze={key:1,class:"path-cards"},el={class:"path-info"},ll={class:"path-main"},al={class:"path-value"},tl={class:"path-pattern"},sl={class:"path-meta"},ol={key:0,class:"path-desc"},nl=["onClick"],il={key:0},ul={key:1},dl={__name:"ServerManage",setup(rl){const j=[{value:"PASSWORD",label:"비밀번호"},{value:"KEY_FILE",label:"키 파일"}],$=d([]),x=d(!1),D=d(!1),L=d(!1),b=d(!1),g=d(!1),B=d(null),s=d({name:"",host:"",port:22,username:"",authType:"PASSWORD",password:"",keyFilePath:"",passphrase:"",active:!0}),I=d(!1),_=d(null),V=d([]),c=d({path:"",filePattern:"",description:""}),S=d(!1),N=d(null),F=d(null),r=d({}),T=d(null),C=d(!1),k=d(null),M=async()=>{x.value=!0;try{$.value=await P.getAll()}catch(t){console.error("Failed to load servers:",t),alert("서버 목록을 불러오는데 실패했습니다.")}finally{x.value=!1}},q=()=>{g.value=!1,B.value=null,s.value={name:"",host:"",port:22,username:"",authType:"PASSWORD",password:"",keyFilePath:"",passphrase:"",active:!0},b.value=!0},H=t=>{g.value=!0,B.value=t.id,s.value={name:t.name,host:t.host,port:t.port,username:t.username,authType:t.authType,password:"",keyFilePath:t.keyFilePath||"",passphrase:"",active:t.active},b.value=!0},O=async()=>{if(!s.value.name||!s.value.host||!s.value.username){alert("필수 항목을 입력해주세요.");return}D.value=!0;try{g.value?await P.update(B.value,s.value):await P.create(s.value),b.value=!1,await M()}catch(t){console.error("Failed to save server:",t),alert("저장에 실패했습니다.")}finally{D.value=!1}},J=t=>{N.value=t,S.value=!0},Q=async()=>{L.value=!0;try{await P.delete(N.value.id),S.value=!1,await M()}catch(t){console.error("Failed to delete server:",t),alert("삭제에 실패했습니다.")}finally{L.value=!1}},X=t=>{F.value=t.id,r.value[t.id]={status:"RUNNING",currentPath:"",currentFile:"",totalFiles:0,scannedFiles:0,errorsFound:0},me.startWithProgress(t.id,e=>{r.value[t.id]=e},e=>{F.value=null,e.success?r.value[t.id]={...r.value[t.id],status:"SUCCESS",message:`완료: ${e.filesScanned}개 파일, ${e.errorsFound}개 에러`}:r.value[t.id]={...r.value[t.id],status:"FAILED",message:e.error},M(),setTimeout(()=>{delete r.value[t.id]},5e3)},e=>{F.value=null,r.value[t.id]={...r.value[t.id],status:"FAILED",message:e}})},Z=t=>t.status==="SUCCESS"?t.message||"완료":t.status==="FAILED"?t.message||"실패":t.currentFile?`분석중: ${t.currentFile}`:t.currentPath?`경로: ${t.currentPath}`:"준비중...",ee=t=>t.totalFiles===0?0:Math.round(t.scannedFiles/t.totalFiles*100),le=async t=>{T.value=t.id;try{k.value=await P.testConnection(t.id),C.value=!0}catch(e){console.error("Failed to test connection:",e),k.value={success:!1,error:"연결 테스트 실패: "+e.message},C.value=!0}finally{T.value=null}},ae=async t=>{_.value=t,c.value={path:"",filePattern:"",description:""};try{V.value=await U.getByServerId(t.id)}catch(e){console.error("Failed to load log paths:",e),V.value=[]}I.value=!0},te=async()=>{try{await U.create({serverId:_.value.id,path:c.value.path,filePattern:c.value.filePattern,description:c.value.description,active:!0}),V.value=await U.getByServerId(_.value.id),c.value={path:"",filePattern:"",description:""}}catch(t){console.error("Failed to add log path:",t),alert("경로 추가에 실패했습니다.")}},se=async t=>{if(confirm("이 경로를 삭제하시겠습니까?"))try{await U.delete(t),V.value=await U.getByServerId(_.value.id)}catch(e){console.error("Failed to delete log path:",e),alert("경로 삭제에 실패했습니다.")}},oe=t=>new Date(t).toLocaleString("ko-KR");return ie(()=>{M()}),(t,e)=>{var W;return v(),m("div",fe,[a("div",he,[e[21]||(e[21]=a("h2",null,"서버 관리",-1)),n(o(h),{onClick:q},{default:i(()=>[...e[20]||(e[20]=[p("+ 서버 추가",-1)])]),_:1})]),x.value?(v(),m("div",ye,[...e[22]||(e[22]=[a("p",null,"로딩중...",-1)])])):$.value.length===0?(v(),m("div",ge,[e[24]||(e[24]=a("p",null,"등록된 서버가 없습니다.",-1)),n(o(h),{onClick:q},{default:i(()=>[...e[23]||(e[23]=[p("첫 서버 추가하기",-1)])]),_:1})])):(v(),m("div",Ve,[(v(!0),m(Y,null,G($.value,l=>(v(),A(o(ce),{key:l.id,class:"server-card"},{header:i(()=>[a("div",ke,[a("div",be,[n(o(R),{variant:l.active?"success":"default",size:"sm"},{default:i(()=>[p(u(l.active?"활성":"비활성"),1)]),_:2},1032,["variant"]),a("h4",null,u(l.name),1)])])]),default:i(()=>[a("div",_e,[a("div",Se,[a("div",Fe,[e[26]||(e[26]=a("span",{class:"info-icon"},"🌐",-1)),a("div",Ce,[e[25]||(e[25]=a("span",{class:"info-label"},"호스트",-1)),a("span",we,u(l.host)+":"+u(l.port),1)])]),a("div",Pe,[e[28]||(e[28]=a("span",{class:"info-icon"},"👤",-1)),a("div",Ue,[e[27]||(e[27]=a("span",{class:"info-label"},"사용자",-1)),a("span",Ie,u(l.username),1)])]),a("div",Te,[e[30]||(e[30]=a("span",{class:"info-icon"},"🔑",-1)),a("div",Me,[e[29]||(e[29]=a("span",{class:"info-label"},"인증방식",-1)),a("span",Ae,u(l.authType==="PASSWORD"?"비밀번호":"키 파일"),1)])]),a("div",Ee,[e[32]||(e[32]=a("span",{class:"info-icon"},"📅",-1)),a("div",$e,[e[31]||(e[31]=a("span",{class:"info-label"},"마지막 분석",-1)),a("span",xe,u(l.lastScanAt?oe(l.lastScanAt):"-"),1)])])])]),r.value[l.id]?(v(),m("div",De,[a("div",Le,[a("span",Be,u(Z(r.value[l.id])),1),n(o(R),{variant:r.value[l.id].status==="RUNNING"?"warn":r.value[l.id].status==="SUCCESS"?"success":"error"},{default:i(()=>[p(u(r.value[l.id].status),1)]),_:2},1032,["variant"])]),a("div",Ne,[a("div",{class:"progress-bar",style:ue({width:ee(r.value[l.id])+"%"})},null,4)]),a("div",Re,[a("span",null,"파일: "+u(r.value[l.id].scannedFiles)+" / "+u(r.value[l.id].totalFiles),1),a("span",null,"에러: "+u(r.value[l.id].errorsFound)+"건",1)])])):w("",!0),a("div",qe,[a("button",{class:"action-btn scan",onClick:y=>X(l),disabled:!l.active||F.value===l.id},u(F.value===l.id?"⏳ 분석중...":"▶️ 분석 실행"),9,Oe),a("button",{class:"action-btn test",onClick:y=>le(l),disabled:T.value===l.id},u(T.value===l.id?"⏳":"🔌"),9,We),a("button",{class:"action-btn path",onClick:y=>ae(l)}," 📁 ",8,ze),a("button",{class:"action-btn edit",onClick:y=>H(l)}," ✏️ ",8,Ke),a("button",{class:"action-btn delete",onClick:y=>J(l)}," 🗑️ ",8,Ye)])]),_:2},1024))),128))])),n(o(E),{modelValue:b.value,"onUpdate:modelValue":e[10]||(e[10]=l=>b.value=l),title:g.value?"서버 수정":"서버 추가",width:"500px"},{footer:i(()=>[n(o(h),{variant:"secondary",onClick:e[9]||(e[9]=l=>b.value=!1)},{default:i(()=>[...e[34]||(e[34]=[p("취소",-1)])]),_:1}),n(o(h),{onClick:O,loading:D.value},{default:i(()=>[...e[35]||(e[35]=[p("저장",-1)])]),_:1},8,["loading"])]),default:i(()=>[a("form",{onSubmit:de(O,["prevent"])},[n(o(f),{modelValue:s.value.name,"onUpdate:modelValue":e[0]||(e[0]=l=>s.value.name=l),label:"서버명",placeholder:"예: 운영서버1",required:""},null,8,["modelValue"]),n(o(f),{modelValue:s.value.host,"onUpdate:modelValue":e[1]||(e[1]=l=>s.value.host=l),label:"호스트",placeholder:"예: 192.168.1.100",required:""},null,8,["modelValue"]),n(o(f),{modelValue:s.value.port,"onUpdate:modelValue":e[2]||(e[2]=l=>s.value.port=l),label:"포트",type:"number",placeholder:"22"},null,8,["modelValue"]),n(o(f),{modelValue:s.value.username,"onUpdate:modelValue":e[3]||(e[3]=l=>s.value.username=l),label:"사용자명",placeholder:"예: root",required:""},null,8,["modelValue"]),n(o(f),{modelValue:s.value.authType,"onUpdate:modelValue":e[4]||(e[4]=l=>s.value.authType=l),label:"인증 방식",type:"select",options:j,required:""},null,8,["modelValue"]),s.value.authType==="PASSWORD"?(v(),A(o(f),{key:0,modelValue:s.value.password,"onUpdate:modelValue":e[5]||(e[5]=l=>s.value.password=l),label:"비밀번호",type:"password",placeholder:g.value?"변경 시에만 입력":"비밀번호 입력",required:!g.value},null,8,["modelValue","placeholder","required"])):w("",!0),s.value.authType==="KEY_FILE"?(v(),A(o(f),{key:1,modelValue:s.value.keyFilePath,"onUpdate:modelValue":e[6]||(e[6]=l=>s.value.keyFilePath=l),label:"키 파일 경로",placeholder:"예: C:\\Users\\user\\.ssh\\id_rsa",required:""},null,8,["modelValue"])):w("",!0),s.value.authType==="KEY_FILE"?(v(),A(o(f),{key:2,modelValue:s.value.passphrase,"onUpdate:modelValue":e[7]||(e[7]=l=>s.value.passphrase=l),label:"Passphrase",type:"password",placeholder:g.value?"변경 시에만 입력":"Passphrase (없으면 비워두세요)"},null,8,["modelValue","placeholder"])):w("",!0),a("div",Ge,[a("label",null,[re(a("input",{type:"checkbox","onUpdate:modelValue":e[8]||(e[8]=l=>s.value.active=l)},null,512),[[ve,s.value.active]]),e[33]||(e[33]=p(" 활성화 ",-1))])])],32)]),_:1},8,["modelValue","title"]),n(o(E),{modelValue:I.value,"onUpdate:modelValue":e[15]||(e[15]=l=>I.value=l),title:`로그 경로 관리 - ${((W=_.value)==null?void 0:W.name)||""}`,width:"750px"},{footer:i(()=>[n(o(h),{variant:"secondary",onClick:e[14]||(e[14]=l=>I.value=!1)},{default:i(()=>[...e[38]||(e[38]=[p("닫기",-1)])]),_:1})]),default:i(()=>[a("div",je,[a("div",He,[e[37]||(e[37]=a("h4",null,"➕ 경로 추가",-1)),a("div",Je,[n(o(f),{modelValue:c.value.path,"onUpdate:modelValue":e[11]||(e[11]=l=>c.value.path=l),label:"경로",placeholder:"예: /var/log/tomcat/"},null,8,["modelValue"]),n(o(f),{modelValue:c.value.filePattern,"onUpdate:modelValue":e[12]||(e[12]=l=>c.value.filePattern=l),label:"파일 패턴",placeholder:"예: *.log"},null,8,["modelValue"]),n(o(f),{modelValue:c.value.description,"onUpdate:modelValue":e[13]||(e[13]=l=>c.value.description=l),label:"설명",placeholder:"예: Tomcat 로그"},null,8,["modelValue"])]),n(o(h),{size:"sm",onClick:te,disabled:!c.value.path||!c.value.filePattern},{default:i(()=>[...e[36]||(e[36]=[p(" 경로 추가 ",-1)])]),_:1},8,["disabled"])]),a("div",Qe,[a("h4",null,"📂 등록된 경로 ("+u(V.value.length)+"개)",1),V.value.length===0?(v(),m("div",Xe," 등록된 경로가 없습니다. ")):(v(),m("div",Ze,[(v(!0),m(Y,null,G(V.value,l=>(v(),m("div",{key:l.id,class:"path-card"},[a("div",el,[a("div",ll,[a("code",al,u(l.path),1),a("span",tl,u(l.filePattern),1)]),a("div",sl,[l.description?(v(),m("span",ol,u(l.description),1)):w("",!0),n(o(R),{variant:l.active?"success":"default",size:"sm"},{default:i(()=>[p(u(l.active?"활성":"비활성"),1)]),_:2},1032,["variant"])])]),a("button",{class:"path-delete",onClick:y=>se(l.id),title:"삭제"}," 🗑️ ",8,nl)]))),128))]))])])]),_:1},8,["modelValue","title"]),n(o(E),{modelValue:S.value,"onUpdate:modelValue":e[17]||(e[17]=l=>S.value=l),title:"서버 삭제",width:"400px"},{footer:i(()=>[n(o(h),{variant:"secondary",onClick:e[16]||(e[16]=l=>S.value=!1)},{default:i(()=>[...e[41]||(e[41]=[p("취소",-1)])]),_:1}),n(o(h),{variant:"danger",onClick:Q,loading:L.value},{default:i(()=>[...e[42]||(e[42]=[p("삭제",-1)])]),_:1},8,["loading"])]),default:i(()=>{var l;return[a("p",null,[e[39]||(e[39]=p("정말로 ",-1)),a("strong",null,u((l=N.value)==null?void 0:l.name),1),e[40]||(e[40]=p(" 서버를 삭제하시겠습니까?",-1))]),e[43]||(e[43]=a("p",{class:"warning-text"},"⚠️ 관련된 모든 로그 경로와 에러 이력도 함께 삭제됩니다.",-1))]}),_:1},8,["modelValue"]),n(o(E),{modelValue:C.value,"onUpdate:modelValue":e[19]||(e[19]=l=>C.value=l),title:"연결 테스트 결과",width:"450px"},{footer:i(()=>[n(o(h),{variant:"secondary",onClick:e[18]||(e[18]=l=>C.value=!1)},{default:i(()=>[...e[44]||(e[44]=[p("닫기",-1)])]),_:1})]),default:i(()=>{var l,y,z,K;return[a("div",{class:pe(["test-result",{success:(l=k.value)==null?void 0:l.success,fail:!((y=k.value)!=null&&y.success)}])},[(z=k.value)!=null&&z.success?(v(),m("div",il,[a("p",null,"✅ "+u(k.value.message),1)])):(v(),m("div",ul,[a("p",null,"❌ "+u((K=k.value)==null?void 0:K.error),1)]))],2)]}),_:1},8,["modelValue"])])}}},yl=ne(dl,[["__scopeId","data-v-18b9f6a3"]]);export{yl as default}; diff --git a/build/resources/main/static/assets/Settings-BmmyOJaT.js b/build/resources/main/static/assets/Settings-Co7-fA4D.js similarity index 94% rename from build/resources/main/static/assets/Settings-BmmyOJaT.js rename to build/resources/main/static/assets/Settings-Co7-fA4D.js index 5b8eb22..b8454c1 100644 --- a/build/resources/main/static/assets/Settings-BmmyOJaT.js +++ b/build/resources/main/static/assets/Settings-Co7-fA4D.js @@ -1 +1 @@ -import{_ as S,r as m,o as F,a as p,f as a,w as i,u as n,h as v,m as B,b as t,i as c}from"./index-BB0X_WMV.js";import{C as V,b}from"./index-09HB4Lmg.js";import{F as u}from"./FormInput-BwPgkOAn.js";import{B as y}from"./Button-CoXLXkk7.js";const k={class:"settings"},w={key:0,class:"loading"},C={class:"setting-section"},U={class:"setting-section"},h={class:"setting-section"},M={class:"setting-section"},z={class:"form-actions"},A={__name:"Settings",setup(N){const r=m(!1),d=m(!1),l=m({}),f={"server.port":"8080","export.path":"./exports","retention.days":"90","scan.timeout":"30","scan.maxFileSize":"100"},g=async()=>{r.value=!0;try{const o=await b.getAllAsMap();l.value={...f,...o}}catch(o){console.error("Failed to load settings:",o),l.value={...f}}finally{r.value=!1}},x=async()=>{d.value=!0;try{for(const[o,e]of Object.entries(l.value))await b.save({key:o,value:String(e)});alert("설정이 저장되었습니다.")}catch(o){console.error("Failed to save settings:",o),alert("설정 저장에 실패했습니다.")}finally{d.value=!1}};return F(()=>{g()}),(o,e)=>(v(),p("div",k,[a(n(V),null,{header:i(()=>[...e[5]||(e[5]=[t("div",{class:"card-header-content"},[t("h3",null,"설정")],-1)])]),default:i(()=>[r.value?(v(),p("div",w,"로딩중...")):(v(),p("form",{key:1,onSubmit:B(x,["prevent"]),class:"settings-form"},[t("div",C,[e[6]||(e[6]=t("h4",null,"일반 설정",-1)),a(n(u),{modelValue:l.value["server.port"],"onUpdate:modelValue":e[0]||(e[0]=s=>l.value["server.port"]=s),label:"서버 포트",type:"number",hint:"애플리케이션이 실행될 포트 번호 (기본: 8080)"},null,8,["modelValue"])]),t("div",U,[e[7]||(e[7]=t("h4",null,"내보내기 설정",-1)),a(n(u),{modelValue:l.value["export.path"],"onUpdate:modelValue":e[1]||(e[1]=s=>l.value["export.path"]=s),label:"내보내기 경로",placeholder:"예: C:\\LogHunter\\exports",hint:"리포트 파일이 저장될 기본 경로"},null,8,["modelValue"])]),t("div",h,[e[8]||(e[8]=t("h4",null,"데이터 관리",-1)),a(n(u),{modelValue:l.value["retention.days"],"onUpdate:modelValue":e[2]||(e[2]=s=>l.value["retention.days"]=s),label:"로그 보관 기간 (일)",type:"number",hint:"에러 로그 데이터 보관 기간 (0 = 무제한)"},null,8,["modelValue"])]),t("div",M,[e[9]||(e[9]=t("h4",null,"스캔 설정",-1)),a(n(u),{modelValue:l.value["scan.timeout"],"onUpdate:modelValue":e[3]||(e[3]=s=>l.value["scan.timeout"]=s),label:"스캔 타임아웃 (초)",type:"number",hint:"SFTP 연결 및 파일 다운로드 타임아웃"},null,8,["modelValue"]),a(n(u),{modelValue:l.value["scan.maxFileSize"],"onUpdate:modelValue":e[4]||(e[4]=s=>l.value["scan.maxFileSize"]=s),label:"최대 파일 크기 (MB)",type:"number",hint:"분석할 로그 파일의 최대 크기"},null,8,["modelValue"])]),t("div",z,[a(n(y),{onClick:g,variant:"secondary"},{default:i(()=>[...e[10]||(e[10]=[c("초기화",-1)])]),_:1}),a(n(y),{type:"submit",loading:d.value},{default:i(()=>[...e[11]||(e[11]=[c("저장",-1)])]),_:1},8,["loading"])])],32))]),_:1}),a(n(V),{class:"app-info"},{header:i(()=>[...e[12]||(e[12]=[t("h3",null,"애플리케이션 정보",-1)])]),default:i(()=>[e[13]||(e[13]=t("div",{class:"info-list"},[t("div",{class:"info-item"},[t("span",{class:"label"},"버전"),t("span",{class:"value"},"1.0.0")]),t("div",{class:"info-item"},[t("span",{class:"label"},"프레임워크"),t("span",{class:"value"},"Spring Boot 3.2 + Vue 3")]),t("div",{class:"info-item"},[t("span",{class:"label"},"데이터베이스"),t("span",{class:"value"},"SQLite (./data/loghunter.db)")])],-1))]),_:1})]))}},j=S(A,[["__scopeId","data-v-fdca948e"]]);export{j as default}; +import{_ as S,r as m,o as F,a as p,f as a,w as i,u as n,h as v,m as B,b as t,i as c}from"./index-DFoOAXeQ.js";import{C as V,b}from"./index--fsvNaiQ.js";import{F as u}from"./FormInput-BsW78DWl.js";import{B as y}from"./Button-Ddldcbk7.js";const k={class:"settings"},w={key:0,class:"loading"},C={class:"setting-section"},U={class:"setting-section"},h={class:"setting-section"},M={class:"setting-section"},z={class:"form-actions"},A={__name:"Settings",setup(N){const r=m(!1),d=m(!1),l=m({}),f={"server.port":"8080","export.path":"./exports","retention.days":"90","scan.timeout":"30","scan.maxFileSize":"100"},g=async()=>{r.value=!0;try{const o=await b.getAllAsMap();l.value={...f,...o}}catch(o){console.error("Failed to load settings:",o),l.value={...f}}finally{r.value=!1}},x=async()=>{d.value=!0;try{for(const[o,e]of Object.entries(l.value))await b.save({key:o,value:String(e)});alert("설정이 저장되었습니다.")}catch(o){console.error("Failed to save settings:",o),alert("설정 저장에 실패했습니다.")}finally{d.value=!1}};return F(()=>{g()}),(o,e)=>(v(),p("div",k,[a(n(V),null,{header:i(()=>[...e[5]||(e[5]=[t("div",{class:"card-header-content"},[t("h3",null,"설정")],-1)])]),default:i(()=>[r.value?(v(),p("div",w,"로딩중...")):(v(),p("form",{key:1,onSubmit:B(x,["prevent"]),class:"settings-form"},[t("div",C,[e[6]||(e[6]=t("h4",null,"일반 설정",-1)),a(n(u),{modelValue:l.value["server.port"],"onUpdate:modelValue":e[0]||(e[0]=s=>l.value["server.port"]=s),label:"서버 포트",type:"number",hint:"애플리케이션이 실행될 포트 번호 (기본: 8080)"},null,8,["modelValue"])]),t("div",U,[e[7]||(e[7]=t("h4",null,"내보내기 설정",-1)),a(n(u),{modelValue:l.value["export.path"],"onUpdate:modelValue":e[1]||(e[1]=s=>l.value["export.path"]=s),label:"내보내기 경로",placeholder:"예: C:\\LogHunter\\exports",hint:"리포트 파일이 저장될 기본 경로"},null,8,["modelValue"])]),t("div",h,[e[8]||(e[8]=t("h4",null,"데이터 관리",-1)),a(n(u),{modelValue:l.value["retention.days"],"onUpdate:modelValue":e[2]||(e[2]=s=>l.value["retention.days"]=s),label:"로그 보관 기간 (일)",type:"number",hint:"에러 로그 데이터 보관 기간 (0 = 무제한)"},null,8,["modelValue"])]),t("div",M,[e[9]||(e[9]=t("h4",null,"스캔 설정",-1)),a(n(u),{modelValue:l.value["scan.timeout"],"onUpdate:modelValue":e[3]||(e[3]=s=>l.value["scan.timeout"]=s),label:"스캔 타임아웃 (초)",type:"number",hint:"SFTP 연결 및 파일 다운로드 타임아웃"},null,8,["modelValue"]),a(n(u),{modelValue:l.value["scan.maxFileSize"],"onUpdate:modelValue":e[4]||(e[4]=s=>l.value["scan.maxFileSize"]=s),label:"최대 파일 크기 (MB)",type:"number",hint:"분석할 로그 파일의 최대 크기"},null,8,["modelValue"])]),t("div",z,[a(n(y),{onClick:g,variant:"secondary"},{default:i(()=>[...e[10]||(e[10]=[c("초기화",-1)])]),_:1}),a(n(y),{type:"submit",loading:d.value},{default:i(()=>[...e[11]||(e[11]=[c("저장",-1)])]),_:1},8,["loading"])])],32))]),_:1}),a(n(V),{class:"app-info"},{header:i(()=>[...e[12]||(e[12]=[t("h3",null,"애플리케이션 정보",-1)])]),default:i(()=>[e[13]||(e[13]=t("div",{class:"info-list"},[t("div",{class:"info-item"},[t("span",{class:"label"},"버전"),t("span",{class:"value"},"1.0.0")]),t("div",{class:"info-item"},[t("span",{class:"label"},"프레임워크"),t("span",{class:"value"},"Spring Boot 3.2 + Vue 3")]),t("div",{class:"info-item"},[t("span",{class:"label"},"데이터베이스"),t("span",{class:"value"},"SQLite (./data/loghunter.db)")])],-1))]),_:1})]))}},j=S(A,[["__scopeId","data-v-fdca948e"]]);export{j as default}; diff --git a/build/resources/main/static/assets/chartjs-plugin-datalabels.esm-DiDzp_cw.js b/build/resources/main/static/assets/chartjs-plugin-datalabels.esm-B8xtR40N.js similarity index 99% rename from build/resources/main/static/assets/chartjs-plugin-datalabels.esm-DiDzp_cw.js rename to build/resources/main/static/assets/chartjs-plugin-datalabels.esm-B8xtR40N.js index f9b4c81..a0a6691 100644 --- a/build/resources/main/static/assets/chartjs-plugin-datalabels.esm-DiDzp_cw.js +++ b/build/resources/main/static/assets/chartjs-plugin-datalabels.esm-B8xtR40N.js @@ -1,4 +1,4 @@ -var Yn=Object.defineProperty;var Un=(i,t,e)=>t in i?Yn(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var w=(i,t,e)=>Un(i,typeof t!="symbol"?t+"":t,e);import{x as Us,y as Xs,z as oi,A as Xn,r as Kn,o as qn,B as Gn,C as Zn,D as ri,E as Ks,p as Qn}from"./index-BB0X_WMV.js";/*! +var Yn=Object.defineProperty;var Un=(i,t,e)=>t in i?Yn(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var w=(i,t,e)=>Un(i,typeof t!="symbol"?t+"":t,e);import{x as Us,y as Xs,z as oi,A as Xn,r as Kn,o as qn,B as Gn,C as Zn,D as ri,E as Ks,p as Qn}from"./index-DFoOAXeQ.js";/*! * @kurkle/color v0.3.4 * https://github.com/kurkle/color#readme * (c) 2024 Jukka Kurkela diff --git a/build/resources/main/static/assets/index-09HB4Lmg.js b/build/resources/main/static/assets/index--fsvNaiQ.js similarity index 99% rename from build/resources/main/static/assets/index-09HB4Lmg.js rename to build/resources/main/static/assets/index--fsvNaiQ.js index 1e67a0d..9448696 100644 --- a/build/resources/main/static/assets/index-09HB4Lmg.js +++ b/build/resources/main/static/assets/index--fsvNaiQ.js @@ -1,4 +1,4 @@ -import{_ as Et,a as fe,e as Fe,b as Be,G as de,h as pe,t as St}from"./index-BB0X_WMV.js";const Rt={class:"card"},Ot={key:0,class:"card-header"},At={class:"card-body"},Tt={key:1,class:"card-footer"},Ct={__name:"Card",props:{title:String},setup(e){return(t,n)=>(pe(),fe("div",Rt,[e.title||t.$slots.header?(pe(),fe("div",Ot,[de(t.$slots,"header",{},()=>[Be("h3",null,St(e.title),1)])])):Fe("",!0),Be("div",At,[de(t.$slots,"default",{},void 0)]),t.$slots.footer?(pe(),fe("div",Tt,[de(t.$slots,"footer",{},void 0)])):Fe("",!0)]))}},sr=Et(Ct,[["__scopeId","data-v-2f260fa2"]]);function Xe(e,t){return function(){return e.apply(t,arguments)}}const{toString:xt}=Object.prototype,{getPrototypeOf:Se}=Object,{iterator:se,toStringTag:Ge}=Symbol,oe=(e=>t=>{const n=xt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),_=e=>(e=e.toLowerCase(),t=>oe(t)===e),ie=e=>t=>typeof t===e,{isArray:H}=Array,q=ie("undefined");function V(e){return e!==null&&!q(e)&&e.constructor!==null&&!q(e.constructor)&&T(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Qe=_("ArrayBuffer");function Nt(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Qe(e.buffer),t}const Pt=ie("string"),T=ie("function"),Ze=ie("number"),W=e=>e!==null&&typeof e=="object",_t=e=>e===!0||e===!1,ee=e=>{if(oe(e)!=="object")return!1;const t=Se(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Ge in e)&&!(se in e)},Ft=e=>{if(!W(e)||V(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Bt=_("Date"),Lt=_("File"),Ut=_("Blob"),kt=_("FileList"),Dt=e=>W(e)&&T(e.pipe),jt=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||T(e.append)&&((t=oe(e))==="formdata"||t==="object"&&T(e.toString)&&e.toString()==="[object FormData]"))},$t=_("URLSearchParams"),[It,vt,qt,Ht]=["ReadableStream","Request","Response","Headers"].map(_),Mt=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function K(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,s;if(typeof e!="object"&&(e=[e]),H(e))for(r=0,s=e.length;r0;)if(s=n[r],t===s.toLowerCase())return s;return null}const j=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,et=e=>!q(e)&&e!==j;function ge(){const{caseless:e,skipUndefined:t}=et(this)&&this||{},n={},r=(s,o)=>{const i=e&&Ye(n,o)||o;ee(n[i])&&ee(s)?n[i]=ge(n[i],s):ee(s)?n[i]=ge({},s):H(s)?n[i]=s.slice():(!t||!q(s))&&(n[i]=s)};for(let s=0,o=arguments.length;s(K(t,(s,o)=>{n&&T(s)?e[o]=Xe(s,n):e[o]=s},{allOwnKeys:r}),e),Jt=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Vt=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Wt=(e,t,n,r)=>{let s,o,i;const c={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),o=s.length;o-- >0;)i=s[o],(!r||r(i,e,t))&&!c[i]&&(t[i]=e[i],c[i]=!0);e=n!==!1&&Se(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Kt=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},Xt=e=>{if(!e)return null;if(H(e))return e;let t=e.length;if(!Ze(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Gt=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Se(Uint8Array)),Qt=(e,t)=>{const r=(e&&e[se]).call(e);let s;for(;(s=r.next())&&!s.done;){const o=s.value;t.call(e,o[0],o[1])}},Zt=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},Yt=_("HTMLFormElement"),en=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,s){return r.toUpperCase()+s}),Le=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),tn=_("RegExp"),tt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};K(n,(s,o)=>{let i;(i=t(s,o,e))!==!1&&(r[o]=i||s)}),Object.defineProperties(e,r)},nn=e=>{tt(e,(t,n)=>{if(T(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(T(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},rn=(e,t)=>{const n={},r=s=>{s.forEach(o=>{n[o]=!0})};return H(e)?r(e):r(String(e).split(t)),n},sn=()=>{},on=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function an(e){return!!(e&&T(e.append)&&e[Ge]==="FormData"&&e[se])}const cn=e=>{const t=new Array(10),n=(r,s)=>{if(W(r)){if(t.indexOf(r)>=0)return;if(V(r))return r;if(!("toJSON"in r)){t[s]=r;const o=H(r)?[]:{};return K(r,(i,c)=>{const d=n(i,s+1);!q(d)&&(o[c]=d)}),t[s]=void 0,o}}return r};return n(e,0)},ln=_("AsyncFunction"),un=e=>e&&(W(e)||T(e))&&T(e.then)&&T(e.catch),nt=((e,t)=>e?setImmediate:t?((n,r)=>(j.addEventListener("message",({source:s,data:o})=>{s===j&&o===n&&r.length&&r.shift()()},!1),s=>{r.push(s),j.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",T(j.postMessage)),fn=typeof queueMicrotask<"u"?queueMicrotask.bind(j):typeof process<"u"&&process.nextTick||nt,dn=e=>e!=null&&T(e[se]),a={isArray:H,isArrayBuffer:Qe,isBuffer:V,isFormData:jt,isArrayBufferView:Nt,isString:Pt,isNumber:Ze,isBoolean:_t,isObject:W,isPlainObject:ee,isEmptyObject:Ft,isReadableStream:It,isRequest:vt,isResponse:qt,isHeaders:Ht,isUndefined:q,isDate:Bt,isFile:Lt,isBlob:Ut,isRegExp:tn,isFunction:T,isStream:Dt,isURLSearchParams:$t,isTypedArray:Gt,isFileList:kt,forEach:K,merge:ge,extend:zt,trim:Mt,stripBOM:Jt,inherits:Vt,toFlatObject:Wt,kindOf:oe,kindOfTest:_,endsWith:Kt,toArray:Xt,forEachEntry:Qt,matchAll:Zt,isHTMLForm:Yt,hasOwnProperty:Le,hasOwnProp:Le,reduceDescriptors:tt,freezeMethods:nn,toObjectSet:rn,toCamelCase:en,noop:sn,toFiniteNumber:on,findKey:Ye,global:j,isContextDefined:et,isSpecCompliantForm:an,toJSONObject:cn,isAsyncFn:ln,isThenable:un,setImmediate:nt,asap:fn,isIterable:dn};function g(e,t,n,r,s){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),s&&(this.response=s,this.status=s.status?s.status:null)}a.inherits(g,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:a.toJSONObject(this.config),code:this.code,status:this.status}}});const rt=g.prototype,st={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{st[e]={value:e}});Object.defineProperties(g,st);Object.defineProperty(rt,"isAxiosError",{value:!0});g.from=(e,t,n,r,s,o)=>{const i=Object.create(rt);a.toFlatObject(e,i,function(l){return l!==Error.prototype},f=>f!=="isAxiosError");const c=e&&e.message?e.message:"Error",d=t==null&&e?e.code:t;return g.call(i,c,d,n,r,s),e&&i.cause==null&&Object.defineProperty(i,"cause",{value:e,configurable:!0}),i.name=e&&e.name||"Error",o&&Object.assign(i,o),i};const pn=null;function be(e){return a.isPlainObject(e)||a.isArray(e)}function ot(e){return a.endsWith(e,"[]")?e.slice(0,-2):e}function Ue(e,t,n){return e?e.concat(t).map(function(s,o){return s=ot(s),!n&&o?"["+s+"]":s}).join(n?".":""):t}function hn(e){return a.isArray(e)&&!e.some(be)}const mn=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function ae(e,t,n){if(!a.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=a.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,p){return!a.isUndefined(p[m])});const r=n.metaTokens,s=n.visitor||l,o=n.dots,i=n.indexes,d=(n.Blob||typeof Blob<"u"&&Blob)&&a.isSpecCompliantForm(t);if(!a.isFunction(s))throw new TypeError("visitor must be a function");function f(u){if(u===null)return"";if(a.isDate(u))return u.toISOString();if(a.isBoolean(u))return u.toString();if(!d&&a.isBlob(u))throw new g("Blob is not supported. Use a Buffer instead.");return a.isArrayBuffer(u)||a.isTypedArray(u)?d&&typeof Blob=="function"?new Blob([u]):Buffer.from(u):u}function l(u,m,p){let E=u;if(u&&!p&&typeof u=="object"){if(a.endsWith(m,"{}"))m=r?m:m.slice(0,-2),u=JSON.stringify(u);else if(a.isArray(u)&&hn(u)||(a.isFileList(u)||a.endsWith(m,"[]"))&&(E=a.toArray(u)))return m=ot(m),E.forEach(function(S,A){!(a.isUndefined(S)||S===null)&&t.append(i===!0?Ue([m],A,o):i===null?m:m+"[]",f(S))}),!1}return be(u)?!0:(t.append(Ue(p,m,o),f(u)),!1)}const h=[],b=Object.assign(mn,{defaultVisitor:l,convertValue:f,isVisitable:be});function R(u,m){if(!a.isUndefined(u)){if(h.indexOf(u)!==-1)throw Error("Circular reference detected in "+m.join("."));h.push(u),a.forEach(u,function(E,x){(!(a.isUndefined(E)||E===null)&&s.call(t,E,a.isString(x)?x.trim():x,m,b))===!0&&R(E,m?m.concat(x):[x])}),h.pop()}}if(!a.isObject(e))throw new TypeError("data must be an object");return R(e),t}function ke(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Re(e,t){this._pairs=[],e&&ae(e,this,t)}const it=Re.prototype;it.append=function(t,n){this._pairs.push([t,n])};it.toString=function(t){const n=t?function(r){return t.call(this,r,ke)}:ke;return this._pairs.map(function(s){return n(s[0])+"="+n(s[1])},"").join("&")};function yn(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function at(e,t,n){if(!t)return e;const r=n&&n.encode||yn;a.isFunction(n)&&(n={serialize:n});const s=n&&n.serialize;let o;if(s?o=s(t,n):o=a.isURLSearchParams(t)?t.toString():new Re(t,n).toString(r),o){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class De{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){a.forEach(this.handlers,function(r){r!==null&&t(r)})}}const ct={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},gn=typeof URLSearchParams<"u"?URLSearchParams:Re,bn=typeof FormData<"u"?FormData:null,wn=typeof Blob<"u"?Blob:null,En={isBrowser:!0,classes:{URLSearchParams:gn,FormData:bn,Blob:wn},protocols:["http","https","file","blob","url","data"]},Oe=typeof window<"u"&&typeof document<"u",we=typeof navigator=="object"&&navigator||void 0,Sn=Oe&&(!we||["ReactNative","NativeScript","NS"].indexOf(we.product)<0),Rn=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",On=Oe&&window.location.href||"http://localhost",An=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Oe,hasStandardBrowserEnv:Sn,hasStandardBrowserWebWorkerEnv:Rn,navigator:we,origin:On},Symbol.toStringTag,{value:"Module"})),O={...An,...En};function Tn(e,t){return ae(e,new O.classes.URLSearchParams,{visitor:function(n,r,s,o){return O.isNode&&a.isBuffer(n)?(this.append(r,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function Cn(e){return a.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function xn(e){const t={},n=Object.keys(e);let r;const s=n.length;let o;for(r=0;r=n.length;return i=!i&&a.isArray(s)?s.length:i,d?(a.hasOwnProp(s,i)?s[i]=[s[i],r]:s[i]=r,!c):((!s[i]||!a.isObject(s[i]))&&(s[i]=[]),t(n,r,s[i],o)&&a.isArray(s[i])&&(s[i]=xn(s[i])),!c)}if(a.isFormData(e)&&a.isFunction(e.entries)){const n={};return a.forEachEntry(e,(r,s)=>{t(Cn(r),s,n,0)}),n}return null}function Nn(e,t,n){if(a.isString(e))try{return(t||JSON.parse)(e),a.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const X={transitional:ct,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",s=r.indexOf("application/json")>-1,o=a.isObject(t);if(o&&a.isHTMLForm(t)&&(t=new FormData(t)),a.isFormData(t))return s?JSON.stringify(lt(t)):t;if(a.isArrayBuffer(t)||a.isBuffer(t)||a.isStream(t)||a.isFile(t)||a.isBlob(t)||a.isReadableStream(t))return t;if(a.isArrayBufferView(t))return t.buffer;if(a.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return Tn(t,this.formSerializer).toString();if((c=a.isFileList(t))||r.indexOf("multipart/form-data")>-1){const d=this.env&&this.env.FormData;return ae(c?{"files[]":t}:t,d&&new d,this.formSerializer)}}return o||s?(n.setContentType("application/json",!1),Nn(t)):t}],transformResponse:[function(t){const n=this.transitional||X.transitional,r=n&&n.forcedJSONParsing,s=this.responseType==="json";if(a.isResponse(t)||a.isReadableStream(t))return t;if(t&&a.isString(t)&&(r&&!this.responseType||s)){const i=!(n&&n.silentJSONParsing)&&s;try{return JSON.parse(t,this.parseReviver)}catch(c){if(i)throw c.name==="SyntaxError"?g.from(c,g.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:O.classes.FormData,Blob:O.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};a.forEach(["delete","get","head","post","put","patch"],e=>{X.headers[e]={}});const Pn=a.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),_n=e=>{const t={};let n,r,s;return e&&e.split(` +import{_ as Et,a as fe,e as Fe,b as Be,G as de,h as pe,t as St}from"./index-DFoOAXeQ.js";const Rt={class:"card"},Ot={key:0,class:"card-header"},At={class:"card-body"},Tt={key:1,class:"card-footer"},Ct={__name:"Card",props:{title:String},setup(e){return(t,n)=>(pe(),fe("div",Rt,[e.title||t.$slots.header?(pe(),fe("div",Ot,[de(t.$slots,"header",{},()=>[Be("h3",null,St(e.title),1)])])):Fe("",!0),Be("div",At,[de(t.$slots,"default",{},void 0)]),t.$slots.footer?(pe(),fe("div",Tt,[de(t.$slots,"footer",{},void 0)])):Fe("",!0)]))}},sr=Et(Ct,[["__scopeId","data-v-2f260fa2"]]);function Xe(e,t){return function(){return e.apply(t,arguments)}}const{toString:xt}=Object.prototype,{getPrototypeOf:Se}=Object,{iterator:se,toStringTag:Ge}=Symbol,oe=(e=>t=>{const n=xt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),_=e=>(e=e.toLowerCase(),t=>oe(t)===e),ie=e=>t=>typeof t===e,{isArray:H}=Array,q=ie("undefined");function V(e){return e!==null&&!q(e)&&e.constructor!==null&&!q(e.constructor)&&T(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Qe=_("ArrayBuffer");function Nt(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Qe(e.buffer),t}const Pt=ie("string"),T=ie("function"),Ze=ie("number"),W=e=>e!==null&&typeof e=="object",_t=e=>e===!0||e===!1,ee=e=>{if(oe(e)!=="object")return!1;const t=Se(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Ge in e)&&!(se in e)},Ft=e=>{if(!W(e)||V(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Bt=_("Date"),Lt=_("File"),Ut=_("Blob"),kt=_("FileList"),Dt=e=>W(e)&&T(e.pipe),jt=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||T(e.append)&&((t=oe(e))==="formdata"||t==="object"&&T(e.toString)&&e.toString()==="[object FormData]"))},$t=_("URLSearchParams"),[It,vt,qt,Ht]=["ReadableStream","Request","Response","Headers"].map(_),Mt=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function K(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,s;if(typeof e!="object"&&(e=[e]),H(e))for(r=0,s=e.length;r0;)if(s=n[r],t===s.toLowerCase())return s;return null}const j=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,et=e=>!q(e)&&e!==j;function ge(){const{caseless:e,skipUndefined:t}=et(this)&&this||{},n={},r=(s,o)=>{const i=e&&Ye(n,o)||o;ee(n[i])&&ee(s)?n[i]=ge(n[i],s):ee(s)?n[i]=ge({},s):H(s)?n[i]=s.slice():(!t||!q(s))&&(n[i]=s)};for(let s=0,o=arguments.length;s(K(t,(s,o)=>{n&&T(s)?e[o]=Xe(s,n):e[o]=s},{allOwnKeys:r}),e),Jt=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Vt=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Wt=(e,t,n,r)=>{let s,o,i;const c={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),o=s.length;o-- >0;)i=s[o],(!r||r(i,e,t))&&!c[i]&&(t[i]=e[i],c[i]=!0);e=n!==!1&&Se(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Kt=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},Xt=e=>{if(!e)return null;if(H(e))return e;let t=e.length;if(!Ze(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Gt=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Se(Uint8Array)),Qt=(e,t)=>{const r=(e&&e[se]).call(e);let s;for(;(s=r.next())&&!s.done;){const o=s.value;t.call(e,o[0],o[1])}},Zt=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},Yt=_("HTMLFormElement"),en=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,s){return r.toUpperCase()+s}),Le=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),tn=_("RegExp"),tt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};K(n,(s,o)=>{let i;(i=t(s,o,e))!==!1&&(r[o]=i||s)}),Object.defineProperties(e,r)},nn=e=>{tt(e,(t,n)=>{if(T(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(T(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},rn=(e,t)=>{const n={},r=s=>{s.forEach(o=>{n[o]=!0})};return H(e)?r(e):r(String(e).split(t)),n},sn=()=>{},on=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function an(e){return!!(e&&T(e.append)&&e[Ge]==="FormData"&&e[se])}const cn=e=>{const t=new Array(10),n=(r,s)=>{if(W(r)){if(t.indexOf(r)>=0)return;if(V(r))return r;if(!("toJSON"in r)){t[s]=r;const o=H(r)?[]:{};return K(r,(i,c)=>{const d=n(i,s+1);!q(d)&&(o[c]=d)}),t[s]=void 0,o}}return r};return n(e,0)},ln=_("AsyncFunction"),un=e=>e&&(W(e)||T(e))&&T(e.then)&&T(e.catch),nt=((e,t)=>e?setImmediate:t?((n,r)=>(j.addEventListener("message",({source:s,data:o})=>{s===j&&o===n&&r.length&&r.shift()()},!1),s=>{r.push(s),j.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",T(j.postMessage)),fn=typeof queueMicrotask<"u"?queueMicrotask.bind(j):typeof process<"u"&&process.nextTick||nt,dn=e=>e!=null&&T(e[se]),a={isArray:H,isArrayBuffer:Qe,isBuffer:V,isFormData:jt,isArrayBufferView:Nt,isString:Pt,isNumber:Ze,isBoolean:_t,isObject:W,isPlainObject:ee,isEmptyObject:Ft,isReadableStream:It,isRequest:vt,isResponse:qt,isHeaders:Ht,isUndefined:q,isDate:Bt,isFile:Lt,isBlob:Ut,isRegExp:tn,isFunction:T,isStream:Dt,isURLSearchParams:$t,isTypedArray:Gt,isFileList:kt,forEach:K,merge:ge,extend:zt,trim:Mt,stripBOM:Jt,inherits:Vt,toFlatObject:Wt,kindOf:oe,kindOfTest:_,endsWith:Kt,toArray:Xt,forEachEntry:Qt,matchAll:Zt,isHTMLForm:Yt,hasOwnProperty:Le,hasOwnProp:Le,reduceDescriptors:tt,freezeMethods:nn,toObjectSet:rn,toCamelCase:en,noop:sn,toFiniteNumber:on,findKey:Ye,global:j,isContextDefined:et,isSpecCompliantForm:an,toJSONObject:cn,isAsyncFn:ln,isThenable:un,setImmediate:nt,asap:fn,isIterable:dn};function g(e,t,n,r,s){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),s&&(this.response=s,this.status=s.status?s.status:null)}a.inherits(g,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:a.toJSONObject(this.config),code:this.code,status:this.status}}});const rt=g.prototype,st={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{st[e]={value:e}});Object.defineProperties(g,st);Object.defineProperty(rt,"isAxiosError",{value:!0});g.from=(e,t,n,r,s,o)=>{const i=Object.create(rt);a.toFlatObject(e,i,function(l){return l!==Error.prototype},f=>f!=="isAxiosError");const c=e&&e.message?e.message:"Error",d=t==null&&e?e.code:t;return g.call(i,c,d,n,r,s),e&&i.cause==null&&Object.defineProperty(i,"cause",{value:e,configurable:!0}),i.name=e&&e.name||"Error",o&&Object.assign(i,o),i};const pn=null;function be(e){return a.isPlainObject(e)||a.isArray(e)}function ot(e){return a.endsWith(e,"[]")?e.slice(0,-2):e}function Ue(e,t,n){return e?e.concat(t).map(function(s,o){return s=ot(s),!n&&o?"["+s+"]":s}).join(n?".":""):t}function hn(e){return a.isArray(e)&&!e.some(be)}const mn=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function ae(e,t,n){if(!a.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=a.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,p){return!a.isUndefined(p[m])});const r=n.metaTokens,s=n.visitor||l,o=n.dots,i=n.indexes,d=(n.Blob||typeof Blob<"u"&&Blob)&&a.isSpecCompliantForm(t);if(!a.isFunction(s))throw new TypeError("visitor must be a function");function f(u){if(u===null)return"";if(a.isDate(u))return u.toISOString();if(a.isBoolean(u))return u.toString();if(!d&&a.isBlob(u))throw new g("Blob is not supported. Use a Buffer instead.");return a.isArrayBuffer(u)||a.isTypedArray(u)?d&&typeof Blob=="function"?new Blob([u]):Buffer.from(u):u}function l(u,m,p){let E=u;if(u&&!p&&typeof u=="object"){if(a.endsWith(m,"{}"))m=r?m:m.slice(0,-2),u=JSON.stringify(u);else if(a.isArray(u)&&hn(u)||(a.isFileList(u)||a.endsWith(m,"[]"))&&(E=a.toArray(u)))return m=ot(m),E.forEach(function(S,A){!(a.isUndefined(S)||S===null)&&t.append(i===!0?Ue([m],A,o):i===null?m:m+"[]",f(S))}),!1}return be(u)?!0:(t.append(Ue(p,m,o),f(u)),!1)}const h=[],b=Object.assign(mn,{defaultVisitor:l,convertValue:f,isVisitable:be});function R(u,m){if(!a.isUndefined(u)){if(h.indexOf(u)!==-1)throw Error("Circular reference detected in "+m.join("."));h.push(u),a.forEach(u,function(E,x){(!(a.isUndefined(E)||E===null)&&s.call(t,E,a.isString(x)?x.trim():x,m,b))===!0&&R(E,m?m.concat(x):[x])}),h.pop()}}if(!a.isObject(e))throw new TypeError("data must be an object");return R(e),t}function ke(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Re(e,t){this._pairs=[],e&&ae(e,this,t)}const it=Re.prototype;it.append=function(t,n){this._pairs.push([t,n])};it.toString=function(t){const n=t?function(r){return t.call(this,r,ke)}:ke;return this._pairs.map(function(s){return n(s[0])+"="+n(s[1])},"").join("&")};function yn(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function at(e,t,n){if(!t)return e;const r=n&&n.encode||yn;a.isFunction(n)&&(n={serialize:n});const s=n&&n.serialize;let o;if(s?o=s(t,n):o=a.isURLSearchParams(t)?t.toString():new Re(t,n).toString(r),o){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class De{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){a.forEach(this.handlers,function(r){r!==null&&t(r)})}}const ct={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},gn=typeof URLSearchParams<"u"?URLSearchParams:Re,bn=typeof FormData<"u"?FormData:null,wn=typeof Blob<"u"?Blob:null,En={isBrowser:!0,classes:{URLSearchParams:gn,FormData:bn,Blob:wn},protocols:["http","https","file","blob","url","data"]},Oe=typeof window<"u"&&typeof document<"u",we=typeof navigator=="object"&&navigator||void 0,Sn=Oe&&(!we||["ReactNative","NativeScript","NS"].indexOf(we.product)<0),Rn=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",On=Oe&&window.location.href||"http://localhost",An=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Oe,hasStandardBrowserEnv:Sn,hasStandardBrowserWebWorkerEnv:Rn,navigator:we,origin:On},Symbol.toStringTag,{value:"Module"})),O={...An,...En};function Tn(e,t){return ae(e,new O.classes.URLSearchParams,{visitor:function(n,r,s,o){return O.isNode&&a.isBuffer(n)?(this.append(r,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function Cn(e){return a.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function xn(e){const t={},n=Object.keys(e);let r;const s=n.length;let o;for(r=0;r=n.length;return i=!i&&a.isArray(s)?s.length:i,d?(a.hasOwnProp(s,i)?s[i]=[s[i],r]:s[i]=r,!c):((!s[i]||!a.isObject(s[i]))&&(s[i]=[]),t(n,r,s[i],o)&&a.isArray(s[i])&&(s[i]=xn(s[i])),!c)}if(a.isFormData(e)&&a.isFunction(e.entries)){const n={};return a.forEachEntry(e,(r,s)=>{t(Cn(r),s,n,0)}),n}return null}function Nn(e,t,n){if(a.isString(e))try{return(t||JSON.parse)(e),a.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const X={transitional:ct,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",s=r.indexOf("application/json")>-1,o=a.isObject(t);if(o&&a.isHTMLForm(t)&&(t=new FormData(t)),a.isFormData(t))return s?JSON.stringify(lt(t)):t;if(a.isArrayBuffer(t)||a.isBuffer(t)||a.isStream(t)||a.isFile(t)||a.isBlob(t)||a.isReadableStream(t))return t;if(a.isArrayBufferView(t))return t.buffer;if(a.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return Tn(t,this.formSerializer).toString();if((c=a.isFileList(t))||r.indexOf("multipart/form-data")>-1){const d=this.env&&this.env.FormData;return ae(c?{"files[]":t}:t,d&&new d,this.formSerializer)}}return o||s?(n.setContentType("application/json",!1),Nn(t)):t}],transformResponse:[function(t){const n=this.transitional||X.transitional,r=n&&n.forcedJSONParsing,s=this.responseType==="json";if(a.isResponse(t)||a.isReadableStream(t))return t;if(t&&a.isString(t)&&(r&&!this.responseType||s)){const i=!(n&&n.silentJSONParsing)&&s;try{return JSON.parse(t,this.parseReviver)}catch(c){if(i)throw c.name==="SyntaxError"?g.from(c,g.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:O.classes.FormData,Blob:O.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};a.forEach(["delete","get","head","post","put","patch"],e=>{X.headers[e]={}});const Pn=a.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),_n=e=>{const t={};let n,r,s;return e&&e.split(` `).forEach(function(i){s=i.indexOf(":"),n=i.substring(0,s).trim().toLowerCase(),r=i.substring(s+1).trim(),!(!n||t[n]&&Pn[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},je=Symbol("internals");function J(e){return e&&String(e).trim().toLowerCase()}function te(e){return e===!1||e==null?e:a.isArray(e)?e.map(te):String(e)}function Fn(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const Bn=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function he(e,t,n,r,s){if(a.isFunction(r))return r.call(this,t,n);if(s&&(t=n),!!a.isString(t)){if(a.isString(r))return t.indexOf(r)!==-1;if(a.isRegExp(r))return r.test(t)}}function Ln(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function Un(e,t){const n=a.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(s,o,i){return this[r].call(this,t,s,o,i)},configurable:!0})})}let C=class{constructor(t){t&&this.set(t)}set(t,n,r){const s=this;function o(c,d,f){const l=J(d);if(!l)throw new Error("header name must be a non-empty string");const h=a.findKey(s,l);(!h||s[h]===void 0||f===!0||f===void 0&&s[h]!==!1)&&(s[h||d]=te(c))}const i=(c,d)=>a.forEach(c,(f,l)=>o(f,l,d));if(a.isPlainObject(t)||t instanceof this.constructor)i(t,n);else if(a.isString(t)&&(t=t.trim())&&!Bn(t))i(_n(t),n);else if(a.isObject(t)&&a.isIterable(t)){let c={},d,f;for(const l of t){if(!a.isArray(l))throw TypeError("Object iterator must return a key-value pair");c[f=l[0]]=(d=c[f])?a.isArray(d)?[...d,l[1]]:[d,l[1]]:l[1]}i(c,n)}else t!=null&&o(n,t,r);return this}get(t,n){if(t=J(t),t){const r=a.findKey(this,t);if(r){const s=this[r];if(!n)return s;if(n===!0)return Fn(s);if(a.isFunction(n))return n.call(this,s,r);if(a.isRegExp(n))return n.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=J(t),t){const r=a.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||he(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let s=!1;function o(i){if(i=J(i),i){const c=a.findKey(r,i);c&&(!n||he(r,r[c],c,n))&&(delete r[c],s=!0)}}return a.isArray(t)?t.forEach(o):o(t),s}clear(t){const n=Object.keys(this);let r=n.length,s=!1;for(;r--;){const o=n[r];(!t||he(this,this[o],o,t,!0))&&(delete this[o],s=!0)}return s}normalize(t){const n=this,r={};return a.forEach(this,(s,o)=>{const i=a.findKey(r,o);if(i){n[i]=te(s),delete n[o];return}const c=t?Ln(o):String(o).trim();c!==o&&delete n[o],n[c]=te(s),r[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return a.forEach(this,(r,s)=>{r!=null&&r!==!1&&(n[s]=t&&a.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` `)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(s=>r.set(s)),r}static accessor(t){const r=(this[je]=this[je]={accessors:{}}).accessors,s=this.prototype;function o(i){const c=J(i);r[c]||(Un(s,i),r[c]=!0)}return a.isArray(t)?t.forEach(o):o(t),this}};C.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);a.reduceDescriptors(C.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});a.freezeMethods(C);function me(e,t){const n=this||X,r=t||n,s=C.from(r.headers);let o=r.data;return a.forEach(e,function(c){o=c.call(n,o,s.normalize(),t?t.status:void 0)}),s.normalize(),o}function ut(e){return!!(e&&e.__CANCEL__)}function M(e,t,n){g.call(this,e??"canceled",g.ERR_CANCELED,t,n),this.name="CanceledError"}a.inherits(M,g,{__CANCEL__:!0});function ft(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new g("Request failed with status code "+n.status,[g.ERR_BAD_REQUEST,g.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function kn(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Dn(e,t){e=e||10;const n=new Array(e),r=new Array(e);let s=0,o=0,i;return t=t!==void 0?t:1e3,function(d){const f=Date.now(),l=r[o];i||(i=f),n[s]=d,r[s]=f;let h=o,b=0;for(;h!==s;)b+=n[h++],h=h%e;if(s=(s+1)%e,s===o&&(o=(o+1)%e),f-i{n=l,s=null,o&&(clearTimeout(o),o=null),e(...f)};return[(...f)=>{const l=Date.now(),h=l-n;h>=r?i(f,l):(s=f,o||(o=setTimeout(()=>{o=null,i(s)},r-h)))},()=>s&&i(s)]}const re=(e,t,n=3)=>{let r=0;const s=Dn(50,250);return jn(o=>{const i=o.loaded,c=o.lengthComputable?o.total:void 0,d=i-r,f=s(d),l=i<=c;r=i;const h={loaded:i,total:c,progress:c?i/c:void 0,bytes:d,rate:f||void 0,estimated:f&&c&&l?(c-i)/f:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(h)},n)},$e=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Ie=e=>(...t)=>a.asap(()=>e(...t)),$n=O.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,O.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(O.origin),O.navigator&&/(msie|trident)/i.test(O.navigator.userAgent)):()=>!0,In=O.hasStandardBrowserEnv?{write(e,t,n,r,s,o,i){if(typeof document>"u")return;const c=[`${e}=${encodeURIComponent(t)}`];a.isNumber(n)&&c.push(`expires=${new Date(n).toUTCString()}`),a.isString(r)&&c.push(`path=${r}`),a.isString(s)&&c.push(`domain=${s}`),o===!0&&c.push("secure"),a.isString(i)&&c.push(`SameSite=${i}`),document.cookie=c.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function vn(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function qn(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function dt(e,t,n){let r=!vn(t);return e&&(r||n==!1)?qn(e,t):t}const ve=e=>e instanceof C?{...e}:e;function I(e,t){t=t||{};const n={};function r(f,l,h,b){return a.isPlainObject(f)&&a.isPlainObject(l)?a.merge.call({caseless:b},f,l):a.isPlainObject(l)?a.merge({},l):a.isArray(l)?l.slice():l}function s(f,l,h,b){if(a.isUndefined(l)){if(!a.isUndefined(f))return r(void 0,f,h,b)}else return r(f,l,h,b)}function o(f,l){if(!a.isUndefined(l))return r(void 0,l)}function i(f,l){if(a.isUndefined(l)){if(!a.isUndefined(f))return r(void 0,f)}else return r(void 0,l)}function c(f,l,h){if(h in t)return r(f,l);if(h in e)return r(void 0,f)}const d={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:c,headers:(f,l,h)=>s(ve(f),ve(l),h,!0)};return a.forEach(Object.keys({...e,...t}),function(l){const h=d[l]||s,b=h(e[l],t[l],l);a.isUndefined(b)&&h!==c||(n[l]=b)}),n}const pt=e=>{const t=I({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:s,xsrfCookieName:o,headers:i,auth:c}=t;if(t.headers=i=C.from(i),t.url=at(dt(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&i.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),a.isFormData(n)){if(O.hasStandardBrowserEnv||O.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(a.isFunction(n.getHeaders)){const d=n.getHeaders(),f=["content-type","content-length"];Object.entries(d).forEach(([l,h])=>{f.includes(l.toLowerCase())&&i.set(l,h)})}}if(O.hasStandardBrowserEnv&&(r&&a.isFunction(r)&&(r=r(t)),r||r!==!1&&$n(t.url))){const d=s&&o&&In.read(o);d&&i.set(s,d)}return t},Hn=typeof XMLHttpRequest<"u",Mn=Hn&&function(e){return new Promise(function(n,r){const s=pt(e);let o=s.data;const i=C.from(s.headers).normalize();let{responseType:c,onUploadProgress:d,onDownloadProgress:f}=s,l,h,b,R,u;function m(){R&&R(),u&&u(),s.cancelToken&&s.cancelToken.unsubscribe(l),s.signal&&s.signal.removeEventListener("abort",l)}let p=new XMLHttpRequest;p.open(s.method.toUpperCase(),s.url,!0),p.timeout=s.timeout;function E(){if(!p)return;const S=C.from("getAllResponseHeaders"in p&&p.getAllResponseHeaders()),P={data:!c||c==="text"||c==="json"?p.responseText:p.response,status:p.status,statusText:p.statusText,headers:S,config:e,request:p};ft(function(N){n(N),m()},function(N){r(N),m()},P),p=null}"onloadend"in p?p.onloadend=E:p.onreadystatechange=function(){!p||p.readyState!==4||p.status===0&&!(p.responseURL&&p.responseURL.indexOf("file:")===0)||setTimeout(E)},p.onabort=function(){p&&(r(new g("Request aborted",g.ECONNABORTED,e,p)),p=null)},p.onerror=function(A){const P=A&&A.message?A.message:"Network Error",k=new g(P,g.ERR_NETWORK,e,p);k.event=A||null,r(k),p=null},p.ontimeout=function(){let A=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const P=s.transitional||ct;s.timeoutErrorMessage&&(A=s.timeoutErrorMessage),r(new g(A,P.clarifyTimeoutError?g.ETIMEDOUT:g.ECONNABORTED,e,p)),p=null},o===void 0&&i.setContentType(null),"setRequestHeader"in p&&a.forEach(i.toJSON(),function(A,P){p.setRequestHeader(P,A)}),a.isUndefined(s.withCredentials)||(p.withCredentials=!!s.withCredentials),c&&c!=="json"&&(p.responseType=s.responseType),f&&([b,u]=re(f,!0),p.addEventListener("progress",b)),d&&p.upload&&([h,R]=re(d),p.upload.addEventListener("progress",h),p.upload.addEventListener("loadend",R)),(s.cancelToken||s.signal)&&(l=S=>{p&&(r(!S||S.type?new M(null,e,p):S),p.abort(),p=null)},s.cancelToken&&s.cancelToken.subscribe(l),s.signal&&(s.signal.aborted?l():s.signal.addEventListener("abort",l)));const x=kn(s.url);if(x&&O.protocols.indexOf(x)===-1){r(new g("Unsupported protocol "+x+":",g.ERR_BAD_REQUEST,e));return}p.send(o||null)})},zn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,s;const o=function(f){if(!s){s=!0,c();const l=f instanceof Error?f:this.reason;r.abort(l instanceof g?l:new M(l instanceof Error?l.message:l))}};let i=t&&setTimeout(()=>{i=null,o(new g(`timeout ${t} of ms exceeded`,g.ETIMEDOUT))},t);const c=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(f=>{f.unsubscribe?f.unsubscribe(o):f.removeEventListener("abort",o)}),e=null)};e.forEach(f=>f.addEventListener("abort",o));const{signal:d}=r;return d.unsubscribe=()=>a.asap(c),d}},Jn=function*(e,t){let n=e.byteLength;if(n{const s=Vn(e,t);let o=0,i,c=d=>{i||(i=!0,r&&r(d))};return new ReadableStream({async pull(d){try{const{done:f,value:l}=await s.next();if(f){c(),d.close();return}let h=l.byteLength;if(n){let b=o+=h;n(b)}d.enqueue(new Uint8Array(l))}catch(f){throw c(f),f}},cancel(d){return c(d),s.return()}},{highWaterMark:2})},He=64*1024,{isFunction:Y}=a,Kn=(({Request:e,Response:t})=>({Request:e,Response:t}))(a.global),{ReadableStream:Me,TextEncoder:ze}=a.global,Je=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Xn=e=>{e=a.merge.call({skipUndefined:!0},Kn,e);const{fetch:t,Request:n,Response:r}=e,s=t?Y(t):typeof fetch=="function",o=Y(n),i=Y(r);if(!s)return!1;const c=s&&Y(Me),d=s&&(typeof ze=="function"?(u=>m=>u.encode(m))(new ze):async u=>new Uint8Array(await new n(u).arrayBuffer())),f=o&&c&&Je(()=>{let u=!1;const m=new n(O.origin,{body:new Me,method:"POST",get duplex(){return u=!0,"half"}}).headers.has("Content-Type");return u&&!m}),l=i&&c&&Je(()=>a.isReadableStream(new r("").body)),h={stream:l&&(u=>u.body)};s&&["text","arrayBuffer","blob","formData","stream"].forEach(u=>{!h[u]&&(h[u]=(m,p)=>{let E=m&&m[u];if(E)return E.call(m);throw new g(`Response type '${u}' is not supported`,g.ERR_NOT_SUPPORT,p)})});const b=async u=>{if(u==null)return 0;if(a.isBlob(u))return u.size;if(a.isSpecCompliantForm(u))return(await new n(O.origin,{method:"POST",body:u}).arrayBuffer()).byteLength;if(a.isArrayBufferView(u)||a.isArrayBuffer(u))return u.byteLength;if(a.isURLSearchParams(u)&&(u=u+""),a.isString(u))return(await d(u)).byteLength},R=async(u,m)=>{const p=a.toFiniteNumber(u.getContentLength());return p??b(m)};return async u=>{let{url:m,method:p,data:E,signal:x,cancelToken:S,timeout:A,onDownloadProgress:P,onUploadProgress:k,responseType:N,headers:le,withCredentials:G="same-origin",fetchOptions:Te}=pt(u),Ce=t||fetch;N=N?(N+"").toLowerCase():"text";let Q=zn([x,S&&S.toAbortSignal()],A),z=null;const D=Q&&Q.unsubscribe&&(()=>{Q.unsubscribe()});let xe;try{if(k&&f&&p!=="get"&&p!=="head"&&(xe=await R(le,E))!==0){let U=new n(m,{method:"POST",body:E,duplex:"half"}),v;if(a.isFormData(E)&&(v=U.headers.get("content-type"))&&le.setContentType(v),U.body){const[ue,Z]=$e(xe,re(Ie(k)));E=qe(U.body,He,ue,Z)}}a.isString(G)||(G=G?"include":"omit");const F=o&&"credentials"in n.prototype,Ne={...Te,signal:Q,method:p.toUpperCase(),headers:le.normalize().toJSON(),body:E,duplex:"half",credentials:F?G:void 0};z=o&&new n(m,Ne);let L=await(o?Ce(z,Te):Ce(m,Ne));const Pe=l&&(N==="stream"||N==="response");if(l&&(P||Pe&&D)){const U={};["status","statusText","headers"].forEach(_e=>{U[_e]=L[_e]});const v=a.toFiniteNumber(L.headers.get("content-length")),[ue,Z]=P&&$e(v,re(Ie(P),!0))||[];L=new r(qe(L.body,He,ue,()=>{Z&&Z(),D&&D()}),U)}N=N||"text";let wt=await h[a.findKey(h,N)||"text"](L,u);return!Pe&&D&&D(),await new Promise((U,v)=>{ft(U,v,{data:wt,headers:C.from(L.headers),status:L.status,statusText:L.statusText,config:u,request:z})})}catch(F){throw D&&D(),F&&F.name==="TypeError"&&/Load failed|fetch/i.test(F.message)?Object.assign(new g("Network Error",g.ERR_NETWORK,u,z),{cause:F.cause||F}):g.from(F,F&&F.code,u,z)}}},Gn=new Map,ht=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:s}=t,o=[r,s,n];let i=o.length,c=i,d,f,l=Gn;for(;c--;)d=o[c],f=l.get(d),f===void 0&&l.set(d,f=c?new Map:Xn(t)),l=f;return f};ht();const Ae={http:pn,xhr:Mn,fetch:{get:ht}};a.forEach(Ae,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Ve=e=>`- ${e}`,Qn=e=>a.isFunction(e)||e===null||e===!1;function Zn(e,t){e=a.isArray(e)?e:[e];const{length:n}=e;let r,s;const o={};for(let i=0;i`adapter ${d} `+(f===!1?"is not supported by the environment":"is not available in the build"));let c=n?i.length>1?`since : `+i.map(Ve).join(` diff --git a/build/resources/main/static/assets/index-BB0X_WMV.js b/build/resources/main/static/assets/index-DFoOAXeQ.js similarity index 98% rename from build/resources/main/static/assets/index-BB0X_WMV.js rename to build/resources/main/static/assets/index-DFoOAXeQ.js index f8378ce..a1398d7 100644 --- a/build/resources/main/static/assets/index-BB0X_WMV.js +++ b/build/resources/main/static/assets/index-DFoOAXeQ.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-CWQb9z6Z.js","assets/index-09HB4Lmg.js","assets/index-ikHL8uxD.css","assets/Button-CoXLXkk7.js","assets/Badge-DzuJKoKk.js","assets/chartjs-plugin-datalabels.esm-DiDzp_cw.js","assets/Dashboard-CILG6x2p.css","assets/ErrorLogs-C4tZmC_2.js","assets/Modal-iKIn6dGt.js","assets/FormInput-BwPgkOAn.js","assets/ErrorLogs-BZmKr5Li.css","assets/ServerManage-CzucXmaz.js","assets/DataTable-DHBS0NNE.js","assets/ServerManage-DG-6txhK.css","assets/MonthlyStats-DT15P2RG.js","assets/MonthlyStats-Bt4dp30j.css","assets/DailyStats-C_oquM7K.js","assets/DailyStats-DaWyYZ7V.css","assets/PatternManage-DGWm8Jrq.js","assets/PatternManage-13drcwyX.css","assets/Settings-BmmyOJaT.js","assets/Settings-CipHZo9K.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-D7yH75no.js","assets/index--fsvNaiQ.js","assets/index-ikHL8uxD.css","assets/Button-Ddldcbk7.js","assets/Badge-SZTgBg80.js","assets/chartjs-plugin-datalabels.esm-B8xtR40N.js","assets/Dashboard-CILG6x2p.css","assets/ErrorLogs-DWDLe7x0.js","assets/Modal-BaZTW7NU.js","assets/FormInput-BsW78DWl.js","assets/ErrorLogs-BZmKr5Li.css","assets/ServerManage-cIpW_dU_.js","assets/ServerManage-8NeMNC-c.css","assets/MonthlyStats-BMU-a3Ge.js","assets/MonthlyStats-Bt4dp30j.css","assets/DailyStats-03BWk9_D.js","assets/DailyStats-DaWyYZ7V.css","assets/PatternManage-CxrI6HBG.js","assets/PatternManage-BexqVEVy.css","assets/Settings-Co7-fA4D.js","assets/Settings-CipHZo9K.css"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();/** * @vue/shared v3.5.26 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -27,4 +27,4 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-CWQb9 * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let Bf=()=>location.protocol+"//"+location.host;function Eo(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),Fr(l,"")}return Fr(n,e)+s+r}function Uf(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=Eo(e,location),S=n.value,x=t.value;let M=0;if(g){if(n.value=m,t.value=g,o&&o===S){o=null;return}M=x?g.position-x.position:0}else s(m);r.forEach(I=>{I(n.value,S,{delta:M,type:Es.pop,direction:M?M>0?is.forward:is.back:is.unknown})})};function c(){o=n.value}function d(g){r.push(g);const m=()=>{const S=r.indexOf(g);S>-1&&r.splice(S,1)};return i.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(k({},g.state,{scroll:qn()}),"")}}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:d,destroy:h}}function Gr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?qn():null}}function Gf(e){const{history:t,location:n}=window,s={value:Eo(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,d,u){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:Bf()+e+c;try{t[u?"replaceState":"pushState"](d,"",g),r.value=d}catch(m){console.error(m),n[u?"replace":"assign"](g)}}function o(c,d){i(c,k({},t.state,Gr(r.value.back,c,r.value.forward,!0),d,{position:r.value.position}),!0),s.value=c}function l(c,d){const u=k({},r.value,t.state,{forward:c,scroll:qn()});i(u.current,u,!0),i(c,k({},Gr(s.value,c,null),{position:u.position+1},d),!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function Kf(e){e=wf(e);const t=Gf(e),n=Uf(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=k({location:"",base:e,go:s,createHref:Of.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let bt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var oe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(oe||{});const Wf={type:bt.Static,value:""},kf=/[a-zA-Z0-9_]/;function qf(e){if(!e)return[[]];if(e==="/")return[[Wf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${d}": ${m}`)}let n=oe.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,d="",u="";function h(){d&&(n===oe.Static?i.push({type:bt.Static,value:d}):n===oe.Param||n===oe.ParamRegExp||n===oe.ParamRegExpEnd?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${d}) must be alone in its segment. eg: '/:ids+.`),i.push({type:bt.Param,value:d,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),d="")}function g(){d+=c}for(;lt.length?t.length===1&&t[0]===_e.Static+_e.Segment?1:-1:0}function Ao(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const zf={strict:!1,end:!0,sensitive:!1};function Xf(e,t,n){const s=Qf(qf(e.path),n),r=k(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Zf(e,t){const n=[],s=new Map;t=Vr(zf,t);function r(h){return s.get(h)}function i(h,g,m){const S=!m,x=qr(h);x.aliasOf=m&&m.record;const M=Vr(t,h),I=[x];if("alias"in h){const N=typeof h.alias=="string"?[h.alias]:h.alias;for(const K of N)I.push(qr(k({},x,{components:m?m.record.components:x.components,path:K,aliasOf:m?m.record:x})))}let P,V;for(const N of I){const{path:K}=N;if(g&&K[0]!=="/"){const te=g.record.path,J=te[te.length-1]==="/"?"":"/";N.path=g.record.path+(K&&J+K)}if(P=Xf(N,g,M),m?m.alias.push(P):(V=V||P,V!==P&&V.alias.push(P),S&&h.name&&!$r(P)&&o(h.name)),xo(P)&&c(P),x.children){const te=x.children;for(let J=0;J{o(V)}:nn}function o(h){if(yo(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=nu(h,n);n.splice(g,0,h),h.record.name&&!$r(h)&&s.set(h.record.name,h)}function d(h,g){let m,S={},x,M;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw Ut(se.MATCHER_NOT_FOUND,{location:h});M=m.record.name,S=k(kr(g.params,m.keys.filter(V=>!V.optional).concat(m.parent?m.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),h.params&&kr(h.params,m.keys.map(V=>V.name))),x=m.stringify(S)}else if(h.path!=null)x=h.path,m=n.find(V=>V.re.test(x)),m&&(S=m.parse(x),M=m.record.name);else{if(m=g.name?s.get(g.name):n.find(V=>V.re.test(g.path)),!m)throw Ut(se.MATCHER_NOT_FOUND,{location:h,currentLocation:g});M=m.record.name,S=k({},g.params,h.params),x=m.stringify(S)}const I=[];let P=m;for(;P;)I.unshift(P.record),P=P.parent;return{name:M,path:x,params:S,matched:I,meta:tu(I)}}e.forEach(h=>i(h));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:d,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function kr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function qr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:eu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function eu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function $r(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function tu(e){return e.reduce((t,n)=>k(t,n.meta),{})}function nu(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Ao(e,t[i])<0?s=i:n=i+1}const r=su(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function su(e){let t=e;for(;t=t.parent;)if(xo(t)&&Ao(e,t)===0)return t}function xo({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Jr(e){const t=Xe(qs),n=Xe(bo),s=Pe(()=>{const c=Mt(e.to);return t.resolve(c)}),r=Pe(()=>{const{matched:c}=s.value,{length:d}=c,u=c[d-1],h=n.matched;if(!u||!h.length)return-1;const g=h.findIndex(Bt.bind(null,u));if(g>-1)return g;const m=Qr(c[d-2]);return d>1&&Qr(u)===m&&h[h.length-1].path!==m?h.findIndex(Bt.bind(null,c[d-2])):g}),i=Pe(()=>r.value>-1&&cu(n.params,s.value.params)),o=Pe(()=>r.value>-1&&r.value===n.matched.length-1&&_o(n.params,s.value.params));function l(c={}){if(lu(c)){const d=t[Mt(e.replace)?"replace":"push"](Mt(e.to)).catch(nn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>d),d}return Promise.resolve()}return{route:s,href:Pe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function ru(e){return e.length===1?e[0]:e}const iu=Vi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Jr,setup(e,{slots:t}){const n=Bn(Jr(e)),{options:s}=Xe(qs),r=Pe(()=>({[Yr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Yr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&ru(t.default(n));return e.custom?i:lo("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),ou=iu;function lu(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function cu(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!De(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function Qr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Yr=(e,t,n)=>e??t??n,fu=Vi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Xe(xs),r=Pe(()=>e.route||s.value),i=Xe(Ur,0),o=Pe(()=>{let d=Mt(i);const{matched:u}=r.value;let h;for(;(h=u[d])&&!h.components;)d++;return d}),l=Pe(()=>r.value.matched[o.value]);En(Ur,Pe(()=>o.value+1)),En(Hf,l),En(xs,r);const c=xi();return An(()=>[c.value,l.value,e.name],([d,u,h],[g,m,S])=>{u&&(u.instances[h]=d,m&&m!==u&&d&&d===g&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),d&&u&&(!m||!Bt(u,m)||!g)&&(u.enterCallbacks[h]||[]).forEach(x=>x(d))},{flush:"post"}),()=>{const d=r.value,u=e.name,h=l.value,g=h&&h.components[u];if(!g)return zr(n.default,{Component:g,route:d});const m=h.props[u],S=m?m===!0?d.params:typeof m=="function"?m(d):m:null,M=lo(g,k({},S,t,{onVnodeUnmounted:I=>{I.component.isUnmounted&&(h.instances[u]=null)},ref:c}));return zr(n.default,{Component:M,route:d})||M}}});function zr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const uu=fu;function au(e){const t=Zf(e.routes,e),n=e.parseQuery||Vf,s=e.stringifyQuery||Br,r=e.history,i=$t(),o=$t(),l=$t(),c=nl(ot);let d=ot;Tt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=ss.bind(null,v=>""+v),h=ss.bind(null,vf),g=ss.bind(null,an);function m(v,T){let C,D;return yo(v)?(C=t.getRecordMatcher(v),D=T):D=v,t.addRoute(D,C)}function S(v){const T=t.getRecordMatcher(v);T&&t.removeRoute(T)}function x(){return t.getRoutes().map(v=>v.record)}function M(v){return!!t.getRecordMatcher(v)}function I(v,T){if(T=k({},T||c.value),typeof v=="string"){const p=rs(n,v,T.path),_=t.resolve({path:p.path},T),b=r.createHref(p.fullPath);return k(p,_,{params:g(_.params),hash:an(p.hash),redirectedFrom:void 0,href:b})}let C;if(v.path!=null)C=k({},v,{path:rs(n,v.path,T.path).path});else{const p=k({},v.params);for(const _ in p)p[_]==null&&delete p[_];C=k({},v,{params:h(p)}),T.params=h(T.params)}const D=t.resolve(C,T),U=v.hash||"";D.params=u(g(D.params));const f=Af(s,k({},v,{hash:mf(U),path:D.path})),a=r.createHref(f);return k({fullPath:f,hash:U,query:s===Br?Ff(v.query):v.query||{}},D,{redirectedFrom:void 0,href:a})}function P(v){return typeof v=="string"?rs(n,v,c.value.path):k({},v)}function V(v,T){if(d!==v)return Ut(se.NAVIGATION_CANCELLED,{from:T,to:v})}function N(v){return J(v)}function K(v){return N(k(P(v),{replace:!0}))}function te(v,T){const C=v.matched[v.matched.length-1];if(C&&C.redirect){const{redirect:D}=C;let U=typeof D=="function"?D(v,T):D;return typeof U=="string"&&(U=U.includes("?")||U.includes("#")?U=P(U):{path:U},U.params={}),k({query:v.query,hash:v.hash,params:U.path!=null?{}:v.params},U)}}function J(v,T){const C=d=I(v),D=c.value,U=v.state,f=v.force,a=v.replace===!0,p=te(C,D);if(p)return J(k(P(p),{state:typeof p=="object"?k({},U,p.state):U,force:f,replace:a}),T||C);const _=C;_.redirectedFrom=T;let b;return!f&&xf(s,D,C)&&(b=Ut(se.NAVIGATION_DUPLICATED,{to:_,from:D}),Ve(D,D,!0,!1)),(b?Promise.resolve(b):ue(_,D)).catch(y=>$e(y)?$e(y,se.NAVIGATION_GUARD_REDIRECT)?y:it(y):W(y,_,D)).then(y=>{if(y){if($e(y,se.NAVIGATION_GUARD_REDIRECT))return J(k({replace:a},P(y.to),{state:typeof y.to=="object"?k({},U,y.to.state):U,force:f}),T||_)}else y=pt(_,D,!0,a,U);return Te(_,D,y),y})}function le(v,T){const C=V(v,T);return C?Promise.reject(C):Promise.resolve()}function ie(v){const T=wt.values().next().value;return T&&typeof T.runWithContext=="function"?T.runWithContext(v):v()}function ue(v,T){let C;const[D,U,f]=jf(v,T);C=os(D.reverse(),"beforeRouteLeave",v,T);for(const p of D)p.leaveGuards.forEach(_=>{C.push(at(_,v,T))});const a=le.bind(null,v,T);return C.push(a),we(C).then(()=>{C=[];for(const p of i.list())C.push(at(p,v,T));return C.push(a),we(C)}).then(()=>{C=os(U,"beforeRouteUpdate",v,T);for(const p of U)p.updateGuards.forEach(_=>{C.push(at(_,v,T))});return C.push(a),we(C)}).then(()=>{C=[];for(const p of f)if(p.beforeEnter)if(De(p.beforeEnter))for(const _ of p.beforeEnter)C.push(at(_,v,T));else C.push(at(p.beforeEnter,v,T));return C.push(a),we(C)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),C=os(f,"beforeRouteEnter",v,T,ie),C.push(a),we(C))).then(()=>{C=[];for(const p of o.list())C.push(at(p,v,T));return C.push(a),we(C)}).catch(p=>$e(p,se.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function Te(v,T,C){l.list().forEach(D=>ie(()=>D(v,T,C)))}function pt(v,T,C,D,U){const f=V(v,T);if(f)return f;const a=T===ot,p=Tt?history.state:{};C&&(D||a?r.replace(v.fullPath,k({scroll:a&&p&&p.scroll},U)):r.push(v.fullPath,U)),c.value=v,Ve(v,T,C,a),it()}let Le;function Kt(){Le||(Le=r.listen((v,T,C)=>{if(!gt.listening)return;const D=I(v),U=te(D,gt.currentRoute.value);if(U){J(k(U,{replace:!0,force:!0}),D).catch(nn);return}d=D;const f=c.value;Tt&&If(jr(f.fullPath,C.delta),qn()),ue(D,f).catch(a=>$e(a,se.NAVIGATION_ABORTED|se.NAVIGATION_CANCELLED)?a:$e(a,se.NAVIGATION_GUARD_REDIRECT)?(J(k(P(a.to),{force:!0}),D).then(p=>{$e(p,se.NAVIGATION_ABORTED|se.NAVIGATION_DUPLICATED)&&!C.delta&&C.type===Es.pop&&r.go(-1,!1)}).catch(nn),Promise.reject()):(C.delta&&r.go(-C.delta,!1),W(a,D,f))).then(a=>{a=a||pt(D,f,!1),a&&(C.delta&&!$e(a,se.NAVIGATION_CANCELLED)?r.go(-C.delta,!1):C.type===Es.pop&&$e(a,se.NAVIGATION_ABORTED|se.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),Te(D,f,a)}).catch(nn)}))}let Rt=$t(),ce=$t(),Y;function W(v,T,C){it(v);const D=ce.list();return D.length?D.forEach(U=>U(v,T,C)):console.error(v),Promise.reject(v)}function ke(){return Y&&c.value!==ot?Promise.resolve():new Promise((v,T)=>{Rt.add([v,T])})}function it(v){return Y||(Y=!v,Kt(),Rt.list().forEach(([T,C])=>v?C(v):T()),Rt.reset()),v}function Ve(v,T,C,D){const{scrollBehavior:U}=e;if(!Tt||!U)return Promise.resolve();const f=!C&&Nf(jr(v.fullPath,0))||(D||!C)&&history.state&&history.state.scroll||null;return Hs().then(()=>U(v,T,f)).then(a=>a&&Pf(a)).catch(a=>W(a,v,T))}const ve=v=>r.go(v);let St;const wt=new Set,gt={currentRoute:c,listening:!0,addRoute:m,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:M,getRoutes:x,resolve:I,options:e,push:N,replace:K,go:ve,back:()=>ve(-1),forward:()=>ve(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:ce.add,isReady:ke,install(v){v.component("RouterLink",ou),v.component("RouterView",uu),v.config.globalProperties.$router=gt,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>Mt(c)}),Tt&&!St&&c.value===ot&&(St=!0,N(r.location).catch(D=>{}));const T={};for(const D in ot)Object.defineProperty(T,D,{get:()=>c.value[D],enumerable:!0});v.provide(qs,gt),v.provide(bo,Ei(T)),v.provide(xs,c);const C=v.unmount;wt.add(v),v.unmount=function(){wt.delete(v),wt.size<1&&(d=ot,Le&&Le(),Le=null,c.value=ot,St=!1,Y=!1),C()}}};function we(v){return v.reduce((T,C)=>T.then(()=>ie(C)),Promise.resolve())}return gt}const du=au({history:Kf(),routes:[{path:"/",name:"dashboard",component:()=>yt(()=>import("./Dashboard-CWQb9z6Z.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/errors",name:"errors",component:()=>yt(()=>import("./ErrorLogs-C4tZmC_2.js"),__vite__mapDeps([7,1,2,8,9,3,4,10]))},{path:"/servers",name:"servers",component:()=>yt(()=>import("./ServerManage-CzucXmaz.js"),__vite__mapDeps([11,12,1,2,8,9,3,4,13]))},{path:"/stats/monthly",name:"monthly-stats",component:()=>yt(()=>import("./MonthlyStats-DT15P2RG.js"),__vite__mapDeps([14,1,2,5,15]))},{path:"/stats/daily",name:"daily-stats",component:()=>yt(()=>import("./DailyStats-C_oquM7K.js"),__vite__mapDeps([16,1,2,5,17]))},{path:"/patterns",name:"patterns",component:()=>yt(()=>import("./PatternManage-DGWm8Jrq.js"),__vite__mapDeps([18,12,1,2,8,9,3,4,19]))},{path:"/settings",name:"settings",component:()=>yt(()=>import("./Settings-BmmyOJaT.js"),__vite__mapDeps([20,1,2,9,3,21]))}]}),$s=kc(nf);$s.use(Qc());$s.use(du);$s.mount("#app");export{bc as A,Bi as B,An as C,q as D,Fs as E,Re as F,mu as G,pu as T,Yc as _,oc as a,Pt as b,Pe as c,_s as d,_u as e,ne as f,gu as g,In as h,lt as i,Os as j,Bn as k,hu as l,Eu as m,Ts as n,Al as o,Hs as p,vu as q,xi as r,yu as s,Lo as t,Mt as u,bu as v,Je as w,Vi as x,nl as y,lo as z}; + */let Bf=()=>location.protocol+"//"+location.host;function Eo(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),Fr(l,"")}return Fr(n,e)+s+r}function Uf(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=Eo(e,location),S=n.value,x=t.value;let M=0;if(g){if(n.value=m,t.value=g,o&&o===S){o=null;return}M=x?g.position-x.position:0}else s(m);r.forEach(I=>{I(n.value,S,{delta:M,type:Es.pop,direction:M?M>0?is.forward:is.back:is.unknown})})};function c(){o=n.value}function d(g){r.push(g);const m=()=>{const S=r.indexOf(g);S>-1&&r.splice(S,1)};return i.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(k({},g.state,{scroll:qn()}),"")}}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:d,destroy:h}}function Gr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?qn():null}}function Gf(e){const{history:t,location:n}=window,s={value:Eo(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,d,u){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:Bf()+e+c;try{t[u?"replaceState":"pushState"](d,"",g),r.value=d}catch(m){console.error(m),n[u?"replace":"assign"](g)}}function o(c,d){i(c,k({},t.state,Gr(r.value.back,c,r.value.forward,!0),d,{position:r.value.position}),!0),s.value=c}function l(c,d){const u=k({},r.value,t.state,{forward:c,scroll:qn()});i(u.current,u,!0),i(c,k({},Gr(s.value,c,null),{position:u.position+1},d),!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function Kf(e){e=wf(e);const t=Gf(e),n=Uf(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=k({location:"",base:e,go:s,createHref:Of.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let bt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var oe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(oe||{});const Wf={type:bt.Static,value:""},kf=/[a-zA-Z0-9_]/;function qf(e){if(!e)return[[]];if(e==="/")return[[Wf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${d}": ${m}`)}let n=oe.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,d="",u="";function h(){d&&(n===oe.Static?i.push({type:bt.Static,value:d}):n===oe.Param||n===oe.ParamRegExp||n===oe.ParamRegExpEnd?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${d}) must be alone in its segment. eg: '/:ids+.`),i.push({type:bt.Param,value:d,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),d="")}function g(){d+=c}for(;lt.length?t.length===1&&t[0]===_e.Static+_e.Segment?1:-1:0}function Ao(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const zf={strict:!1,end:!0,sensitive:!1};function Xf(e,t,n){const s=Qf(qf(e.path),n),r=k(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Zf(e,t){const n=[],s=new Map;t=Vr(zf,t);function r(h){return s.get(h)}function i(h,g,m){const S=!m,x=qr(h);x.aliasOf=m&&m.record;const M=Vr(t,h),I=[x];if("alias"in h){const N=typeof h.alias=="string"?[h.alias]:h.alias;for(const K of N)I.push(qr(k({},x,{components:m?m.record.components:x.components,path:K,aliasOf:m?m.record:x})))}let P,V;for(const N of I){const{path:K}=N;if(g&&K[0]!=="/"){const te=g.record.path,J=te[te.length-1]==="/"?"":"/";N.path=g.record.path+(K&&J+K)}if(P=Xf(N,g,M),m?m.alias.push(P):(V=V||P,V!==P&&V.alias.push(P),S&&h.name&&!$r(P)&&o(h.name)),xo(P)&&c(P),x.children){const te=x.children;for(let J=0;J{o(V)}:nn}function o(h){if(yo(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=nu(h,n);n.splice(g,0,h),h.record.name&&!$r(h)&&s.set(h.record.name,h)}function d(h,g){let m,S={},x,M;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw Ut(se.MATCHER_NOT_FOUND,{location:h});M=m.record.name,S=k(kr(g.params,m.keys.filter(V=>!V.optional).concat(m.parent?m.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),h.params&&kr(h.params,m.keys.map(V=>V.name))),x=m.stringify(S)}else if(h.path!=null)x=h.path,m=n.find(V=>V.re.test(x)),m&&(S=m.parse(x),M=m.record.name);else{if(m=g.name?s.get(g.name):n.find(V=>V.re.test(g.path)),!m)throw Ut(se.MATCHER_NOT_FOUND,{location:h,currentLocation:g});M=m.record.name,S=k({},g.params,h.params),x=m.stringify(S)}const I=[];let P=m;for(;P;)I.unshift(P.record),P=P.parent;return{name:M,path:x,params:S,matched:I,meta:tu(I)}}e.forEach(h=>i(h));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:d,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function kr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function qr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:eu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function eu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function $r(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function tu(e){return e.reduce((t,n)=>k(t,n.meta),{})}function nu(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Ao(e,t[i])<0?s=i:n=i+1}const r=su(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function su(e){let t=e;for(;t=t.parent;)if(xo(t)&&Ao(e,t)===0)return t}function xo({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Jr(e){const t=Xe(qs),n=Xe(bo),s=Pe(()=>{const c=Mt(e.to);return t.resolve(c)}),r=Pe(()=>{const{matched:c}=s.value,{length:d}=c,u=c[d-1],h=n.matched;if(!u||!h.length)return-1;const g=h.findIndex(Bt.bind(null,u));if(g>-1)return g;const m=Qr(c[d-2]);return d>1&&Qr(u)===m&&h[h.length-1].path!==m?h.findIndex(Bt.bind(null,c[d-2])):g}),i=Pe(()=>r.value>-1&&cu(n.params,s.value.params)),o=Pe(()=>r.value>-1&&r.value===n.matched.length-1&&_o(n.params,s.value.params));function l(c={}){if(lu(c)){const d=t[Mt(e.replace)?"replace":"push"](Mt(e.to)).catch(nn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>d),d}return Promise.resolve()}return{route:s,href:Pe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function ru(e){return e.length===1?e[0]:e}const iu=Vi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Jr,setup(e,{slots:t}){const n=Bn(Jr(e)),{options:s}=Xe(qs),r=Pe(()=>({[Yr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Yr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&ru(t.default(n));return e.custom?i:lo("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),ou=iu;function lu(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function cu(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!De(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function Qr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Yr=(e,t,n)=>e??t??n,fu=Vi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Xe(xs),r=Pe(()=>e.route||s.value),i=Xe(Ur,0),o=Pe(()=>{let d=Mt(i);const{matched:u}=r.value;let h;for(;(h=u[d])&&!h.components;)d++;return d}),l=Pe(()=>r.value.matched[o.value]);En(Ur,Pe(()=>o.value+1)),En(Hf,l),En(xs,r);const c=xi();return An(()=>[c.value,l.value,e.name],([d,u,h],[g,m,S])=>{u&&(u.instances[h]=d,m&&m!==u&&d&&d===g&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),d&&u&&(!m||!Bt(u,m)||!g)&&(u.enterCallbacks[h]||[]).forEach(x=>x(d))},{flush:"post"}),()=>{const d=r.value,u=e.name,h=l.value,g=h&&h.components[u];if(!g)return zr(n.default,{Component:g,route:d});const m=h.props[u],S=m?m===!0?d.params:typeof m=="function"?m(d):m:null,M=lo(g,k({},S,t,{onVnodeUnmounted:I=>{I.component.isUnmounted&&(h.instances[u]=null)},ref:c}));return zr(n.default,{Component:M,route:d})||M}}});function zr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const uu=fu;function au(e){const t=Zf(e.routes,e),n=e.parseQuery||Vf,s=e.stringifyQuery||Br,r=e.history,i=$t(),o=$t(),l=$t(),c=nl(ot);let d=ot;Tt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=ss.bind(null,v=>""+v),h=ss.bind(null,vf),g=ss.bind(null,an);function m(v,T){let C,D;return yo(v)?(C=t.getRecordMatcher(v),D=T):D=v,t.addRoute(D,C)}function S(v){const T=t.getRecordMatcher(v);T&&t.removeRoute(T)}function x(){return t.getRoutes().map(v=>v.record)}function M(v){return!!t.getRecordMatcher(v)}function I(v,T){if(T=k({},T||c.value),typeof v=="string"){const p=rs(n,v,T.path),_=t.resolve({path:p.path},T),b=r.createHref(p.fullPath);return k(p,_,{params:g(_.params),hash:an(p.hash),redirectedFrom:void 0,href:b})}let C;if(v.path!=null)C=k({},v,{path:rs(n,v.path,T.path).path});else{const p=k({},v.params);for(const _ in p)p[_]==null&&delete p[_];C=k({},v,{params:h(p)}),T.params=h(T.params)}const D=t.resolve(C,T),U=v.hash||"";D.params=u(g(D.params));const f=Af(s,k({},v,{hash:mf(U),path:D.path})),a=r.createHref(f);return k({fullPath:f,hash:U,query:s===Br?Ff(v.query):v.query||{}},D,{redirectedFrom:void 0,href:a})}function P(v){return typeof v=="string"?rs(n,v,c.value.path):k({},v)}function V(v,T){if(d!==v)return Ut(se.NAVIGATION_CANCELLED,{from:T,to:v})}function N(v){return J(v)}function K(v){return N(k(P(v),{replace:!0}))}function te(v,T){const C=v.matched[v.matched.length-1];if(C&&C.redirect){const{redirect:D}=C;let U=typeof D=="function"?D(v,T):D;return typeof U=="string"&&(U=U.includes("?")||U.includes("#")?U=P(U):{path:U},U.params={}),k({query:v.query,hash:v.hash,params:U.path!=null?{}:v.params},U)}}function J(v,T){const C=d=I(v),D=c.value,U=v.state,f=v.force,a=v.replace===!0,p=te(C,D);if(p)return J(k(P(p),{state:typeof p=="object"?k({},U,p.state):U,force:f,replace:a}),T||C);const _=C;_.redirectedFrom=T;let b;return!f&&xf(s,D,C)&&(b=Ut(se.NAVIGATION_DUPLICATED,{to:_,from:D}),Ve(D,D,!0,!1)),(b?Promise.resolve(b):ue(_,D)).catch(y=>$e(y)?$e(y,se.NAVIGATION_GUARD_REDIRECT)?y:it(y):W(y,_,D)).then(y=>{if(y){if($e(y,se.NAVIGATION_GUARD_REDIRECT))return J(k({replace:a},P(y.to),{state:typeof y.to=="object"?k({},U,y.to.state):U,force:f}),T||_)}else y=pt(_,D,!0,a,U);return Te(_,D,y),y})}function le(v,T){const C=V(v,T);return C?Promise.reject(C):Promise.resolve()}function ie(v){const T=wt.values().next().value;return T&&typeof T.runWithContext=="function"?T.runWithContext(v):v()}function ue(v,T){let C;const[D,U,f]=jf(v,T);C=os(D.reverse(),"beforeRouteLeave",v,T);for(const p of D)p.leaveGuards.forEach(_=>{C.push(at(_,v,T))});const a=le.bind(null,v,T);return C.push(a),we(C).then(()=>{C=[];for(const p of i.list())C.push(at(p,v,T));return C.push(a),we(C)}).then(()=>{C=os(U,"beforeRouteUpdate",v,T);for(const p of U)p.updateGuards.forEach(_=>{C.push(at(_,v,T))});return C.push(a),we(C)}).then(()=>{C=[];for(const p of f)if(p.beforeEnter)if(De(p.beforeEnter))for(const _ of p.beforeEnter)C.push(at(_,v,T));else C.push(at(p.beforeEnter,v,T));return C.push(a),we(C)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),C=os(f,"beforeRouteEnter",v,T,ie),C.push(a),we(C))).then(()=>{C=[];for(const p of o.list())C.push(at(p,v,T));return C.push(a),we(C)}).catch(p=>$e(p,se.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function Te(v,T,C){l.list().forEach(D=>ie(()=>D(v,T,C)))}function pt(v,T,C,D,U){const f=V(v,T);if(f)return f;const a=T===ot,p=Tt?history.state:{};C&&(D||a?r.replace(v.fullPath,k({scroll:a&&p&&p.scroll},U)):r.push(v.fullPath,U)),c.value=v,Ve(v,T,C,a),it()}let Le;function Kt(){Le||(Le=r.listen((v,T,C)=>{if(!gt.listening)return;const D=I(v),U=te(D,gt.currentRoute.value);if(U){J(k(U,{replace:!0,force:!0}),D).catch(nn);return}d=D;const f=c.value;Tt&&If(jr(f.fullPath,C.delta),qn()),ue(D,f).catch(a=>$e(a,se.NAVIGATION_ABORTED|se.NAVIGATION_CANCELLED)?a:$e(a,se.NAVIGATION_GUARD_REDIRECT)?(J(k(P(a.to),{force:!0}),D).then(p=>{$e(p,se.NAVIGATION_ABORTED|se.NAVIGATION_DUPLICATED)&&!C.delta&&C.type===Es.pop&&r.go(-1,!1)}).catch(nn),Promise.reject()):(C.delta&&r.go(-C.delta,!1),W(a,D,f))).then(a=>{a=a||pt(D,f,!1),a&&(C.delta&&!$e(a,se.NAVIGATION_CANCELLED)?r.go(-C.delta,!1):C.type===Es.pop&&$e(a,se.NAVIGATION_ABORTED|se.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),Te(D,f,a)}).catch(nn)}))}let Rt=$t(),ce=$t(),Y;function W(v,T,C){it(v);const D=ce.list();return D.length?D.forEach(U=>U(v,T,C)):console.error(v),Promise.reject(v)}function ke(){return Y&&c.value!==ot?Promise.resolve():new Promise((v,T)=>{Rt.add([v,T])})}function it(v){return Y||(Y=!v,Kt(),Rt.list().forEach(([T,C])=>v?C(v):T()),Rt.reset()),v}function Ve(v,T,C,D){const{scrollBehavior:U}=e;if(!Tt||!U)return Promise.resolve();const f=!C&&Nf(jr(v.fullPath,0))||(D||!C)&&history.state&&history.state.scroll||null;return Hs().then(()=>U(v,T,f)).then(a=>a&&Pf(a)).catch(a=>W(a,v,T))}const ve=v=>r.go(v);let St;const wt=new Set,gt={currentRoute:c,listening:!0,addRoute:m,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:M,getRoutes:x,resolve:I,options:e,push:N,replace:K,go:ve,back:()=>ve(-1),forward:()=>ve(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:ce.add,isReady:ke,install(v){v.component("RouterLink",ou),v.component("RouterView",uu),v.config.globalProperties.$router=gt,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>Mt(c)}),Tt&&!St&&c.value===ot&&(St=!0,N(r.location).catch(D=>{}));const T={};for(const D in ot)Object.defineProperty(T,D,{get:()=>c.value[D],enumerable:!0});v.provide(qs,gt),v.provide(bo,Ei(T)),v.provide(xs,c);const C=v.unmount;wt.add(v),v.unmount=function(){wt.delete(v),wt.size<1&&(d=ot,Le&&Le(),Le=null,c.value=ot,St=!1,Y=!1),C()}}};function we(v){return v.reduce((T,C)=>T.then(()=>ie(C)),Promise.resolve())}return gt}const du=au({history:Kf(),routes:[{path:"/",name:"dashboard",component:()=>yt(()=>import("./Dashboard-D7yH75no.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/errors",name:"errors",component:()=>yt(()=>import("./ErrorLogs-DWDLe7x0.js"),__vite__mapDeps([7,1,2,8,9,3,4,10]))},{path:"/servers",name:"servers",component:()=>yt(()=>import("./ServerManage-cIpW_dU_.js"),__vite__mapDeps([11,1,2,8,9,3,4,12]))},{path:"/stats/monthly",name:"monthly-stats",component:()=>yt(()=>import("./MonthlyStats-BMU-a3Ge.js"),__vite__mapDeps([13,1,2,5,14]))},{path:"/stats/daily",name:"daily-stats",component:()=>yt(()=>import("./DailyStats-03BWk9_D.js"),__vite__mapDeps([15,1,2,5,16]))},{path:"/patterns",name:"patterns",component:()=>yt(()=>import("./PatternManage-CxrI6HBG.js"),__vite__mapDeps([17,1,2,8,9,3,4,18]))},{path:"/settings",name:"settings",component:()=>yt(()=>import("./Settings-Co7-fA4D.js"),__vite__mapDeps([19,1,2,9,3,20]))}]}),$s=kc(nf);$s.use(Qc());$s.use(du);$s.mount("#app");export{bc as A,Bi as B,An as C,q as D,Fs as E,Re as F,mu as G,pu as T,Yc as _,oc as a,Pt as b,Pe as c,_s as d,_u as e,ne as f,gu as g,In as h,lt as i,Os as j,Bn as k,hu as l,Eu as m,Ts as n,Al as o,Hs as p,vu as q,xi as r,yu as s,Lo as t,Mt as u,bu as v,Je as w,Vi as x,nl as y,lo as z}; diff --git a/build/resources/main/static/index.html b/build/resources/main/static/index.html index 4db65b1..70ddf37 100644 --- a/build/resources/main/static/index.html +++ b/build/resources/main/static/index.html @@ -18,7 +18,7 @@ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; } - + diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogController.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogController.class.uniqueId1 deleted file mode 100644 index 104f05a..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogController.class.uniqueId1 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogRepository.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogRepository.class.uniqueId0 deleted file mode 100644 index fe637fe..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogRepository.class.uniqueId0 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogService.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogService.class.uniqueId8 deleted file mode 100644 index 30322b4..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ErrorLogService.class.uniqueId8 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ExportController.class.uniqueId17 b/build/tmp/compileJava/compileTransaction/stash-dir/ExportController.class.uniqueId17 deleted file mode 100644 index 33fb7f3..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ExportController.class.uniqueId17 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ExportService$ExportRequest.class.uniqueId13 b/build/tmp/compileJava/compileTransaction/stash-dir/ExportService$ExportRequest.class.uniqueId13 deleted file mode 100644 index 1e02130..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ExportService$ExportRequest.class.uniqueId13 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ExportService$ExportResult.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/ExportService$ExportResult.class.uniqueId6 deleted file mode 100644 index dc5f820..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ExportService$ExportResult.class.uniqueId6 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ExportService.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/ExportService.class.uniqueId3 deleted file mode 100644 index a1d3446..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ExportService.class.uniqueId3 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$DailyStat.class.uniqueId9 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$DailyStat.class.uniqueId10 similarity index 72% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$DailyStat.class.uniqueId9 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$DailyStat.class.uniqueId10 index cbee584..2dc0dd6 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$DailyStat.class.uniqueId9 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$DailyStat.class.uniqueId10 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$FileErrorStats.class.uniqueId11 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$FileErrorStats.class.uniqueId0 similarity index 72% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$FileErrorStats.class.uniqueId11 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$FileErrorStats.class.uniqueId0 index da6be50..4920e7a 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$FileErrorStats.class.uniqueId11 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$FileErrorStats.class.uniqueId0 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$PatternErrorStats.class.uniqueId18 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$PatternErrorStats.class.uniqueId9 similarity index 75% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$PatternErrorStats.class.uniqueId18 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$PatternErrorStats.class.uniqueId9 index 371fd00..c12f2f7 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$PatternErrorStats.class.uniqueId18 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$PatternErrorStats.class.uniqueId9 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ResetResult.class.uniqueId10 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ResetResult.class.uniqueId11 similarity index 79% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ResetResult.class.uniqueId10 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ResetResult.class.uniqueId11 index de538b8..b9eea6d 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ResetResult.class.uniqueId10 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ResetResult.class.uniqueId11 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanProgress.class.uniqueId12 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanProgress.class.uniqueId1 similarity index 100% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanProgress.class.uniqueId12 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanProgress.class.uniqueId1 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanResult.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanResult.class.uniqueId3 similarity index 100% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanResult.class.uniqueId2 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ScanResult.class.uniqueId3 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerDailyStats.class.uniqueId5 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerDailyStats.class.uniqueId6 similarity index 81% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerDailyStats.class.uniqueId5 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerDailyStats.class.uniqueId6 index 81baad6..e2ba987 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerDailyStats.class.uniqueId5 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerDailyStats.class.uniqueId6 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerErrorStats.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerErrorStats.class.uniqueId4 index aabc4cf..1b6d2db 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerErrorStats.class.uniqueId4 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerErrorStats.class.uniqueId4 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerTimeStats.class.uniqueId15 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerTimeStats.class.uniqueId5 similarity index 81% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerTimeStats.class.uniqueId15 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerTimeStats.class.uniqueId5 index 1cbb814..1203a7a 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerTimeStats.class.uniqueId15 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$ServerTimeStats.class.uniqueId5 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$TimeStat.class.uniqueId16 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$TimeStat.class.uniqueId8 similarity index 52% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService$TimeStat.class.uniqueId16 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService$TimeStat.class.uniqueId8 index 780a40c..402139e 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$TimeStat.class.uniqueId16 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService$TimeStat.class.uniqueId8 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService.class.uniqueId14 b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService.class.uniqueId2 similarity index 52% rename from build/tmp/compileJava/compileTransaction/stash-dir/ScanService.class.uniqueId14 rename to build/tmp/compileJava/compileTransaction/stash-dir/ScanService.class.uniqueId2 index 5b29903..1010628 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ScanService.class.uniqueId14 and b/build/tmp/compileJava/compileTransaction/stash-dir/ScanService.class.uniqueId2 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index e3459c3..d1ca677 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/data/loghunter.db b/data/loghunter.db index b6fcac8..a7ca482 100644 Binary files a/data/loghunter.db and b/data/loghunter.db differ diff --git a/frontend/src/views/PatternManage.vue b/frontend/src/views/PatternManage.vue index 708ea09..521c291 100644 --- a/frontend/src/views/PatternManage.vue +++ b/frontend/src/views/PatternManage.vue @@ -1,39 +1,71 @@