fix(agrarmonitor): aufgerufene Seite bei HTTP-Fehlern mitloggen
Build and Push Multi-Platform Images / build-and-push (push) Successful in 43s

Fehlermeldungen im Polling enthielten nur den Status (z. B. „Request
failed with status code 404“), nicht aber die aufgerufene URL. Die neue
Hilfsfunktion fehlerText() hängt bei Axios-Fehlern Methode und
vollständige URL an, damit sich z. B. der Livesearch-404 einer
konkreten Seite zuordnen lässt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bjoernpoettkerandClaude Opus 5.5 committed 2026-09-27 14:02:59 +02:00
1 parent a72e41611d
commit d2236368be
1 file changed
+18 -9
@@ -1,4 +1,5 @@
import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
import axios from 'axios';
import { Cron } from '@nestjs/schedule'; import { Cron } from '@nestjs/schedule';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { IsNull, Not, Repository } from 'typeorm'; import { IsNull, Not, Repository } from 'typeorm';
@@ -14,6 +15,14 @@ const EXTERN_BELEGNUMMER_FIELD_ID = 3;
const DOCS_PAGE_SIZE = 500; const DOCS_PAGE_SIZE = 500;
const AGRARMONITOR_BASE_URL = 'https://admin7.agrarmonitor.de'; const AGRARMONITOR_BASE_URL = 'https://admin7.agrarmonitor.de';
/** Fehlermeldung inkl. aufgerufener Seite (Methode + URL), falls es ein HTTP-Fehler ist. */
function fehlerText(err: unknown): string {
const message = err instanceof Error ? err.message : String(err);
if (!axios.isAxiosError(err) || !err.config) return message;
const method = (err.config.method ?? 'get').toUpperCase();
return `${message} (${method} ${axios.getUri(err.config)})`;
}
export interface PollingResult { export interface PollingResult {
processed: number; processed: number;
updated: number; updated: number;
@@ -234,7 +243,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
await this.getOrCreateCorrespondent(customer, Number(customer.id)); await this.getOrCreateCorrespondent(customer, Number(customer.id));
} catch (err: unknown) { } catch (err: unknown) {
this.logger.warn( this.logger.warn(
`Korrespondenten-Sync fehlgeschlagen: ${err instanceof Error ? err.message : err}`, `Korrespondenten-Sync fehlgeschlagen: ${fehlerText(err)}`,
); );
} }
} }
@@ -287,7 +296,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
} }
const msg = `${interneBelegnummer}: Livesearch-Fehler`; const msg = `${interneBelegnummer}: Livesearch-Fehler`;
this.logger.error( this.logger.error(
`${msg}: ${err instanceof Error ? err.message : err}`, `${msg}: ${fehlerText(err)}`,
); );
result.errors.push(msg); result.errors.push(msg);
await this.delay(500); await this.delay(500);
@@ -321,7 +330,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
); );
} catch (err: unknown) { } catch (err: unknown) {
this.logger.warn( this.logger.warn(
`${interneBelegnummer}: Lieferscheinnummer setzen fehlgeschlagen: ${err instanceof Error ? err.message : err}`, `${interneBelegnummer}: Lieferscheinnummer setzen fehlgeschlagen: ${fehlerText(err)}`,
); );
} }
} }
@@ -384,7 +393,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
} catch (err: unknown) { } catch (err: unknown) {
const msg = `${interneBelegnummer}: Update-Fehler`; const msg = `${interneBelegnummer}: Update-Fehler`;
this.logger.error( this.logger.error(
`${msg}: ${err instanceof Error ? err.message : err}`, `${msg}: ${fehlerText(err)}`,
); );
result.errors.push(msg); result.errors.push(msg);
} }
@@ -517,7 +526,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
} }
const msg = `${interneBelegnummer}: Vorhanden-Check fehlgeschlagen`; const msg = `${interneBelegnummer}: Vorhanden-Check fehlgeschlagen`;
this.logger.error( this.logger.error(
`${msg}: ${err instanceof Error ? err.message : err}`, `${msg}: ${fehlerText(err)}`,
); );
result.errors.push(msg); result.errors.push(msg);
await this.delay(500); await this.delay(500);
@@ -544,7 +553,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
// Bei Fehler vorsichtig: nicht verschieben // Bei Fehler vorsichtig: nicht verschieben
const msg = `${interneBelegnummer}: Dateieingang-Check fehlgeschlagen`; const msg = `${interneBelegnummer}: Dateieingang-Check fehlgeschlagen`;
this.logger.error( this.logger.error(
`${msg}: ${err instanceof Error ? err.message : err}`, `${msg}: ${fehlerText(err)}`,
); );
result.errors.push(msg); result.errors.push(msg);
await this.delay(500); await this.delay(500);
@@ -568,7 +577,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
} catch (err: unknown) { } catch (err: unknown) {
// Vorsichtig: bei Notiz-Abruf-Fehler NICHT markieren, nächster Lauf prüft erneut // Vorsichtig: bei Notiz-Abruf-Fehler NICHT markieren, nächster Lauf prüft erneut
this.logger.warn( this.logger.warn(
`${interneBelegnummer}: Notiz-Abruf fehlgeschlagen — nicht markiert: ${err instanceof Error ? err.message : err}`, `${interneBelegnummer}: Notiz-Abruf fehlgeschlagen — nicht markiert: ${fehlerText(err)}`,
); );
result.skipped++; result.skipped++;
await this.delay(500); await this.delay(500);
@@ -637,7 +646,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
} }
const msg = `${interneBelegnummer}: Livesearch-Fehler`; const msg = `${interneBelegnummer}: Livesearch-Fehler`;
this.logger.error( this.logger.error(
`${msg}: ${err instanceof Error ? err.message : err}`, `${msg}: ${fehlerText(err)}`,
); );
result.errors.push(msg); result.errors.push(msg);
await this.delay(500); await this.delay(500);
@@ -734,7 +743,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
} catch (err: unknown) { } catch (err: unknown) {
const msg = `${interneBelegnummer}: Update-Fehler`; const msg = `${interneBelegnummer}: Update-Fehler`;
this.logger.error( this.logger.error(
`${msg}: ${err instanceof Error ? err.message : err}`, `${msg}: ${fehlerText(err)}`,
); );
result.errors.push(msg); result.errors.push(msg);
} }