1import{i as $n,t as Rn}from"./react-BISKfsmD.js";import{t as An}from"./jsx-runtime-B6_b_cSe.js";import{a as en,o as rt}from"./I18nProvider-D1hyckjW.js";import{g as Dn}from"./ui-Brvf6jwR.js";var i=$n(Rn(),1),e=An(),pe="'IBM Plex Mono', ui-monospace, monospace",je="#a49d8d",q="#6f6a5c",dt="var(--ad-hair)",ct="var(--ad-hair-soft)",Wn="#0b0a08",Qe="#6fbf73",Cn="#e9a94a",be="#e58278",Kt="#e9a94a";function ve(t){if(!t)return"â";const n=new Date(t);if(Number.isNaN(n.getTime()))return"â";const s=d=>String(d).padStart(2,"0");return`${s(n.getHours())}:${s(n.getMinutes())}:${s(n.getSeconds())}`}function et(t){if(!t)return"";const n=new Date(t);return Number.isNaN(n.getTime())?"":n.toLocaleDateString("en-GB",{day:"2-digit",month:"short",year:"numeric"})}function Ln(t){const n=Math.max(0,Math.round(t/1e3)),s=Math.floor(n/3600),d=Math.floor(n%3600/60),h=n%60;return s>0?`${s}h ${d}m`:d>0?`${d}m ${h}s`:`${h}s`}function le(t){if(t==null||t==="")return"â";const n=Number(t);return Number.isFinite(n)?Number.isInteger(n)?String(n):n.toFixed(2):String(t)}function ue(t,n){return String(t?.[n]??"").trim()}function Tn(t,n){return t==="arm"?n?.startsWith("force")?be:Kt:t==="mode"?Kt:t==="statustext"?je:q}function Nn(t,n){return{mode:n("admin.monitor.flightlog.cat.mode","MODE"),arm:n("admin.monitor.flightlog.cat.arm","ARM"),servo:n("admin.monitor.flightlog.cat.servo","SERVO"),goto:n("admin.monitor.flightlog.cat.goto","GOTO"),param:n("admin.monitor.flightlog.cat.param","PARAM"),assembler:n("admin.monitor.flightlog.cat.service","SERVICE"),statustext:n("admin.monitor.flightlog.cat.board","BOARD"),ack:n("admin.monitor.flightlog.cat.ack","ACK")}[t]||t.toUpperCase()}function In(t,n){const s=t.params;switch(t.category){case"mode":return`${n("admin.monitor.flightlog.mode","Mode")} â ${ue(s,"mode")||"?"}`;case"arm":return{arm:n("admin.monitor.flightlog.arm","ARM"),force_arm:n("admin.monitor.flightlog.forceArm","FORCE ARM"),disarm:n("admin.monitor.flightlog.disarm","DISARM"),force_disarm:n("admin.monitor.flightlog.forceDisarm","FORCE DISARM")}[t.action||""]||(t.action||"ARM").toUpperCase();case"servo":return`${n("admin.monitor.flightlog.servo","Servo")} ${le(s?.servo)} â ${le(s?.pwm)}`;case"goto":return`${n("admin.monitor.flightlog.goto","Goto")} ${le(s?.lat)}, ${le(s?.lon)} · ${le(s?.alt)}m`;case"param":return`${ue(s,"name")||"?"} = ${le(s?.value)}`;case"assembler":return`${n("admin.monitor.flightlog.service","Service")}: ${ue(s,"kind")||t.action||"?"}`;default:return t.action||t.category}}function Bn(t,n){return{MAV_RESULT_ACCEPTED:n("admin.monitor.flightlog.result.accepted","accepted"),MAV_RESULT_IN_PROGRESS:n("admin.monitor.flightlog.result.inProgress","in progress"),MAV_RESULT_TEMPORARILY_REJECTED:n("admin.monitor.flightlog.result.tempRejected","temporarily rejected"),MAV_RESULT_DENIED:n("admin.monitor.flightlog.result.denied","denied"),MAV_RESULT_UNSUPPORTED:n("admin.monitor.flightlog.result.unsupported","unsupported"),MAV_RESULT_FAILED:n("admin.monitor.flightlog.result.failed","failed"),MAV_RESULT_CANCELLED:n("admin.monitor.flightlog.result.cancelled","cancelled")}[t||""]||(t||"").replace("MAV_RESULT_","").toLowerCase()||"â"}function Xt(t,n){if(t.direction==="ack"){const s=t.ok!==!1&&(t.result?t.result==="MAV_RESULT_ACCEPTED"||t.result==="MAV_RESULT_IN_PROGRESS":!0);return{text:`${s?"â":"â"} ${n("admin.monitor.flightlog.board","Board")}: ${Bn(t.result,n)}`,color:s?Qe:be}}if(t.category==="mode"){const s=t.params?.armed===!0;return{text:`â ${n("admin.monitor.flightlog.applied","Board applied")}: ${ue(t.params,"mode")||"?"}${s?" · ARM":""}`,color:Qe}}if(t.category==="param")return{text:`â ${n("admin.monitor.flightlog.confirmed","Board confirmed")}: ${ue(t.params,"name")} = ${le(t.params?.value)}`,color:Qe};if(t.category==="statustext"){const s=Number(t.params?.severity??6),d=s<=3?be:s<=4?Cn:je;return{text:`â${ue(t.params,"text")}â`,color:d}}return{text:t.action||t.category,color:je}}var qt={height:36,padding:"0 10px",background:Wn,border:`1px solid ${dt}`,borderRadius:9,color:"var(--ad-text)",fontFamily:pe,fontSize:13,outline:"none",boxSizing:"border-box"},Jt={height:36,padding:"0 12px",background:"transparent",color:"var(--ad-text-2)",border:`1px solid ${dt}`,borderRadius:9,fontFamily:pe,fontSize:12,fontWeight:600,cursor:"pointer",whiteSpace:"nowrap"};function On(){const{t}=en(),n=rt(f=>f.token),[s,d]=(0,i.useState)(""),[h,c]=(0,i.useState)(""),[u,p]=(0,i.useState)([]),[m,l]=(0,i.useState)([]),[g,o]=(0,i.useState)([]),[W,C]=(0,i.useState)([]),[A,V]=(0,i.useState)(!1),[P,b]=(0,i.useState)(""),k=(0,i.useRef)(!1),I=(0,i.useCallback)(async()=>
1{if(n)try{const f=await(await fetch("/api/admin/monitor/flight-logs/filters",{headers:{Authorization:`Bearer ${n}`}})).json().catch(()=>({}));f.ok&&(o(Array.isArray(f.operators)?f.operators:[]),C(Array.isArray(f.drones)?f.drones:[]))}catch{}},[n]),B=(0,i.useCallback)(async()=>{if(!(!n||k.current)){k.current=!0,V(!0),b("");try{const f=new URLSearchParams;s&&f.set("operator",s),h&&f.set("drone_id",h);const $=await fetch(`/api/admin/monitor/flight-logs?${f.toString()}`,{headers:{Authorization:`Bearer ${n}`}}),O=await $.json().catch(()=>({}));if(!$.ok||!O.ok){b(String(O?.error||`Load failed (${$.status})`));return}p(Array.isArray(O.blocks)?O.blocks:[]),l(Array.isArray(O.rc_sessions)?O.rc_sessions:[])}catch(f){b(`Flight logs failed: ${f}`)}finally{k.current=!1,V(!1)}}},[n,s,h]);(0,i.useEffect)(()=>{I()},[I]),(0,i.useEffect)(()=>{B()},[B]);const M=(0,i.useMemo)(()=>{const f=[];for(const $ of u)f.push({kind:"block",ts:Date.parse($.ts)||0,block:$});for(const $ of m)f.push({kind:"rc",ts:Date.parse($.start)||0,session:$});return f.sort(($,O)=>O.ts-$.ts)},[u,m]),te=(0,i.useMemo)(()=>m.reduce((f,$)=>f+($.sample_count||0),0),[m]);return(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",minHeight:0,flex:1,gap:12},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[(0,e.jsxs)("select",{value:s,onChange:f=>d(f.target.value),style:{...qt,minWidth:170},children:[(0,e.jsx)("option",{value:"",children:t("admin.monitor.flightlog.allPilots","All pilots")}),g.map(f=>(0,e.jsx)("option",{value:f,children:f},f))]}),(0,e.jsxs)("select",{value:h,onChange:f=>c(f.target.value),style:{...qt,minWidth:170},children:[(0,e.jsx)("option",{value:"",children:t("admin.monitor.flightlog.allBoards","All boards")}),W.map(f=>(0,e.jsx)("option",{value:f,children:f},f))]}),(0,e.jsxs)("button",{type:"button",style:Jt,onClick:()=>{B(),I()},children:[t("admin.monitor.flightlog.refresh","Refresh"),A?" · â¦":""]}),(s||h)&&(0,e.jsx)("button",{type:"button",style:{...Jt,color:je},onClick:()=>{d(""),c("")},children:t("admin.monitor.flightlog.clear","Clear")}),(0,e.jsx)("div",{style:{flex:1}}),(0,e.jsxs)("span",{style:{color:q,fontSize:11.5,fontFamily:pe},children:[u.length," ",t("admin.monitor.flightlog.events","events")," · ",m.length," ",t("admin.monitor.flightlog.rcSessions","RC sessions"),te>0?` · ${te.toLocaleString("en-US")} ${t("admin.monitor.flightlog.samples","samples")}`:""]})]}),P&&(0,e.jsx)("div",{style:{color:be,fontSize:12,letterSpacing:.3},children:P}),(0,e.jsx)("div",{className:"hud-scroll",style:{flex:1,minHeight:0,overflow:"auto",border:`1px solid ${dt}`,borderRadius:12,background:"var(--ad-surface)"},children:M.length===0?(0,e.jsx)("div",{style:{padding:"30px 18px",textAlign:"center",color:"var(--ad-dim)",fontSize:12.5},children:A?"â¦":t("admin.monitor.flightlog.empty","No flight logs for this filter yet.")}):M.map((f,$)=>{const O=M[$-1];return(0,e.jsxs)("div",{children:[($===0||et(zn(O))!==et(new Date(f.ts).toISOString()))&&(0,e.jsx)("div",{style:{padding:"8px 14px 4px",color:q,fontSize:10.5,letterSpacing:1,textTransform:"uppercase",fontFamily:pe,borderTop:$===0?"none":`1px solid ${ct}`},children:et(new Date(f.ts).toISOString())}),f.kind==="rc"?(0,e.jsx)(Mn,{session:f.session,t}):(0,e.jsx)(Fn,{block:f.block,t})]},f.kind==="block"?f.block.key:`rc-${f.session.start}-${f.session.drone_id}`)})})]})}function zn(t){return t?new Date(t.ts).toISOString():""}function Mn({session:t,t:n}){return(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"9px 14px",borderTop:`1px solid ${ct}`,fontFamily:pe,fontSize:12.5},children:[(0,e.jsx)("span",{style:{color:q,minWidth:62},children:ve(t.start)}),(0,e.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:6,color:"#8fb3d9",fontWeight:600,minWidth:96},children:[(0,e.jsx)("span",{"aria-hidden":!0,style:{display:"inline-block",width:7,height:7,borderRadius:2,background:"#8fb3d9"}}),n("admin.monitor.flightlog.rcCapture","RC capture")]}),(0,e.jsxs)("span",{style:{color:"var(--ad-text-2)"},children:[ve(t.start),"â",ve(t.end)," · ",Ln(t.duration_ms)]}),(0,e.jsxs)("span",{style:{color:je}
1,children:[t.sample_count.toLocaleString("en-US")," ",n("admin.monitor.flightlog.samples","samples")]}),(0,e.jsx)("div",{style:{flex:1}}),(0,e.jsx)("span",{style:{color:q},children:t.drone_id})]})}function Fn({block:t,t:n}){const s=t.command,d=Tn(t.category,s?.action),h=s?In(s,n):Xt(t.responses[0],n).text,c=s?.ok===!1;return(0,e.jsxs)("div",{style:{padding:"10px 14px",borderTop:`1px solid ${ct}`,fontFamily:pe},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,e.jsx)("span",{style:{color:q,fontSize:12.5,minWidth:62},children:ve(t.ts)}),(0,e.jsx)("span",{style:{fontSize:10,fontWeight:700,letterSpacing:.6,color:d,border:`1px solid ${d}55`,background:`${d}18`,borderRadius:5,padding:"2px 6px",minWidth:58,textAlign:"center"},children:Nn(t.category,n)}),(0,e.jsx)("span",{style:{color:c?be:"var(--ad-text)",fontSize:13,fontWeight:600},children:s?h:`${n("admin.monitor.flightlog.boardEvent","Board")}: ${h}`}),(0,e.jsx)("div",{style:{flex:1}}),(0,e.jsxs)("span",{style:{color:q,fontSize:11.5},children:[t.operator_username||"â"," · ",t.drone_id]})]}),s&&t.responses.length>0&&(0,e.jsx)("div",{style:{marginLeft:72,marginTop:5,display:"flex",flexDirection:"column",gap:3},children:t.responses.map(u=>{const p=Xt(u,n);return(0,e.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:8,fontSize:12},children:[(0,e.jsx)("span",{style:{color:q,minWidth:54},children:ve(u.ts)}),(0,e.jsx)("span",{style:{color:p.color},children:p.text})]},u.id||`${u.ts}-${u.direction}`)})}),s&&s.direction==="command"&&t.responses.length===0&&(0,e.jsx)("div",{style:{marginLeft:72,marginTop:4,fontSize:11.5,color:q},children:c?`â ${n("admin.monitor.flightlog.rejectedLocally","rejected before send")}${s.reason?`: ${s.reason}`:""}`:n("admin.monitor.flightlog.noResponse","no board response recorded")})]})}var xe="'IBM Plex Mono', ui-monospace, monospace",T="#e9a94a",w="#a49d8d",y="#6f6a5c",J="#6f6a5c",Q="var(--ad-hair)",tn="rgba(255,255,255,0.1)",nn="#0b0a08",Pn="var(--ad-hair-soft)",N="#6fbf73",R="#e9a94a",_="#e58278",Te="#6f6a5c";function ee(t){if(t==null)return"unknown";if(t<1)return"<1s";if(t<60)return`${Math.round(t)}s`;const n=Math.floor(t/60),s=Math.round(t%60);return n<60?`${n}m ${s}s`:`${Math.floor(n/60)}h ${n%60}m`}function we(t){if(!t)return null;const n=Date.parse(t);return Number.isNaN(n)?null:Math.max(0,(Date.now()-n)/1e3)}function U(t){if(!t)return"â";const n=new Date(t);return Number.isNaN(n.getTime())?"â":n.toLocaleString("en-GB",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"})}function We(t){const n=Number(t||0);if(!Number.isFinite(n)||n<=0)return"0 B";const s=["B","KB","MB","GB","TB"];let d=n,h=0;for(;d>=1024&&h<s.length-1;)d/=1024,h+=1;return`${d>=10||h===0?d.toFixed(0):d.toFixed(1)} ${s[h]}`}function ot(t){if(!t)return"â";const n=new Date(t);if(Number.isNaN(n.getTime()))return"â";const s=d=>String(d).padStart(2,"0");return`${s(n.getHours())}:${s(n.getMinutes())}:${s(n.getSeconds())}`}function Un(t,n,s){return t==null||n==null?null:Math.max(0,t)+Math.max(0,(s-n)/1e3)}function it(t,n){return Un(t,n,Date.now())}function lt(t){return t==null?_:t<=20?N:t<=60?R:_}function Vn(t){return lt(t)!==_}function at(t){return t==="disaster"||t==="high"?_:t==="average"||t==="warning"?R:y}function Hn(t){return t==="up"?N:t==="down"?_:R}function Gn(t){return t==="ok"?N:t==="stale"?R:t==="missing"?_:Te}function Zn(t){return t.status==="missing"&&t.age==null?"no signal":t.status==="ok"?"live":t.status}function ae(t){return t==="error"?_:t==="warning"?R:N}function Kn(t){const n=String(t||"").replaceAll("_"," ").trim();return n==="operator connected no board signal"?"NO BOARD SIGNAL":n}function Xn(t){const n=t.network,s=!!(n&&n.resolved_ip&&!n.resolve_error),d={status:t.wg?t.wg.status:"missing",age:t.wg?.handshake_age_seconds??null,expected:!0,last_seen_at:null},h=t.signals?.telemetry??{status:"idle",age:t.ages?.telemetry??null,expected:t.telemetry_expected,last_seen_at:null},c=t.signals?.video??{status:"idle",age:t.ages?.video??null,expected:t.video_expected,last_seen_at:null},u=String(t.operator_username||"").trim(),p=!!(t.signals?.operator?.connected||u&&t.active_session_id),m=t.signals?.operator?.age??we(t.flight_connected_at),l=t.state||"",g=!t.active_session_id&&!p;let o,W,C;return l==="online"&&g?(o="standby",W=T,C="standby"):l==="online"?(o="online",W=N,C="online"):l==="offline"||l===""?(o="offline",W=Te,C="offline"):l==="connection_lost"?(o="connection lost",W=_,C="offline"):(o=l.replaceAll("_"," "),W=R,C="signalIssue"),{drone_id:t.drone_id,name:t.name||t.drone_id,warehouse:t.warehouse||"",wg:d,tel:h,vid:c,stateLabel:o,stateColor:W,reason:Kn(t.reason),bucket:C,operatorConnected:p,operator:u,operatorAge:m,sessionId:t.active_session_id||"",networkText:n?.host?n.resolved_ip?`${n.host} -> ${n.resolved_ip}`:`${n.host} -> unresolved`:"",networkResolved:s,lastSeenAt:t.last_seen_at,lastChangeAt:t.last_change_at,lastEvent:t.last_event||null,armed:null,mode:null}}var qn={display:"flex",flexDirection:"column",gap:14,fontFamily:xe,color:"var(--ad-text)",minHeight:0,flex:1},Se={display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},S={fontSize:10.5,letterSpacing:1,textTransform:"uppercase",color:J,textAlign:"left",padding:"11px 12px",borderBottom:`1px solid ${Q}`,fontWeight:600,position:"sticky",top:0,background:"var(--ad-surface)",whiteSpace:"nowrap"},Y={color:"var(--ad-text)",fontSize:13,fontWeight:500,letterSpacing:0,borderBottom:`1px solid ${Pn}`},v={padding:"11px 12px",verticalAlign:"top"},z={color:y,marginTop:3,fontWeight:400},F={color:w,marginTop:3,fontWeight:400},tt={height:38,padding:"0 12px",background:nn,border:`1px solid ${Q}`,borderRadius:9,color:"var(--ad-text)",fontFamily:xe,fontSize:13,fontWeight:400,letterSpacing:0,outline:"none",boxSizing:"border-box"},Ce={height:38,padding:"0 14px",background:"transparent",color:"var(--ad-text-2)",border:`1px solid ${Q}`,borderRadius:9,fontFamily:xe,fontSize:12,fontWeight:600,letterSpacing:.3,cursor:"pointer",whiteSpace:"nowrap"},Jn={flex:1,minHeight:0,overflow:"auto",border:`1px solid ${Q}`,borderRadius:12,background:"var(--ad-surface)"},K={padding:"28px 18px",textAlign:"center",color:"var(--ad-dim)",letterSpacing:0,fontSize:12.5},_e={display:"inline-flex",alignItems:"center",fontSize:11,fontWeight:600,letterSpacing:.3,color:"var(--ad-gold-hi)",border:"1px solid var(--ad-gold-border)",background:"rgba(233,169,74,0.1)",borderRadius:999,padding:"5px 10px"},oe={color:y,fontSize:11,fontWeight:600,marginLeft:8};function nt({label:t,signal:n}){const s=Gn(n.status);return(0,e.jsxs)("span",{title:Zn(n),style:{display:"inline-flex",alignItems:"center",gap:5,padding:"5px 9px",border:`1px solid ${s}55`,color:s,background:n.status==="idle"?"rgba(255,176,0,0.03)":`${s}16`,textTransform:"uppercase",whiteSpace:"nowrap",fontSize:12},children:[(0,e.jsx)("strong",{children:t}),n.age!=null&&(0,e.jsx)("span",{style:{color:w,fontWeight:500},children:ee(n.age)})]})}function D({n:t,label:n,color:s,accent:d}){return(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:3,alignItems:"center",textAlign:"center",minWidth:66,whiteSpace:"nowrap",padding:"5px 15px",borderRadius:10,background:d?"linear-gradient(150deg, rgba(233,169,74,.22), rgba(233,169,74,.05) 60%, rgba(0,0,0,.10))":"linear-gradient(150deg, rgba(233,169,74,.10), rgba(233,169,74,.02) 55%, rgba(0,0,0,.12))",border:`1px solid ${d?"rgba(233,169,74,.30)":"var(--ad-hair)"}`,boxShadow:"inset 0 1px 0 rgba(255,255,255,.04)"},children:[(0,e.jsx)("span",{style:{font:"600 8.5px 'IBM Plex Mono', monospace",letterSpacing:1,color:"var(--ad-faint)",textTransform:"uppercase"},children:n}),(0,e.jsx)("span",{style:{font:"600 17px 'IBM Plex Sans', sans-serif",lineHeight:1,color:s||"var(--ad-text)"},children:t})]})}var Yt=["core","client","wg-leaser","ansible"],Qt={critical:0,high:1,medium:2};function Yn(t){return t==="ok"?N:t==="degraded"?R:t==="down"?_:Te}function Qn({data:t,loading:n,query:s,t:d}){if(!t)return(0,e.jsx)("div",{style:{color:w,fontSize:12,padding:20},children:n?"â¦":d("admin.monitor.infra.empty","No data")});if(!t.enabled)return(0,e.jsx)("div",{style:{color:R,border:`1px solid ${R}55`,background:`${R}12`,padding:16,fontSize:13,lineHeight:1.6},children:d("admin.monitor.infra.disabled","Infra monitor is disabled. Enable it in System Settings â Configuration â Monitoring (or set MONITOR_ENABLED=true).")});
1const h=[...t.nodes].sort((b,k)=>{const I=Yt.indexOf(b.node_id),B=Yt.indexOf(k.node_id);return(I===-1?99:I)-(B===-1?99:B)||b.node_id.localeCompare(k.node_id)}),c=t.self.leader||null,u=new Map,p=new Set;for(const b of t.nodes)for(const k of b.targets||[])p.add(k.target),k.criticality&&!u.has(k.target)&&u.set(k.target,k.criticality);let m=[...p].sort((b,k)=>(Qt[u.get(b)||"medium"]??3)-(Qt[u.get(k)||"medium"]??3)||b.localeCompare(k));const l=s.trim().toLowerCase();l&&(m=m.filter(b=>b.toLowerCase().includes(l)));const g=new Map;for(const b of t.self.targets||[])g.set(b.target,b);const o={ok:0,degraded:0,down:0};for(const b of p){const k=g.get(b)?.consensus||g.get(b)?.status;k==="down"?o.down++:k==="degraded"?o.degraded++:k==="ok"&&o.ok++}const W={display:"grid",gridTemplateColumns:`minmax(200px, 1.4fr) repeat(${h.length}, minmax(150px, 1fr)) minmax(170px, 1fr)`,fontSize:12},C={padding:"11px 16px",color:J,fontSize:10.5,fontWeight:600,letterSpacing:1,textTransform:"uppercase",borderBottom:`1px solid ${Q}`,position:"sticky",top:0,background:"var(--ad-surface)",whiteSpace:"nowrap",zIndex:1},A={padding:"10px 16px",borderBottom:"1px solid var(--ad-hair-soft)",display:"flex",alignItems:"center",justifyContent:"center",gap:7,whiteSpace:"nowrap"},V=(b,k)=>{const I=Yn(b);return(0,e.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:6,padding:"4px 11px",borderRadius:999,font:"600 11px 'IBM Plex Mono', monospace",letterSpacing:.4,textTransform:"uppercase",color:I,background:`${I}14`,border:`1px solid ${I}38`},children:[(0,e.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:I,flex:"none"}}),b||"â",k&&(0,e.jsxs)("span",{style:{color:w,fontSize:9.5,letterSpacing:0},children:["(",k,")"]})]})},P=(b,k,I)=>(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:4,alignItems:"center",textAlign:"center",minWidth:82,whiteSpace:"nowrap",padding:"9px 20px",borderRadius:12,background:"linear-gradient(150deg, rgba(233,169,74,.10), rgba(233,169,74,.02) 55%, rgba(0,0,0,.12))",border:"1px solid var(--ad-hair)",boxShadow:"inset 0 1px 0 rgba(255,255,255,.04)"},children:[(0,e.jsx)("span",{style:{font:"600 9px 'IBM Plex Mono', monospace",letterSpacing:1,color:"var(--ad-faint)",textTransform:"uppercase"},children:b}),(0,e.jsx)("span",{style:{font:"600 19px 'IBM Plex Sans', sans-serif",lineHeight:1,color:I||"var(--ad-text)"},children:k})]});return(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",flex:1,minHeight:0},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",padding:"2px 2px 16px",flex:"none"},children:[P(d("admin.monitor.infra.kpi.nodes","nodes alive"),t.self.alive_nodes?.length??h.length,N),P(d("admin.monitor.infra.kpi.leader","leader"),c||"â","var(--ad-gold-hi)"),P(d("admin.monitor.infra.kpi.ok","ok"),o.ok,N),P(d("admin.monitor.infra.kpi.degraded","degraded"),o.degraded,o.degraded>0?R:void 0),P(d("admin.monitor.infra.kpi.down","down"),o.down,o.down>0?_:void 0)]}),(0,e.jsx)("div",{className:"mscroll",style:{flex:1,minHeight:0,overflow:"auto",border:`1px solid ${Q}`,borderRadius:12,background:"var(--ad-surface)"},children:(0,e.jsxs)("div",{style:W,children:[(0,e.jsx)("div",{style:{...C,textAlign:"left"},children:d("admin.monitor.infra.col.target","Target")}),h.map(b=>(0,e.jsxs)("div",{style:{...C,textAlign:"center",color:b.node_id===c?T:J},children:[b.node_id===c?"â
":"",b.node_id]},b.node_id)),(0,e.jsx)("div",{style:{...C,textAlign:"center"},children:d("admin.monitor.infra.col.consensus","Consensus")}),m.map(b=>{const k=g.get(b);return(0,e.jsxs)(i.Fragment,{children:[(0,e.jsxs)("div",{style:{...A,justifyContent:"flex-start",flexDirection:"column",alignItems:"flex-start",gap:3},children:[(0,e.jsx)("span",{style:{color:"var(--ad-text)",fontWeight:600,fontSize:13},children:b}),(0,e.jsx)("span",{style:{color:w,fontSize:9.5,textTransform:"uppercase",letterSpacing:.8},children:u.get(b)||""})]}),h.map(I=>{const B=(I.targets||[]).find(M=>M.target===b);return(0,e.jsx)("div",{style:A,title:B?`${B.status}${B.detail?" · "+B.detail:""}${B.latency_ms!=null?" · "+B.latency_ms+"ms":""}`:"no report",children:V(B?.status)},I.node_id+b)}),(0,e.jsx)("div",{style:A,title:k?.detail||"",children:V(k?.consensus||k?.status,k?.consensus_votes)})]},b)})]})})]})}function hs({canSeeDuplicates:t=!0,canSeeInfraMesh:n=!0}={}){const{t:s}=en(),d=rt(r=>r.token),h=rt(r=>r.role)==="superadmin",[c,u]=(0,i.useState)([]),[p,m]=(0,i.useState)(new Map),[l,g]=(0,i.useState)({}),[o,W]=(0,i.useState)(null),[C,A]=(0,i.useState)({}),[V,P]=(0,i.useState)(null),[b,k]=(0,i.useState)([]),[I,B]=(0,i.useState)([]),[M,te]=(0,i.useState)(null),[f,$]=(0,i.useState)(null),[O,E]=(0,i.useState)(null),[H,mt]=(0,i.useState)(!1),[ht,Ne]=(0,i.useState)(""),[ie,on]=(0,i.useState)(null),[ut,pt]=(0,i.useState)(!1),[xt,Ie]=(0,i.useState)(""),[gt,ln]=(0,i.useState)(null),[an,dn]=(0,i.useState)(null),[cn,mn]=(0,i.useState)(null),[hn,ft]=(0,i.useState)(!1),[un,ke]=(0,i.useState)(""),[x,de]=(0,i.useState)("drones"),[yt,vt]=(0,i.useState)(!1),[jt,bt]=(0,i.useState)(!1),[St,_t]=(0,i.useState)(!1),[wt,Be]=(0,i.useState)(""),[kt,Et]=(0,i.useState)(!1),[$t,Oe]=(0,i.useState)(""),[G,ze]=(0,i.useState)(null),[Ee,$e]=(0,i.useState)(""),[Rt,ce]=(0,i.useState)(""),[ge,At]=(0,i.useState)(!1),[Dt,Me]=(0,i.useState)(""),[Wt,pn]=(0,i.useState)(null),[ne,Fe]=(0,i.useState)({kind:"all",value:""}),[Re,Pe]=(0,i.useState)("all"),[xn,gn]=(0,i.useState)(null),[Ue,Ct]=(0,i.useState)(""),[,fn]=(0,i.useState)(0),Ve=(0,i.useRef)(!1),Lt=(0,i.useRef)("drones"),Tt=(0,i.useRef)(0),He=(0,i.useRef)(!1),Ge=(0,i.useRef)(!1),Ze
1=(0,i.useRef)(!1),Ke=(0,i.useRef)(!1),Xe=(0,i.useRef)(!1),fe=(0,i.useCallback)(async()=>{if(!(!d||Ve.current)){Ve.current=!0,vt(!0);try{const r={Authorization:`Bearer ${d}`},a=Lt.current==="users",j=a||Date.now()-Tt.current>=6e4,[X,Z,se]=await Promise.all([fetch(`/api/admin/monitor/state${a?"?operator_events=1":""}`,{headers:r}),j?fetch("/api/admin/users",{headers:r}):Promise.resolve(null),fetch("/api/vehicles",{headers:r}).catch(()=>null)]);if(!X.ok&&(!Z||!Z.ok)){Me("MONITOR LOAD FAILED");return}if(X.ok){const re=await X.json();u(Array.isArray(re.vehicles)?re.vehicles:[]),a&&g(re.operator_last_events||{})}if(Z&&Z.ok){const re=await Z.json();k(Array.isArray(re.users)?re.users:[]),Tt.current=Date.now()}if(se&&se.ok){const re=await se.json(),Gt=new Map;for(const Zt of re.vehicles||[])Gt.set(Zt.id,Zt);m(Gt)}Me(""),pn(Date.now())}catch{Me("CONNECTION FAILED")}finally{Ve.current=!1,vt(!1)}}},[d]),qe=(0,i.useCallback)(async()=>{if(d){bt(!0);try{const r=new URLSearchParams({limit:"200"});ne.kind==="drone"?r.set("drone_id",ne.value):ne.kind==="operator"&&r.set("operator_username",ne.value);const a=await fetch(`/api/admin/monitor/events?${r.toString()}`,{headers:{Authorization:`Bearer ${d}`}});if(a.ok){const j=await a.json();B(Array.isArray(j.events)?j.events:[])}}catch{}finally{bt(!1)}}},[d,ne]),Je=(0,i.useCallback)(async()=>{if(!(!d||He.current)){He.current=!0,_t(!0);try{const r=await fetch("/api/admin/monitor/wg-leaser?count=800",{headers:{Authorization:`Bearer ${d}`}});if(!r.ok){Be("WG-LEASER LOAD FAILED");return}const a=await r.json();te(a),Be(a.stats?.error||"")}catch{Be("WG-LEASER CONNECTION FAILED")}finally{He.current=!1,_t(!1)}}},[d]),ye=(0,i.useCallback)(async()=>{if(!(!d||Ge.current)){Ge.current=!0,Et(!0);try{const r=await fetch("/api/admin/monitor/duplicates",{headers:{Authorization:`Bearer ${d}`}});if(!r.ok){Oe("DUPLICATES LOAD FAILED");return}const a=await r.json();$(a),Oe(a.stats?.enabled!==!1&&a.stats?.ok===!1?a.stats?.error||"ZABBIX UNAVAILABLE":"")}catch{Oe("DUPLICATES CONNECTION FAILED")}finally{Ge.current=!1,Et(!1)}}},[d]),Ye=(0,i.useCallback)(async()=>{if(!(!d||Ze.current)){Ze.current=!0,mt(!0);try{const r=await fetch("/api/admin/monitor/infra",{headers:{Authorization:`Bearer ${d}`}});if(!r.ok){Ne("INFRA MONITOR LOAD FAILED");return}E(await r.json()),Ne("")}catch{Ne("INFRA MONITOR CONNECTION FAILED")}finally{Ze.current=!1,mt(!1)}}},[d]),Ae=(0,i.useCallback)(async(r=!1)=>{if(!(!d||Ke.current)){Ke.current=!0,pt(!0);try{const a=await fetch(`/api/admin/monitor/servers${r?"?fresh=1":""}`,{headers:{Authorization:`Bearer ${d}`}});if(!a.ok){Ie(a.status===403?"SERVERS ACCESS DENIED":"SERVERS LOAD FAILED");return}const j=await a.json();on(j),ln(Date.now()),Ie(j.stats?.enabled!==!1&&j.stats?.ok===!1?j.stats?.error||"ZABBIX UNAVAILABLE":"")}catch{Ie("SERVERS CONNECTION FAILED")}finally{Ke.current=!1,pt(!1)}}},[d]),yn=(0,i.useCallback)(async()=>{if(!(!d||Xe.current)){Xe.current=!0,ft(!0),ke("");try{const r=await fetch("/api/admin/monitor/servers/salt-ping",{method:"POST",headers:{Authorization:`Bearer ${d}`}});if(!r.ok){ke(r.status===403?"SALT PROBE ACCESS DENIED":"SALT PROBE FAILED");return}const a=await r.json();dn(a.probe||null),mn(Date.now()),ke(a.probe?.ok===!1?a.probe?.error||"SALT UNAVAILABLE":"")}catch{ke("SALT PROBE CONNECTION FAILED")}finally{Xe.current=!1,ft(!1)}}},[d]);(0,i.useEffect)(()=>{fe();const r=window.setInterval(()=>{fe(),fn(a=>a+1)},5e3);return()=>window.clearInterval(r)},[fe]),(0,i.useEffect)(()=>{if(x!=="events")return;qe();const r=window.setInterval(qe,5e3);return()=>window.clearInterval(r)},[x,qe]),(0,i.useEffect)(()=>{if(x!=="wg")return;Je();const r=window.setInterval(Je,5e3);return()=>window.clearInterval(r)},[x,Je]),(0,i.useEffect)(()=>{x==="duplicates"&&!t&&de("drones"),x==="infra"&&!n&&de("drones"),x==="servers"&&!n&&de("drones")},[x,t,n]),(0,i.useEffect)(()=>{if(x!=="duplicates"||!t)return;ye();const r=window.setInterval(ye,5e3);return()=>window.clearInterval(r)},[x,ye,t]),(0,i.useEffect)(()=>{if(x!=="infra"||!n)return;Ye();const r=window.setInterval(Ye,5e3);return()=>window.clearInterval(r)}
1,[x,Ye,n]);const Nt=(0,i.useRef)(Ae);(0,i.useEffect)(()=>{Nt.current=Ae},[Ae]);const It=!!d;(0,i.useEffect)(()=>{x!=="servers"||!n||!It||Nt.current()},[x,n,It]),(0,i.useEffect)(()=>{Ct("")},[x]);const Bt=(0,i.useMemo)(()=>new Set(b.filter(r=>r.online).map(r=>r.username)),[b]),me=(0,i.useMemo)(()=>c.map(r=>{const a=Xn(r),j=p.get(r.drone_id);return j&&j.connected&&(a.armed=!!j.armed,a.mode=j.mode&&j.mode!=="---"?j.mode:null),a}).sort((r,a)=>r.drone_id.localeCompare(a.drone_id)),[c,p]),he=(0,i.useMemo)(()=>{let r=0,a=0,j=0,X=0,Z=0;for(const se of me)se.bucket==="online"?r+=1:se.bucket==="standby"?a+=1:se.bucket==="offline"?X+=1:j+=1,se.operatorConnected&&(Z+=1);return{online:r,standby:a,signalIssue:j,offline:X,underControl:Z,usersOnline:Bt.size}},[me,Bt]),vn=(0,i.useMemo)(()=>{const r=new Map;for(const a of c){const j=String(a.operator_username||"").trim();j&&r.set(j,a.drone_id)}return r},[c]),De=(0,i.useMemo)(()=>b.filter(r=>r.online).sort((r,a)=>r.username.localeCompare(a.username)),[b]),L=Ue.trim().toLowerCase(),Ot=(0,i.useMemo)(()=>L?me.filter(r=>[r.name,r.drone_id,r.warehouse,r.operator].some(a=>String(a||"").toLowerCase().includes(L))):me,[me,L]),zt=(0,i.useMemo)(()=>L?De.filter(r=>[r.username,r.role,r.warehouse].some(a=>String(a||"").toLowerCase().includes(L))):De,[De,L]),Mt=(0,i.useMemo)(()=>I.filter(r=>!(Re!=="all"&&r.severity!==Re||L&&![r.drone_id,r.operator_username,r.event_type,r.component,r.reason].some(a=>String(a||"").toLowerCase().includes(L)))),[I,Re,L]),Ft=(0,i.useMemo)(()=>{const r=M?.peers||[];return L?r.filter(a=>[a.peer_id,a.ip,a.endpoint,a.status,a.drone?.drone_id,a.drone?.name,a.drone?.warehouse,a.user?.username,a.active_flight?.operator_username].some(j=>String(j||"").toLowerCase().includes(L))):r},[M,L]),jn=(0,i.useMemo)(()=>{const r=M?.access_logs||[];return L?r.filter(a=>[a.peer_id,a.token_preview,a.result,a.drone?.drone_id,a.user?.username].some(j=>String(j||"").toLowerCase().includes(L))):r},[M,L]),bn=(0,i.useMemo)(()=>{const r=M?.anomalies||[];return L?r.filter(a=>[a.code,a.title,a.detail,a.peer_id,a.drone_id].some(j=>String(j||"").toLowerCase().includes(L))):r},[M,L]),Sn=(0,i.useCallback)((r,a)=>{ce(""),$e(""),ze({drone_hash:r.drone_hash,drone_id:r.drone_id,server_id:a.server_id,server_name:a.server_name||a.server_minion_id})},[]),Pt=(0,i.useCallback)(()=>{ze(null),$e(""),ce("")},[]),Ut=(0,i.useCallback)(async()=>{if(!(!d||!G)){if(!Ee){ce(s("admin.monitor.duplicates.delete.needPassword","Password is required"));return}At(!0),ce("");try{const r=await fetch("/api/admin/duplicates/remove",{method:"POST",headers:{Authorization:`Bearer ${d}`,"Content-Type":"application/json"},body:JSON.stringify({server_id:G.server_id,drone_hash:G.drone_hash,drone_id:G.drone_id||void 0,password:Ee})}),a=await r.json().catch(()=>({}));if(!r.ok){ce(String(a?.error||`Remove failed (${r.status})`));return}ze(null),$e(""),await ye()}catch{ce(s("admin.monitor.duplicates.delete.connFailed","Connection failed"))}finally{At(!1)}}},[d,G,Ee,ye,s]),Vt=(0,i.useMemo)(()=>{const r=f?.duplicates||[];return L?r.filter(a=>[a.drone_hash,a.drone_id,a.name,a.model,a.warehouse,...a.backends.map(j=>j.server_name),...a.backends.map(j=>j.server_minion_id)].some(j=>String(j||"").toLowerCase().includes(L))):r},[f,L]),Ht=(0,i.useMemo)(()=>{const r=ie?.servers||[];return L?r.filter(a=>[a.name,a.host,a.reachability,...a.addresses||[],...a.groups||[],...(a.problems||[]).map(j=>j.name)].some(j=>String(j||"").toLowerCase().includes(L))):r},[ie,L]);(0,i.useEffect)(()=>{Lt.current=x,x==="users"&&fe()},[x,fe]);const _n=(0,i.useCallback)(r=>{let a=!1;W(j=>(a=j!==r,a?r:null)),!(!a||!d)&&(P(r),(async()=>{try{const j=await fetch(`/api/admin/monitor/state/${encodeURIComponent(r)}`,{headers:{Authorization:`Bearer ${d}`}});if(!j.ok)return;const X=await j.json();X.vehicle&&A(Z=>({...Z,[r]:X.vehicle}))}catch{}finally{P(j=>j===r?null:j)}})())},[d]),wn=(0,i.useCallback)(r=>{Fe({kind:"drone",value:r}),Pe("all"),de("events")},[]),kn=(0,i.useCallback)(r=>{Fe({kind:"operator",value:r}),Pe("all"),de("events")},[]),En=(()=>{if(!ie)return null;if(!(ie.stats?.ok===!0&&Vn(it(ie.stats?.age_seconds,gt))))return(0,e.jsx)("span",{style:{...oe,color:x==="servers"?y:_,fontWeight:800},title:s("admin.monitor.servers.badgeUnknown","Server state is unknown â this tab has no current Zabbix read"),children:"?"});const r=ie.summary?.down??0;return(0,e.jsx)("span",{style:{...oe,color:r>0?_:y},children:r})})();return(0,e.jsxs)("div",{style:qn,children:[(0,e.jsxs)("div",{style:Se,children:[(0,e.jsx)(D,{n:he.online,label:s("admin.monitor.kpi.online","online"),color:N}),(0,e.jsx)(D,{n:he.standby,label:s("admin.monitor.kpi.standby","standby"),color:T}),(0,e.jsx)(D,{n:he.signalIssue,label:s("admin.monitor.kpi.signalIssue","signal issue"),color:R}),(0,e.jsx)(D,{n:he.offline,label:s("admin.monitor.kpi.offline","offline"),color:_}),(0,e.jsx)(D,{n:he.underControl,label:s("admin.monitor.kpi.underControl","under control"),color:T}),(0,e.jsx)(D,{n:he.usersOnline,label:s("admin.monitor.kpi.usersOnline","users online"),color:T}),(0,e.jsx)("span",{style:{flex:1,minWidth:12}}
1),Wt&&(0,e.jsxs)("span",{style:{color:y,fontSize:11,letterSpacing:.4},children:[s("admin.monitor.updated","updated")," ",ee(we(new Date(Wt).toISOString()))," ",s("admin.monitor.ago","ago")]})]}),(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,flexWrap:"wrap"},children:[(0,e.jsx)(Dn,{items:[{value:"drones",label:(0,e.jsxs)(e.Fragment,{children:[s("admin.monitor.tab.drones","Drones"),(0,e.jsx)("span",{style:oe,children:me.length})]})},{value:"users",label:(0,e.jsxs)(e.Fragment,{children:[s("admin.monitor.tab.users","Users online"),(0,e.jsx)("span",{style:oe,children:De.length})]})},{value:"events",label:s("admin.monitor.tab.events","Events")},{value:"flights",label:s("admin.monitor.tab.flights","Flight logs")},{value:"wg",label:(0,e.jsxs)(e.Fragment,{children:["WG-LEASER",(0,e.jsx)("span",{style:oe,children:M?.summary?.registered_peers??0})]})},...t?[{value:"duplicates",label:(0,e.jsxs)(e.Fragment,{children:[s("admin.monitor.tab.duplicates","Duplicates"),(0,e.jsx)("span",{style:oe,children:f?.summary?.duplicate_count??0})]})}]:[],...n?[{value:"infra",label:(0,e.jsxs)(e.Fragment,{children:[s("admin.monitor.tab.infra","Infra mesh"),(0,e.jsx)("span",{style:oe,children:O?.self?.alive_nodes?.length??0})]})}]:[],...n?[{value:"servers",label:(0,e.jsxs)(e.Fragment,{children:[s("admin.monitor.tab.servers","Servers"),En]})}]:[]],value:x,onChange:de,ariaLabel:s("admin.nav.monitor","Monitor")}),(0,e.jsx)("div",{style:{flex:1,minWidth:12}}
1),x!=="flights"&&(0,e.jsx)("input",{value:Ue,onChange:r=>Ct(r.target.value),placeholder:x==="drones"?s("admin.monitor.search.drones","Search boardsâ¦"):x==="users"?s("admin.monitor.search.users","Search usersâ¦"):x==="events"?s("admin.monitor.search.events","Search eventsâ¦"):x==="wg"?s("admin.monitor.search.wg","Search WG peersâ¦"):x==="duplicates"?s("admin.monitor.search.duplicates","Search duplicatesâ¦"):x==="servers"?s("admin.monitor.search.servers","Search servers / problemsâ¦"):s("admin.monitor.search.infra","Search targetsâ¦"),style:{...tt,minWidth:200,maxWidth:280}}),x==="events"&&ne.kind!=="all"&&(0,e.jsxs)("span",{style:_e,children:[ne.kind==="drone"?s("admin.monitor.scope.board","Board"):s("admin.monitor.scope.operator","Operator"),": ",ne.value,(0,e.jsx)("span",{style:{marginLeft:8,cursor:"pointer"},onClick:()=>Fe({kind:"all",value:""}),children:"â"})]}),x==="events"&&(0,e.jsxs)("select",{value:Re,onChange:r=>Pe(r.target.value),style:tt,children:[(0,e.jsx)("option",{value:"all",children:s("admin.monitor.filter.allSeverities","all severities")}),(0,e.jsx)("option",{value:"info",children:"info"}),(0,e.jsx)("option",{value:"warning",children:"warning"}),(0,e.jsx)("option",{value:"error",children:"error"})]}),x!=="flights"&&(0,e.jsxs)("span",{style:oe,children:[x==="drones"?Ot.length:x==="users"?zt.length:x==="events"?Mt.length:x==="wg"?Ft.length:x==="duplicates"?Vt.length:x==="servers"?Ht.length:O?.self?.targets?.length??0,(x==="events"?jt:x==="wg"?St:x==="duplicates"?kt:x==="infra"?H:x==="servers"?ut:yt)?" · â¦":""]})]}),Dt&&(0,e.jsx)("div",{style:{color:_,fontSize:12,letterSpacing:1},children:Dt}),x==="wg"&&wt&&(0,e.jsx)("div",{style:{color:R,fontSize:12,letterSpacing:1},children:wt}),x==="duplicates"&&$t&&(0,e.jsx)("div",{style:{color:_,fontSize:12,letterSpacing:1},children:$t}),x==="infra"&&ht&&(0,e.jsx)("div",{style:{color:_,fontSize:12,letterSpacing:1},children:ht}),x==="servers"&&xt&&(0,e.jsx)("div",{style:{color:_,fontSize:12,letterSpacing:1},children:xt}),x==="infra"?(0,e.jsx)(Qn,{data:O,loading:H,query:Ue,t:s}):x==="flights"?(0,e.jsx)(On,{}):(0,e.jsxs)("div",{className:"hud-scroll",style:Jn,children:[x==="drones"&&(0,e.jsx)(es,{rows:Ot,loading:yt,onLogs:wn,expanded:o,detail:C,detailLoading:V,onToggle:_n,t:s}),x==="users"&&(0,e.jsx)(ts,{rows:zt,operatorDrone:vn,lastEvents:l,onLogs:kn,t:s}),x==="events"&&(0,e.jsx)(ns,{events:Mt,loading:jt,expandedEvent:xn,onToggle:r=>gn(a=>a===r?null:r),t:s}),x==="wg"&&(0,e.jsx)(ls,{data:M,loading:St,peers:Ft,logs:jn,anomalies:bn,t:s}),x==="duplicates"&&(0,e.jsx)(rs,{data:f,loading:kt,duplicates:Vt,canDelete:h,onDelete:Sn,t:s}),x==="servers"&&(0,e.jsx)(is,{data:ie,loading:ut,servers:Ht,filtered:!!L,receivedAt:gt,onRefresh:()=>{Ae(!0)},salt:an,saltReceivedAt:cn,saltLoading:hn,saltError:un,onSaltProbe:()=>{yn()},t:s})]}),G&&(0,e.jsx)("div",{style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},onClick:Pt,children:(0,e.jsxs)("div",{onClick:r=>r.stopPropagation(),style:{background:nn,border:`1px solid ${_}66`,padding:20,minWidth:420,maxWidth:540,boxShadow:"0 12px 40px rgba(0,0,0,0.6)"},children:[(0,e.jsx)("div",{style:{color:_,fontWeight:800,letterSpacing:1,textTransform:"uppercase",fontSize:13,marginBottom:10},children:s("admin.monitor.duplicates.delete.title","Delete duplicate board")}),(0,e.jsx)("div",{style:{color:w,fontSize:12,lineHeight:1.5,marginBottom:12},children:s("admin.monitor.duplicates.delete.body","This removes the board from the chosen backend via the sync mechanism and re-renders the balancer. It is blocked if the board has an active flight on that backend.")}),(0,e.jsxs)("div",{style:{..._e,display:"block",padding:10,marginBottom:12,color:T},children:[(0,e.jsx)("div",{children:G.drone_id||s("admin.monitor.duplicates.unresolvedId","unresolved id")}),(0,e.jsx)("div",{style:{...z},title:G.drone_hash,children:sn(G.drone_hash)}),(0,e.jsxs)("div",{style:{color:w,marginTop:6},children:[s("admin.monitor.duplicates.delete.from","from")," ",(0,e.jsx)("span",{style:{color:_},children:G.server_name})]})]}),(0,e.jsx)("input",{type:"password",autoComplete:"current-password",autoFocus:!0,value:Ee,onChange:r=>$e(r.target.value),onKeyDown:r=>{r.key==="Enter"&&Ut()},placeholder:s("admin.monitor.duplicates.delete.password","Your password"),style:{...tt,width:"100%",marginBottom:10,boxSizing:"border-box"}}),Rt&&(0,e.jsx)("div",{style:{color:_,fontSize:12,marginBottom:10},children:Rt}),(0,e.jsxs)("div",{style:{display:"flex",gap:10,justifyContent:"flex-end"},children:[(0,e.jsx)("button",{type:"button",onClick:Pt,disabled:ge,style:{cursor:"pointer",background:"transparent",border:`1px solid ${tn}`,color:w,padding:"8px 14px",fontFamily:xe,letterSpacing:.5},children:s("admin.monitor.duplicates.delete.cancel","Cancel")}),(0,e.jsx)("button",{type:"button",onClick:()=>{Ut()},disabled:ge,style:{cursor:ge?"default":"pointer",background:`${_}18`,border:`1px solid ${_}`,color:_,padding:"8px 14px",fontFamily:xe,fontWeight:800,letterSpacing:.5,textTransform:"uppercase",opacity:ge?.6:1},children:ge?s("admin.monitor.duplicates.delete.busy","Removingâ¦"):s("admin.monitor.duplicates.delete.confirm","Delete from backend")})]})]})})]})}function es({rows:t,loading:n,onLogs:s,expanded:d,detail:h,detailLoa
1ding:c,onToggle:u,t:p}){return t.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse"},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:{...S,minWidth:160},children:p("admin.monitor.col.board","Board")}),(0,e.jsx)("th",{style:{...S,minWidth:150},children:p("admin.monitor.col.state","State")}),(0,e.jsx)("th",{style:{...S,minWidth:160},children:p("admin.monitor.col.operator","Operator")}),(0,e.jsx)("th",{style:{...S,minWidth:330},children:p("admin.monitor.col.signals","Signals")}),(0,e.jsx)("th",{style:S,children:p("admin.monitor.col.lastEvent","Last event")}),(0,e.jsx)("th",{style:{...S,minWidth:130},children:p("admin.monitor.col.lastSeen","Last seen")}),(0,e.jsx)("th",{style:S})]})}),(0,e.jsx)("tbody",{children:t.map(m=>{const l=h[m.drone_id],g=l?.network,o=g?.host?g.resolved_ip?`${g.host} -> ${g.resolved_ip}`:`${g.host} -> unresolved`:"",W=l?.last_event||null,C=d===m.drone_id;return(0,e.jsxs)(i.Fragment,{children:[(0,e.jsxs)("tr",{style:Y,children:[(0,e.jsxs)("td",{"data-label":p("admin.monitor.col.board","Board"),style:v,children:[(0,e.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>u(m.drone_id),onKeyDown:A=>{(A.key==="Enter"||A.key===" ")&&(A.preventDefault(),u(m.drone_id))},style:{cursor:"pointer"},title:p("admin.monitor.detailHint","Details"),children:[(0,e.jsx)("span",{style:{color:y,marginRight:6},children:C?"â¾":"â¸"}),m.name,m.warehouse&&(0,e.jsxs)("span",{style:{color:y,fontWeight:500},children:[" (",m.warehouse,")"]})]}),m.networkText&&(0,e.jsx)("div",{style:{...F,color:m.networkResolved?w:_,whiteSpace:"nowrap"},children:m.networkText})]}),(0,e.jsxs)("td",{"data-label":p("admin.monitor.col.state","State"),style:v,children:[(0,e.jsx)("div",{style:{color:m.stateColor,textTransform:"uppercase"},children:m.stateLabel.toUpperCase()}),m.reason&&(0,e.jsx)("div",{style:z,children:m.reason}),m.armed!==null&&(0,e.jsxs)("div",{style:{marginTop:3,fontSize:11,fontWeight:700,letterSpacing:.5},children:[(0,e.jsx)("span",{style:{color:m.armed?_:w},children:m.armed?"ARMED":"DISARMED"}),m.mode&&(0,e.jsxs)("span",{style:{color:T},children:[" · ",m.mode]})]})]}),(0,e.jsxs)("td",{"data-label":p("admin.monitor.col.operator","Operator"),style:v,children:[(0,e.jsx)("div",{style:{color:m.operatorConnected?N:Te,textTransform:"uppercase"},children:m.operatorConnected?p("admin.monitor.connected","connected"):p("admin.monitor.idle","idle")}),(0,e.jsxs)("div",{style:F,children:[m.operator||p("admin.monitor.noOperator","no operator"),m.operatorConnected&&m.operatorAge!=null?` / ${ee(m.operatorAge)}`:""]}),(0,e.jsx)("div",{style:z,children:m.sessionId||"-"})]}),(0,e.jsx)("td",{"data-label":p("admin.monitor.col.signals","Signals"),style:v,children:(0,e.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:[(0,e.jsx)(nt,{label:"WG",signal:m.wg}),(0,e.jsx)(nt,{label:"TEL",signal:m.tel}),(0,e.jsx)(nt,{label:"VID",signal:m.vid})]})}),(0,e.jsx)("td",{"data-label":p("admin.monitor.col.lastEvent","Last event"),style:v,children:W||m.lastEvent?(()=>{const A=W||m.lastEvent;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{style:{color:ae(A.severity),textTransform:"uppercase"},children:[A.event_type," / ",A.component]}),(0,e.jsx)("div",{style:F,children:U(A.ts)}),A.reason&&(0,e.jsx)("div",{style:z,children:A.reason})]})})():(0,e.jsx)("span",{style:{color:y},children:"â"})}),(0,e.jsxs)("td",{"data-label":p("admin.monitor.col.lastSeen","Last seen"),style:v,children:[(0,e.jsx)("div",{style:{color:w},children:U(m.lastSeenAt)}),(0,e.jsxs)("div",{style:z,children:[p("admin.monitor.changed","changed")," ",U(m.lastChangeAt)]})]}),(0,e.jsx)("td",{style:v,children:(0,e.jsx)("button",{type:"button",style:Ce,onClick:()=>s(m.drone_id),children:p("admin.monitor.logs","Logs")})})]}),C&&(0,e.jsx)("tr",{style:Y,children:(0,e.jsx)("td",{colSpan:7,style:{...v,paddingTop:0},children:c===m.drone_id&&!l?(0,e.jsx)("span",{style:{color:y},children:p("admin.monitor.loading","Loadingâ¦")}):(0,e.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:18},children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{style:z,children:p("admin.monitor.col.network","Network")}),(0,e.jsx)("div",{style:{...F,color:g?.resolved_ip?w:_},children:o||"â"}),g?.resolve_error&&(0,e.jsx)("div",{style:{...z,color:_},children:g.resolve_error})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{style:z,children:p("admin.monitor.col.lastSeen","Last seen")}),(0,e.jsx)("div",{style:F,children:U(m.lastSeenAt)})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{style:z,children:p("admin.monitor.col.flight","Flight")}),(0,e.jsx)("div",{style:F,children:m.sessionId||"â"})]})]})})})]},m.drone_id)})})]}):(0,e.jsx)("div",{style:K,children:n?p("admin.monitor.loading","Loadingâ¦"):p("admin.monitor.noBoards","No boards")})}function ts({rows:t,operatorDrone:n,lastEvents:s,onLogs:d,t:h}){return t.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse"},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:S,children:h("admin.monitor.col.user","User")}),(0,e.jsx)("th",{style:{...S,minWidth:150},children:h("admin.monitor.col.role","Role")}),(0,e.jsx)("th",{style:{...S,minWidth:120},children:h("admin.monitor.col.since","Online for")}),(0,e.jsx)("th",{style:{...S,minWidth:120},children:h("admin.monitor.col.warehouse","Warehouse")}),(0,e.jsx)("th",{style:S,children:h("admin.monitor.col.drone","Connected drone")}),(0,e.jsx)("th",{style:S,children:h("admin.monitor.col.lastAction","
1Last action")}),(0,e.jsx)("th",{style:S})]})}),(0,e.jsx)("tbody",{children:t.map(c=>{const u=n.get(c.username);return(0,e.jsxs)("tr",{style:Y,children:[(0,e.jsxs)("td",{"data-label":h("admin.monitor.col.user","User"),style:v,children:[(0,e.jsx)("span",{style:{color:N},children:"â "}),c.username]}),(0,e.jsx)("td",{"data-label":h("admin.monitor.col.role","Role"),style:v,children:(0,e.jsx)("span",{style:{fontSize:11,letterSpacing:1,textTransform:"uppercase",border:`1px solid ${Q}`,padding:"3px 9px",color:w},children:c.role})}),(0,e.jsx)("td",{"data-label":h("admin.monitor.col.since","Online for"),style:{...v,color:w},children:ee(we(c.auth_session_started_at))}),(0,e.jsx)("td",{"data-label":h("admin.monitor.col.warehouse","Warehouse"),style:{...v,color:w},children:c.warehouse||"â"}),(0,e.jsx)("td",{"data-label":h("admin.monitor.col.drone","Connected drone"),style:v,children:u?(0,e.jsx)("span",{style:{color:T},children:u}):(0,e.jsx)("span",{style:{color:y},children:"â"})}),(0,e.jsx)("td",{"data-label":h("admin.monitor.col.lastAction","Last action"),style:v,children:s[c.username]?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{style:{color:ae(s[c.username].severity),textTransform:"uppercase"},children:s[c.username].event_type}),(0,e.jsxs)("span",{style:{color:y},children:[" · ",U(s[c.username].ts)]})]}):(0,e.jsx)("span",{style:{color:y},children:"â"})}),(0,e.jsx)("td",{style:v,children:(0,e.jsx)("button",{type:"button",style:Ce,onClick:()=>d(c.username),children:h("admin.monitor.logs","Logs")})})]},c.username)})})]}):(0,e.jsx)("div",{style:K,children:h("admin.monitor.noUsersOnline","No users online")})}function ns({events:t,loading:n,expandedEvent:s,onToggle:d,t:h}){return t.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse"},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:{...S,minWidth:96},children:h("admin.monitor.col.time","Time")}),(0,e.jsx)("th",{style:{...S,minWidth:130},children:h("admin.monitor.col.board","Board")}),(0,e.jsx)("th",{style:S,children:h("admin.monitor.col.event","Event")}),(0,e.jsx)("th",{style:{...S,minWidth:100},children:h("admin.monitor.col.severity","Severity")}),(0,e.jsx)("th",{style:S,children:h("admin.monitor.col.reason","Reason")})]})}),(0,e.jsx)("tbody",{children:t.map((c,u)=>{const p=c._id||`${c.ts}-${u}`,m=s===p,l=!!c.details||!!c.previous_state||!!c.next_state;return(0,e.jsxs)(i.Fragment,{children:[(0,e.jsxs)("tr",{onClick:()=>l&&d(p),style:{...Y,cursor:l?"pointer":"default"},children:[(0,e.jsx)("td",{"data-label":h("admin.monitor.col.time","Time"),style:{...v,color:w},children:ot(c.ts)}),(0,e.jsx)("td",{"data-label":h("admin.monitor.col.board","Board"),style:{...v,color:c.drone_id?T:y},children:c.drone_id||"â"}),(0,e.jsxs)("td",{"data-label":h("admin.monitor.col.event","Event"),style:v,children:[(0,e.jsx)("span",{style:{color:ae(c.severity),textTransform:"uppercase"},children:c.event_type}),(0,e.jsxs)("span",{style:{color:y},children:[" / ",c.component]})]}),(0,e.jsx)("td",{"data-label":h("admin.monitor.col.severity","Severity"),style:v,children:(0,e.jsx)("span",{style:{color:ae(c.severity),textTransform:"uppercase"},children:c.severity})}),(0,e.jsxs)("td",{"data-label":h("admin.monitor.col.reason","Reason"),style:{...v,color:w},children:[c.reason||"",c.previous_state||c.next_state?(0,e.jsxs)("span",{style:{color:y},children:[" ",c.previous_state||"?"," â ",c.next_state||"?"]}):null,l&&(0,e.jsx)("span",{style:{color:y},children:m?" â¾":" â¸"})]})]}),m&&(0,e.jsx)("tr",{children:(0,e.jsx)("td",{colSpan:5,style:{...v,background:"rgba(0,0,0,0.4)"},children:(0,e.jsx)("pre",{style:{margin:0,color:w,fontSize:11,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:JSON.stringify(c.details??{},null,2)})})})]},p)})})]}):(0,e.jsx)("div",{style:K,children:n?h("admin.monitor.loading","Loadingâ¦"):h("admin.monitor.noEvents","No events")})}function Le({status:t}){const n=t==="ok"?N:t==="stale"?R:_;return(0,e.jsx)("span",{style:{color:n,border:`1px solid ${n}66`,background:`${n}14`,padding:"4px 8px",fontSize:11,fontWeight:800,letterSpacing:1,textTransform:"uppercase",whiteSpace:"nowrap"},children:t})}function ss({item:t}){const n=ae(t.severity);return(0,e.jsxs)("div",{style:{border:`1px solid ${n}55`,background:`${n}12`,padding:"8px 10px",minWidth:220,maxWidth:360,boxSizing:"border-box"},children:[(0,e.jsxs)("div",{style:{color:n,fontSize:11,fontWeight:800,letterSpacing:1.2,textTransform:"uppercase"},children:[t.code.replaceAll("_"," "),t.count?(0,e.jsxs)("span",{style:{color:w},children:[" / ",t.count]}):null]}),(0,e.jsx)("div",{style:{color:w,marginTop:4,fontSize:12,lineHeight:1.35},children:t.detail}),(t.peer_id||t.drone_id)&&(0,e.jsxs)("div",{style:{color:y,marginTop:4,fontSize:11},children:[t.peer_id||"â",t.drone_id?` / ${t.drone_id}`:""]})]})}function sn(t){return t.length>18?`${t.slice(0,12)}â¦${t.slice(-4)}`:t}function rn({item:t}){const n=ae(t.severity);return(0,e.jsxs)("div",{style:{border:`1px solid ${n}55`,background:`${n}12`,padding:"8px 10px",minWidth:220,maxWidth:380,boxSizing:"border-box"},children:[(0,e.jsx)("div",{style:{color:n,fontSize:11,fontWeight:800,letterSpacing:1.2,textTransform:"uppercase"},children:t.code.replaceAll("_"," ")}),(0,e.jsx)("div",{style:{color:w,marginTop:4,fontSize:12,lineHeight:1.35},children:t.message})]})}function rs({data:t,loading:n,duplicates:s,canDelete:d,onDelete:h,t:c}){if(!t)return(0,e.jsx)("div",{style:K,children:n?c("admin.monitor.loading","Loadingâ¦"):"DUPLICATES"});const u=t.stats||{},p=t.summary||{},m=t.anomalies||[];if(u.enabled===!1)return(0,e.jsx)("div",{style:K,children:c("admin.monitor.duplicates.disabled","Zabbix integration is disabled â duplicate detection unavailable")});const l={color:J,fontSize:11,fontWeight:800,letterSpacing:1.4,textTransform:"uppercase",marginBottom:8};return(0,e.jsxs)("div",{className:"mwide",style:{display:"flex",flexDirection:"column",gap:16,padding:12,minWidth:900},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},children:[(0,e.jsx)(Le,{status:u.ok?"ok":"missing"}),(0,e.jsx)("span",{style:{color:T,fontWeight:800,letterSpacing:1.2},children:c("admin.monitor.duplicates.title","CROSS-SERVER DUPLICATES")}),(0,e.jsx)("span",{style:{color:y},children:u.item_count!=null?`${u.item_count} zabbix item(s)`:""}),(0,e.jsx)("span",{style:{flex:1}}),(0,e.jsxs)("span",{style:{color:y},children:[c("admin.monitor.updated","updated")," ",U(t.generated_at)]})]}),u.ok===!1&&(0,e.jsxs)("div",{style:{color:_,border:`1px solid ${_}55`,background:`${_}12`,padding:"10px 12px",fontSize:12,letterSpacing:.6,lineHeight:1.4},children:[c("admin.monitor.duplicates.zabbixError","Zabbix is unavailable â duplicate status is UNKNOWN, not necessarily clear."),u.error?` (${u.error})`:""]}),(0,e.jsxs)("div",{style:Se,children:[(0,e.jsx)(D,{n:p.duplicate_count||0,label:c("admin.monitor.duplicates.stat.boards","duplicated boards"),color:(p.duplicate_count||0)>0?_:N}),(0,e.jsx)(D,{n:p.backends_involved||0,label:c("admin.monitor.duplicates.stat.backends","backends"),color:T}),(0,e.jsx)(D,{n:p.unknown_backends||0,label:c("admin.monitor.duplicates.stat.unknown","unknown backends"),color:(p.unknown_backends||0)>0?R:w}),(0,e.jsx)(D,{n:p.unresolved_boards||0,label:c("admin.monitor.duplicates.stat.unresolved","unresolved"),color:(p.unresolved_boards||0)>0?R:w})]}),m.length>0&&(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:l,children:[c("admin.monitor.duplicates.anomalies","Anomalies")," / ",m.length]}),(0,e.jsx)("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:m.map((g,o)=>(0,e.jsx)(rn,{item:g},`${g.code}-${o}`))})]}),(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:l,children:[c("admin.monitor.duplicates.boards","Duplicated boards")," / ",s.length]}),s.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse",minWidth:860},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:{...S,minWidth:220},children:c("admin.monitor.duplicates.col.board","Board")}),(0,e.jsx)("th",{style:{...S,minWidth:150},children:c("admin.monitor.duplicates.col.warehouse","Warehouse / Model")}),(0,e.jsx)("th",{style:{...S,minWidth:260},children:c("admin.monitor.duplicates.col.backends","Present on backends")}),(0,e.jsx)("th",{style:{...S,minWidth:130},children:c("admin.monitor.duplicates.col.lastSeen","Last seen")}),(0,e.jsx)("th",{style:S,children:c("admin.monitor.duplicates.col.flags","Flags")})]})}),(0,e.jsx)("tbody",{children:s.map(g=>(0,e.jsxs)("tr",{style:Y,children:[(0,e.jsxs)("td",{"data-label":c("admin.monitor.duplicates.col.board","Board"),style:v,children:[(0,e.jsx)("div",{children:g.drone_id||(0,e.jsx)("span",{style:{color:y},children:c("admin.monitor.duplicates.unresolvedId","unresolved
1id")})}),g.name?(0,e.jsx)("div",{style:F,children:g.name}):null,(0,e.jsx)("div",{style:z,title:g.drone_hash,children:sn(g.drone_hash)})]}),(0,e.jsxs)("td",{"data-label":c("admin.monitor.duplicates.col.warehouse","Warehouse / Model"),style:v,children:[(0,e.jsx)("div",{children:g.warehouse||"â"}),(0,e.jsx)("div",{style:F,children:g.model||"â"})]}),(0,e.jsx)("td",{"data-label":c("admin.monitor.duplicates.col.backends","Present on backends"),style:v,children:(0,e.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:g.backends.map(o=>(0,e.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,e.jsxs)("span",{title:o.server_minion_id,style:{..._e,padding:"4px 8px",color:o.known?T:R,borderColor:o.known?tn:`${R}66`},children:[o.known?o.server_name||o.server_minion_id:`${o.server_minion_id} (?)`,o.state&&o.state!=="active"?` · ${o.state}`:""]}),d&&o.known&&o.server_id?(0,e.jsx)("button",{type:"button",onClick:()=>h(g,o),title:c("admin.monitor.duplicates.deleteFrom","Delete this board from this backend"),style:{cursor:"pointer",background:"transparent",border:`1px solid ${_}55`,color:_,fontFamily:xe,fontSize:10,fontWeight:800,letterSpacing:.5,padding:"3px 6px",textTransform:"uppercase"},children:c("admin.monitor.duplicates.delete","delete")}):null]},o.server_minion_id))})}),(0,e.jsx)("td",{"data-label":c("admin.monitor.duplicates.col.lastSeen","Last seen"),style:v,children:g.last_seen?U(g.last_seen):"â"}),(0,e.jsx)("td",{"data-label":c("admin.monitor.duplicates.col.flags","Flags"),style:v,children:g.anomalies.length?(0,e.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:5},children:g.anomalies.map(o=>(0,e.jsx)("span",{style:{..._e,padding:"4px 7px",color:o.includes("unknown")?R:w},children:o.replaceAll("_"," ")},o))}):(0,e.jsx)("span",{style:{color:y},children:"â"})})]},g.drone_hash))})]}):(0,e.jsx)("div",{style:{color:u.ok?N:y,fontSize:12,letterSpacing:1},children:u.ok?c("admin.monitor.duplicates.none","NO CROSS-SERVER DUPLICATES DETECTED"):c("admin.monitor.duplicates.unknown","DUPLICATE STATUS UNKNOWN")})]}),(0,e.jsx)("div",{style:{color:y,fontSize:11,lineHeight:1.4,maxWidth:760},children:d?c("admin.monitor.duplicates.hintDelete","Deleting removes the board from the chosen backend via the sync mechanism and re-renders the balancer. It is blocked if that backend has an active flight. Delete from the backend that should NOT own the board."):c("admin.monitor.duplicates.hint","Read-only view. Resolving a duplicate (deleting it from a chosen backend) requires the superadmin role.")})]})}function os({reachability:t,monitored:n,t:s}){const d=Hn(t),h=t==="up"?s("admin.monitor.servers.state.up","up"):t==="down"?s("admin.monitor.servers.state.down","down"):s("admin.monitor.servers.state.unknown","unknown");return(0,e.jsxs)("span",{style:{display:"inline-flex",flexDirection:"column",gap:3,alignItems:"flex-start"},children:[(0,e.jsx)("span",{style:{color:d,border:`1px solid ${d}66`,background:`${d}14`,padding:"4px 8px",fontSize:11,fontWeight:800,letterSpacing:1,textTransform:"uppercase",whiteSpace:"nowrap"},children:h}),!n&&(0,e.jsx)("span",{style:{color:R,fontSize:10.5,letterSpacing:.5},children:s("admin.monitor.servers.notMonitored","not monitored")})]})}function st({problem:t,t:n}){const s=at(t.severity_name);return(0,e.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:7,marginBottom:4,lineHeight:1.35},children:[(0,e.jsx)("span",{style:{color:s,border:`1px solid ${s}55`,background:`${s}12`,padding:"1px 5px",fontSize:9.5,fontWeight:800,letterSpacing:.8,textTransform:"uppercase",whiteSpace:"nowrap",flexShrink:0},children:String(t.severity_name||"").replaceAll("_"," ")}),(0,e.jsxs)("span",{style:{minWidth:0},children:[t.is_product&&(0,e.jsx)("span",{style:{color:T,fontWeight:800,letterSpacing:.5,marginRight:5},title:n("admin.monitor.servers.productProblemHint","This problem names VooDoo"),children:"â"}),(0,e.jsx)("span",{style:{fontSize:12},children:t.name}),(0,e.jsxs)("span",{style:{color:y,fontSize:11},children:[t.since?` · ${ee(we(t.since))}`:"",t.acknowledged?` · ${n("admin.monitor.servers.acknowledged","ack")}`:"",t.suppressed?` · ${n("admin.monitor.servers.suppressed","suppressed")}`:""]})]})]})}function is({data:t,loading:n,servers:s,filtered:d,receivedAt:h,onRefresh:c,salt:u,saltReceivedAt:p,saltLoading:m,saltError:l,onSaltProbe:g,t:o}){if(!t)return(0,e.jsx)("div",{style:K,children:n?o("admin.monitor.loading","Loadingâ¦"):"SERVERS"});const W=t.stats||{},C=t.criterion||{},A=t.summary||{},V=t.anomalies||[],P=A.problems_by_severity||{},b=t.product_problems_outside_scope||[],k=t.unattributed_problems||[],I=t.addresses_hidden===!0;if(W.enabled===!1)return(0,e.jsx)("div",{style:K,children:o("admin.monitor.servers.disabled","Zabbix integration is disabled â live server state unavailable")});const B=it(W.age_seconds,h),M=lt(B),te=it(u?0:null,p),f=lt(te),$=W.ok!==!0,O={color:J,fontSize:11,fontWeight:800,letterSpacing:1.4,textTransform:"uppercase",marginBottom:8};return(0,e.jsxs)("div",{className:"mwide",style:{display:"flex",flexDirection:"column",gap:16,padding:12,minWidth:900},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},children:[(0,e.jsx)(Le,{status:$?"missing":"ok"}),(0,e.jsx)("span",{style:{color:T,fontWeight:800,letterSpacing:1.2},children:o("admin.monitor.servers.title","LIVE SERVER STATE")}),(0,e.jsx)("span",{style:{flex:1}}),(0,e.jsx)("span",{title:W.fetched_at?`${o("admin.monitor.servers.readAt","Zabbix read at")} ${U(W.fetched_at)}${W.took_ms!=null?` · ${W.took_ms} ms`:""}${W.cached?` · ${o("admin.monitor.servers.cached","served from a short-lived cache")}`:""}`:o("admin.monitor.servers.neverReadHint","Zabbix was never successfully read for this view"),style:{color:M,border:`1px solid ${M}55`,background:`${M}12`,padding:"4px 9px",fontSize:11.5,fontWeight:700,letterSpacing:.6,whiteSpace:"nowrap"},children:B==null?o("admin.monitor.servers.neverRead","NEVER READ"):`${o("admin.monitor.servers.age","Zabbix read")} ${ee(B)} ${o("admin.monitor.ago","ago")}`}),(0,e.jsx)("button",{type:"button",onClick:c,disabled:n,title:o("admin.monitor.servers.refreshHint","Read Zabbix again, bypassing the short
1-lived server cache"),style:{...Ce,height:30,opacity:n?.6:1,cursor:n?"default":"pointer"},children:n?o("admin.monitor.servers.refreshing","Readingâ¦"):o("admin.monitor.servers.refresh","Refresh")})]}),$&&(0,e.jsxs)("div",{style:{color:_,border:`1px solid ${_}55`,background:`${_}12`,padding:"10px 12px",fontSize:12,letterSpacing:.6,lineHeight:1.4},children:[o("admin.monitor.servers.zabbixError","Zabbix is unavailable â server state is UNKNOWN. The list below is empty because nothing could be read, not because everything is healthy."),W.error?` (${W.error})`:""]}),(0,e.jsxs)("div",{style:{color:y,fontSize:11,lineHeight:1.5},children:[o("admin.monitor.servers.criterion","Zabbix host groups"),":"," ",(0,e.jsx)("span",{style:{color:w},children:(C.host_groups||[]).join(", ")||"â"}),C.estate_host_count!=null&&(0,e.jsxs)(e.Fragment,{children:[" · ",o("admin.monitor.servers.estate","estate"),": ",(0,e.jsx)("span",{style:{color:w},children:C.estate_host_count})," ",o("admin.monitor.servers.hosts","hosts"),C.estate_problem_count!=null?` / ${C.estate_problem_count} ${o("admin.monitor.servers.openProblems","open problems")}`:""]}),(C.missing_groups||[]).length>0&&(0,e.jsxs)("span",{style:{color:R},children:[" · ",o("admin.monitor.servers.missingGroups","missing group(s)"),": ",(C.missing_groups||[]).join(", ")]})]}),(0,e.jsxs)("div",{style:Se,children:[(0,e.jsx)(D,{n:A.server_count||0,label:o("admin.monitor.servers.stat.servers","servers"),color:$?y:T}),(0,e.jsx)(D,{n:A.up||0,label:o("admin.monitor.servers.stat.up","up"),color:$?y:N}),(0,e.jsx)(D,{n:A.down||0,label:o("admin.monitor.servers.stat.down","down"),color:$?y:(A.down||0)>0?_:w}),(0,e.jsx)(D,{n:A.unknown||0,label:o("admin.monitor.servers.stat.unknown","unknown"),color:$?y:(A.unknown||0)>0?R:w}),(0,e.jsx)(D,{n:P.disaster||0,label:o("admin.monitor.servers.stat.disaster","disaster"),color:$?y:(P.disaster||0)>0?_:w}),(0,e.jsx)(D,{n:P.high||0,label:o("admin.monitor.servers.stat.high","high"),color:$?y:(P.high||0)>0?_:w}),(0,e.jsx)(D,{n:A.problems_total||0,label:o("admin.monitor.servers.stat.problems","problems"),color:$?y:(A.problems_total||0)>0?R:w})]}),V.length>0&&(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:O,children:[o("admin.monitor.servers.anomalies","Anomalies")," / ",V.length]}),(0,e.jsx)("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:V.map((E,H)=>(0,e.jsx)(rn,{item:E},`${E.code}-${H}`))})]}),b.length>0&&(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:{...O,color:T},children:[o("admin.monitor.servers.outsideScope","VooDoo problems outside the configured groups")," / ",b.length]}),(0,e.jsx)("div",{style:{border:`1px solid ${T}44`,background:`${T}0d`,padding:"10px 12px"},children:b.map(E=>(0,e.jsxs)("div",{style:{marginBottom:6},children:[(0,e.jsx)(st,{problem:E,t:o}),(0,e.jsx)("div",{style:{...z,marginLeft:2},children:E.host||o("admin.monitor.servers.unknownHost","unknown host")})]},E.event_id))})]}),(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:O,children:[o("admin.monitor.servers.list","Servers")," / ",s.length]}),s.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse",minWidth:880},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:{...S,minWidth:210},children:o("admin.monitor.servers.col.server","Server")}),(0,e.jsx)("th",{style:{...S,minWidth:110},children:o("admin.monitor.servers.col.state","State")}),(0,e.jsx)("th",{style:{...S,minWidth:130},children:o("admin.monitor.servers.col.address","Address")}),(0,e.jsx)("th",{style:{...S,minWidth:90},children:o("admin.monitor.servers.col.problems","Problems")}),(0,e.jsx)("th",{style:S,children:o("admin.monitor.servers.col.detail","What is wrong")})]})}),(0,e.jsx)("tbody",{children:s.map(E=>(0,e.jsxs)("tr",{style:Y,children:[(0,e.jsxs)("td",{"data-label":o("admin.monitor.servers.col.server","Server"),style:v,children:[(0,e.jsx)("div",{children:E.name||E.host}),E.host&&E.host!==E.name?(0,e.jsx)("div",{style:F,children:E.host}):null,(E.groups||[]).length>0&&(0,e.jsx)("div",{style:z,children:E.groups.join(" · ")})]}),(0,e.jsx)("td",{"data-label":o("admin.monitor.servers.col.state","State"),style:v,children:(0,e.jsx)(os,{reachability:E.reachability,monitored:E.monitored,t:o})}),(0,e.jsx)("td",{"data-label":o("admin.monitor.servers.col.address","Address"),style:v,children:(E.addresses||[]).length?E.addresses.map(H=>(0,e.jsx)("div",{children:H},H)):I?(0,e.jsx)("span",{style:{color:y},title:o("admin.monitor.servers.addressHiddenHint","Server addresses are shown to superadmins only"),children:o("admin.monitor.servers.addressHidden","withheld")}):(0,e.jsx)("span",{style:{color:y},children:"â"})}),(0,e.jsxs)("td",{"data-label":o("admin.monitor.servers.col.problems","Problems"),style:v,children:[(0,e.jsx)("span",{style:{color:E.problem_count>0?at(E.worst_severity_name):N,fontWeight:700},children:E.problem_count}),E.problem_count>0&&E.worst_severity_name?(0,e.jsx)("div",{style:{...z,color:at(E.worst_severity_name)},children:E.worst_severity_name.replaceAll("_"," ")}):null]}),(0,e.jsx)("td",{"data-label":o("admin.monitor.servers.col.detail","What is wrong"),style:v,children:(E.problems||[]).length?(0,e.jsxs)(e.Fragment,{children:[E.problems.slice(0,4).map(H=>(0,e.jsx)(st,{problem:H,t:o},H.event_id)),E.problems.length>4&&(0,e.jsxs)("div",{style:z,children:["+ ",E.problems.length-4," ",o("admin.monitor.servers.more","more")]})]}):(0,e.jsx)("span",{style:{color:y},children:"â"})})]},E.host_id||E.host))})]}):(0,e.jsx)("div",{style:{color:!$&&!d?N:y,fontSize:12,letterSpacing:1},children:$?o("admin.monitor.servers.unknown","SERVER STATE UNKNOWN â ZABBIX COULD NOT BE READ"):d?o("admin.monitor.servers.noMatch","NO SERVER MATCHES THE SEARCH"):o("admin.monitor.servers.none","NO SERVERS IN THE CONFIGURED ZABBIX HOST GROUPS")})]}),k.length>0&&(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:O,children:[o("admin.monitor.servers.unattributed","Problems in scope with no host resolved")," / ",k.length]}),(0,e.jsxs)("div",{style:{border:`1px solid ${Q}`,padding:"10px 12px"},children:[k.slice(0,10).map(E=>(0,e.jsx)(st,{problem:E,t:o},E.event_id)),k.length>10&&(0,e.jsxs)("div",{style:z,children:["+ ",k.length-10," ",o("admin.monitor.servers.more","more")]})]})]}),(0,e.jsxs)("section",{children:[(0,e.jsx)("div",{style:O,children:o("admin.monitor.servers.salt.title","Salt presence probe")}),(0,e.jsxs)("div",{style:{border:`1px solid ${Q}`,padding:"10px 12px",display:"flex",flexDirection:"column",gap:10},children:[(0,e.jsx)("div",{style:{color:y,fontSize:11,lineHeight:1.5,maxWidth:760},children:o("admin.monitor.servers.salt.hint","A separate ~20-second probe: which minions Salt believes are connected (manage.status) versus which actually answer (test.ping). Deliberately NOT joined to the Zabbix rows above â the two naming schemes do not map one to one, and an invented mapping would be worse than two honest lists.")}),(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,flexWrap:"wrap"},children:[(0,e.jsx)("button",{type:"button",onClick:g,disabled:m,style:{...Ce,height:30,opacity:m?.6:1,cursor:m?"default":"pointer"},children:m?o("admin.monitor.servers.salt.busy","Probing⦠(~20 s)"):o("admin.monitor.servers.salt.run","Run probe")}),u&&te!=null&&(0,e.jsxs)("span",{style:{color:f,fontSize:11},children:[o("admin.monitor.servers.salt.probedAt","probed")," ",ee(te)," ",o("admin.monitor.ago","ago"),u.took_ms!=null?` · ${Math.round(u.took_ms/1e3)}s`:""]}),l&&(0,e.jsx)("span",{style:{color:_,fontSize:11.5,letterSpacing:.6},children:l})]}),u&&u.ok!==!1&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{style:Se,children:[(0,e.jsx)(D,{n:u.summary?.present||0,label:o("admin.monitor.servers.salt.present","salt says up"),color:T}),(0,e.jsx)(D,{n:u.summary?.responsive||0,label:o("admin.monitor.servers.salt.responsive","answered ping"),color:N}),(0,e.jsx)(D,{n:u.summary?.silent||0,label:o("admin.monitor.servers.salt.silent","present but silent"),color:(u.summary?.silent||0)>0?R:w}),(0,e.jsx)(D,{n:u.summary?.absent_but_responsive||0,label:o("admin.monitor.servers.salt.absent","answered but absent"),color:(u.summary?.absent_but_responsive||0)>0?R:w})]}),(u.silent||[]).length>0&&(0,e.jsxs)("div",{style:{color:w,fontSize:11.5,lineHeight:1.5},children:[(0,e.jsxs)("span",{style:{color:R,fontWeight:700},children:[o("admin.monitor.servers.salt.silentList","Present but silent"),":"]}
1)," ",(u.silent||[]).join(", ")]})]})]})]}),(0,e.jsx)("div",{style:{color:y,fontSize:11,lineHeight:1.4,maxWidth:760},children:o("admin.monitor.servers.hint","Read live from Zabbix when this tab is opened and when you press Refresh â this page never polls in the background. Zabbix is the authority here: no health verdict is computed on top of what it reports.")})]})}function ls({data:t,loading:n,peers:s,logs:d,anomalies:h,t:c}){if(!t)return(0,e.jsx)("div",{style:K,children:n?c("admin.monitor.loading","Loadingâ¦"):"WG-LEASER"});const u=t.summary||{},p=t.stats||{},m=t.core_events||[];return(0,e.jsxs)("div",{className:"mwide",style:{display:"flex",flexDirection:"column",gap:16,padding:12,minWidth:1120},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},children:[(0,e.jsx)(Le,{status:p.ok?"ok":"missing"}),(0,e.jsx)("span",{style:{color:T,fontWeight:800,letterSpacing:1.2},children:"WG-LEASER"}),(0,e.jsxs)("span",{style:{color:w},children:[p.endpoint||"endpoint unknown",p.listen_port?`:${p.listen_port}`:""]}),(0,e.jsxs)("span",{style:{color:y},children:["DNS ",p.dns||"â"]}),(0,e.jsxs)("span",{style:{color:y},children:["latency ",p.latency_ms??"â","ms"]}),(0,e.jsx)("span",{style:{flex:1}}),(0,e.jsxs)("span",{style:{color:y},children:[c("admin.monitor.updated","updated")," ",U(t.generated_at)]})]}),(0,e.jsxs)("div",{style:Se,children:[(0,e.jsx)(D,{n:u.registered_peers||0,label:"registered",color:T}),(0,e.jsx)(D,{n:u.live_peers||0,label:"live",color:N}),(0,e.jsx)(D,{n:u.stale_peers||0,label:"stale",color:R}),(0,e.jsx)(D,{n:u.missing_peers||0,label:"missing",color:_}),(0,e.jsx)(D,{n:u.downloaded_peers||0,label:"got config",color:T}),(0,e.jsx)(D,{n:u.unknown_token_attempts||0,label:"unknown tokens",color:(u.unknown_token_attempts||0)>0?R:w}),(0,e.jsx)(D,{n:u.active_without_wg_peers||0,label:"active no wg",color:(u.active_without_wg_peers||0)>0?_:w}),(0,e.jsxs)("span",{style:{color:w,fontSize:12,fontWeight:700,letterSpacing:1},children:["RX ",We(u.total_rx_bytes)," / TX ",We(u.total_tx_bytes)]})]}),(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:{color:J,fontSize:11,fontWeight:800,letterSpacing:1.4,textTransform:"uppercase",marginBottom:8},children:["Anomalies / ",h.length]}),h.length?(0,e.jsx)("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:h.slice(0,12).map((l,g)=>(0,e.jsx)(ss,{item:l},`${l.code}-${l.peer_id||l.drone_id||g}`))}):(0,e.jsx)("div",{style:{color:y,fontSize:12,letterSpacing:1},children:"NO WG-LEASER ANOMALIES IN CURRENT WINDOW"})]}),(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:{color:J,fontSize:11,fontWeight:800,letterSpacing:1.4,textTransform:"uppercase",marginBottom:8},children:["Live peers / ",s.length]}),s.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse",minWidth:1080},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:{...S,minWidth:150},children:"Peer"}),(0,e.jsx)("th",{style:{...S,minWidth:165},children:"Board / User"}),(0,e.jsx)("th",{style:{...S,minWidth:150},children:"WG"}),(0,e.jsx)("th",{style:{...S,minWidth:180},children:"Traffic"}),(0,e.jsx)("th",{style:{...S,minWidth:180},children:"Config access"}),(0,e.jsx)("th",{style:{...S,minWidth:210},children:"Flight"}),(0,e.jsx)("th",{style:S,children:"Flags"})]})}),(0,e.jsx)("tbody",{children:s.map(l=>(0,e.jsxs)("tr",{style:Y,children:[(0,e.jsxs)("td",{"data-label":"Peer",style:v,children:[(0,e.jsx)("div",{children:l.peer_id}),(0,e.jsx)("div",{style:z,children:l.ip||"no ip"})]}),(0,e.jsx)("td",{"data-label":"Board / User",style:v,children:l.drone?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{children:l.drone.name||l.drone.drone_id}),(0,e.jsxs)("div",{style:F,children:[l.drone.warehouse||"â"," / ",l.drone.hangar||"â"]})]}):l.user?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{children:l.user.username}),(0,e.jsxs)("div",{style:F,children:[l.user.role||"user",l.user.online?" / online":""]})]}):(0,e.jsx)("span",{style:{color:y},children:"unmapped"})}),(0,e.jsxs)("td",{"data-label":"WG",style:v,children:[(0,e.jsx)(Le,{status:l.status}),(0,e.jsx)("div",{style:F,children:l.latest_handshake_age_seconds==null?"no handshake":ee(l.latest_handshake_age_seconds)}),(0,e.jsxs)("div",{style:z,children:[l.endpoint||"no endpoint",l.persistent_keepalive_seconds?` / ka ${l.persistent_keepalive_seconds}s`:""]})]}),(0,e.jsxs)("td",{"data-label":"Traffic",style:v,children:[(0,e.jsxs)("div",{children:["RX ",We(l.transfer_rx_bytes)]}),(0,e.jsxs)("div",{style:F,children:["TX ",We(l.transfer_tx_bytes)]})]}
1),(0,e.jsxs)("td",{"data-label":"Config access",style:v,children:[(0,e.jsxs)("div",{children:[l.access.success_count," ok / ",l.access.failure_count," fail"]}),(0,e.jsxs)("div",{style:F,children:["last ",U(l.access.last_success_at||l.access.last_attempt_at)]}),(0,e.jsxs)("div",{style:z,children:["first ",U(l.access.first_success_at)]})]}),(0,e.jsx)("td",{"data-label":"Flight",style:v,children:l.active_flight?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:{color:N},children:l.active_flight.operator_username||"operator"}),(0,e.jsxs)("div",{style:F,children:[l.active_flight.drone_id," / ",ee(we(l.active_flight.connected_at))]}),l.active_flight.secondary_operator_username&&(0,e.jsxs)("div",{style:z,children:["standby ",l.active_flight.secondary_operator_username]})]}):l.last_flight?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:{color:w},children:l.last_flight.operator_username||"last flight"}),(0,e.jsxs)("div",{style:F,children:["closed ",U(l.last_flight.ended_at)]})]}):(0,e.jsx)("span",{style:{color:y},children:"no flight link"})}),(0,e.jsx)("td",{"data-label":"Flags",style:v,children:l.anomalies.length?(0,e.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:5},children:l.anomalies.map(g=>(0,e.jsx)("span",{style:{..._e,padding:"4px 7px",color:g.includes("missing")||g.includes("orphan")?R:w},children:g.replaceAll("_"," ")},g))}):(0,e.jsx)("span",{style:{color:N},children:"clean"})})]},l.peer_id))})]}):(0,e.jsx)("div",{style:K,children:n?c("admin.monitor.loading","Loadingâ¦"):"No WG peers"})]}),(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:{color:J,fontSize:11,fontWeight:800,letterSpacing:1.4,textTransform:"uppercase",marginBottom:8},children:["Config access / ",d.length]}),d.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse",minWidth:980},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:{...S,minWidth:100},children:"Time"}),(0,e.jsx)("th",{style:{...S,minWidth:160},children:"Peer"}),(0,e.jsx)("th",{style:{...S,minWidth:160},children:"Token"}),(0,e.jsx)("th",{style:{...S,minWidth:100},children:"Result"}),(0,e.jsx)("th",{style:{...S,minWidth:190},children:"Mapped to"})]})}),(0,e.jsx)("tbody",{children:d.slice(0,80).map((l,g)=>(0,e.jsxs)("tr",{style:Y,children:[(0,e.jsx)("td",{style:{...v,color:w},children:ot(l.timestamp)}),(0,e.jsx)("td",{style:v,children:l.peer_id||(0,e.jsx)("span",{style:{color:R},children:"unknown token"})}),(0,e.jsx)("td",{style:{...v,color:w},children:l.token_preview||"â"}),(0,e.jsxs)("td",{style:v,children:[(0,e.jsx)("span",{style:{color:l.ok?N:R},children:l.result||"â"}),(0,e.jsx)("span",{style:{color:y},children:l.known_peer?" / known":" / not registered"})]}),(0,e.jsx)("td",{style:v,children:l.drone?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{children:l.drone.name||l.drone.drone_id}),(0,e.jsx)("div",{style:F,children:l.drone.warehouse||"â"})]}):l.user?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{children:l.user.username}),(0,e.jsx)("div",{style:F,children:l.user.role||"user"})]}):(0,e.jsx)("span",{style:{color:y},children:"â"})})]},`${l.timestamp}-${l.token_preview}-${g}`))})]}):(0,e.jsx)("div",{style:K,children:n?c("admin.monitor.loading","Loadingâ¦"):"No config access logs"})]}),(0,e.jsxs)("section",{children:[(0,e.jsxs)("div",{style:{color:J,fontSize:11,fontWeight:800,letterSpacing:1.4,textTransform:"uppercase",marginBottom:8},children:["Core WG events / ",m.length]}),m.length?(0,e.jsxs)("table",{className:"mcards",style:{width:"100%",borderCollapse:"collapse",minWidth:880},children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{style:{...S,minWidth:96},children:"Time"}),(0,e.jsx)("th",{style:{...S,minWidth:130},children:"Board"}),(0,e.jsx)("th",{style:S,children:"Event"}),(0,e.jsx)("th",{style:S,children:"Reason"})]})}),(0,e.jsx)("tbody",{children:m.map((l,g)=>(0,e.jsxs)("tr",{style:Y,children:[(0,e.jsx)("td",{style:{...v,color:w},children:ot(l.ts)}),(0,e.jsx)("td",{style:v,children:l.drone_id||"â"}),(0,e.jsx)("td",{style:{...v,color:ae(l.severity),textTransform:"uppercase"},children:l.event_type}),(0,e.jsx)("td",{style:{...v,color:w},children:l.reason||"â"})]},l._id||`${l.ts}-${g}`))})]}):(0,e.jsx)("div",{style:{color:y,fontSize:12,letterSpacing:1},children:"NO CORE WG EVENTS"})]})]})}export{hs as MonitorPanel};
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.