From 227b37e42b100c7066b88bfa4253ba46200f3fe8 Mon Sep 17 00:00:00 2001 From: Leon Date: Thu, 22 Feb 2024 19:50:30 +0800 Subject: [PATCH] refactor: add debug mode and network IP exclusion --- cmd/main.go | 84 ++++++++++++++++++++++++++-------------------- pkg/utils/ip/ip.go | 3 ++ 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 3f3769b..689ea3f 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "net/http" "github.com/gin-gonic/gin" "github.com/ory/graceful" @@ -15,81 +16,92 @@ import ( "go-gin/service/singleton" ) -type CliParam struct { +type ClIParam struct { Version bool // Show version ConfigName string // Config file name Port uint // Server port + Debug bool // Debug mode } -var ( - cliParam CliParam -) +var cliParam ClIParam -func init() { +func parseCommandLineParams() (cliParam ClIParam) { flag.CommandLine.ParseErrorsWhitelist.UnknownFlags = true flag.BoolVarP(&cliParam.Version, "version", "v", false, "show version") flag.StringVarP(&cliParam.ConfigName, "config", "c", "config", "config file name") flag.UintVarP(&cliParam.Port, "port", "p", 0, "server port") + flag.BoolVarP(&cliParam.Debug, "debug", "d", false, "debug mode") flag.Parse() flag.Lookup("config").NoOptDefVal = "config" - singleton.InitConfig(cliParam.ConfigName) - singleton.InitLog(singleton.Conf) - singleton.InitTimezoneAndCache() - singleton.InitDBFromPath(singleton.Conf.DBPath) - initService() + return cliParam } -func main() { - if cliParam.Version { - fmt.Println(singleton.Version) - return - } +func loadConfig() { + cliParam = parseCommandLineParams() - port := singleton.Conf.Server.Port - if cliParam.Port != 0 { - port = cliParam.Port + singleton.InitConfig(cliParam.ConfigName) + if cliParam.Port > 0 && cliParam.Port < 65536 { + singleton.Conf.Server.Port = cliParam.Port } + if cliParam.Debug { + singleton.Conf.Debug = cliParam.Debug + } +} - srv := controller.ServerWeb(port) - - startOutput := func() { +func startupOutput(httpserver *http.Server) { + if singleton.Conf.Debug { + fmt.Println() + fmt.Printf("Service version: %s\n", utils.Colorize(utils.ColorGreen, singleton.Version)) fmt.Println() fmt.Println("Server available routes:") - mygin.PrintRoute(srv.Handler.(*gin.Engine)) + mygin.PrintRoute(httpserver.Handler.(*gin.Engine)) fmt.Println() - fmt.Println("Server is running with config:") + fmt.Println("Server running with config:") utils.PrintStructFieldsAndValues(singleton.Conf, "") + } - fmt.Println() - ipv4s, err := ip.GetIPv4NetworkIPs() - if ipv4s != nil && err == nil { - fmt.Println("Server is running at:") - for _, ip := range ipv4s { - fmt.Printf(" - %-7s: %s\n", "Network", utils.Colorize(utils.ColorGreen, fmt.Sprintf("http://%s:%d", ip, port))) - } + fmt.Println() + fmt.Println("Server is running at:") + fmt.Printf(" - %-7s: %s\n", "Local", utils.Colorize(utils.ColorGreen, fmt.Sprintf("http://127.0.0.1:%d", singleton.Conf.Server.Port))) + ipv4s, err := ip.GetIPv4NetworkIPs() + if ipv4s != nil && err == nil { + for _, ip := range ipv4s { + fmt.Printf(" - %-7s: %s\n", "Network", utils.Colorize(utils.ColorGreen, fmt.Sprintf("http://%s:%d", ip, singleton.Conf.Server.Port))) } - fmt.Println() + } + fmt.Println() +} - fmt.Printf("Current service version: %s\n", utils.Colorize(utils.ColorGreen, singleton.Version)) - fmt.Println() +func init() { + loadConfig() + singleton.InitLog(singleton.Conf) + singleton.InitTimezoneAndCache() + singleton.InitDBFromPath(singleton.Conf.DBPath) + initService() +} + +func main() { + if cliParam.Version { + fmt.Println(singleton.Version) + return } + srv := controller.ServerWeb(singleton.Conf.Server.Port) if err := graceful.Graceful(func() error { - startOutput() + startupOutput(srv) return srv.ListenAndServe() }, func(c context.Context) error { fmt.Print(utils.Colorize("Server is shutting down", utils.ColorRed)) srv.Shutdown(c) return nil }); err != nil { - fmt.Println(utils.Colorize("Server is shutting down with error: %s", utils.ColorRed), err) + fmt.Printf("Server is shutting down with error: %s", utils.Colorize(utils.ColorRed, err.Error())) } } func initService() { - // Load all services in the singleton package singleton.LoadSingleton() // if _, err := singleton.Cron.AddFunc("0 * * * * *", sayHello); err != nil { diff --git a/pkg/utils/ip/ip.go b/pkg/utils/ip/ip.go index d2efcfd..0bf6956 100644 --- a/pkg/utils/ip/ip.go +++ b/pkg/utils/ip/ip.go @@ -28,6 +28,9 @@ func GetNetworkIPs() ([]string, error) { ips := make([]string, 0) for _, i := range ifaces { + if i.Flags&net.FlagLoopback != 0 { + continue + } addrs, err := i.Addrs() if err != nil { continue