fix(scanner): Suchintervall ist ein Takt, keine Pause
`last_scan_at` hielt das ENDE des Laufs fest. Der Scheduler rechnet die
Fälligkeit aber von diesem Wert aus, also kam die Laufzeit von drei bis
vier Minuten jedes Mal obendrauf: bei Einstellung 15 Minuten lagen die
Läufe 19 Minuten auseinander.
Gemessen heute früh, unsere Instanz gegen das Original:
wir: 07:00 07:19 07:38 07:57 08:16 → 19 Min
Original: 07:00 07:16 07:31 07:47 08:03 → 15-16 Min
Über das Fenster 07-22 Uhr sind das rund 47 statt 58 Durchgänge pro Tag.
Die Trefferliste der Börsen zeigt nur die neuesten Projekte, jeder
ausgelassene Durchgang kostet deshalb echte Funde.
Jetzt wird der Startzeitpunkt gespeichert. Das `finally` bleibt, damit
sich ein gescheiterter Lauf nicht sofort wiederholt; dauert ein Lauf
länger als das Intervall, ist der nächste sofort fällig - die Sperre aus
demselben Commit verhindert die Überlappung.
Kein Rückschritt zum vorherigen Fehler (e58b94f): der Zeitstempel liegt
weiterhin in der Datenbank und trägt den Zeitplan über Neustarts.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
15c94ed49c
commit
9a4266ae7e
@@ -93,6 +93,16 @@ export const runMatchingPipeline = async () => {
|
||||
return false;
|
||||
}
|
||||
pipelineRunning = true;
|
||||
|
||||
/*
|
||||
* Der BEGINN des Laufs, nicht sein Ende. Das Suchintervall ist ein Takt und
|
||||
* keine Pause: mit dem Endzeitpunkt kam die Laufzeit von drei bis vier Minuten
|
||||
* jedes Mal obendrauf, aus 15 Minuten wurden 19 und damit rund ein Fuenftel
|
||||
* weniger Durchgaenge pro Tag. Bei einer Trefferliste, die nur die neuesten
|
||||
* Projekte zeigt, kostet jeder ausgelassene Durchgang echte Funde.
|
||||
*/
|
||||
const startedAt = new Date().toISOString();
|
||||
|
||||
try {
|
||||
return await executePipeline();
|
||||
} finally {
|
||||
@@ -103,9 +113,10 @@ export const runMatchingPipeline = async () => {
|
||||
* Scan zaehlt: er hat die Boersen ja gerade abgefragt.
|
||||
*
|
||||
* Im finally, also auch nach einem Abbruch: ein gescheiterter Lauf soll sich
|
||||
* nicht sofort wiederholen.
|
||||
* nicht sofort wiederholen. Dauert ein Lauf laenger als das Intervall, ist
|
||||
* der naechste sofort faellig - die Sperre oben verhindert die Ueberlappung.
|
||||
*/
|
||||
await Setting.setVal('last_scan_at', new Date().toISOString()).catch(() => {});
|
||||
await Setting.setVal('last_scan_at', startedAt).catch(() => {});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user