From 98dc36648c3666bd2b43149dd61b77b5adef9eed Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Thu, 28 May 2026 17:53:09 +0200 Subject: [PATCH] Support-Bundle verschlankt: Item-/Package-Logs nur noch letzte 8h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Bundle packte bisher alle logs-Unterordner rekursiv (addDirectoryIfExists) → tausende Per-Item-Logs → 200+ MB (User-Bundle: 4273 Item-Logs, 214 MB). Zum Verschicken/Analysieren unhandlich. Neue addRecentDirectoryFiles(): packt nur Dateien mit mtime in den letzten 8h. Package-Logs und Item-Logs nutzen das 8h-Fenster; Session-Logs (wenige Dateien) weiterhin komplett. Haupt-Logs (rd_downloader.log, rename.log, audit.log, session.log, trace.log) waren schon per addFileIfExists einzeln gepackt und bleiben unveraendert. Live-Logs der aktiven Queue (laufende Session) ebenfalls komplett. Ergebnis: Bundle enthaelt alles fuer aktuelle Fehler + Rename-Probleme, aber kein Bloat durch tausende alte Item-Logs. Co-Authored-By: Claude Opus 4.7 --- src/main/support-bundle.ts | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/support-bundle.ts b/src/main/support-bundle.ts index ee153ed..0cdbe99 100644 --- a/src/main/support-bundle.ts +++ b/src/main/support-bundle.ts @@ -51,6 +51,27 @@ function addDirectoryIfExists(zip: AdmZip, dirPath: string, zipRoot: string): vo } } +/** Wie addDirectoryIfExists, aber nur Dateien die in den letzten maxAgeMs ms geaendert wurden. */ +function addRecentDirectoryFiles(zip: AdmZip, dirPath: string, zipRoot: string, maxAgeMs: number): number { + if (!fs.existsSync(dirPath)) { + return 0; + } + const cutoff = Date.now() - maxAgeMs; + let added = 0; + const entries = fs.readdirSync(dirPath, { withFileTypes: true }); + for (const entry of entries) { + if (!entry.isFile()) continue; + const fullPath = path.join(dirPath, entry.name); + try { + if (fs.statSync(fullPath).mtimeMs >= cutoff) { + zip.addLocalFile(fullPath, zipRoot, entry.name); + added += 1; + } + } catch { /* ignorieren */ } + } + return added; +} + function formatTimestampForFileName(date: Date): string { const y = date.getFullYear(); const mo = String(date.getMonth() + 1).padStart(2, "0"); @@ -164,10 +185,16 @@ export function buildSupportBundle(manager: DownloadManager, baseDir: string, op addFileIfExists(zip, getTraceLogPath(), "logs/trace.log"); addFileIfExists(zip, getTraceLogPath() ? `${getTraceLogPath()}.old` : null, "logs/trace.log.old"); + // Granulare Per-Item/-Package/-Session-Logs nur der letzten 8h. + // Vorher wurden alle logs-Unterordner rekursiv gepackt → tausende Item-Logs + // → 200+ MB, unhandlich zum Verschicken. Mit 8h-Fenster bleibt das Bundle + // klein genug und enthaelt alles fuer aktuelle Fehler + Rename-Probleme. + const SUPPORT_BUNDLE_LOG_WINDOW_MS = 8 * 60 * 60 * 1000; addDirectoryIfExists(zip, path.join(baseDir, "session-logs"), "logs/session-logs"); - addDirectoryIfExists(zip, path.join(baseDir, "package-logs"), "logs/package-logs"); - addDirectoryIfExists(zip, path.join(baseDir, "item-logs"), "logs/item-logs"); + addRecentDirectoryFiles(zip, path.join(baseDir, "package-logs"), "logs/package-logs", SUPPORT_BUNDLE_LOG_WINDOW_MS); + addRecentDirectoryFiles(zip, path.join(baseDir, "item-logs"), "logs/item-logs", SUPPORT_BUNDLE_LOG_WINDOW_MS); + // Live-Logs der aktiven Queue (aktuelle Session) immer vollstaendig mitsichern. for (const packageId of packageIds) { addFileIfExists(zip, manager.getPackageLogPath(packageId) || getPackageLogPath(packageId), `logs/live/package-${packageId}.txt`); }