import{a as e,c as t,i as n,r,t as i}from"./dist-aE7UmubC.js";import{C as a,D as o,Ht as s,Jt as c,O as l,Q as u,T as d,Zt as f,_ as p,bt as m,in as h,on as g,vn as _}from"./index-BjDzWYEf.js";import{t as v}from"./button-DwYvdWVr.js";import{t as y}from"./Bestaetigen-DNJdB_zl.js";import{t as b}from"./Panel-uT1S5ZGr.js";var x=t(e(),1),S=r(),C={laeuft:{wort:`läuft`,punkt:`bg-gruen`,text:`text-text-3`},startet:{wort:`startet`,punkt:`bg-bernstein`,text:`text-bernstein`},stoppt:{wort:`stoppt`,punkt:`bg-bernstein`,text:`text-bernstein`},antwortet_nicht:{wort:`antwortet nicht`,punkt:`bg-rot`,text:`text-rot-text`},gestoppt:{wort:`gestoppt`,punkt:`bg-rot`,text:`text-rot-text`},gescheitert:{wort:`gescheitert`,punkt:`bg-rot`,text:`text-rot-text`},schlaeft:{wort:`schläft`,punkt:`bg-text-3`,text:`text-text-3`}};function w(e){return e.zustand?e.zustand:e.ok?`laeuft`:e.schlaeft?`schlaeft`:`antwortet_nicht`}var T={gescheitert:0,gestoppt:0,antwortet_nicht:0,startet:1,stoppt:1,laeuft:3,schlaeft:4};function E(e){let t=w(e);return t===`laeuft`&&(e.neustarts??0)>0?2:T[t]}var D=e=>E(e)===0,O=e=>[...e].sort((e,t)=>E(e)-E(t)),k=new Intl.NumberFormat(`de-DE`,{maximumFractionDigits:0}),A=new Intl.NumberFormat(`de-DE`,{minimumFractionDigits:1,maximumFractionDigits:1});function ee(e){if(e==null)return`–`;let t=e/1024**2;return t<1e3?`${k.format(t)} MB`:`${A.format(t/1024)} GB`}function te(e,t){return e.speicher_bytes==null||!t?null:(e.speicher_bytes+(e.grafik_bytes??0))/t*100}function ne(e){return e==null?`–`:e>0&&e<.05?`< 0,1 %`:e<10?`${A.format(e).replace(/,0$/,``)} %`:`${k.format(e)} %`}function j(e){return e==null||e<0?`–`:e<60?`< 1 min`:p(e)}var M=`Europe/Berlin`,N=new Intl.DateTimeFormat(`de-DE`,{hour:`2-digit`,minute:`2-digit`,timeZone:M}),P=new Intl.DateTimeFormat(`de-DE`,{day:`2-digit`,month:`2-digit`,timeZone:M}),F=new Intl.DateTimeFormat(`en-CA`,{timeZone:M});function re(e,t=Date.now()){let n=new Date(t-e*1e3),r=F.format(n);return r===F.format(new Date(t))?`heute ${N.format(n)}`:r===F.format(new Date(t-864e5))?`gestern ${N.format(n)}`:`${P.format(n)}, ${N.format(n)}`}function ie(e,t=Date.now()){let n=w(e);return n===`schlaeft`?`mit Absicht aus`:(n===`gestoppt`||n===`gescheitert`)&&e.aus_seit_s!=null?`aus seit ${re(e.aus_seit_s,t)}`:null}function I(e){let t=w(e);return t===`schlaeft`?`Wecken`:t===`gestoppt`||t===`gescheitert`?`Starten`:`Neu starten`}var L={"llama-swap":`Laufende Antworten brechen ab; die Modelle werden danach neu geladen.`,"mission-control-2":`Das ist diese Oberfläche selbst: Sie ist ein paar Sekunden nicht erreichbar.`,"hermes-gateway":`Lucy antwortet in der Zeit nicht.`};function R(e){let t=I(e);if(t===`Wecken`)return{titel:`${e.name} wecken?`,text:`Der Dienst startet und läuft bis zum nächsten Neustart der Box. Danach schläft er wieder.`,knopf:t};if(t===`Starten`)return{titel:`${e.name} starten?`,text:`Der Dienst wird gestartet. Scheitert er wieder, steht der Grund im Protokoll.`,knopf:t};let n=L[e.unit]?` ${L[e.unit]}`:``;return{titel:`${e.name} neu starten?`,text:`Der Dienst wird neu gestartet und ist dabei kurz nicht erreichbar.${n}`,knopf:t}}function z(e){let t=I(e);return`${e.name} ${t===`Wecken`?`wird geweckt`:t===`Starten`?`startet`:`startet neu`}.`}var B=n(),ae={laeuft:`ok`,startet:`warn`,stoppt:`warn`,antwortet_nicht:`rot`,gestoppt:`rot`,gescheitert:`rot`,schlaeft:`aus`},oe=`grid-cols-2 gap-x-4 sm:grid-cols-4 xl:gap-x-3 xl:grid-cols-[minmax(0,1.7fr)_7rem_minmax(0,0.7fr)_minmax(0,1.2fr)_7.5rem_5rem_9.5rem] min-[87.5rem]:grid-cols-[minmax(0,1.7fr)_7rem_minmax(0,0.7fr)_minmax(0,1.2fr)_7.5rem_5rem_17.5rem]`,V=new Intl.DateTimeFormat(`de-DE`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,timeZone:`Europe/Berlin`});function H(e){let t=(0,S.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,B.jsx)(`span`,{className:`block text-xs text-text-3 xl:hidden`,children:n}),t[0]=n,t[1]=r),r}function se(e){let t=(0,S.c)(7),{anteil:n,children:r}=e,i;t[0]===r?i=t[1]:(i=(0,B.jsx)(`span`,{className:`ziffern text-sm text-text-2`,children:r}),t[0]=r,t[1]=i);let a;t[2]===n?a=t[3]:(a=n!==null&&(0,B.jsx)(`span`,{className:`h-1.5 w-full max-w-40 overflow-hidden rounded-full bg-white/[0.07]`,"aria-hidden":!0,children:(0,B.jsx)(`span`,{className:`block h-full rounded-full`,style:{width:`${Math.min(100,Math.max(2,n))}%`,background:`var(--reihe-1)`}})}),t[2]=n,t[3]=a);let o;return t[4]!==i||t[5]!==a?(o=(0,B.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-1`,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6],o}function ce(e){let t=(0,S.c)(9),{d:n,id:r}=e,i=m(n.unit),a=(0,x.useRef)(null),o;if(i.isPending)o=`Wird gelesen …`;else if(i.isError)o=`Das Protokoll lässt sich gerade nicht lesen: ${i.error.message}`;else if(i.data.ok===!1)o=i.data.err||i.data.text||`Das Protokoll lässt sich nicht lesen.`;else{let e;t[0]===i.data.text?e=t[1]:(e=i.data.text?.trim()||`Noch keine Einträge.`,t[0]=i.data.text,t[1]=e),o=e}let s;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=()=>{a.current&&(a.current.scrollTop=a.current.scrollHeight)},t[2]=s):s=t[2];let c;t[3]===o?c=t[4]:(c=[o],t[3]=o,t[4]=c),(0,x.useEffect)(s,c);let l=`Letzte Protokollzeilen von ${n.name}`,u;return t[5]!==r||t[6]!==l||t[7]!==o?(u=(0,B.jsx)(`pre`,{id:r,ref:a,tabIndex:0,"aria-label":l,className:`ziffern m-0 max-h-[50vh] w-full overflow-auto rounded-lg bg-black/30 ring-1 ring-white/[0.07] ring-inset p-3 text-xs leading-relaxed whitespace-pre-wrap break-words text-text-2`,children:o}),t[5]=r,t[6]=l,t[7]=o,t[8]=u):u=t[8],u}function U(e){let t=(0,S.c)(113),{d:n,gesamt:r,offen:o,startet:s,onProtokoll:c,onFrage:l}=e,u=C[w(n)],f;t[0]===n?f=t[1]:(f=ie(n),t[0]=n,t[1]=f);let p=f,m,h,g,_,y,b,x,T,E,O,k;if(t[2]!==n||t[3]!==r||t[4]!==u.text||t[5]!==u.wort||t[6]!==p){let e=te(n,r);m=n.neustarts??0,h=`protokoll-${n.unit}`,T=`row`,t[18]===Symbol.for(`react.memo_cache_sentinel`)?(E=i(`grid gap-y-2.5 border-t border-white/[0.06] py-3 xl:items-center`,oe),t[18]=E):E=t[18];let o;t[19]===n.unit?o=t[20]:(o=d(n.unit),t[19]=n.unit,t[20]=o);let s=ae[w(n)],c;t[21]!==o||t[22]!==s?(c=(0,B.jsx)(a,{bild:o,groesse:`sm`,punkt:s}),t[21]=o,t[22]=s,t[23]=c):c=t[23];let l;t[24]===n.name?l=t[25]:(l=(0,B.jsx)(`span`,{className:`text-[15px] font-semibold break-words`,children:n.name}),t[24]=n.name,t[25]=l);let f=n.scope===`system`?` · Systemdienst`:``,v;t[26]!==n.unit||t[27]!==f?(v=(0,B.jsxs)(`span`,{className:`ziffern text-xs break-words text-text-3`,children:[n.unit,f]}),t[26]=n.unit,t[27]=f,t[28]=v):v=t[28];let S;t[29]!==l||t[30]!==v?(S=(0,B.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[l,v]}),t[29]=l,t[30]=v,t[31]=S):S=t[31],t[32]!==c||t[33]!==S?(O=(0,B.jsxs)(`div`,{role:`rowheader`,className:`col-span-2 flex min-w-0 items-center gap-3 xl:col-span-1`,children:[c,S]}),t[32]=c,t[33]=S,t[34]=O):O=t[34];let C;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,B.jsx)(H,{children:`Zustand`}),t[35]=C):C=t[35];let D;t[36]===u.text?D=t[37]:(D=i(`etikett text-[10.5px] tracking-[0.12em]`,u.text),t[36]=u.text,t[37]=D);let A;t[38]!==D||t[39]!==u.wort?(A=(0,B.jsx)(`span`,{className:D,children:u.wort}),t[38]=D,t[39]=u.wort,t[40]=A):A=t[40];let j;t[41]===p?j=t[42]:(j=p&&(0,B.jsx)(`span`,{className:`text-xs text-text-3`,children:p}),t[41]=p,t[42]=j);let M;t[43]===m?M=t[44]:(M=m>0&&(0,B.jsx)(`span`,{className:`text-xs text-bernstein xl:hidden`,children:m===1?`1 Neustart`:`${m} Neustarts`}),t[43]=m,t[44]=M),t[45]!==A||t[46]!==j||t[47]!==M?(k=(0,B.jsxs)(`span`,{role:`cell`,className:`flex min-w-0 flex-col gap-0.5`,children:[C,A,j,M]}),t[45]=A,t[46]=j,t[47]=M,t[48]=k):k=t[48];let N;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,B.jsx)(H,{children:`CPU`}),t[49]=N):N=t[49],t[50]===n.cpu_prozent?g=t[51]:(g=(0,B.jsxs)(`span`,{role:`cell`,className:`min-w-0`,children:[N,n.cpu_prozent==null?(0,B.jsx)(`span`,{className:`text-sm text-text-3`,children:`–`}):(0,B.jsx)(se,{anteil:n.cpu_prozent,children:ne(n.cpu_prozent)})]}),t[50]=n.cpu_prozent,t[51]=g),_=`cell`,y=`min-w-0`,t[52]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,B.jsx)(H,{children:`Speicher`}),t[52]=b):b=t[52],x=n.speicher_bytes==null?(0,B.jsx)(`span`,{className:`text-sm text-text-3`,children:`–`}):(0,B.jsxs)(se,{anteil:e,children:[ee(n.speicher_bytes+(n.grafik_bytes??0)),e!==null&&(0,B.jsxs)(`span`,{className:`font-sans text-xs text-text-3`,children:[` · `,ne(e)]})]}),t[2]=n,t[3]=r,t[4]=u.text,t[5]=u.wort,t[6]=p,t[7]=m,t[8]=h,t[9]=g,t[10]=_,t[11]=y,t[12]=b,t[13]=x,t[14]=T,t[15]=E,t[16]=O,t[17]=k}else m=t[7],h=t[8],g=t[9],_=t[10],y=t[11],b=t[12],x=t[13],T=t[14],E=t[15],O=t[16],k=t[17];let A;t[53]!==n.grafik_bytes||t[54]!==n.speicher_bytes?(A=n.speicher_bytes!=null&&!!n.grafik_bytes&&(0,B.jsxs)(`span`,{className:`mt-1 block text-xs text-text-3`,children:[`davon `,ee(n.grafik_bytes),` Modelle`]}),t[53]=n.grafik_bytes,t[54]=n.speicher_bytes,t[55]=A):A=t[55];let M;t[56]!==A||t[57]!==_||t[58]!==y||t[59]!==b||t[60]!==x?(M=(0,B.jsxs)(`span`,{role:_,className:y,children:[b,x,A]}),t[56]=A,t[57]=_,t[58]=y,t[59]=b,t[60]=x,t[61]=M):M=t[61];let N;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,B.jsx)(H,{children:`Läuft seit`}),t[62]=N):N=t[62];let P;t[63]===n.laeuft_seit_s?P=t[64]:(P=j(n.laeuft_seit_s),t[63]=n.laeuft_seit_s,t[64]=P);let F;t[65]===P?F=t[66]:(F=(0,B.jsx)(`span`,{className:`ziffern text-sm text-text-2`,children:P}),t[65]=P,t[66]=F);let L;t[67]===n.laeuft_seit_s?L=t[68]:(L=n.laeuft_seit_s!=null&&(0,B.jsxs)(`span`,{className:`text-xs text-text-3`,children:[`gestartet `,re(n.laeuft_seit_s)]}),t[67]=n.laeuft_seit_s,t[68]=L);let R;t[69]!==F||t[70]!==L?(R=(0,B.jsxs)(`span`,{role:`cell`,className:`flex min-w-0 flex-col gap-0.5`,children:[N,F,L]}),t[69]=F,t[70]=L,t[71]=R):R=t[71];let z=m>0?`text-bernstein`:`text-text-3`,V;t[72]===z?V=t[73]:(V=i(`ziffern text-sm`,z),t[72]=z,t[73]=V);let U=n.neustarts??`–`,W;t[74]!==V||t[75]!==U?(W=(0,B.jsx)(`span`,{role:`cell`,className:`hidden min-w-0 xl:block`,children:(0,B.jsx)(`span`,{className:V,children:U})}),t[74]=V,t[75]=U,t[76]=W):W=t[76];let G=o?`info`:`ghost`,K=o?h:void 0,q=`Protokoll von ${n.name}`,J;t[77]!==o||t[78]!==c||t[79]!==G||t[80]!==K||t[81]!==q?(J=(0,B.jsx)(v,{variant:G,size:`sm`,"aria-expanded":o,"aria-controls":K,"aria-label":q,onClick:c,children:`Protokoll`}),t[77]=o,t[78]=c,t[79]=G,t[80]=K,t[81]=q,t[82]=J):J=t[82];let le=D(n)?`default`:`outline`,ue=s!==null,Y;t[83]!==n||t[84]!==s?(Y=s===n.unit?`startet …`:I(n),t[83]=n,t[84]=s,t[85]=Y):Y=t[85];let de=`${n.name}: ${Y}`,X;t[86]!==n||t[87]!==s?(X=s===n.unit?`Startet …`:I(n),t[86]=n,t[87]=s,t[88]=X):X=t[88];let Z;t[89]!==l||t[90]!==le||t[91]!==ue||t[92]!==de||t[93]!==X?(Z=(0,B.jsx)(v,{variant:le,size:`sm`,disabled:ue,"aria-label":de,onClick:l,children:X}),t[89]=l,t[90]=le,t[91]=ue,t[92]=de,t[93]=X,t[94]=Z):Z=t[94];let Q;t[95]!==J||t[96]!==Z?(Q=(0,B.jsxs)(`span`,{role:`cell`,className:`col-span-2 flex flex-wrap gap-2 sm:col-start-3 sm:row-start-1 sm:justify-end sm:self-start xl:col-span-1 xl:col-start-auto xl:row-start-auto xl:flex-col xl:items-stretch xl:self-center min-[87.5rem]:flex-row min-[87.5rem]:justify-end`,children:[J,Z]}),t[95]=J,t[96]=Z,t[97]=Q):Q=t[97];let $;t[98]!==n||t[99]!==o||t[100]!==h?($=o&&(0,B.jsx)(`div`,{role:`cell`,className:`col-span-full`,children:(0,B.jsx)(ce,{d:n,id:h})}),t[98]=n,t[99]=o,t[100]=h,t[101]=$):$=t[101];let fe;return t[102]!==g||t[103]!==M||t[104]!==R||t[105]!==W||t[106]!==Q||t[107]!==$||t[108]!==T||t[109]!==E||t[110]!==O||t[111]!==k?(fe=(0,B.jsxs)(`div`,{role:T,className:E,children:[O,k,g,M,R,W,Q,$]}),t[102]=g,t[103]=M,t[104]=R,t[105]=W,t[106]=Q,t[107]=$,t[108]=T,t[109]=E,t[110]=O,t[111]=k,t[112]=fe):fe=t[112],fe}function W(e){let t=(0,S.c)(16),{stand:n,gewaehlt:r,startet:a,onProtokoll:o,onFrage:s}=e,c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,B.jsxs)(`div`,{role:`row`,className:i(`etikett hidden pb-2 text-[10.5px] tracking-[0.14em] text-text-3 xl:grid`,oe),children:[(0,B.jsx)(`span`,{role:`columnheader`,children:`Dienst`}),(0,B.jsx)(`span`,{role:`columnheader`,children:`Zustand`}),(0,B.jsx)(`span`,{role:`columnheader`,children:`CPU`}),(0,B.jsx)(`span`,{role:`columnheader`,children:`Speicher`}),(0,B.jsx)(`span`,{role:`columnheader`,children:`Läuft seit`}),(0,B.jsx)(`span`,{role:`columnheader`,children:`Neustarts`}),(0,B.jsx)(`span`,{role:`columnheader`,className:`sr-only`,children:`Aktionen`})]}),t[0]=c):c=t[0];let l;if(t[1]!==r||t[2]!==s||t[3]!==o||t[4]!==n.services||t[5]!==n.speicher_gesamt||t[6]!==a){let e;t[8]!==r||t[9]!==s||t[10]!==o||t[11]!==n.speicher_gesamt||t[12]!==a?(e=e=>(0,B.jsx)(U,{d:e,gesamt:n.speicher_gesamt,offen:r===e.unit,startet:a,onProtokoll:()=>o(e.unit),onFrage:()=>s(e)},e.unit),t[8]=r,t[9]=s,t[10]=o,t[11]=n.speicher_gesamt,t[12]=a,t[13]=e):e=t[13],l=O(n.services).map(e),t[1]=r,t[2]=s,t[3]=o,t[4]=n.services,t[5]=n.speicher_gesamt,t[6]=a,t[7]=l}else l=t[7];let u;return t[14]===l?u=t[15]:(u=(0,B.jsxs)(`div`,{role:`table`,"aria-label":`Dienste der KI-Box`,className:`flex flex-col`,children:[c,l]}),t[14]=l,t[15]=u),u}function G(e){let t=(0,S.c)(8),{dienste:n,stand:r}=e,i;t[0]===n?i=t[1]:(i=n.filter(D),t[0]=n,t[1]=i);let a=i.length,s;if(t[2]!==n||t[3]!==a||t[4]!==r){let e=n.filter(q),i;t[6]===r?i=t[7]:(i=r>0&&(0,B.jsxs)(`span`,{className:`ziffern text-sm text-text-3`,children:[`Stand `,V.format(r)]}),t[6]=r,t[7]=i),s=(0,B.jsxs)(`span`,{className:`flex flex-wrap items-center gap-3`,children:[i,a>0?(0,B.jsx)(o,{art:`rot`,children:a===1?`1 Problem`:`${a} Probleme`}):e.length>0?(0,B.jsx)(o,{art:`bernstein`,children:e.some(K)?`Startet gerade`:`Stoppt gerade`}):(0,B.jsx)(o,{art:`gruen`,children:`Alles in Ordnung`})]}),t[2]=n,t[3]=a,t[4]=r,t[5]=s}else s=t[5];return s}function K(e){return w(e)===`startet`}function q(e){return E(e)===1}function J(){let e=_(),t=u(),[n,r]=(0,x.useState)(null),[i,a]=(0,x.useState)(null),[o,d]=(0,x.useState)(!1),[p,m]=(0,x.useState)(null);async function v(t){if(!p){m(t.unit);try{let e=await g(`/api/maintenance/restart`,{service:t.unit});e.ok?c(`erfolg`,z(t)):c(`fehler`,`${t.name} ließ sich nicht starten: ${f(e)}`)}catch(e){t.unit===`mission-control-2`&&e instanceof h?c(`info`,`Der Box-Wart startet neu. Die Seite ist gleich wieder da.`):c(`fehler`,e.message)}finally{m(null),e.invalidateQueries({queryKey:[`dienste`]}),e.invalidateQueries({queryKey:[`protokoll`,t.unit]})}}}if(t.isPending)return(0,B.jsx)(l,{text:`Die Dienste werden gelesen …`});if(!t.data)return(0,B.jsx)(l,{fehler:!0,text:`Die Dienste lassen sich gerade nicht lesen: ${t.error?.message??`keine Daten`}`});let S=t.data,C=i?R(i):null,w=S.speicher_gesamt?`den ${s(S.speicher_gesamt)}`:`dem Arbeitsspeicher`,T=S.kerne?`allen ${S.kerne} Kernen`:`allen Kernen`;return(0,B.jsxs)(b,{titel:`Dienste`,rechts:(0,B.jsx)(G,{dienste:S.services,stand:t.dataUpdatedAt}),children:[(0,B.jsx)(`p`,{className:`-mt-2 text-[15px] text-text-2`,children:`Die Dienste der KI-Box: ob sie laufen, was sie gerade an CPU und Speicher brauchen, seit wann sie laufen und was sie zuletzt ins Protokoll geschrieben haben. Probleme stehen oben.`}),S.services.length===0?(0,B.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Keine Dienste gefunden.`}):(0,B.jsx)(W,{stand:S,gewaehlt:n,startet:p,onProtokoll:e=>r(n===e?null:e),onFrage:e=>{a(e),d(!0)}}),(0,B.jsxs)(`p`,{className:`m-0 text-xs leading-relaxed text-text-3`,children:[`CPU: Anteil an `,T,` der Box, gemessen zwischen zwei Abfragen (alle zehn Sekunden). Speicher: was systemd dem Dienst zurechnet; der Balken zeigt den Anteil an `,w,` der Box. Bei der Engine zählen die geladenen Modelle mit — sie liegen im Grafikspeicher, den systemd keinem Dienst zurechnet. Neustarts: wie oft systemd den Dienst nach einem Absturz von selbst wieder gestartet hat. „Schläft“ heißt: mit Absicht abgeschaltet, kein Fehler.`]}),(0,B.jsx)(y,{offen:o&&!!C,titel:C?.titel??``,text:C?.text??``,knopf:C?.knopf??``,gefahr:C?.knopf===`Neu starten`,gesperrt:p!==null,onJa:()=>{d(!1),i&&v(i)},onNein:()=>d(!1)})]})}export{J as DiensteSeite};