diff --git a/cmd/main.go b/cmd/main.go index 4107dc8..37563e2 100755 --- a/cmd/main.go +++ b/cmd/main.go @@ -28,18 +28,21 @@ import ( var rawLogger = log.New(os.Stdout, "", 0) -func init() { - var out io.Writer = os.Stderr - if common.EnableLogStreaming { - out = zerolog.MultiLevelWriter(out, v1.GetMemLogger()) +func parallel(fns ...func()) { + var wg sync.WaitGroup + for _, fn := range fns { + wg.Add(1) + go func() { + defer wg.Done() + fn() + }() } - logging.InitLogger(out) - // logging.AddHook(v1.GetMemLogger()) + wg.Wait() } func main() { initProfiling() - args := common.GetArgs() + args := pkg.GetArgs(common.MainServerCommandValidator{}) switch args.Command { case common.CommandReload: @@ -76,7 +79,11 @@ func main() { if args.Command == common.CommandStart { logging.Info().Msgf("GoDoxy version %s", pkg.GetVersion()) logging.Trace().Msg("trace enabled") - // logging.AddHook(notif.GetDispatcher()) + parallel( + internal.InitIconListCache, + homepage.InitOverridesConfig, + favicon.InitIconCache, + ) } else { logging.DiscardLogger() } @@ -121,10 +128,6 @@ func main() { return } - go internal.InitIconListCache() - go homepage.InitOverridesConfig() - go favicon.InitIconCache() - cfg.Start(&config.StartServersOptions{ Proxy: true, }) diff --git a/internal/common/args.go b/internal/common/args.go index 0b5b5ac..758bfb5 100644 --- a/internal/common/args.go +++ b/internal/common/args.go @@ -1,15 +1,5 @@ package common -import ( - "flag" - "fmt" - "log" -) - -type Args struct { - Command string -} - const ( CommandStart = "" CommandValidate = "validate" @@ -22,33 +12,20 @@ const ( CommandDebugListMTrace = "debug-ls-mtrace" ) -var ValidCommands = []string{ - CommandStart, - CommandValidate, - CommandListConfigs, - CommandListRoutes, - CommandListIcons, - CommandReload, - CommandDebugListEntries, - CommandDebugListProviders, - CommandDebugListMTrace, -} +type MainServerCommandValidator struct{} -func validateArg(arg string) error { - for _, v := range ValidCommands { - if arg == v { - return nil - } +func (v MainServerCommandValidator) IsCommandValid(cmd string) bool { + switch cmd { + case CommandStart, + CommandValidate, + CommandListConfigs, + CommandListRoutes, + CommandListIcons, + CommandReload, + CommandDebugListEntries, + CommandDebugListProviders, + CommandDebugListMTrace: + return true } - return fmt.Errorf("invalid command %q", arg) -} - -func GetArgs() Args { - var args Args - flag.Parse() - args.Command = flag.Arg(0) - if err := validateArg(args.Command); err != nil { - log.Fatalf("invalid command: %s", err) - } - return args + return false } diff --git a/pkg/args.go b/pkg/args.go new file mode 100644 index 0000000..941951b --- /dev/null +++ b/pkg/args.go @@ -0,0 +1,29 @@ +package pkg + +import ( + "flag" + "log" +) + +type ( + Args struct { + Command string + Args []string + } + CommandValidator interface { + IsCommandValid(cmd string) bool + } +) + +func GetArgs(validator CommandValidator) Args { + var args Args + flag.Parse() + args.Command = flag.Arg(0) + if !validator.IsCommandValid(args.Command) { + log.Fatalf("invalid command: %s", args.Command) + } + if len(flag.Args()) > 1 { + args.Args = flag.Args()[1:] + } + return args +}