Account-rotation logging + transient cooldown fixes

- New dedicated account-rotation.log (audit-style) so multi-account/key
  rotation flow is visible without rd_downloader.log noise
- Mega-Debrid: always show "Account X/Y (masked@login)" label even with
  one account, and log a clear "TESTE Account fuer Link-Generierung..."
  line BEFORE every network call so the user sees which account is in
  play even if the call hangs
- Mega-Debrid: on FAILED, log which account will be tried next
  (skipping disabled/limited/cooldown ones), so the rotation is auditable
- Mega-Web "Antwort leer" / empty body now uses 20s cooldown instead of
  120s — empty responses are typically transient server hiccups, not
  real failures (caused healthy accounts to be unfairly blocked)
- Generic transport/unknown errors: 30s cooldown instead of 120s
- Global stall watchdog no longer counts items in "validating" status —
  per-item validating watchdog already handles them and gives the
  multi-account rotation enough time. Without this fix the global
  watchdog could abort the unrestrict mid-rotation (e.g. account 3 of 3
  still being tested) just because no download bytes had arrived
- Same logging treatment applied to Debrid-Link key rotation
This commit is contained in:
Sucukdeluxe
2026-04-19 23:03:22 +02:00
parent 4d2f11a96d
commit 25aa48fe99
4 changed files with 314 additions and 26 deletions
+11 -2
View File
@@ -7660,6 +7660,15 @@ export class DownloadManager extends EventEmitter {
return;
}
// Only items that are actually DOWNLOADING (have an open HTTP body that
// should be making progress) count toward the global stall watchdog.
// Items in "validating" are still in the unrestrict phase — they're handled
// by the per-item validating watchdog above (VALIDATING_STUCK_MS) which
// gives the multi-account/multi-key rotation enough time. Without this
// exclusion the global watchdog would abort the unrestrict mid-rotation
// (e.g. account 3 of 3 still being tested) just because no bytes had been
// downloaded recently — which is correct, since unrestrict doesn't
// produce download bytes.
let stalledCount = 0;
let diskBlockedCount = 0;
for (const active of this.activeTasks.values()) {
@@ -7671,7 +7680,7 @@ export class DownloadManager extends EventEmitter {
continue;
}
const item = this.session.items[active.itemId];
if (item && (item.status === "downloading" || item.status === "validating")) {
if (item && item.status === "downloading") {
stalledCount += 1;
}
}
@@ -7689,7 +7698,7 @@ export class DownloadManager extends EventEmitter {
continue;
}
const item = this.session.items[active.itemId];
if (item && (item.status === "downloading" || item.status === "validating")) {
if (item && item.status === "downloading") {
active.abortReason = "stall";
active.abortController.abort("stall");
}