feat(sync): automatischer Abgleich nach Zeitplan
Bisher musste jedes Projekt einzeln von Hand synchronisiert werden. Jetzt gibt es einen Zeitgeber im Serverprozess, angestossen von instrumentation.ts. Fuer eine Einzelinstanz ist das die einfachste tragfaehige Loesung: kein zusaetzlicher Container, kein externer Cron, keine zweite Konfiguration. Ruecksicht auf fremde API-Kontingente war der bestimmende Gedanke: - standardmaessig abgeschaltet - der Abgleich verbraucht fremdes Kontingent, das soll eine bewusste Entscheidung sein - je Durchlauf nur eine begrenzte Zahl Projekte, die am laengsten nicht abgeglichenen zuerst; der Rest kommt beim naechsten Mal - nach jedem Fehlschlag verdoppelt sich der Abstand bis zum naechsten Versuch, gedeckelt beim Sechzehnfachen. Ein Repo mit abgelaufenem Token blockiert damit nicht dauerhaft das Kontingent. - kurze Pause zwischen zwei Projekten - zwei Durchlaeufe ueberschneiden sich nie - fertige und archivierte Projekte lassen sich auslassen - einzelne Projekte lassen sich ausnehmen Der Zaehler fuer Fehlschlaege wandert in syncProject: bei Erfolg zurueck auf null, bei Fehlschlag hoch. So stimmt er auch nach einem manuellen Abgleich. sync.ts wird zu sync/index.ts, damit Modul und Ordner nicht nebeneinander stehen. Alle Importpfade bleiben unveraendert. Zur Form der Abfrage in instrumentation.ts: Next uebersetzt die Datei auch fuer den Edge-Runtime. Der Import muss deshalb *in* der positiven Bedingung stehen, sonst bleibt er im Edge-Bundle stehen und der Build scheitert an node:crypto. Mit einem frueh abbrechenden return passiert genau das. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Wird von Next einmal beim Start des Servers ausgefuehrt.
|
||||
*
|
||||
* Hier haengt der Zeitgeber fuer den automatischen Abgleich.
|
||||
*
|
||||
* Wichtig ist die Form der Abfrage: Next uebersetzt diese Datei auch fuer den
|
||||
* Edge-Runtime (weil es eine Middleware gibt). Dort gibt es weder node:crypto
|
||||
* noch node:net, die der Abgleich mitbringt. Der Import muss deshalb *in* der
|
||||
* positiven Bedingung stehen – dann ersetzt der Bundler NEXT_RUNTIME beim
|
||||
* Bauen und entfernt den ganzen Block aus dem Edge-Bundle. Mit einem frueh
|
||||
* abbrechenden "if (… !== 'nodejs') return" bliebe der Import stehen und der
|
||||
* Build schluege fehl.
|
||||
*/
|
||||
export async function register() {
|
||||
if (process.env.NEXT_RUNTIME === "nodejs") {
|
||||
const { describeConfig } = await import("@/lib/config");
|
||||
console.log(`[nebula] Konfiguration: ${describeConfig()}`);
|
||||
|
||||
const { startAutoSyncScheduler } = await import("@/lib/sync/scheduler");
|
||||
startAutoSyncScheduler();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user