diff options
author | Alan Pearce | 2025-03-24 10:35:21 +0100 |
---|---|---|
committer | Alan Pearce | 2025-03-24 14:22:04 +0100 |
commit | 523d9dcd4cc2932e5fd4df80cd0cff0d0ca43c38 (patch) | |
tree | fbfc0d8323f3e58cbf46f79500244356e779fc7a /cmd | |
parent | f23d67df63defd5f6fe6773789851dd63f3ac829 (diff) | |
download | searchix-523d9dcd4cc2932e5fd4df80cd0cff0d0ca43c38.tar.lz searchix-523d9dcd4cc2932e5fd4df80cd0cff0d0ca43c38.tar.zst searchix-523d9dcd4cc2932e5fd4df80cd0cff0d0ca43c38.zip |
refactor: split out importer code from searchix/web
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/searchix-web/main.go | 51 |
1 files changed, 42 insertions, 9 deletions
diff --git a/cmd/searchix-web/main.go b/cmd/searchix-web/main.go index 67b2074..c70b4d3 100644 --- a/cmd/searchix-web/main.go +++ b/cmd/searchix-web/main.go @@ -7,11 +7,14 @@ import ( "os" "os/signal" "runtime/pprof" + "sync" "badc0de.net/pkg/flagutil" + "github.com/getsentry/sentry-go" "go.alanpearce.eu/searchix/internal/config" "go.alanpearce.eu/searchix/internal/importer" + "go.alanpearce.eu/searchix/internal/index" "go.alanpearce.eu/searchix/web" "go.alanpearce.eu/x/log" ) @@ -70,35 +73,65 @@ func main() { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt) defer cancel() - s, err := web.New(cfg, logger) + read, write, exists, err := index.OpenOrCreate( + cfg.DataPath, + *replace, + &index.Options{ + LowMemory: cfg.Importer.LowMemory, + Logger: logger.Named("index"), + }, + ) + if err != nil { + logger.Fatal("Failed to open or create index", "error", err) + } + + s, err := web.New(cfg, logger, read) if err != nil { - logger.Fatal("Failed to initialise searchix", "error", err) + logger.Fatal("Failed to initialise searchix-web", "error", err) } - err = importer.SetupIndex(ctx, cfg, &importer.Options{ - Update: *update, - Replace: *replace, + imp, err := importer.New(cfg, &importer.Options{ LowMemory: cfg.Importer.LowMemory, - Logger: logger, + Logger: logger.Named("importer"), }) if err != nil { - logger.Fatal("Failed to setup index", "error", err) + logger.Fatal("Failed to create importer", "error", err) } - if *replace || *update { + if !exists || *replace || *update { + err := imp.Start(ctx, true, nil) + if err != nil { + logger.Fatal("Failed to start importer", "error", err) + } + return } + err = imp.EnsureSourcesIndexed(ctx, read, write) + if err != nil { + logger.Fatal("Failed to setup index", "error", err) + } + + wg := &sync.WaitGroup{} + wg.Add(1) go func() { - err = s.Start(ctx, *dev) + defer wg.Done() + err := s.Start(*dev) if err != nil { // Error starting or closing listener: logger.Fatal("error", "error", err) } }() + wg.Add(1) + go func() { + defer wg.Done() + imp.StartUpdateTimer(ctx, sentry.CurrentHub().Clone()) + }() + <-ctx.Done() logger.Debug("calling stop") s.Stop() + wg.Wait() logger.Debug("done") } |