diff --git a/application/version.go b/application/version.go index 1f15368..6257b58 100644 --- a/application/version.go +++ b/application/version.go @@ -16,7 +16,7 @@ const ( ) var ( - version semver.Version + version Version versionFlag bool versionCmd = &cobra.Command{ Use: versionName, @@ -25,11 +25,24 @@ var ( } ) +type Version struct { + Full string + Branch string + Tag string + Commit string + CommitDate string + BuildDate string + Major string + Minor string + Patch string + PreRelease string +} + func addVersionFlag(cmd *cobra.Command) { cmd.PersistentFlags().BoolVarP(&versionFlag, versionName, versionShortHand, false, versionUsage) } -func configureVersionFlag(cmd *cobra.Command, v semver.Version) { +func configureVersionFlag(cmd *cobra.Command, v Version) { version = v cmd.AddCommand(versionCmd) addVersionFlag(cmd) @@ -50,19 +63,28 @@ func printVersion(v semver.Version) string { if output != "" { return output } - return fmt.Sprintf( - "Full: %s\nVersion: %s\nChannel: %s\nCommit: %s\nDate: %s", - v.String(), - v.Number(), - v.Release(), - v.Commit(), - v.Date(), + "Full: %s\nBranch: %s\nTag: %s\nCommit: %s\nCommit date: %s\nBuild date: %s\nMajor: %s\nMinor: %s\nPatch: %s\nPreRelease: %s\n", + version.Full, + version.Branch, + version.Tag, + version.Commit, + version.CommitDate, + version.BuildDate, + version.Major, + version.Minor, + version.Patch, + version.PreRelease, ) } func versionRunFuncE(cmd *cobra.Command, args []string) error { - if _, err := fmt.Fprintln(outWriter, printVersion(version)); err != nil { + var v semver.Version + var err error + if v, err = semver.Parse(version.Full); err != nil { + return err + } + if _, err = fmt.Fprintln(outWriter, printVersion(v)); err != nil { return err } return nil diff --git a/examples/simple/main.go b/examples/simple/main.go index 747a5d8..6325284 100644 --- a/examples/simple/main.go +++ b/examples/simple/main.go @@ -2,47 +2,82 @@ package main import ( "context" - "fmt" + "log/slog" + "net/http" + "os" + "syscall" "time" + "git.flexabyte.io/flexabyte/go-slogd/slogd" "github.com/spf13/cobra" - "git.flexabyte.io/flexabyte/go-slogd/slogd" - "git.flexabyte.io/flexabyte/go-kit/application" + "git.flexabyte.io/flexabyte/go-kit/httpd" +) + +var ( + version string = "0.1.0-alpha.0+metadata.20101112" + branch string = "0.1.0-dev" + tag string = "0.1.0-dev.0" + commit string = "aabbccddee" + commitDate string = time.Now().String() + buildDate string = time.Now().String() + + major string = "0" + minor string = "1" + patch string = "0" + prerelease string = "dev" ) func main() { var err error - slogd.Init(slogd.LevelTrace, true) + slogd.Init(application.GetLogLevelFromArgs(os.Args), false) + slogd.RegisterSink(slogd.HandlerText, slog.NewTextHandler(os.Stdout, slogd.HandlerOptions()), true) + ctx := slogd.WithContext(context.Background()) config := application.Config{ - Name: "main", - Title: "Main Test", - Banner: "", - Version: "0.1.0-alpha.0+metadata.20101112", - EnableGracefulShutdown: true, - OverrideRunE: func(cmd *cobra.Command, args []string) error { - fmt.Println("overrideRunE") - time.Sleep(5 * time.Second) - fmt.Println("overrideRunE done") - return nil + Name: "main", + Title: "Main Test", + Banner: "", + // Version: "0.1.0-alpha.0+metadata.20101112", + Version: application.Version{ + Full: version, + Branch: branch, + Tag: tag, + Commit: commit, + CommitDate: commitDate, + BuildDate: buildDate, + Major: major, + Minor: minor, + Patch: patch, + PreRelease: prerelease, }, - PersistentPreRunE: nil, - PersistentPostRunE: nil, - // ShutdownSignals: []os.Signal{syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT}, - ShutdownTimeout: 1 * time.Second, + EnableGracefulShutdown: true, + Logger: slogd.Logger(), + OverrideRunE: func(cmd *cobra.Command, args []string) error { + // fmt.Println("overrideRunE") + // time.Sleep(1 * time.Second) + // fmt.Println("overrideRunE done") + mux := http.NewServeMux() + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + slogd.FromContext(r.Context()).LogAttrs(r.Context(), slogd.LevelInfo, "request received", slog.String("method", r.Method), slog.String("url", r.URL.String()), slog.String("user-agent", r.UserAgent())) + }) + return httpd.RunHttpServer(cmd.Context(), slogd.FromContext(cmd.Context()), "127.0.0.1", 28000, mux, 1*time.Second) + }, + PersistentPreRunE: nil, + PersistentPostRunE: nil, + ShutdownSignals: []os.Signal{syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT}, + ShutdownTimeout: 5 * time.Second, SubCommands: nil, SubCommandInitializeFunc: nil, ValidArgs: nil, } - var app application.Application if app, err = application.New(config); err != nil { panic(err) } - if err = app.Start(context.Background()); err != nil { + if err = app.ExecuteContext(ctx); err != nil { panic(err) } }