fix: retry transient pickup checks
Retry transient Foodsharing network failures such as socket hang up for safe read/check actions and add explicit pickup fallback scheduling, tick, and result logs so missed fallback checks can be diagnosed.
This commit is contained in:
@@ -1196,6 +1196,13 @@ function scheduleRegularPickupRefresh(settings) {
|
||||
function scheduleFallbackPickupChecks(sessionId, settings) {
|
||||
const cronExpression = settings.pickupFallbackCron || DEFAULT_SETTINGS.pickupFallbackCron;
|
||||
if (!cronExpression) {
|
||||
console.log(`[PICKUP] Fallback-Check für Session ${sessionId} nicht geplant: kein Cron-Ausdruck konfiguriert.`);
|
||||
return null;
|
||||
}
|
||||
if (!cron.validate(cronExpression)) {
|
||||
console.warn(
|
||||
`[PICKUP] Fallback-Check für Session ${sessionId} nicht geplant: ungültiger Cron-Ausdruck "${cronExpression}".`
|
||||
);
|
||||
return null;
|
||||
}
|
||||
const job = cron.schedule(
|
||||
@@ -1203,19 +1210,32 @@ function scheduleFallbackPickupChecks(sessionId, settings) {
|
||||
() => {
|
||||
const session = sessionStore.get(sessionId);
|
||||
if (!session?.profile?.id) {
|
||||
console.warn(`[PICKUP] Fallback-Check übersprungen: Session ${sessionId} nicht gefunden.`);
|
||||
return;
|
||||
}
|
||||
const delay = randomDelayMs(settings.randomDelayMinSeconds, settings.randomDelayMaxSeconds);
|
||||
console.log(
|
||||
`[PICKUP] Fallback-Check ausgelöst für Session ${sessionId} ` +
|
||||
`(Profil ${session.profile.id}, Delay ${delay}ms, Cron: ${cronExpression}).`
|
||||
);
|
||||
setTimeout(() => {
|
||||
const config = readConfig(session.profile.id);
|
||||
runImmediatePickupCheck(sessionId, config, settings).catch((error) => {
|
||||
console.error('[PICKUP] Fallback-Check fehlgeschlagen:', error.message);
|
||||
});
|
||||
runImmediatePickupCheck(sessionId, config, settings)
|
||||
.then((result) => {
|
||||
console.log(
|
||||
`[PICKUP] Fallback-Check abgeschlossen für Session ${sessionId}: ` +
|
||||
`${result.checked} aktive Einträge geprüft.`
|
||||
);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('[PICKUP] Fallback-Check fehlgeschlagen:', error.message);
|
||||
});
|
||||
}, delay);
|
||||
},
|
||||
{ timezone: TIME_ZONE }
|
||||
);
|
||||
sessionStore.attachJob(sessionId, job);
|
||||
console.log(`[PICKUP] Fallback-Check geplant für Session ${sessionId} (Cron: ${cronExpression}).`);
|
||||
return job;
|
||||
}
|
||||
|
||||
@@ -1311,8 +1331,13 @@ async function runImmediatePickupCheck(sessionId, config, settings) {
|
||||
const entries = Array.isArray(config) ? config : [];
|
||||
const activeEntries = entries.filter((entry) => entry?.active);
|
||||
if (activeEntries.length === 0) {
|
||||
console.log(`[PICKUP] Sofortprüfung für Session ${sessionId}: keine aktiven Einträge.`);
|
||||
return { checked: 0 };
|
||||
}
|
||||
console.log(
|
||||
`[PICKUP] Sofortprüfung für Session ${sessionId}: ${activeEntries.length} aktive Einträge ` +
|
||||
`(${activeEntries.map((entry) => entry.id).join(', ')}).`
|
||||
);
|
||||
for (const entry of activeEntries) {
|
||||
await checkEntry(sessionId, entry, resolvedSettings);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user