Files
log-hunter/build/resources/main/static/assets/Dashboard-D7yH75no.js
2026-01-07 01:41:17 +09:00

2 lines
5.7 KiB
JavaScript

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};