2 lines
7.8 KiB
JavaScript
2 lines
7.8 KiB
JavaScript
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,l as Q,m as X,v as Y,e as Z,n as h}from"./index-D2VmGkBi.js";import{D as _}from"./DataTable-G-j5cPZJ.js";import{M as I,B as F}from"./Badge-B139BweD.js";import{F as p}from"./FormInput-DHZMRclc.js";import{C as ee,p as V,B as v}from"./index-Bx7gSOle.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}},z=t=>{L.value=t,g.value=!0},q=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=>z(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:q,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"])])}}},Re=H(fe,[["__scopeId","data-v-fc6fccb5"]]);export{Re as default};
|