cmd/searchix-web/main.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | package main
import (
"context"
"flag"
"fmt"
"os"
"os/signal"
"runtime/pprof"
"badc0de.net/pkg/flagutil"
"go.alanpearce.eu/searchix"
"go.alanpearce.eu/searchix/internal/config"
"go.alanpearce.eu/x/log"
)
var (
configFile = flag.String("config", "config.toml", "config `file` to use")
printDefaultConfig = flag.Bool(
"print-default-config",
false,
"print default configuration and exit",
)
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`")
)
func main() {
flagutil.Parse()
if *version {
_, err := fmt.Fprintf(os.Stderr, "searchix %s\n", config.Version)
if err != nil {
panic("can't write to standard error?!")
}
os.Exit(0)
}
if *printDefaultConfig {
_, err := fmt.Print(config.GetDefaultConfig())
if err != nil {
panic("can't write to standard output?!")
}
os.Exit(0)
}
if *cpuprofile != "" {
f, err := os.Create(*cpuprofile)
if err != nil {
panic("can't create CPU profile: " + err.Error())
}
err = pprof.StartCPUProfile(f)
if err != nil {
panic("can't start CPU profile: " + err.Error())
}
defer pprof.StopCPUProfile()
}
logger := log.Configure(!*dev)
cfg, err := config.GetConfig(*configFile, logger)
if err != nil {
logger.Fatal("Failed to parse config file", "error", err)
}
log.SetLevel(cfg.LogLevel)
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
s, err := searchix.New(cfg, logger)
if err != nil {
logger.Fatal("Failed to initialise searchix", "error", err)
}
err = s.SetupIndex(ctx, &searchix.IndexOptions{
Update: *update,
Replace: *replace,
LowMemory: cfg.Importer.LowMemory,
Logger: logger,
})
if err != nil {
logger.Fatal("Failed to setup index", "error", err)
}
if *replace || *update {
return
}
go func() {
err = s.Start(ctx, *dev)
if err != nil {
// Error starting or closing listener:
logger.Fatal("error", "error", err)
}
}()
<-ctx.Done()
logger.Debug("calling stop")
s.Stop()
logger.Debug("done")
}
|