1import{i as S,l as C,k as w,a as v,c as $,r as f,j as e,L as T,e as L,g as R}from"./index-ClQcrGAC.js";const A=S({method:"POST"}).middleware([C]).handler(w("059fc8e213ac1bdf095ada27927639e4304c751778ca2c87e3db10def2428fff"));function I(){const{isAdmin:r,loading:g}=v(),x=$(),[N,p]=f.useState(0);f.useEffect(()=>{!g&&!r&&x({to:"/mein-konto"})},[r,g,x]);const s=f.useMemo(()=>{const l=[],h=new Date;h.setUTCHours(0,0,0,0);for(let a=0;a<30;a++){const o=new Date(h);o.setUTCDate(o.getUTCDate()-a),l.push({date:o,iso:o.toISOString().slice(0,10)})}return l},[]);return e.jsxs("div",{className:"min-h-screen bg-background text-foreground",children:[e.jsx("nav",{className:"border-b border-border",children:e.jsxs("div",{className:"max-w-5xl mx-auto px-6 h-16 flex items-center justify-between",children:[e.jsx(T,{to:"/admin",className:"text-sm text-muted-foreground hover:text-foreground",children:"â Admin"}),e.jsx("h1",{className:"font-display text-lg font-semibold",children:"Night Crons â letzte 30 Tage"}),e.jsx("div",{})]})}),e.jsxs("div",{className:"max-w-5xl mx-auto px-6 py-10 space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Rückblickender Cron-Report je Nacht. Pro Eintrag werden Status, Ãbersetzungen und der tatsächliche AI-Credit-Verbrauch im identischen Format ausgegeben â die Zahlen stammen direkt aus der Datenbank des jeweiligen Tages."}),s.map((l,h)=>{const a=N===h;return e.jsxs("article",{className:"rounded-xl border border-border bg-card overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:()=>p(a?null:h),className:"w-full flex items-center justify-between px-5 py-3 text-left hover:bg-accent/30",children:[e.jsxs("span",{className:"font-semibold",children:["Nacht auf ",l.date.toLocaleDateString("de-DE",{weekday:"long",day:"2-digit",month:"long",year:"numeric"})]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[l.iso," ",a?"â²":"â¼"]})]}),a&&e.jsx("div",{className:"px-5 pb-5 pt-1 text-sm",children:e.jsx(D,{iso:l.iso})})]},l.iso)})]})]})}const t=r=>new Intl.NumberFormat("de-DE").format(r),m=r=>`$${r.toFixed(4)}`;function D({iso:r}){const g=L(A),{data:x,isLoading:N,error:p}=R({queryKey:["night-report",r],queryFn:()=>g({data:{iso:r}}),staleTime:300*1e3});if(N)return e.jsx("p",{className:"text-muted-foreground",children:"Lade Report â¦"});if(p)return e.jsxs("p",{className:"text-destructive",children:["Fehler: ",p.message]});if(!x)return null;const s=x,l=s.ui.langs.slice(0,5),a=["en","fr","es","it","pt"].map(n=>s.ui.langs.find(c=>c.lang===n)).filter(Boolean),o=s.listingTrans.langs.length>0?Math.round(s.listingTrans.total/s.listingTrans.langs.length):0,i=n=>s.ai.bySource.find(c=>c.source===n),u=i("ui-prewarm")||i("ui-translate")||i("ui_translations"),j=i("listing-translate")||i("translate-listing"),b=i("category-seo")||i("category_seo"),d=i("tag-label")||i("tag_labels");return e.jsxs("div",{className:"space-y-5 leading-relaxed",children:[e.jsxs("h2",{className:"font-display text-xl font-semibold",children:["Nächtliche Crons â Report (",r,")"]}),e.jsxs("section",{children:[e.jsx("h3",{className:"font-semibold mb-2",children:"Geplante Jobs"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm border border-border",children:[e.jsx("thead",{className:"bg-muted/40",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left px-3 py-2 border-b border-border",children:"Zeit (UTC)"}),e.jsx("th",{className:"text-left px-3 py-2 border-b border-border",children:"Job"}),e.jsx("th",{className:"text-left px-3 py-2 border-b border-border",children:"Status"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-1.5",children:"00:00"}),e.jsx("td",{className:"px-3 py-1.5",children:e.jsx("code",{children:"prewarm-ui-all-langs"})}),e.jsx("td",{className:"px-3 py-1.5",children:s.ui.total>0?`â
${s.ui.langs.length} Sprachen aktualisiert`:"â keine Ãnderungen"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-1.5",children:"02:00"}),e.jsx("td",{className:"px-3 py-1.5",children:e.jsx("code",{children:"prewarm-tags-all-langs"})}),e.jsx("td",{className:"px-3 py-1.5",children:d?`â
${t(d.calls)} Calls`:"â keine Aktivität"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-1.5",children:"04:00"}),e.jsx("td",{className:"px-3 py-1.5",children:e.jsx("code",{children:"prewarm-seo-all-langs"})}),e.jsx("td",{className:"px-3 py-1.5",children:s.seo.total>0?`â
${t(s.seo.total)} Tasks`:"â keine Ãnderungen"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-1.5",children:"04:10"}),e.jsx("td",{className:"px-3 py-1.5",children:e.jsx("code",{children:"ensure-public-grants"})}),e.jsx("td",{className:"px-3 py-1.5",children:(s.grantRepairs??[]).length>0?`â ï¸ ${s.grantRepairs.length} Reparatur(en)`:"â
alles in Ordnung"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-1.5",children:"04:30"}),e.jsx("td",{className:"px-3 py-1.5",children:e.jsx("code",{children:"google-sitemap-ping-daily"})}),e.jsx("td",{className:"px-3 py-1.5",children:"â
"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-1.5",children:"alle 6h"}),e.jsx("td",{className:"px-3 py-1.5",children:e.jsx("code",{children:"refresh-listings"})}),e.jsx("td",{className:"px-3 py-1.5",children:s.listingTrans.total>0?`â
${t(s.listingTrans.total)} Ãbersetzungen`:"â
"})]})]})]})}),e.jsxs("p",{className:"mt-2",children:["Alle nächtlichen Läufe haben ",e.jsx("strong",{children:"succeeded"})," zurückgemeldet â keine Fehler."]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"font-semibold mb-2",children:"Was wurde tatsächlich übersetzt / generiert"}),e.jsxs("p",{className:"font-semibold mt-3",children:["UI-Strings (",e.jsx("code",{children:"ui_translations"}),")"]}),e.jsxs("ul",{className:"list-disc pl-6 space-y-1",children:[e.jsxs("li",{children:[e.jsxs("strong",{children:[t(s.ui.total)," neue/aktualisierte Strings"]})," über ",e.jsxs("strong",{children:[s.ui.langs.length," Sprachen"]})]}),l.length>0&&e.jsxs("li",{children:["Top: ",l.map((n,c)=>e.jsxs("span",{children:[e.jsx("code",{children:n.lang})," ",t(n.count),c<l.length-1?", ":""]},n.lang))," (frisch angelegte / neue Sprachen ziehen am meisten)"]}),a.length>0&&e.jsxs("li",{children:["Hauptsprachen: ",a.map((n,c)=>e.jsxs("span",{children:[e.jsx("code",{children:n.lang})," ",t(n.count),c<a.length-1?", ":""]},n.lang))]})]}),e.jsxs("p",{className:"font-semibold mt-3",children:["Listing-Ãbersetzungen (",e.jsx("code",{children:"listing_translations"}),", via refresh-listings)"]}),e.jsxs("ul",{className:"list-disc pl-6 space-y-1",children:[e.jsxs("li",{children:[e.jsxs("strong",{children:[t(s.listingTrans.total)," Inserate-Ãbersetzungen"]})," über ",e.jsxs("strong",{children:[s.listingTrans.langs.length," Sprachen"]})]}),o>0&&e.jsxs("li",{children:["Pro Sprache durchschnittlich ~",t(o)," Inserate übersetzt"]})]}),e.jsxs("p",{className:"font-semibold mt-3",children:["Kategorie-SEO Long-Form (",e.jsx("code",{children:"category_seo"}),")"]}),e.jsx("ul",{className:"list-disc pl-6 space-y-1",children:e.jsx("li",{children:e.jsxs("strong",{children:[t(s.seo.total)," SEO-Seiten generiert"]})})}),e.jsxs("p",{className:"mt-3",children:[e.jsx("strong",{children:"Tag-Labels:"})," ",d?`${t(d.calls)} Calls`:"keine Aktivität"," in dieser Nacht"]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"font-semibold mb-2",children:"Rechte-Wächter (Leserechte auf Datenbank-Tabellen)"}),e.jsx("p",{className:"text-muted-foreground mb-2",children:"Läuft täglich 04:10 UTC und stellt fehlende Leserechte automatisch wieder her."}),(s.grantRepairs??[]).length===0?e.jsx("p",{children:"â
Keine fehlenden Rechte gefunden â nichts zu reparieren."}):e.jsx("ul",{className:"list-disc pl-6 space-y-1",children:(s.grantRepairs??[]).map((n,c)=>e.jsxs("li",{children:["â ï¸ ",e.jsx("strong",{children:new Date(n.at).toLocaleStr
1ing("de-DE",{timeZone:"Europe/Berlin"})})," ","â repariert: ",n.fixed.map((y,k)=>e.jsxs("span",{children:[e.jsx("code",{children:y}),k<n.fixed.length-1?", ":""]},y))]},c))})]}),e.jsxs("section",{children:[e.jsxs("h3",{className:"font-semibold mb-2",children:["AI-Credit-Verbrauch (echte Werte aus ",e.jsx("code",{children:"ai_usage_log"}),")"]}),e.jsxs("ul",{className:"list-disc pl-6 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"UI-Translations:"})," ",u?`${t(u.calls)} Calls, ${t(u.total)} Tokens, ${m(u.cost)}`:"â"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Listing-Translations:"})," ",j?`${t(j.calls)} Calls, ${t(j.total)} Tokens, ${m(j.cost)}`:"â"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Category-SEO:"})," ",b?`${t(b.calls)} Calls, ${t(b.total)} Tokens, ${m(b.cost)}`:"â"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Tag-Labels:"})," ",d?`${t(d.calls)} Calls, ${t(d.total)} Tokens, ${m(d.cost)}`:"â"]})]}),e.jsxs("p",{className:"mt-2",children:[e.jsx("strong",{children:"Gesamt:"})," ",t(s.ai.totalCalls)," AI-Calls · ",t(s.ai.totalTokens)," Tokens · ",e.jsx("strong",{children:m(s.ai.totalCostUsd)})]}),e.jsxs("p",{className:"mt-2 text-muted-foreground",children:["Vollständige Aufschlüsselung aller Quellen siehe"," ",e.jsx(T,{to:"/admin/ai-credits",className:"text-primary underline",children:"/admin/ai-credits"}),"."]})]})]})}export{I as component};
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.