package ingest import ( "context" "evobgp/internal/logging" "fmt" "log" "time" "evobgp/internal/broker" "evobgp/internal/config" "evobgp/internal/httpclient" "evobgp/internal/pipeline" "evobgp/internal/store" ) // Deps runs lightweight CDN ETag prefetch against the shared store. type Deps struct { Store store.Backend } // Run blocks until ctx is cancelled. func Run(ctx context.Context, deps *Deps) { cfg := config.Load() broker.LogConnect(ctx, cfg.BrokerURL) if deps == nil || deps.Store == nil { log.Fatalf("evobgp-ingest: missing store (pass ingest.Deps from BootstrapWorkers or evobgp-all)") } hc := httpclient.New(httpclient.DefaultTimeout) t := time.NewTicker(60 * time.Second) defer t.Stop() logging.Default().Info(fmt.Sprintf("evobgp-ingest: active (CDN conditional GET / ETag prefetch)")) for { select { case <-ctx.Done(): logging.Default().Info(fmt.Sprintf("evobgp-ingest: stopped")) return case <-t.C: prefetchCtx, cancel := context.WithTimeout(ctx, 50*time.Second) err := pipeline.PrefetchCDNSourceETags(prefetchCtx, deps.Store, hc) cancel() if err != nil { logging.Default().Info(fmt.Sprintf("evobgp-ingest: prefetch: %v", err)) } } } }