about summary refs log tree commit diff stats
path: root/cmd
diff options
context:
space:
mode:
authorAlan Pearce2025-03-24 10:35:21 +0100
committerAlan Pearce2025-03-24 14:22:04 +0100
commit523d9dcd4cc2932e5fd4df80cd0cff0d0ca43c38 (patch)
treefbfc0d8323f3e58cbf46f79500244356e779fc7a /cmd
parentf23d67df63defd5f6fe6773789851dd63f3ac829 (diff)
downloadsearchix-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.go51
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")
 }