PageSourceSearch

https://loverhub.ai/assets/AdminOperationsPanel-BPQzdRms.js

js loverhub.ai collected 2026-10-05 15:38:44 UTC 24,499 bytes, 1 lines download raw bytes

1import{u as Se}from"./AdminShell-HOlnSu-i.js";import{A as I}from"./AdminButton-Bm40WIj1.js";import{f as Be,g as Ae,u as Oe,h as Y,i as ue,av as Ve,aw as Ne}from"./index-DESokjJk.js";import{q as se,w as te,j as ie,ax as we,G as d,A as p,B as e,K as E,C as c,D as l,U,E as C,H as K,F as M,V as X,L as ne,N as ae,u as i,r as N,f as W,y as Le}from"./vendor-icons-Bxvif_pP.js";import{u as Ue}from"./useLiveRefresh-Cj_ImZNT.js";import{T as De}from"./ThemedSelect-BVPgBJ6P.js";import Fe from"./SystemPushPreferences-PEC6_Yuz.js";/* empty css                                                                     */function F(R,u=""){return typeof R=="number"&&Number.isFinite(R)?`${R}${u}`:"暂无数据"}function le(R){return typeof R!="number"||!Number.isFinite(R)||R<0?"暂无数据":R>=1024**3?`${(R/1024**3).toFixed(2)} GiB`:`${(R/1024**2).toFixed(1)} MiB`}const Re={class:"operations-records","aria-label":"技术预警记录"},je={key:0,role:"alert"},Ie={key:1,role:"status"},Je={key:2},Te={key:0},Ge={key:1},Pe=["disabled"],Ee={key:0},Me=["onClick"],ze=se({__name:"AdminOperationsAlerts",setup(R){const u=Be(),D=Ae(),m=Oe(),S=N([]),r=N(null),x=N(null),k=N(!1),w=N(!1),q=N(""),g=N(""),_=[{value:"active",label:"指标异常"},{value:"recovered",label:"已恢复待结项"},{value:"closed",label:"已结项"},{value:"all",label:"全部记录"}],f=W({get:()=>_.some(v=>v.value===u.query.alertState)?String(u.query.alertState):"active",set:v=>{D.push({query:{...u.query,alertState:v,alertBefore:void 0,alert:void 0},hash:"#system"})}}),y=W(()=>Number(u.query.alertBefore)>0?Number(u.query.alertBefore):void 0),t=W(()=>Number(u.query.alert)>0?Number(u.query.alert):void 0);let $=0,B;function A(v){return v?new Date(v).toLocaleString("zh-CN",{hour12:!1}):"—"}function O(v){var n,s,a;return v===null?"数据不可用":((n=r.value)==null?void 0:n.rule)==="memory"?`${(v/1024**3).toFixed(2)} GiB`:((s=r.value)==null?void 0:s.rule)==="connections"?`${v} 条`:((a=r.value)==null?void 0:a.rule)==="telemetry"?v?"无法核实":"采样已核实":`${v.toFixed(1)}%`}const z={triggered:"持续异常成立",acknowledge:"管理员确认处理",recovered:"指标持续恢复",close:"已结项"};async function T(){var n;const v=++$;if(B==null||B.abort(),B=new AbortController,q.value="",k.value=!0,t.value||(r.value=null),((n=m.user)==null?void 0:n.role)!=="admin"){k.value=!1;return}try{const{data:s}=await Y.get("admin/system/alerts",{params:{state:f.value==="all"?void 0:f.value,before_id:y.value,limit:20},signal:B.signal,timeout:8e3});if(v!==$)return;if(S.value=s.items,x.value=s.next_before_id,t.value){const a=await Y.get(`admin/system/alerts/${t.value}`,{signal:B.signal,timeout:8e3});v===$&&(r.value=a.data)}}catch{v===$&&(q.value="预警记录获取失败,请重试。")}finally{v===$&&(k.value=!1)}}function H(v){g.value="",D.push({query:{...u.query,alert:v},hash:"#system"})}async function Q(v){var s;if(!r.value||!g.value.trim()||w.value)return;const n=$;w.value=!0,q.value="";try{const{data:a}=await Y.patch(`admin/system/alerts/${r.value.id}`,{action:v,expected_revision:r.value.revision,admin_note:g.value.trim()},{timeout:8e3,signal:B==null?void 0:B.signal});n===$&&(r.value=a,g.value="")}catch(a){n===$&&(q.value=((s=a.response)==null?void 0:s.status)===409?"记录已变化或尚未恢复。请重试读取状态,备注仍保留。":"处理结果尚未确认,请重试读取状态,避免重复操作。")}finally{n===$&&(w.value=!1)}}return te([f,y,t,()=>{var v;return(v=m.user)==null?void 0:v.id},()=>{var v;return(v=m.user)==null?void 0:v.role}],()=>{T()},{immediate:!0}),ie(()=>{$++,B==null||B.abort()}
1),Ue(T,{events:["loverhub:admin-updated"],accept:v=>v.topic.startsWith("admin.operations."),blocked:()=>k.value||w.value||!!g.value.trim(),enabled:()=>{var v;return((v=m.user)==null?void 0:v.role)==="admin"},failed:()=>!!q.value}),(v,n)=>{const s=we("RouterLink");return d(),p("section",Re,[e("header",null,[E(De,{modelValue:f.value,"onUpdate:modelValue":n[0]||(n[0]=a=>f.value=a),options:_,"aria-label":"预警状态"},null,8,["modelValue"])]),n[27]||(n[27]=e("p",null,"确认表示已接手;指标恢复后才可结项。通知已读不会改变预警状态。",-1)),q.value?(d(),p("p",je,[c(l(q.value)+" ",1),E(I,{disabled:k.value||w.value,onClick:T},{default:U(()=>[...n[8]||(n[8]=[c("重试",-1)])]),_:1},8,["disabled"])])):C("",!0),k.value?(d(),p("p",Ie,"正在加载…")):C("",!0),r.value?(d(),p("article",Je,[e("header",null,[e("strong",null,l(r.value.title),1),E(I,{onClick:n[1]||(n[1]=a=>H())},{default:U(()=>[...n[9]||(n[9]=[c("返回列表",-1)])]),_:1})]),e("dl",null,[e("div",null,[n[10]||(n[10]=e("dt",null,"当前状态",-1)),e("dd",null,l(r.value.state==="active"?"指标异常":r.value.state==="recovered"?"已恢复待结项":"已结项"),1)]),e("div",null,[n[11]||(n[11]=e("dt",null,"自动动作",-1)),e("dd",null,l(r.value.protects?"异常期间限制新连接与历史读取":"提醒核查,保留现有业务"),1)]),e("div",null,[n[12]||(n[12]=e("dt",null,"首次发生",-1)),e("dd",null,l(A(r.value.opened_at)),1)]),e("div",null,[n[13]||(n[13]=e("dt",null,"确认处理",-1)),e("dd",null,l(A(r.value.acknowledged_at)),1)]),e("div",null,[n[14]||(n[14]=e("dt",null,"指标恢复",-1)),e("dd",null,l(A(r.value.recovered_at)),1)]),e("div",null,[n[15]||(n[15]=e("dt",null,"触发配置版本",-1)),e("dd",null,l(r.value.policy_revision),1)]),e("div",null,[n[16]||(n[16]=e("dt",null,"最近记录值",-1)),e("dd",null,l(O(r.value.value)),1)]),e("div",null,[n[17]||(n[17]=e("dt",null,"触发阈值",-1)),e("dd",null,l(O(r.value.threshold)),1)]),e("div",null,[e("dt",null,l(r.value.rule==="memory"?"最低可用内存":"最高记录值"),1),e("dd",null,l(O(r.value.peak)),1)]),e("div",null,[n[18]||(n[18]=e("dt",null,"最近记录时间",-1)),e("dd",null,l(A(r.value.last_seen_at)),1)]),e("div",null,[n[19]||(n[19]=e("dt",null,"处理人",-1)),e("dd",null,l(r.value.acknowledged_by?`管理员 ${r.value.acknowledged_by}`:"尚未接手"),1)])]),E(s,{to:r.value.target},{default:U(()=>[...n[20]||(n[20]=[c("查看当前运行指标",-1)])]),_:1},8,["to"]),r.value.previous_id?(d(),K(I,{key:0,tone:"text",onClick:n[2]||(n[2]=a=>H(r.value.previous_id))},{default:U(()=>[...n[21]||(n[21]=[c("查看上一异常周期",-1)])]),_:1})):C("",!0),e("ol",null,[(d(!0),p(M,null,X(r.value.timeline,(a,V)=>(d(),p("li",{key:V},[c(l(A(a.at))+" · "+l(z[a.action]||a.action),1),a.note?(d(),p("p",Te,l(a.note),1)):C("",!0)]))),128))]),r.value.state!=="closed"?(d(),p("label",Ge,[n[22]||(n[22]=c("处理备注",-1)),ne(e("textarea",{"onUpdate:modelValue":n[3]||(n[3]=a=>g.value=a),maxlength:"2000",rows:"2",disabled:w.value},null,8,Pe),[[ae,g.value]])])):C("",!0),e("footer",null,[!r.value.acknowledged_at&&r.value.state!=="closed"?(d(),K(I,{key:0,disabled:w.value||!g.value.trim(),onClick:n[4]||(n[4]=a=>Q("acknowledge"))},{default:U(()=>[...n[23]||(n[23]=[c("确认处理",-1)])]),_:1},8,["disabled"])):C("",!0),r.value.state==="recovered"?(d(),K(I,{key:1,disabled:w.value||!g.value.trim(),onClick:n[5]||(n[5]=a=>Q("close"))},{default:U(()=>[...n[24]||(n[24]=[c("记录结项",-1)])]),_:1},8,["disabled"])):C("",!0)])])):k.value?C("",!0):(d(),p(M,{key:3},[!S.value.length&&!q.value?(d(),p("p",Ee,"此范围暂无预警记录。")):C("",!0),(d(!0),p(M,null,X(S.value,a=>(d(),p("button",{key:a.id,type:"button",class:"alert-row",onClick:V=>H(a.id)},[e("strong",null,l(a.title),1),e("span",null,l(a.state==="active"?a.acknowledged_at?"已接手 · 仍异常":"待确认 · 指标异常":a.state==="recovered"?"已恢复待结项":"已结项"),1),e("time",null,l(A(a.opened_at)),1)],8,Me))),128)),e("footer",null,[y.value?(d(),K(I,{key:0,onClick:n[6]||(n[6]=a=>i(D).push({query:{...i(u).query,alertBefore:void 0},hash:"#system"}))},{default:U(()=>[...n[25]||(n[25]=[c("返回最新",-1)])]),_:1})):C("",!0),E(I,{disabled:!x.value,onClick:n[7]||(n[7]=a=>i(D).push({query:{...i(u).query,alertBefore:x.value},hash:"#system"}))},{default:U(()=>[...n[26]||(n[26]=[c("更早记录",-1)])]),_:1},8,["disabled"])])],64))])}}}),He=ue(ze,[["__scopeId","data-v-32d6c7e7"]]),Ke={class:"protection-settings","aria-label":"运行保护设置"},We={key:0,role:"alert"},Qe={key:1,role:"status"},Xe={key:2,role:"status"},Ye={key:3,role:"alert"},Ze={class:"protection-fields"},he=["onUpdate:modelValue","min","max","disabled"],el={key:0},ll=["disabled"],tl={key:1,class:"protection-review"},nl=se({__name:"AdminOperationsSettings",setup(R){const u=Oe(),D=Se(),m=N(null),S=N(null),r=N(0),x=N(""),k=N(""),w=N(""),q=N(!1),g=N(!1),_=N(!1),f=N(null),y=N(!1),t=N(!1),$=N(""),B=[{key:"connection_limit",label:"全机通知连接预算",min:4,max:200},{key:"public_limit",label:"公开目录子预算",min:0,max:40},{key:"subject_limit",label:"同一登录主体上限",min:1,max:4},{key:"connection_warning",label:"连接预警阈值",min:1,max:200},{key:"connection_recovery",label:"连接恢复阈值",min:0,max:199}];let A=0,O,z=null;const T=W(()=>m.value&&B.every(s=>Number.isInteger(m.value[s.key])&&m.value[s.key]>=s.min&&m.value[s.key]<=s.max)&&m.value.public_limit<=m.value.connection_limit&&m.value.connection_recovery<m.value.connection_warning&&m.value.connection_warning<=m.value.connection_limit),H=W(()=>JSON.stringify(m.value)!==JSON.stringify(S.value));async function Q(s=!1){var V,G;if(g.value)return;const a=++A;if(O==null||O.abort(),O=new AbortController,q.value=!0,k.value="",t.value=!1,y.value=!1,((V=u.user)==null?void 0:V.role)!=="admin"){m.value=null,q.value=!1;return}try{const{data:J}=await Y.get("admin/settings",{params:{group:"operations"},signal:O.signal,timeout:8e3});if(a!==A)return;const L=J.items.find(b=>b.key==="operations.policy"),P=JSON.parse(L.value);if(r.value=P.revision,S.value=P.values,t.value=!0,(!m.value||s)&&(m.value={...P.values},_.value=!1,f.value=null),f.value){const b=(G=P.receipts)==null?void 0:G.find(j=>j.request_key===f.value.request_key);b?(f.value=null,_.value=!1,w.value=`已核实保存成功(版本 ${b.revision});当前保存版本 ${P.revision}。`):y.value=!0}}catch{a===A&&(k.value="保护设置读取失败,草稿保留,请重试。")}finally{a===A&&(q.value=!1)}}function v(){t.value&&!q.value&&T.value&&x.value.trim()&&H.value&&(_.value=!0,k.value="",w.value="")}async function n(){var a,V,G;if(((a=u.user)==null?void 0:a.role)!=="admin"||z!==u.user.id||!m.value||!T.value||!t.value||g.value||q.value||!_.value||f.value&&!y.value)return;if(f.value??(f.value={value:JSON.stringify(m.value),expected_revision:r.value,request_key:crypto.randomUUID(),admin_note:x.value.trim()}),!Ne(Number((V=u.user)==null?void 0:V.id),{draft:m.value,saved:S.value,revision:r.value,note:x.value,pending:f.value,reviewing:_.value})){$.value="操作编号无法保存在本机,尚未提交。请恢复浏览器存储后重试。";return}y.value=!1;const s=A;g.value=!0,k.value="";try{const{data:J}=await Y.put("admin/settings/operations.policy",f.value,{timeout:8e3,signal:O==null?void 0:O.signal});if(s!==A)return;const L=JSON.parse(J.value);S.value=L.values,r.value=L.revision,f.value=null,_.value=!1,x.value="",w.value=`配置已保存为版本 ${J.revision},下方运行采样会显示实际生效状态。`,D.refresh()}catch(J){if(s!==A)return;const L=(G=J.response)==null?void 0:G.status;L&&L<500?(f.value=null,_.value=!1,L===409&&(t.value=!1),k.value=L===409?"版本冲突,草稿已保留。请读取最新保存值,核对差异后重新提交。":"配置未保存,请核对安全范围和修改原因。"):k.value="保存结果暂不确定。请先查询结果,操作编号及草稿已保留。"}finally{s===A&&(g.value=!1)}}return te([()=>{var s;return(s=u.user)==null?void 0:s.id},()=>{var s;return(s=u.user)==null?void 0:s.role}],()=>{var a,V;z=null,k.value="",w.value="",$.value="";const s=((a=u.user)==null?void 0:a.role)==="admin"?Ve(u.user.id):null;m.value=(s==null?void 0:s.draft)||null,S.value=(s==null?void 0:s.saved)||null,x.value=typeof(s==null?void 0:s.note)=="str
1ing"?s.note.slice(0,2e3):"",f.value=(s==null?void 0:s.pending)||null,_.value=!!(s!=null&&s.reviewing),y.value=!1,g.value=!1,z=((V=u.user)==null?void 0:V.role)==="admin"?u.user.id:null,Q()},{immediate:!0,flush:"sync"}),te([m,S,r,x,f,_],()=>{var s;((s=u.user)==null?void 0:s.role)!=="admin"||z!==u.user.id||!m.value||($.value=Ne(u.user.id,{draft:m.value,saved:S.value,revision:r.value,note:x.value,pending:f.value,reviewing:_.value})?"":"草稿暂不能保存到本机,离开或刷新前请保留修改内容。")},{deep:!0}),ie(()=>{A++,O==null||O.abort()}),(s,a)=>{var G,J,L,P;const V=we("RouterLink");return d(),p("section",Ke,[e("header",null,[a[3]||(a[3]=e("strong",null,"运行保护设置",-1)),E(I,{disabled:q.value||g.value,onClick:a[0]||(a[0]=b=>Q())},{default:U(()=>[c(l(f.value?"查询保存结果":"读取最新保存值"),1)]),_:1},8,["disabled"])]),a[11]||(a[11]=e("p",null,"连接预算由全机共用;公开目录包含在总预算内。降低预算时阻止新增,已有连接自然回收。预算不是同时聊天人数或实测容量。",-1)),k.value?(d(),p("p",We,l(k.value),1)):C("",!0),w.value?(d(),p("p",Qe,l(w.value),1)):C("",!0),q.value?(d(),p("p",Xe,"正在读取…")):C("",!0),$.value?(d(),p("p",Ye,l($.value),1)):C("",!0),m.value?(d(),p(M,{key:4},[e("p",null,"当前保存版本 "+l(t.value?r.value:"尚未核实")+" · 采样读取版本 "+l((J=(G=i(D).operations)==null?void 0:G.configuration)!=null&&J.available?i(D).operations.configuration.revision:"尚未核实"),1),e("p",null,"全机实际保护版本 "+l((P=(L=i(D).operations)==null?void 0:L.protection)!=null&&P.available?i(D).operations.protection.revision:"尚未核实")+";采样不可用时限制新增,不自动放宽预算。",1),e("div",Ze,[(d(),p(M,null,X(B,b=>{var j;return e("label",{key:b.key},[c(l(b.label),1),ne(e("input",{"onUpdate:modelValue":Z=>m.value[b.key]=Z,type:"number",min:b.min,max:b.max,step:"1",disabled:g.value||!!f.value||_.value},null,8,he),[[ae,m.value[b.key],void 0,{number:!0}]]),e("small",null,"安全范围 "+l(b.min)+"—"+l(b.max)+" · 已保存 "+l(t.value?(j=S.value)==null?void 0:j[b.key]:"尚未核实"),1)])}),64))]),T.value?C("",!0):(d(),p("p",el,"请满足:公开子预算不超过总预算;恢复阈值小于预警阈值,预警阈值不超过总预算。")),e("label",null,[a[4]||(a[4]=c("修改原因",-1)),ne(e("textarea",{"onUpdate:modelValue":a[1]||(a[1]=b=>x.value=b),maxlength:"2000",rows:"2",disabled:g.value||!!f.value||_.value},null,8,ll),[[ae,x.value]])]),_.value?(d(),p("div",tl,[a[5]||(a[5]=e("strong",null,"请核对本次修改",-1)),(d(!0),p(M,null,X(B.filter(b=>{var j;return m.value[b.key]!==((j=S.value)==null?void 0:j[b.key])}),b=>{var j;return d(),p("p",{key:b.key},l(b.label)+":"+l((j=S.value)==null?void 0:j[b.key])+" → "+l(m.value[b.key]),1)}),128)),e("p",null,"原因:"+l(x.value),1)])):C("",!0),e("footer",null,[_.value&&!f.value?(d(),K(I,{key:0,disabled:g.value,onClick:a[2]||(a[2]=b=>_.value=!1)},{default:U(()=>[...a[6]||(a[6]=[c("返回修改",-1)])]),_:1},8,["disabled"])):C("",!0),_.value?(d(),K(I,{key:2,disabled:!t.value||q.value||g.value||!!f.value&&!y.value,onClick:n},{default:U(()=>[c(l(g.value?"正在保存":f.value?"重试原操作":"确认保存配置"),1)]),_:1},8,["disabled"])):(d(),K(I,{key:1,disabled:!t.value||!T.value||!H.value||!x.value.trim()||q.value,onClick:v},{default:U(()=>[...a[7]||(a[7]=[c("核对修改",-1)])]),_:1},8,["disabled"]))]),a[9]||(a[9]=e("p",null,"处理器 ≥85% 持续60秒、可用内存 ≤1 GiB 持续30秒、文件句柄 ≥75% 持续30秒触发保护;相关指标持续健康60秒后恢复。磁盘预警不执行文件或聊天清理。",-1)),a[10]||(a[10]=e("p",null,"提高全机200条硬上限、调整系统句柄或代理连接数须手工发布。保存页面配置不会修改服务器系统配置。",-1)),E(V,{to:"/admin?section=history&domain=operations#system"},{default:U(()=>[...a[8]||(a[8]=[c("查看运行保护变更记录",-1)])]),_:1})],64)):C("",!0)])}}}),al=ue(nl,[["__scopeId","data-v-cca15930"]]),ul={class:"operations-panel","aria-label":"系统运行概览"},sl={class:"operations-toolbar operations-tabs","aria-label":"系统运行分区"},il={class:"operations-toolbar"},ol={role:"status"},rl={key:0,class:"operations-error",role:"alert"},dl={key:1,class:"operations-note"},vl={class:"operations-strip"},pl={class:"operations-summary"},ml={class:"operations-processes"},fl={key:0},yl={key:0,class:"operations-note"},bl=se({__name:"AdminOperationsPanel",emits:["redis","disk","assets"],setup(R){const u=Se(),D=Be(),m=Ae(),S=W(()=>["alerts","protection"].includes(String(D.query.operations))?String(D.query.operations):"overview");function r(y){m.push({query:{...D.query,operations:y,alert:void 0},hash:"#system"})}let x;Le(()=>{x=u.acquire()}),ie(()=>x==null?void 0:x());const k=W(()=>{var y;return(y=u.operations)==null?void 0:y.host}),w={cpu:"处理器持续繁忙",memory:"可用内存不足",fd:"文件句柄占用较高",connections:"通知连接接近预算",disk:"磁盘占用较高",telemetry:"运行采样无法核实"},q=W(()=>{var y,t;return Object.entries(((t=(y=u.operations)==null?void 0:y.protection)==null?void 0:t.rules)||{}).filter(([,$])=>$.active)}),g=W(()=>{var t;const y=(t=u.operations)==null?void 0:t.sampled_at;
1return y?new Date(y).toLocaleString("zh-CN",{hour12:!1}):"等待首次采样"});function _(y,t){return({primary:"服务 A",blue:"服务 B",local:"本地服务"}[y.slot]??"服务进程")+` · ${t+1}`}function f(y){const t=y.rolling.metrics.stream_live_dispatch_ms;return!t||t.samples<20?"样本不足":t.p95_overflow?"> 60 秒":F(t.p95_upper_ms," ms 内")}return(y,t)=>{var $,B,A,O,z,T,H,Q,v,n,s,a,V,G,J,L,P,b,j,Z,oe,re,de,ve,pe,me,fe,ye;return d(),p("section",ul,[e("nav",sl,[(d(),p(M,null,X([{key:"overview",label:"运行概览"},{key:"alerts",label:"预警记录"},{key:"protection",label:"保护设置"}],o=>E(I,{key:o.key,tone:S.value===o.key?"primary":"secondary","aria-current":S.value===o.key?"page":void 0,onClick:h=>r(o.key)},{default:U(()=>[c(l(o.label),1)]),_:2},1032,["tone","aria-current","onClick"])),64))]),S.value==="alerts"?(d(),K(He,{key:0})):S.value==="protection"?(d(),K(al,{key:1})):(d(),p(M,{key:2},[e("header",il,[e("div",null,[t[6]||(t[6]=e("strong",null,"运行概览",-1)),e("span",ol,l(i(u).label),1)])]),i(u).error?(d(),p("p",rl,[c(l(i(u).error)+" ",1),E(I,{disabled:i(u).loading,onClick:t[0]||(t[0]=o=>i(u).refresh())},{default:U(()=>[...t[7]||(t[7]=[c("重试",-1)])]),_:1},8,["disabled"])])):i(u).stale||(($=i(u).operations)==null?void 0:$.state)==="unavailable"?(d(),p("p",dl,"部分采样不可用或已过期,暂不能据此判断整体正常。")):C("",!0),e("div",vl,[e("div",null,[t[8]||(t[8]=e("span",null,"全机通知连接",-1)),e("strong",null,l(i(F)((A=(B=i(u).operations)==null?void 0:B.admission)!=null&&A.available?i(u).operations.admission.active:null))+" / "+l(i(F)((z=(O=i(u).operations)==null?void 0:O.protection)!=null&&z.available?(T=i(u).operations.protection.policy)==null?void 0:T.connection_limit:null)),1),e("small",null,"重连保留 "+l(i(F)((Q=(H=i(u).operations)==null?void 0:H.admission)!=null&&Q.available?i(u).operations.admission.reserved:null))+" · 当前登录主体 "+l(i(F)((n=(v=i(u).operations)==null?void 0:v.admission)!=null&&n.available?i(u).operations.admission.subjects:null)),1)]),e("div",null,[t[9]||(t[9]=e("span",null,"处理器使用",-1)),e("strong",null,l(i(F)((s=k.value)==null?void 0:s.cpu_percent,"%")),1),e("small",null,l(i(F)((a=k.value)==null?void 0:a.cpu_count," 个逻辑核心")),1)]),e("div",null,[t[10]||(t[10]=e("span",null,"可用内存",-1)),e("strong",null,l(i(le)((V=k.value)==null?void 0:V.memory_available_bytes)),1),e("small",null,"总计 "+l(i(le)((G=k.value)==null?void 0:G.memory_total_bytes)),1)]),e("div",null,[t[11]||(t[11]=e("span",null,"磁盘使用",-1)),e("strong",null,l(i(F)((J=k.value)==null?void 0:J.disk_percent,"%")),1),e("button",{type:"button",onClick:t[1]||(t[1]=o=>y.$emit("disk"))},"查看文件占用")])]),(d(!0),p(M,null,X(q.value,([o,h])=>(d(),p("p",{key:o,class:"operations-note",role:"status"},[c(l(w[o]||o)+":"+l(h.protects?"已限制新增连接和历史读取,现有事务继续完成。":"请查看对应指标及预警记录。")+" ",1),e("button",{type:"button",onClick:t[2]||(t[2]=ee=>r("alerts"))},"查看处理记录")]))),128)),e("div",pl,[e("span",null,"更新于 "+l(g.value),1),e("span",null,l((P=(L=i(u).operations)==null?void 0:L.protection)!=null&&P.enabled?"保护策略已启用":"自动保护尚未启用"),1),e("button",{type:"button",onClick:t[3]||(t[3]=o=>r("alerts"))},"待处理预警 "+l(i(F)((j=(b=i(u).operations)==null?void 0:b.configuration)!=null&&j.available?i(u).operations.configuration.pending_alerts:null)),1),e("span",null,"待投递系统提醒 "+l(i(F)((oe=(Z=i(u).operations)==null?void 0:Z.configuration)!=null&&oe.available?(re=i(u).operations.configuration.push)==null?void 0:re.pending:null))+l((pe=(ve=(de=i(u).operations)==null?void 0:de.configuration)==null?void 0:ve.push)!=null&&pe.capped?"+":""),1),e("button",{type:"button",onClick:t[4]||(t[4]=o=>y.$emit("redis"))},"查看缓存与实时详情"),e("button",{type:"button",onClick:t[5]||(t[5]=o=>y.$emit("assets"))},"进入素材管理")]),e("div",ml,[(d(!0),p(M,null,X(((me=i(u).operations)==null?void 0:me.processes)??[],(o,h)=>{var ee,be,ke,ge,ce,_e,$e,Ce,xe,qe;return d(),p("article",{key:o.instance_id,class:"operations-process"},[e("header",null,[e("strong",null,l(_(o,h)),1),e("span",null,l(o.realtime.running?"通知分发运行中":"通知分发未运行"),1)]),e("dl",null,[e("div",null,[t[12]||(t[12]=e("dt",null,"本进程连接(计入全机预算)",-1)),e("dd",null,l(o.realtime.connections),1)]),e("div",null,[t[13]||(t[13]=e("dt",null,"本进程登录主体",-1)),e("dd",null,l(o.realtime.authenticated_subjects),1)]),e("div",null,[t[14]||(t[14]=e("dt",null,"文件句柄使用",-1)),e("dd",null,l(i(
1F)(o.fd_used))+" / "+l(i(F)(o.fd_limit)),1)]),e("div",null,[t[15]||(t[15]=e("dt",null,"进程内存",-1)),e("dd",null,l(i(le)(o.process_memory_bytes)),1)]),e("div",null,[t[16]||(t[16]=e("dt",null,"数据库连接占用",-1)),e("dd",null,l(i(F)(o.db_checked_out))+" / "+l(i(F)(o.db_capacity)),1)]),e("div",null,[t[17]||(t[17]=e("dt",null,"等待补发的连接",-1)),e("dd",null,l(o.realtime.slow_clients),1)]),o.chat_requests?(d(),p("div",fl,[t[18]||(t[18]=e("dt",null,"聊天请求 / 当前读取上限",-1)),e("dd",null,l(o.chat_requests.active)+" / "+l(o.chat_requests.limit)+" · 读取最多"+l(o.chat_requests.read_limit),1)])):C("",!0),e("div",null,[e("dt",null,"分发耗时 p95 · 近 "+l(o.rolling.window_minutes)+" 分钟",1),e("dd",null,l(f(o)),1)]),e("div",null,[t[19]||(t[19]=e("dt",null,"浏览器推送",-1)),e("dd",null,l(((ee=o.push)==null?void 0:ee.configuration)==="disabled"?"未启用":((be=o.push)==null?void 0:be.configuration)!=="ready"?"配置未就绪":(ke=o.push)!=null&&ke.running&&o.push.fresh?"投递检查正常":"投递状态待核实"),1)]),e("div",null,[e("dt",null,"发送成功 / 失败 · 近 "+l(o.rolling.window_minutes)+" 分钟",1),e("dd",null,l(((ge=o.rolling.metrics.chat_send_ok)==null?void 0:ge.count)||0)+" / "+l(((ce=o.rolling.metrics.chat_send_failed)==null?void 0:ce.count)||0),1)]),e("div",null,[e("dt",null,"拒绝新连接 / 慢客户端 · 近 "+l(o.rolling.window_minutes)+" 分钟",1),e("dd",null,l(((_e=o.rolling.metrics.connection_rejected)==null?void 0:_e.count)||0)+" / "+l((($e=o.rolling.metrics.slow_client)==null?void 0:$e.count)||0),1)]),e("div",null,[e("dt",null,"推送接受 / 失败 / 过期 · 近 "+l(o.rolling.window_minutes)+" 分钟",1),e("dd",null,l(((Ce=o.rolling.metrics.push_ok)==null?void 0:Ce.count)||0)+" / "+l(((xe=o.rolling.metrics.push_failed)==null?void 0:xe.count)||0)+" / "+l(((qe=o.rolling.metrics.push_expired)==null?void 0:qe.count)||0),1)])])])}),128)),(ye=(fe=i(u).operations)==null?void 0:fe.processes)!=null&&ye.length?C("",!0):(d(),p("p",yl,"正在等待运行采样。"))]),t[20]||(t[20]=e("p",{class:"operations-note"},"分发耗时统计服务取得实时事件后到写出前的时间;历史补发另计,不表示对方已经收到或已读。",-1)),t[21]||(t[21]=e("p",{class:"operations-note"},"推送接受仅表示浏览器的推送服务接受请求,不等于设备已显示。积压只保留每台设备最新的通用提醒,最多重试3次、等待5分钟;消息和预警原记录仍可查看。",-1)),E(Fe)],64))])}}}),Nl=ue(bl,[["__scopeId","data-v-12ddd726"]]);export{Nl as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.