import{i as e,n as t,r as n,s as r,t as i}from"./dist-D4CVSex9.js";import{$t as a,C as o,Ht as s,It as c,K as l,Kt as u,S as d,b as f,m as p,mt as m,pn as h,tn as g}from"./index-CKWhFN2A.js";import{t as _}from"./button-D8rvET0Z.js";import{t as v}from"./Bestaetigen-CMlebyiw.js";var y=r(e(),1),b=t(),x={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 S(e){return e.zustand?e.zustand:e.ok?`laeuft`:e.schlaeft?`schlaeft`:`antwortet_nicht`}var C={gescheitert:0,gestoppt:0,antwortet_nicht:0,startet:1,stoppt:1,laeuft:3,schlaeft:4};function w(e){let t=S(e);return t===`laeuft`&&(e.neustarts??0)>0?2:C[t]}var T=e=>w(e)===0,E=e=>[...e].sort((e,t)=>w(e)-w(t)),D=new Intl.NumberFormat(`de-DE`,{maximumFractionDigits:0}),O=new Intl.NumberFormat(`de-DE`,{minimumFractionDigits:1,maximumFractionDigits:1});function ee(e){if(e==null)return`–`;let t=e/1024**2;return t<1e3?`${D.format(t)} MB`:`${O.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?`${O.format(e).replace(/,0$/,``)} %`:`${D.format(e)} %`}function k(e){return e==null||e<0?`–`:e<60?`< 1 min`:p(e)}var A=`Europe/Berlin`,j=new Intl.DateTimeFormat(`de-DE`,{hour:`2-digit`,minute:`2-digit`,timeZone:A}),M=new Intl.DateTimeFormat(`de-DE`,{day:`2-digit`,month:`2-digit`,timeZone:A}),N=new Intl.DateTimeFormat(`en-CA`,{timeZone:A});function re(e,t=Date.now()){let n=new Date(t-e*1e3),r=N.format(n);return r===N.format(new Date(t))?`heute ${j.format(n)}`:r===N.format(new Date(t-864e5))?`gestern ${j.format(n)}`:`${M.format(n)}, ${j.format(n)}`}function ie(e,t=Date.now()){let n=S(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 P(e){let t=S(e);return t===`schlaeft`?`Wecken`:t===`gestoppt`||t===`gescheitert`?`Starten`:`Neu starten`}var F={"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 I(e){let t=P(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=F[e.unit]?` ${F[e.unit]}`:``;return{titel:`${e.name} neu starten?`,text:`Der Dienst wird neu gestartet und ist dabei kurz nicht erreichbar.${n}`,knopf:t}}function L(e){let t=P(e);return`${e.name} ${t===`Wecken`?`wird geweckt`:t===`Starten`?`startet`:`startet neu`}.`}var R=n(),ae=`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]`,z=new Intl.DateTimeFormat(`de-DE`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,timeZone:`Europe/Berlin`});function B(e){let t=(0,b.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,R.jsx)(`span`,{className:`block text-xs text-text-3 xl:hidden`,children:n}),t[0]=n,t[1]=r),r}function oe(e){let t=(0,b.c)(7),{anteil:n,children:r}=e,i;t[0]===r?i=t[1]:(i=(0,R.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,R.jsx)(`span`,{className:`h-1.5 w-full max-w-40 overflow-hidden rounded-full bg-erhaben`,"aria-hidden":!0,children:(0,R.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,R.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 se(e){let t=(0,b.c)(9),{d:n,id:r}=e,i=m(n.unit),a=(0,y.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,y.useEffect)(s,c);let l=`Letzte Protokollzeilen von ${n.name}`,u;return t[5]!==r||t[6]!==l||t[7]!==o?(u=(0,R.jsx)(`pre`,{id:r,ref:a,tabIndex:0,"aria-label":l,className:`ziffern m-0 max-h-[50vh] w-full overflow-auto rounded-lg border border-linie bg-[#0b0d0f] 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 V(e){let t=(0,b.c)(113),{d:n,gesamt:r,offen:a,startet:o,onProtokoll:s,onFrage:c}=e,l=x[S(n)],u;t[0]===n?u=t[1]:(u=ie(n),t[0]=n,t[1]=u);let d=u,f,p,m,h,g,v,y,C,w,E,D;if(t[2]!==n||t[3]!==r||t[4]!==l.punkt||t[5]!==l.text||t[6]!==l.wort||t[7]!==d){let e=te(n,r);f=n.neustarts??0,p=`protokoll-${n.unit}`,C=`row`,t[19]===Symbol.for(`react.memo_cache_sentinel`)?(w=i(`grid gap-y-2.5 border-t border-linie py-3 xl:items-center`,ae),t[19]=w):w=t[19];let a;t[20]===l.punkt?a=t[21]:(a=i(`mt-1.5 size-2.5 shrink-0 rounded-full`,l.punkt),t[20]=l.punkt,t[21]=a);let o;t[22]===a?o=t[23]:(o=(0,R.jsx)(`span`,{"aria-hidden":!0,className:a}),t[22]=a,t[23]=o);let s;t[24]===n.name?s=t[25]:(s=(0,R.jsx)(`span`,{className:`text-[15px] font-semibold break-words`,children:n.name}),t[24]=n.name,t[25]=s);let c=n.scope===`system`?` · Systemdienst`:``,u;t[26]!==n.unit||t[27]!==c?(u=(0,R.jsxs)(`span`,{className:`ziffern text-xs break-words text-text-3`,children:[n.unit,c]}),t[26]=n.unit,t[27]=c,t[28]=u):u=t[28];let _;t[29]!==s||t[30]!==u?(_=(0,R.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[s,u]}),t[29]=s,t[30]=u,t[31]=_):_=t[31],t[32]!==o||t[33]!==_?(E=(0,R.jsxs)(`div`,{role:`rowheader`,className:`col-span-2 flex min-w-0 items-start gap-2.5 xl:col-span-1`,children:[o,_]}),t[32]=o,t[33]=_,t[34]=E):E=t[34];let b;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,R.jsx)(B,{children:`Zustand`}),t[35]=b):b=t[35];let x;t[36]===l.text?x=t[37]:(x=i(`schild text-xs`,l.text),t[36]=l.text,t[37]=x);let S;t[38]!==x||t[39]!==l.wort?(S=(0,R.jsx)(`span`,{className:x,children:l.wort}),t[38]=x,t[39]=l.wort,t[40]=S):S=t[40];let T;t[41]===d?T=t[42]:(T=d&&(0,R.jsx)(`span`,{className:`text-xs text-text-3`,children:d}),t[41]=d,t[42]=T);let O;t[43]===f?O=t[44]:(O=f>0&&(0,R.jsx)(`span`,{className:`text-xs text-bernstein xl:hidden`,children:f===1?`1 Neustart`:`${f} Neustarts`}),t[43]=f,t[44]=O),t[45]!==S||t[46]!==T||t[47]!==O?(D=(0,R.jsxs)(`span`,{role:`cell`,className:`flex min-w-0 flex-col gap-0.5`,children:[b,S,T,O]}),t[45]=S,t[46]=T,t[47]=O,t[48]=D):D=t[48];let k;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,R.jsx)(B,{children:`CPU`}),t[49]=k):k=t[49],t[50]===n.cpu_prozent?m=t[51]:(m=(0,R.jsxs)(`span`,{role:`cell`,className:`min-w-0`,children:[k,n.cpu_prozent==null?(0,R.jsx)(`span`,{className:`text-sm text-text-3`,children:`–`}):(0,R.jsx)(oe,{anteil:n.cpu_prozent,children:ne(n.cpu_prozent)})]}),t[50]=n.cpu_prozent,t[51]=m),h=`cell`,g=`min-w-0`,t[52]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,R.jsx)(B,{children:`Speicher`}),t[52]=v):v=t[52],y=n.speicher_bytes==null?(0,R.jsx)(`span`,{className:`text-sm text-text-3`,children:`–`}):(0,R.jsxs)(oe,{anteil:e,children:[ee(n.speicher_bytes+(n.grafik_bytes??0)),e!==null&&(0,R.jsxs)(`span`,{className:`font-sans text-xs text-text-3`,children:[` · `,ne(e)]})]}),t[2]=n,t[3]=r,t[4]=l.punkt,t[5]=l.text,t[6]=l.wort,t[7]=d,t[8]=f,t[9]=p,t[10]=m,t[11]=h,t[12]=g,t[13]=v,t[14]=y,t[15]=C,t[16]=w,t[17]=E,t[18]=D}else f=t[8],p=t[9],m=t[10],h=t[11],g=t[12],v=t[13],y=t[14],C=t[15],w=t[16],E=t[17],D=t[18];let O;t[53]!==n.grafik_bytes||t[54]!==n.speicher_bytes?(O=n.speicher_bytes!=null&&!!n.grafik_bytes&&(0,R.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]=O):O=t[55];let A;t[56]!==O||t[57]!==h||t[58]!==g||t[59]!==v||t[60]!==y?(A=(0,R.jsxs)(`span`,{role:h,className:g,children:[v,y,O]}),t[56]=O,t[57]=h,t[58]=g,t[59]=v,t[60]=y,t[61]=A):A=t[61];let j;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,R.jsx)(B,{children:`Läuft seit`}),t[62]=j):j=t[62];let M;t[63]===n.laeuft_seit_s?M=t[64]:(M=k(n.laeuft_seit_s),t[63]=n.laeuft_seit_s,t[64]=M);let N;t[65]===M?N=t[66]:(N=(0,R.jsx)(`span`,{className:`ziffern text-sm text-text-2`,children:M}),t[65]=M,t[66]=N);let F;t[67]===n.laeuft_seit_s?F=t[68]:(F=n.laeuft_seit_s!=null&&(0,R.jsxs)(`span`,{className:`text-xs text-text-3`,children:[`gestartet `,re(n.laeuft_seit_s)]}),t[67]=n.laeuft_seit_s,t[68]=F);let I;t[69]!==N||t[70]!==F?(I=(0,R.jsxs)(`span`,{role:`cell`,className:`flex min-w-0 flex-col gap-0.5`,children:[j,N,F]}),t[69]=N,t[70]=F,t[71]=I):I=t[71];let L=f>0?`text-bernstein`:`text-text-3`,z;t[72]===L?z=t[73]:(z=i(`ziffern text-sm`,L),t[72]=L,t[73]=z);let V=n.neustarts??`–`,H;t[74]!==z||t[75]!==V?(H=(0,R.jsx)(`span`,{role:`cell`,className:`hidden min-w-0 xl:block`,children:(0,R.jsx)(`span`,{className:z,children:V})}),t[74]=z,t[75]=V,t[76]=H):H=t[76];let U=a?`info`:`ghost`,W=a?p:void 0,G=`Protokoll von ${n.name}`,K;t[77]!==a||t[78]!==s||t[79]!==U||t[80]!==W||t[81]!==G?(K=(0,R.jsx)(_,{variant:U,size:`sm`,"aria-expanded":a,"aria-controls":W,"aria-label":G,onClick:s,children:`Protokoll`}),t[77]=a,t[78]=s,t[79]=U,t[80]=W,t[81]=G,t[82]=K):K=t[82];let q=T(n)?`default`:`outline`,ce=o!==null,J;t[83]!==n||t[84]!==o?(J=o===n.unit?`startet …`:P(n),t[83]=n,t[84]=o,t[85]=J):J=t[85];let le=`${n.name}: ${J}`,Y;t[86]!==n||t[87]!==o?(Y=o===n.unit?`Startet …`:P(n),t[86]=n,t[87]=o,t[88]=Y):Y=t[88];let X;t[89]!==c||t[90]!==q||t[91]!==ce||t[92]!==le||t[93]!==Y?(X=(0,R.jsx)(_,{variant:q,size:`sm`,disabled:ce,"aria-label":le,onClick:c,children:Y}),t[89]=c,t[90]=q,t[91]=ce,t[92]=le,t[93]=Y,t[94]=X):X=t[94];let Z;t[95]!==K||t[96]!==X?(Z=(0,R.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:[K,X]}),t[95]=K,t[96]=X,t[97]=Z):Z=t[97];let Q;t[98]!==n||t[99]!==a||t[100]!==p?(Q=a&&(0,R.jsx)(`div`,{role:`cell`,className:`col-span-full`,children:(0,R.jsx)(se,{d:n,id:p})}),t[98]=n,t[99]=a,t[100]=p,t[101]=Q):Q=t[101];let $;return t[102]!==m||t[103]!==A||t[104]!==I||t[105]!==H||t[106]!==Z||t[107]!==Q||t[108]!==C||t[109]!==w||t[110]!==E||t[111]!==D?($=(0,R.jsxs)(`div`,{role:C,className:w,children:[E,D,m,A,I,H,Z,Q]}),t[102]=m,t[103]=A,t[104]=I,t[105]=H,t[106]=Z,t[107]=Q,t[108]=C,t[109]=w,t[110]=E,t[111]=D,t[112]=$):$=t[112],$}function H(e){let t=(0,b.c)(16),{stand:n,gewaehlt:r,startet:a,onProtokoll:o,onFrage:s}=e,c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,R.jsxs)(`div`,{role:`row`,className:i(`schild hidden pb-2 text-xs font-semibold text-text-3 xl:grid`,ae),children:[(0,R.jsx)(`span`,{role:`columnheader`,children:`Dienst`}),(0,R.jsx)(`span`,{role:`columnheader`,children:`Zustand`}),(0,R.jsx)(`span`,{role:`columnheader`,children:`CPU`}),(0,R.jsx)(`span`,{role:`columnheader`,children:`Speicher`}),(0,R.jsx)(`span`,{role:`columnheader`,children:`Läuft seit`}),(0,R.jsx)(`span`,{role:`columnheader`,children:`Neustarts`}),(0,R.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,R.jsx)(V,{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=E(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,R.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 U(e){let t=(0,b.c)(8),{dienste:n,stand:r}=e,i;t[0]===n?i=t[1]:(i=n.filter(T),t[0]=n,t[1]=i);let a=i.length,o;if(t[2]!==n||t[3]!==a||t[4]!==r){let e=n.filter(G),i;t[6]===r?i=t[7]:(i=r>0&&(0,R.jsxs)(`span`,{className:`ziffern text-sm text-text-3`,children:[`Stand `,z.format(r)]}),t[6]=r,t[7]=i),o=(0,R.jsxs)(`span`,{className:`flex flex-wrap items-center gap-3`,children:[i,a>0?(0,R.jsx)(d,{art:`rot`,children:a===1?`1 Problem`:`${a} Probleme`}):e.length>0?(0,R.jsx)(d,{art:`bernstein`,children:e.some(W)?`Startet gerade`:`Stoppt gerade`}):(0,R.jsx)(d,{art:`gruen`,children:`Alles in Ordnung`})]}),t[2]=n,t[3]=a,t[4]=r,t[5]=o}else o=t[5];return o}function W(e){return S(e)===`startet`}function G(e){return w(e)===1}function K(){let e=h(),t=l(),[n,r]=(0,y.useState)(null),[i,d]=(0,y.useState)(null),[p,m]=(0,y.useState)(!1),[_,b]=(0,y.useState)(null);async function x(t){if(!_){b(t.unit);try{let e=await g(`/api/maintenance/restart`,{service:t.unit});e.ok?s(`erfolg`,L(t)):s(`fehler`,`${t.name} ließ sich nicht starten: ${u(e)}`)}catch(e){t.unit===`mission-control-2`&&e instanceof a?s(`info`,`Der Box-Wart startet neu. Die Seite ist gleich wieder da.`):s(`fehler`,e.message)}finally{b(null),e.invalidateQueries({queryKey:[`dienste`]}),e.invalidateQueries({queryKey:[`protokoll`,t.unit]})}}}if(t.isPending)return(0,R.jsx)(o,{text:`Die Dienste werden gelesen …`});if(!t.data)return(0,R.jsx)(o,{fehler:!0,text:`Die Dienste lassen sich gerade nicht lesen: ${t.error?.message??`keine Daten`}`});let S=t.data,C=i?I(i):null,w=S.speicher_gesamt?`den ${c(S.speicher_gesamt)}`:`dem Arbeitsspeicher`,T=S.kerne?`allen ${S.kerne} Kernen`:`allen Kernen`;return(0,R.jsxs)(f,{titel:`Dienste`,rechts:(0,R.jsx)(U,{dienste:S.services,stand:t.dataUpdatedAt}),children:[(0,R.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,R.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Keine Dienste gefunden.`}):(0,R.jsx)(H,{stand:S,gewaehlt:n,startet:_,onProtokoll:e=>r(n===e?null:e),onFrage:e=>{d(e),m(!0)}}),(0,R.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,R.jsx)(v,{offen:p&&!!C,titel:C?.titel??``,text:C?.text??``,knopf:C?.knopf??``,gefahr:C?.knopf===`Neu starten`,gesperrt:_!==null,onJa:()=>{m(!1),i&&x(i)},onNein:()=>m(!1)})]})}export{K as DiensteSeite};