From 4d50dc1f4a8667b8c2ba0459ffcca3a7b6159108 Mon Sep 17 00:00:00 2001 From: Nathan13888 <29968201+Nathan13888@users.noreply.github.com> Date: Sun, 4 Jun 2023 16:21:41 -0400 Subject: [PATCH] update cli Signed-off-by: Nathan13888 <29968201+Nathan13888@users.noreply.github.com> --- main.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index cb43e24..cc26f09 100644 --- a/main.go +++ b/main.go @@ -1,15 +1,29 @@ package main import ( - "log" "os" + "path/filepath" + "github.com/Nathan13888/mirror-checker2/v2/checkers" "github.com/Nathan13888/mirror-checker2/v2/config" "github.com/Nathan13888/mirror-checker2/v2/web" + "github.com/rs/zerolog/log" "github.com/urfave/cli/v2" ) +func getAbsPath(path string) string { + absPath, err := filepath.Abs(path) + if err != nil { + log.Error().Err(err).Msg("Failed to get absolute path.") + return path + } + return absPath +} + func main() { + var err error + config.SetupLogger(true) // TODO: flag for debug mode + // Start CLI // TODO: documentation - https://cli.urfave.org/v2/examples/full-api-example/ app := &cli.App{ @@ -18,14 +32,25 @@ func main() { Version: config.BuildVersion, EnableBashCompletion: true, // https://cli.urfave.org/v2/examples/combining-short-options/ - // TODO: flags for config file (mirrors.json) and input + // TODO: flags for config file (mirrors.json), defaults to mirrors.json Commands: []*cli.Command{ { - Name: "server", - Aliases: []string{"s", "serve", "web"}, + Name: "daemon", + Aliases: []string{"s", "d", "serve", "web", "server"}, Usage: "starts web API", Action: func(cCtx *cli.Context) error { // TODO: flags for port, listen address + // TODO: flag --config or --stdin-config + + // TODO: enable all projects by default + // checkers.LoadDefaultProjects() + + path := getAbsPath("data/mirrors.json") + log.Info().Str("path", path).Msg("Loading config file.") + err = config.LoadFromFile(path) + if err != nil { + log.Fatal().Err(err).Msg("Failed to load config file.") + } return web.StartServer() }, @@ -33,8 +58,27 @@ func main() { { Name: "check", Aliases: []string{"c"}, - Usage: "checks particular mirror", + Usage: "checks particular mirror (once)", Action: func(cCtx *cli.Context) error { + checkers.LoadDefaultProjects() + + // verify all projects are enabled + // TODO: + + // attempt to look up and check all projects + for _, arg := range cCtx.Args().Slice() { + log.Printf("\nPulling project information for '%s'\n\n", arg) + proj, err := checkers.GetProject(arg) + if err != nil { + log.Fatal().Err(err). + Str("project", arg). + Msg("Failed to load project.") + return err + } + + proj.RunChecksAsync() + } + return nil }, // TODO: auto complete available mirrors, https://cli.urfave.org/v2/examples/combining-short-options/ @@ -44,7 +88,7 @@ func main() { // return // } // for _, t := range config.Mirrors { - // fmt.Println(t) + // log.Println(t) // } // }, }, @@ -52,6 +96,6 @@ func main() { } if err := app.Run(os.Args); err != nil { - log.Fatal(err) + log.Fatal().Err(err).Msg("An error occurred.") } }