Files
mission-control-v2/frontend/dist/assets/Dienste-atjWw704.js
T
2026-09-25 13:49:03 +02:00

1 line
15 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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-CIOHqG23.js";import{t as _}from"./button-D8rvET0Z.js";import{t as v}from"./Bestaetigen-D6CzMfJm.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};