main.go (60 lines of code) (raw):
package main
import (
"errors"
"log/slog"
"os"
"gitlab.com/gitlab-org/gitlab-elasticsearch-indexer/internal/dev_debug"
"gitlab.com/gitlab-org/gitlab-elasticsearch-indexer/internal/mode/advanced"
"gitlab.com/gitlab-org/gitlab-elasticsearch-indexer/internal/mode/chunk"
"gitlab.com/gitlab-org/gitlab-elasticsearch-indexer/internal/shared"
)
const (
ModeEnvVar = "GITLAB_INDEXER_MODE"
ModeAdvanced = "advanced"
ModeChunk = "chunk"
DefaultMode = ModeAdvanced
)
var (
// Overriden in the makefile
Version = "dev"
BuildTime = ""
)
func main() {
setUpLogger()
currentMode := getMode()
slog.Debug("Selected mode", "mode", currentMode)
buildOpts := shared.BuildOpts{
Version: Version,
BuildTime: BuildTime,
}
switch currentMode {
case ModeAdvanced:
if err := advanced.Run(buildOpts); err != nil {
slog.Error("program aborted", "error", err)
os.Exit(1)
}
case ModeChunk:
if err := chunk.Run(buildOpts); err != nil {
slog.Error("program aborted", "error", err)
os.Exit(1)
}
default:
err := errors.New("unsupported mode: " + currentMode)
slog.Error(err.Error())
os.Exit(1)
}
}
func getMode() string {
mode := os.Getenv(ModeEnvVar)
if mode == "" {
mode = DefaultMode
}
return mode
}
func setUpLogger() {
level := slog.LevelInfo
if dev_debug.IsEnabled() {
level = slog.LevelDebug
}
logger := slog.New(slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: level}))
slog.SetDefault(logger)
}