refactor: improved init flow in main

This commit is contained in:
yusing 2025-03-28 06:00:08 +08:00
parent fd223c7542
commit 1e39d0b186
3 changed files with 58 additions and 49 deletions

View file

@ -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,
})

View file

@ -1,15 +1,5 @@
package common
import (
"flag"
"fmt"
"log"
)
type Args struct {
Command string
}
const (
CommandStart = ""
CommandValidate = "validate"
@ -22,8 +12,11 @@ const (
CommandDebugListMTrace = "debug-ls-mtrace"
)
var ValidCommands = []string{
CommandStart,
type MainServerCommandValidator struct{}
func (v MainServerCommandValidator) IsCommandValid(cmd string) bool {
switch cmd {
case CommandStart,
CommandValidate,
CommandListConfigs,
CommandListRoutes,
@ -31,24 +24,8 @@ var ValidCommands = []string{
CommandReload,
CommandDebugListEntries,
CommandDebugListProviders,
CommandDebugListMTrace,
}
func validateArg(arg string) error {
for _, v := range ValidCommands {
if arg == v {
return nil
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
}

29
pkg/args.go Normal file
View file

@ -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
}