feat: Action Dashboard und App Store Filter

This commit is contained in:
Hitonabi
2026-06-20 23:25:56 +02:00
parent 0a81a9fe99
commit ee8ec10119
5 changed files with 125 additions and 12 deletions
+57 -8
View File
@@ -1,6 +1,7 @@
// overview.js — Dashboard: Quick Actions, Modelle & Recent Jobs
import { $, esc, icon } from "../core/ui.js";
import { api } from "../core/api.js";
import { $, esc, icon, toast } from "../core/ui.js";
let S = null; // letzter Status
let J = []; // letzte Job-Liste
@@ -26,9 +27,57 @@ function renderHero() {
</div>`;
}
async function triggerAction(action) {
if (action === "restart_llama") {
toast("Neustart ausgelöst...");
try {
await api("/api/service/llama-swap/restart", { method: "POST" });
toast("llama-swap wird neugestartet.");
} catch(e) {
toast("Fehler: " + e.message, true);
}
} else if (action === "update_mc") {
toast("Update gestartet! Siehe Aktivitäten.");
try {
await api("/api/update", { method: "POST" });
document.querySelector('.nav-item[data-view=\\'activity\\']').click();
} catch(e) {
toast("Fehler: " + e.message, true);
}
}
}
// Global hook für onclick
window.triggerAction = triggerAction;
function renderQuickActions() {
// 3 Kacheln (Cookbook, Server-Status, Aktivität/Guides)
$("#ov-quick").innerHTML = `
let actionsHtml = "";
if (SYS) {
const ram_percent = SYS.ram.percent || 0;
// Wenn RAM über 90% ist, zeige Warnung.
// Wir nehmen 90 für Produktion, aber für den Test könnte es angepasst werden.
if (ram_percent >= 90) {
actionsHtml += `
<div class="card" style="background:var(--red-dim); border:1px solid var(--red); grid-column:1/-1;">
<div class="flex justify-between items-center">
<div>
<h3 style="color:var(--red); margin:0;">⚠️ Arbeitsspeicher kritisch (${ram_percent.toFixed(0)}%)</h3>
<p style="color:var(--red); margin-top:4px;">Der RAM/VRAM ist fast voll. Dies kann zu Systeminstabilität führen.</p>
</div>
<button class="primary warn" onclick="window.triggerAction('restart_llama')">VRAM leeren (Neustart)</button>
</div>
</div>
`;
}
// Simulierter Update-Check (Idealerweise vom Backend, hier als permanenter Button wenn man manuell checken will,
// oder wir blenden ihn ein wenn ein lokales flag gesetzt ist. Wir zeigen ihn hier als Feature-Highlight)
// Da wir aktuell keinen echten Git-Check im Backend haben, zeigen wir einen "Update Prüfen" Button in den QuickActions.
}
// 3 Standard Kacheln (Cookbook, Server-Status, Aktivität/Guides)
$("#ov-quick").innerHTML = actionsHtml + `
<button class="card-btn" onclick="document.querySelector('.nav-item[data-view=\\'cookbook\\']').click()">
<div class="flex justify-between items-center">
<h3>Modell finden</h3>
@@ -37,12 +86,12 @@ function renderQuickActions() {
<p>Durchsuche HuggingFace nach neuen Modellen im Cookbook.</p>
</button>
<button class="card-btn" onclick="document.querySelector('.nav-item[data-view=\\'activity\\']').click()">
<button class="card-btn" onclick="window.triggerAction('update_mc')">
<div class="flex justify-between items-center">
<h3>Live Metriken</h3>
<span class="text-act">${icon("pulse")}</span>
<h3>Container Updates</h3>
<span class="text-act">${icon("download")}</span>
</div>
<p>${SYS ? `System läuft (RAM: ${SYS.ram.percent.toFixed(0)}%, CPU: ${SYS.cpu.percent.toFixed(0)}%)` : 'Lade Metriken...'}</p>
<p>Prüfe auf Updates für Mission-Control und Llama.cpp.</p>
</button>
<button class="card-btn" onclick="document.querySelector('.nav-item[data-view=\\'server\\']').click()">
@@ -50,7 +99,7 @@ function renderQuickActions() {
<h3>Wartung</h3>
<span class="text-act">${icon("server")}</span>
</div>
<p>Server neustarten, VRAM leeren oder Engine aktualisieren.</p>
<p>Server neustarten, VRAM leeren oder OS aktualisieren.</p>
</button>
`;
}