2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{_ as ue,r as v,k as ve,c as ce,o as pe,a as o,b as t,f as r,w as d,u,n as X,t as a,F,g as E,h as n,i as p,e as _,l as me}from"./index-D2VmGkBi.js";import{B as f,C as ye,e as L,p as _e}from"./index-Bx7gSOle.js";import{M as j,B as q}from"./Badge-B139BweD.js";import{F as B}from"./FormInput-DHZMRclc.js";const fe={class:"error-history"},ke={class:"layout-container"},ge={class:"tree-panel"},he={class:"tree-header"},Ce={class:"tree-content"},be={key:0,class:"tree-loading"},we={key:1,class:"tree-empty"},Ie={key:2,class:"tree-list"},xe={class:"tree-count"},Pe=["onClick"],Ve={class:"tree-toggle"},Re={class:"tree-label"},Ne={class:"tree-count"},Fe={key:0,class:"tree-paths"},Ee=["onClick"],Le={class:"tree-toggle"},Ae=["title"],Te={class:"tree-count"},$e={key:0,class:"tree-files"},ze=["onClick"],Be={class:"tree-label"},De={class:"tree-count-detail"},Oe={key:0,class:"critical"},Se={key:1,class:"error"},Me={key:2,class:"warn"},Ue=["onClick"],We={class:"list-panel"},He={class:"card-header-content"},Xe={key:0},je={key:1},qe={class:"header-actions"},Ge={class:"filters"},Je={class:"filter-row"},Ke={class:"filter-actions"},Qe={class:"results-section"},Ye={class:"results-header"},Ze={key:0},et={class:"table-wrapper"},tt={key:0,class:"error-table"},lt={class:"col-time"},st={class:"col-severity"},at={class:"col-pattern"},ot={class:"col-summary"},nt={class:"col-action"},it={key:0,class:"empty-result"},rt={key:1,class:"loading-result"},dt={key:2,class:"pagination"},ut={class:"page-info"},vt={key:0,class:"error-detail"},ct={class:"detail-grid"},pt={class:"detail-item"},mt={class:"detail-item"},yt={class:"detail-item"},_t={class:"detail-item"},ft={class:"file-path"},kt={class:"detail-item"},gt={class:"detail-item"},ht={class:"detail-section"},Ct={class:"summary-box"},bt={class:"detail-section"},wt={class:"context-box"},It=20,xt={__name:"ErrorLogs",setup(Pt){const h=v([]),V=v(!1),b=v([]),w=v([]),c=v(null),R=v(!1),I=v([]),A=v(0),N=v(0),k=v(0),i=ve({patternId:"",severity:"",keyword:""}),D=v([]),G=[{value:"",label:"전체"},{value:"CRITICAL",label:"CRITICAL"},{value:"ERROR",label:"ERROR"},{value:"WARN",label:"WARN"}],x=v(!1),m=v(null),P=v(!1),O=v(null),T=v(null),S=v(""),$=v(!1),J=ce(()=>h.value.reduce((l,e)=>l+e.totalErrorCount,0)),z=async()=>{V.value=!0;try{h.value=await L.getTree(),h.value.length>0&&(b.value=[h.value[0].serverId],h.value[0].paths.length>0&&(w.value=[h.value[0].serverId+":"+h.value[0].paths[0].path]))}catch(l){console.error("Failed to load tree:",l)}finally{V.value=!1}},K=async()=>{try{const l=await _e.getAll();D.value=[{value:"",label:"전체"},...l.map(e=>({value:e.id,label:e.name}))]}catch(l){console.error("Failed to load options:",l)}},Q=l=>{const e=b.value.indexOf(l);e>=0?b.value.splice(e,1):b.value.push(l)},Y=l=>{const e=w.value.indexOf(l);e>=0?w.value.splice(e,1):w.value.push(l)},Z=()=>{c.value=null,k.value=0,C()},ee=(l,e)=>{c.value={serverId:l,...e},k.value=0,C()},te=l=>l.length>25?"..."+l.slice(-22):l,C=async()=>{R.value=!0;try{const l={page:k.value,size:It};c.value&&(l.serverId=c.value.serverId,l.filePath=c.value.filePath),i.patternId&&(l.patternId=i.patternId),i.severity&&(l.severity=i.severity),i.keyword&&(l.keyword=i.keyword);const e=await L.search(l);I.value=e.content||[],A.value=e.totalElements||0,N.value=e.totalPages||0}catch(l){console.error("Failed to search errors:",l),I.value=[]}finally{R.value=!1}},le=()=>{i.patternId="",i.severity="",i.keyword="",k.value=0,C()},M=l=>{k.value=l,C()},se=(l,e)=>{O.value=l,T.value=e.filePath,S.value=e.fileName,P.value=!0},ae=async()=>{$.value=!0;try{await L.deleteByFile(O.value,T.value),P.value=!1,c.value&&c.value.filePath===T.value&&(c.value=null),await z(),C()}catch(l){console.error("Failed to delete:",l),alert("삭제 실패")}finally{$.value=!1}},oe=async l=>{try{m.value=await L.getById(l.id),x.value=!0}catch{m.value=l,x.value=!0}},U=()=>{const l=new URLSearchParams;return c.value&&(l.append("serverId",c.value.serverId),l.append("filePath",c.value.filePath)),i.patternId&&l.append("patternId",i.patternId),i.severity&&l.append("severity",i.severity),i.keyword&&l.append("keyword",i.keyword),l.toString()},ne=()=>{const l=U();window.open(`/api/export/html?${l}`,"_blank")},ie=()=>{const l=U();window.open(`/api/export/txt?${l}`,"_blank")},W=l=>l?new Date(l).toLocaleString("ko-KR"):"-",re=(l,e)=>l?l.length>e?l.substring(0,e)+"...":l:"",H=l=>({CRITICAL:"critical",ERROR:"error",WARN:"warn"})[l]||"default";return pe(()=>{z(),K(),C()}),(l,e)=>(n(),o("div",fe,[t("div",ke,[t("div",ge,[t("div",he,[e[10]||(e[10]=t("h4",null,"파일 탐색",-1)),r(u(f),{size:"sm",variant:"secondary",onClick:z,loading:V.value},{default:d(()=>[...e[9]||(e[9]=[p(" 새로고침 ",-1)])]),_:1},8,["loading"])]),t("div",Ce,[V.value?(n(),o("div",be,"로딩중...")):h.value.length===0?(n(),o("div",we," 분석된 파일이 없습니다. ")):(n(),o("div",Ie,[t("div",{class:X(["tree-item tree-all",{active:!c.value}]),onClick:Z},[e[11]||(e[11]=t("span",{class:"tree-icon"},"📊",-1)),e[12]||(e[12]=t("span",{class:"tree-label"},"전체",-1)),t("span",xe,a(J.value)+"건",1)],2),(n(!0),o(F,null,E(h.value,s=>(n(),o("div",{key:s.serverId,class:"tree-server"},[t("div",{class:"tree-item tree-server-item",onClick:g=>Q(s.serverId)},[t("span",Ve,a(b.value.includes(s.serverId)?"▼":"▶"),1),e[13]||(e[13]=t("span",{class:"tree-icon"},"🖥️",-1)),t("span",Re,a(s.serverName),1),t("span",Ne,a(s.totalErrorCount)+"건",1)],8,Pe),b.value.includes(s.serverId)?(n(),o("div",Fe,[(n(!0),o(F,null,E(s.paths,g=>(n(),o("div",{key:g.path,class:"tree-path"},[t("div",{class:"tree-item tree-path-item",onClick:y=>Y(s.serverId+":"+g.path)},[t("span",Le,a(w.value.includes(s.serverId+":"+g.path)?"▼":"▶"),1),e[14]||(e[14]=t("span",{class:"tree-icon"},"📁",-1)),t("span",{class:"tree-label",title:g.path},a(te(g.path)),9,Ae),t("span",Te,a(g.totalErrorCount)+"건",1)],8,Ee),w.value.includes(s.serverId+":"+g.path)?(n(),o("div",$e,[(n(!0),o(F,null,E(g.files,y=>(n(),o("div",{key:y.filePath,class:X(["tree-item tree-file-item",{active:c.value&&c.value.filePath===y.filePath&&c.value.serverId===s.serverId}]),onClick:de=>ee(s.serverId,y)},[e[15]||(e[15]=t("span",{class:"tree-icon"},"📄",-1)),t("span",Be,a(y.fileName),1),t("span",De,[y.criticalCount?(n(),o("span",Oe,a(y.criticalCount),1)):_("",!0),y.errorLevelCount?(n(),o("span",Se,a(y.errorLevelCount),1)):_("",!0),y.warnCount?(n(),o("span",Me,a(y.warnCount),1)):_("",!0)]),t("button",{class:"tree-delete",onClick:me(de=>se(s.serverId,y),["stop"]),title:"삭제"}," 🗑️ ",8,Ue)],10,ze))),128))])):_("",!0)]))),128))])):_("",!0)]))),128))]))])]),t("div",We,[r(u(ye),null,{header:d(()=>[t("div",He,[t("h3",null,[c.value?(n(),o("span",Xe,a(c.value.fileName),1)):(n(),o("span",je,"전체 에러 이력"))]),t("div",qe,[r(u(f),{size:"sm",variant:"secondary",onClick:ne},{default:d(()=>[...e[16]||(e[16]=[p("HTML",-1)])]),_:1}),r(u(f),{size:"sm",variant:"secondary",onClick:ie},{default:d(()=>[...e[17]||(e[17]=[p("TXT",-1)])]),_:1})])])]),default:d(()=>[t("div",Ge,[t("div",Je,[r(u(B),{modelValue:i.patternId,"onUpdate:modelValue":e[0]||(e[0]=s=>i.patternId=s),label:"패턴",type:"select",options:D.value,placeholder:"전체"},null,8,["modelValue","options"]),r(u(B),{modelValue:i.severity,"onUpdate:modelValue":e[1]||(e[1]=s=>i.severity=s),label:"심각도",type:"select",options:G,placeholder:"전체"},null,8,["modelValue"]),r(u(B),{modelValue:i.keyword,"onUpdate:modelValue":e[2]||(e[2]=s=>i.keyword=s),label:"키워드",placeholder:"검색어 입력..."},null,8,["modelValue"]),t("div",Ke,[r(u(f),{onClick:C},{default:d(()=>[...e[18]||(e[18]=[p("검색",-1)])]),_:1}),r(u(f),{variant:"secondary",onClick:le},{default:d(()=>[...e[19]||(e[19]=[p("초기화",-1)])]),_:1})])])]),t("div",Qe,[t("div",Ye,[A.value>0?(n(),o("span",Ze,"총 "+a(A.value)+"건",1)):_("",!0)]),t("div",et,[I.value.length>0?(n(),o("table",tt,[e[21]||(e[21]=t("thead",null,[t("tr",null,[t("th",{class:"col-time"},"발생시간"),t("th",{class:"col-severity"},"심각도"),t("th",{class:"col-pattern"},"패턴"),t("th",{class:"col-summary"},"요약"),t("th",{class:"col-action"},"작업")])],-1)),t("tbody",null,[(n(!0),o(F,null,E(I.value,s=>(n(),o("tr",{key:s.id},[t("td",lt,a(W(s.occurredAt)),1),t("td",st,[r(u(q),{variant:H(s.severity)},{default:d(()=>[p(a(s.severity),1)]),_:2},1032,["variant"])]),t("td",at,a(s.patternName),1),t("td",ot,a(re(s.summary,60)),1),t("td",nt,[r(u(f),{size:"sm",variant:"secondary",onClick:g=>oe(s)},{default:d(()=>[...e[20]||(e[20]=[p("상세",-1)])]),_:1},8,["onClick"])])]))),128))])])):_("",!0)]),I.value.length===0&&!R.value?(n(),o("div",it,[...e[22]||(e[22]=[t("p",null,"검색 결과가 없습니다.",-1)])])):_("",!0),R.value?(n(),o("div",rt,[...e[23]||(e[23]=[t("p",null,"로딩중...",-1)])])):_("",!0),N.value>1?(n(),o("div",dt,[r(u(f),{size:"sm",variant:"secondary",disabled:k.value===0,onClick:e[3]||(e[3]=s=>M(k.value-1))},{default:d(()=>[...e[24]||(e[24]=[p(" 이전 ",-1)])]),_:1},8,["disabled"]),t("span",ut,a(k.value+1)+" / "+a(N.value),1),r(u(f),{size:"sm",variant:"secondary",disabled:k.value>=N.value-1,onClick:e[4]||(e[4]=s=>M(k.value+1))},{default:d(()=>[...e[25]||(e[25]=[p(" 다음 ",-1)])]),_:1},8,["disabled"])])):_("",!0)])]),_:1})])]),r(u(j),{modelValue:x.value,"onUpdate:modelValue":e[6]||(e[6]=s=>x.value=s),title:"에러 상세",width:"900px"},{footer:d(()=>[r(u(f),{variant:"secondary",onClick:e[5]||(e[5]=s=>x.value=!1)},{default:d(()=>[...e[34]||(e[34]=[p("닫기",-1)])]),_:1})]),default:d(()=>[m.value?(n(),o("div",vt,[t("div",ct,[t("div",pt,[e[26]||(e[26]=t("label",null,"서버",-1)),t("span",null,a(m.value.serverName),1)]),t("div",mt,[e[27]||(e[27]=t("label",null,"심각도",-1)),r(u(q),{variant:H(m.value.severity)},{default:d(()=>[p(a(m.value.severity),1)]),_:1},8,["variant"])]),t("div",yt,[e[28]||(e[28]=t("label",null,"패턴",-1)),t("span",null,a(m.value.patternName),1)]),t("div",_t,[e[29]||(e[29]=t("label",null,"파일",-1)),t("span",ft,a(m.value.filePath),1)]),t("div",kt,[e[30]||(e[30]=t("label",null,"라인",-1)),t("span",null,a(m.value.lineNumber),1)]),t("div",gt,[e[31]||(e[31]=t("label",null,"발생시간",-1)),t("span",null,a(W(m.value.occurredAt)),1)])]),t("div",ht,[e[32]||(e[32]=t("label",null,"요약",-1)),t("div",Ct,a(m.value.summary),1)]),t("div",bt,[e[33]||(e[33]=t("label",null,"컨텍스트",-1)),t("pre",wt,a(m.value.context),1)])])):_("",!0)]),_:1},8,["modelValue"]),r(u(j),{modelValue:P.value,"onUpdate:modelValue":e[8]||(e[8]=s=>P.value=s),title:"파일 삭제",width:"400px"},{footer:d(()=>[r(u(f),{variant:"secondary",onClick:e[7]||(e[7]=s=>P.value=!1)},{default:d(()=>[...e[35]||(e[35]=[p("취소",-1)])]),_:1}),r(u(f),{variant:"danger",onClick:ae,loading:$.value},{default:d(()=>[...e[36]||(e[36]=[p("삭제",-1)])]),_:1},8,["loading"])]),default:d(()=>[t("p",null,a(S.value)+" 파일의 분석 결과를 삭제하시겠습니까?",1),e[37]||(e[37]=t("p",{class:"warning-text"},"에러 로그와 스캔 기록이 삭제되어 재분석이 가능해집니다.",-1))]),_:1},8,["modelValue"])]))}},Et=ue(xt,[["__scopeId","data-v-138c0e4a"]]);export{Et as default};
|