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

2 lines
8.5 KiB
JavaScript

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