From c678b026624d86c682877cb80eef6293d6494d4a Mon Sep 17 00:00:00 2001 From: Craig Williams Date: Wed, 21 Oct 2026 14:36:22 +0100 Subject: [PATCH] The fetcher's "saved opportunities" and "fetched opportunities" lines now name the source --- internal/fetcher/fetcher.go | 7 +++++++ internal/fetcher/fetcher_test.go | 5 ++++- internal/fetcher/worker_findatender.go | 6 +++++- internal/fetcher/worker_ftsmock.go | 6 +++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/internal/fetcher/fetcher.go b/internal/fetcher/fetcher.go index 0cb2e23..bf85451 100644 --- a/internal/fetcher/fetcher.go +++ b/internal/fetcher/fetcher.go @@ -246,6 +246,9 @@ func (f *Fetcher) startFrom( // Opportunities that match the skip rules (see WithSkipRules) are marked // Skipped first. The store keeps the marks of an opportunity it already // has, so only new ones are skipped. +// +// Each save is one worker's, so its lines are logged with the first +// opportunity's Source. func (f *Fetcher) save( ctx context.Context, logger *slog.Logger, @@ -255,6 +258,10 @@ func (f *Fetcher) save( return nil } + if len(opportunities) > 0 { + logger = logger.With("source", opportunities[0].Source) + } + filters := f.markSkipped(opportunities) result, err := f.store.SaveOpportunities(ctx, opportunities) diff --git a/internal/fetcher/fetcher_test.go b/internal/fetcher/fetcher_test.go index 7b710dc..f2b04c4 100644 --- a/internal/fetcher/fetcher_test.go +++ b/internal/fetcher/fetcher_test.go @@ -921,9 +921,12 @@ func TestSaveSkipsNewOpportunities(t *testing.T) { if !skipped(s) { t.Error("a new matching opportunity wasn't skipped") } + // Both lines name the source. for _, want := range []string{ + "msg=\"saved opportunities\" source=FindATender component=fetcher", "skipped_opportunities=1", - "msg=\"skipped new opportunity\" component=fetcher uuid=ocds-1 filter=IT", + "msg=\"skipped new opportunity\" source=FindATender component=fetcher " + + "uuid=ocds-1 filter=IT", } { if !strings.Contains(logged.String(), want) { t.Errorf("log has no %q:\n%s", want, logged.String()) diff --git a/internal/fetcher/worker_findatender.go b/internal/fetcher/worker_findatender.go index 82d7c4a..e91d042 100644 --- a/internal/fetcher/worker_findatender.go +++ b/internal/fetcher/worker_findatender.go @@ -86,7 +86,11 @@ func fetchFindATender( return nil, ErrNoNewReleases } - tagged(logger).Info("fetched opportunities", "count", len(opportunities)) + tagged(logger).Info( + "fetched opportunities", + "source", findATenderSource, + "count", len(opportunities), + ) return opportunities, err } diff --git a/internal/fetcher/worker_ftsmock.go b/internal/fetcher/worker_ftsmock.go index f9e147a..8d158d1 100644 --- a/internal/fetcher/worker_ftsmock.go +++ b/internal/fetcher/worker_ftsmock.go @@ -89,7 +89,11 @@ func fetchFTSMock( opportunity.Source = ftsMockSource } - tagged(logger).Info("fetched opportunities", "count", len(opportunities)) + tagged(logger).Info( + "fetched opportunities", + "source", ftsMockSource, + "count", len(opportunities), + ) return opportunities, err }