diff options
Diffstat (limited to 'cmd/searchix-web/main.go')
-rw-r--r-- | cmd/searchix-web/main.go | 59 |
1 files changed, 47 insertions, 12 deletions
diff --git a/cmd/searchix-web/main.go b/cmd/searchix-web/main.go index 6d6dffa..061e08d 100644 --- a/cmd/searchix-web/main.go +++ b/cmd/searchix-web/main.go @@ -7,11 +7,15 @@ import ( "os" "os/signal" "runtime/pprof" + "sync" "badc0de.net/pkg/flagutil" + "github.com/getsentry/sentry-go" - "go.alanpearce.eu/searchix" "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" ) @@ -24,7 +28,6 @@ var ( ) dev = flag.Bool("dev", false, "enable live reloading and nicer logging") replace = flag.Bool("replace", false, "replace existing index and exit") - update = flag.Bool("update", false, "update index and exit") version = flag.Bool("version", false, "print version information") cpuprofile = flag.String("cpuprofile", "", "enable CPU profiling and save to `file`") ) @@ -69,35 +72,67 @@ func main() { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt) defer cancel() - s, err := searchix.New(cfg, logger) + read, write, exists, err := index.OpenOrCreate( + cfg.DataPath, + *replace, + &index.Options{ + LowMemory: cfg.Importer.LowMemory, + BatchSize: cfg.Importer.BatchSize, + 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 = s.SetupIndex(ctx, &searchix.IndexOptions{ - Update: *update, - Replace: *replace, - LowMemory: cfg.Importer.LowMemory, - Logger: logger, + imp, err := importer.New(cfg, &importer.Options{ + WriteIndex: write, + LowMemory: cfg.Importer.LowMemory, + 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 { + err := imp.Start(ctx, true, nil) + if err != nil { + logger.Fatal("Failed to start importer", "error", err) + } + return } + err = imp.EnsureSourcesIndexed(ctx, read) + 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") } |