You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
6.6 KiB
1 lines
6.6 KiB
import{g as q,B as G,c as o,a as t,t as l,p as B,q as K,N as j,v as H,F as m,r as f,l as v,x as d,z as w,o as n,n as h,L as C,d as J,_ as Q}from"./AL6uUoB7.js";import{u as W}from"./BgfmgSoF.js";import{u as X}from"./D_urMdl7.js";import{h as E,S as R,P as M,R as Y,C as Z,p as tt,a as et}from"./PN667bHc.js";import"./mydnAiU4.js";const st={class:"panel p-4 mb-5"},at={class:"flex flex-wrap items-center gap-3"},lt={class:"flex items-center gap-2 mr-2"},ot={class:"text-xs text-slate-400"},nt={class:"ml-auto flex items-center gap-2"},rt=["disabled"],it=["disabled"],ct={class:"grid grid-cols-2 md:grid-cols-5 gap-3 mt-4"},ut=["onClick"],dt={class:"sum-lbl"},pt={class:"panel"},vt={class:"panel-head"},_t={class:"text-xs text-slate-400"},mt={class:"overflow-x-auto"},ft={class:"table w-full"},bt={key:0,class:"streak"},kt={class:"font-semibold text-slate-700"},xt={class:"text-xs text-slate-400 font-mono"},yt={key:0},gt={class:"chip chip-scope"},wt={key:0,class:"chip chip-region"},ht={key:1,class:"chip"},Ct={key:0,class:"text-xs text-slate-300"},$t=["title"],Lt={class:"reason-cell"},Tt={key:0,class:"issue-list"},At={class:"text-right text-xs text-slate-400"},St={class:"text-xs text-slate-400"},Bt=["disabled","onClick"],Et={key:0},Rt={colspan:"9",class:"text-center text-slate-400 py-8"},Mt=q({__name:"svcinspect",setup(Nt){const{webApi:b}=W(),p=X(),k=d([]),u=d({total:0,ok:0,warn:0,error:0,skip:0}),$=d(0),i=d(!1),c=d(""),x=d(""),N=w(()=>E($.value)),V=w(()=>[{key:"error",label:"不可用",value:u.value.error,ico:"🚨",color:"#be123c",bg:"#ffe4e6"},{key:"warn",label:"有隐患",value:u.value.warn,ico:"⚠️",color:"#b45309",bg:"#fef3c7"},{key:"ok",label:"正常",value:u.value.ok,ico:"✅",color:"#047857",bg:"#d1fae5"},{key:"skip",label:"已停用",value:u.value.skip,ico:"⏸️",color:"#64748b",bg:"#f1f5f9"},{key:"",label:"巡检配置总数",value:u.value.total,ico:"📋",color:"#334155",bg:"#e2e8f0"}]),y=w(()=>{const s=x.value.trim().toLowerCase();return k.value.filter(a=>c.value&&a.status!==c.value?!1:s?`${a.name} ${a.svc_id} ${a.provider} ${a.app_name}`.toLowerCase().includes(s):!0)});function O(s){return`${s.app_name}/${s.svc_id}/${s.region}`}function g(s){return R[s]||R.skip}function L(s){return M[s]||M.none}function z(s){return Y[s]||`区域 ${s}`}function D(s){return Z[s]||`类别 ${s}`}function T(s){return tt(s)}function A(s){return et(s)}function I(s){return E(s)}function S(s){const a=(s.config_issues||[]).map(r=>r.replace("[致命] ","")),e=A(s);return a.filter(r=>r!==e&&!e.includes(r))}async function _(){try{const s=await b("getsvchealth",{});k.value=s.items||[],u.value=s.summary||{total:0,ok:0,warn:0,error:0,skip:0},$.value=s.last_run||0}catch(s){p.error(s?.message||"加载巡检结果失败")}}async function U(){i.value=!0;try{const s=await b("runsvcinspect",{});p.success(`巡检完成,已检查 ${s.count} 份配置`),await _()}catch(s){p.error(s?.message||"巡检失败")}finally{i.value=!1}}async function F(s){i.value=!0;try{await b("runsvcinspect",{app_name:s.app_name,svc_id:s.svc_id}),p.success(`已重新检测:${s.name||s.svc_id}`),await _()}catch(a){p.error(a?.message||"检测失败")}finally{i.value=!1}}return G(_),(s,a)=>(n(),o("div",null,[t("div",st,[t("div",at,[t("div",lt,[a[2]||(a[2]=t("h2",{class:"text-base font-bold text-slate-800"},"服务巡检",-1)),t("span",ot," 定时校验第三方服务配置并探测可用性 · 最近巡检 "+l(N.value),1)]),t("div",nt,[B(t("select",{"onUpdate:modelValue":a[0]||(a[0]=e=>c.value=e),class:"select select-bordered select-sm w-32"},[...a[3]||(a[3]=[j('<option value="" data-v-a9764f3a>全部状态</option><option value="error" data-v-a9764f3a>仅不可用</option><option value="warn" data-v-a9764f3a>仅有隐患</option><option value="ok" data-v-a9764f3a>仅正常</option><option value="skip" data-v-a9764f3a>仅已停用</option>',5)])],512),[[K,c.value]]),B(t("input",{"onUpdate:modelValue":a[1]||(a[1]=e=>x.value=e),class:"input input-bordered input-sm w-44",placeholder:"搜索服务名/ID/服务商"},null,512),[[H,x.value]]),t("button",{class:"btn btn-sm",disabled:i.value,onClick:_},"刷新",8,rt),t("button",{class:"btn btn-primary btn-sm text-white",disabled:i.value,onClick:U},l(i.value?"巡检中…":"立即巡检"),9,it)])]),t("div",ct,[(n(!0),o(m,null,f(V.value,e=>(n(),o("div",{key:e.key,class:h(["sum-card",{on:c.value===e.key}]),onClick:r=>c.value=c.value===e.key?"":e.key},[t("span",{class:"sum-ico",style:C({background:e.bg,color:e.color})},l(e.ico),5),t("div",null,[t("div",dt,l(e.label),1),t("div",{class:"sum-val",style:C({color:e.color})},l(e.value),5)])],10,ut))),128))])]),t("div",pt,[t("div",vt,[a[4]||(a[4]=t("span",{class:"font-semibold text-slate-700 text-sm"},"巡检明细",-1)),t("span",_t,"共 "+l(y.value.length)+" 份配置",1),a[5]||(a[5]=t("span",{class:"ml-auto text-xs text-slate-400"}," 一个服务在不同区域可能配着不同凭据,故按「服务 × 区域」分别巡检 ",-1))]),t("div",mt,[t("table",ft,[a[6]||(a[6]=t("thead",null,[t("tr",null,[t("th",null,"状态"),t("th",null,"服务"),t("th",null,"作用域 / 区域"),t("th",null,"类别"),t("th",null,"探测方式"),t("th",null,"巡检结论"),t("th",{class:"text-right"},"耗时"),t("th",null,"检查时间"),t("th")])],-1)),t("tbody",null,[(n(!0),o(m,null,f(y.value,e=>(n(),o("tr",{key:O(e)},[t("td",null,[t("span",{class:"st-badge",style:C({background:g(e.status).bg,color:g(e.status).color})},l(g(e.status).label),5),e.fail_streak>1?(n(),o("div",bt,"连续 "+l(e.fail_streak)+" 次",1)):v("",!0)]),t("td",null,[t("div",kt,l(e.name||e.svc_id),1),t("div",xt,[J(l(e.svc_id),1),e.provider?(n(),o("span",yt," · "+l(e.provider),1)):v("",!0)])]),t("td",null,[t("span",gt,l(e.app_name||"全局默认"),1),e.region?(n(),o("span",wt,l(z(e.region)),1)):(n(),o("span",ht,"默认配置"))]),t("td",null,[(n(!0),o(m,null,f(T(e.categories),r=>(n(),o("span",{key:r,class:"chip"},l(D(r)),1))),128)),T(e.categories).length?v("",!0):(n(),o("span",Ct,"—"))]),t("td",null,[t("span",{class:h(["chip","pk-"+e.probe_kind]),title:L(e.probe_kind).hint},l(L(e.probe_kind).label),11,$t)]),t("td",Lt,[t("div",{class:h(e.status==="error"?"text-rose-600":"text-slate-500")},l(A(e)||"—"),3),S(e).length?(n(),o("div",Tt,[(n(!0),o(m,null,f(S(e),(r,P)=>(n(),o("div",{key:P,class:"issue"},"· "+l(r),1))),128))])):v("",!0)]),t("td",At,l(e.probe_kind==="none"?"—":e.latency_ms+" ms"),1),t("td",St,l(I(e.checked_at)),1),t("td",null,[t("button",{class:"btn btn-xs",disabled:i.value,onClick:r=>F(e)},"重测",8,Bt)])]))),128)),y.value.length?v("",!0):(n(),o("tr",Et,[t("td",Rt,l(k.value.length?"当前筛选下没有匹配的记录":"暂无巡检记录,点击右上角「立即巡检」执行一次"),1)]))])])])])]))}}),Ut=Q(Mt,[["__scopeId","data-v-a9764f3a"]]);export{Ut as default};
|
|
|