From e4f83e1c416af9fe0a18600521df98ca7975fe7c Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Wed, 8 Dec 2021 15:39:08 -0500 Subject: [PATCH] pkg/cmd: root programName and share ExampleServe --- cmd/spicedb/main.go | 2 +- pkg/cmd/defaults.go | 22 ++++++++++++++++++++++ pkg/cmd/root/root.go | 28 +++++++--------------------- pkg/cmd/serve/serve.go | 11 +---------- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/cmd/spicedb/main.go b/cmd/spicedb/main.go index f1b5ecb01f..b6f4b91557 100644 --- a/cmd/spicedb/main.go +++ b/cmd/spicedb/main.go @@ -36,7 +36,7 @@ func main() { )) // Create a root command - rootCmd := root.NewCommand() + rootCmd := root.NewCommand("spicedb") root.RegisterFlags(rootCmd) // Add a version command diff --git a/pkg/cmd/defaults.go b/pkg/cmd/defaults.go index baf7ff3094..2ea0e5ca1f 100644 --- a/pkg/cmd/defaults.go +++ b/pkg/cmd/defaults.go @@ -1,14 +1,34 @@ package cmd import ( + "fmt" "net/http" "net/http/pprof" + "github.com/fatih/color" "github.com/jzelinskie/cobrautil" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/rs/zerolog" ) +// ServeExample creates an example usage string with the provided program name. +func ServeExample(programName string) string { + return fmt.Sprintf(` %[1]s: + %[3]s serve --grpc-preshared-key "somerandomkeyhere" + + %[2]s: + %[3]s serve --grpc-preshared-key "realkeyhere" --grpc-tls-cert-path path/to/tls/cert --grpc-tls-key-path path/to/tls/key \ + --http-tls-cert-path path/to/tls/cert --http-tls-key-path path/to/tls/key \ + --datastore-engine postgres --datastore-conn-uri "postgres-connection-string-here" +`, + color.YellowString("No TLS and in-memory"), + color.GreenString("TLS and a real datastore"), + programName, + ) +} + +// DefaultPreRunE sets up viper, zerolog, and OpenTelemetry flag handling for a +// command. func DefaultPreRunE(programName string) cobrautil.CobraRunFunc { return cobrautil.CommandStack( cobrautil.SyncViperPreRunE(programName), @@ -17,6 +37,8 @@ func DefaultPreRunE(programName string) cobrautil.CobraRunFunc { ) } +// MetricsHandler sets up an HTTP server that handles serving Prometheus +// metrics and pprof endpoints. func MetricsHandler() http.Handler { mux := http.NewServeMux() mux.Handle("/metrics", promhttp.Handler()) diff --git a/pkg/cmd/root/root.go b/pkg/cmd/root/root.go index 1a5e6646fc..a34e4dc685 100644 --- a/pkg/cmd/root/root.go +++ b/pkg/cmd/root/root.go @@ -1,11 +1,10 @@ package root import ( - "fmt" - - "github.com/fatih/color" "github.com/jzelinskie/cobrautil" "github.com/spf13/cobra" + + cmdutil "github.com/authzed/spicedb/pkg/cmd" ) func RegisterFlags(cmd *cobra.Command) { @@ -13,24 +12,11 @@ func RegisterFlags(cmd *cobra.Command) { cobrautil.RegisterOpenTelemetryFlags(cmd.PersistentFlags(), "otel", cmd.Use) } -func NewCommand() *cobra.Command { +func NewCommand(programName string) *cobra.Command { return &cobra.Command{ - Use: "spicedb", - Short: "A modern permissions database", - Long: "A database that stores, computes, and validates application permissions", - Example: fmt.Sprintf(` %s: - spicedb serve --grpc-preshared-key "somerandomkeyhere" - - %s: - spicedb serve --grpc-preshared-key "realkeyhere" --grpc-tls-cert-path path/to/tls/cert --grpc-tls-key-path path/to/tls/key \ - --http-tls-cert-path path/to/tls/cert --http-tls-key-path path/to/tls/key \ - --datastore-engine postgres --datastore-conn-uri "postgres-connection-string-here" - %s: - spicedb serve-testing -`, - color.YellowString("No TLS and in-memory"), - color.GreenString("TLS and a real datastore"), - color.CyanString("In-memory integration test server"), - ), + Use: programName, + Short: "A modern permissions database", + Long: "A database that stores, computes, and validates application permissions", + Example: cmdutil.ServeExample(programName), } } diff --git a/pkg/cmd/serve/serve.go b/pkg/cmd/serve/serve.go index 2be4eef906..d670540c83 100644 --- a/pkg/cmd/serve/serve.go +++ b/pkg/cmd/serve/serve.go @@ -2,13 +2,11 @@ package serve import ( "context" - "fmt" "os" "os/signal" "syscall" "time" - "github.com/fatih/color" grpcauth "github.com/grpc-ecosystem/go-grpc-middleware/auth" grpczerolog "github.com/grpc-ecosystem/go-grpc-middleware/providers/zerolog/v2" grpclog "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging" @@ -89,14 +87,7 @@ func NewServeCommand(programName string, dsConfig *cmdutil.DatastoreConfig) *cob Run: func(cmd *cobra.Command, args []string) { serveRun(cmd, args, dsConfig) }, - Example: fmt.Sprintf(` %s: - spicedb serve --grpc-preshared-key "somerandomkeyhere" - - %s: - spicedb serve --grpc-preshared-key "realkeyhere" --grpc-tls-cert-path path/to/tls/cert --grpc-tls-key-path path/to/tls/key \ - --http-tls-cert-path path/to/tls/cert --http-tls-key-path path/to/tls/key \ - --datastore-engine postgres --datastore-conn-uri "postgres-connection-string-here" -`, color.YellowString("No TLS and in-memory"), color.GreenString("TLS and a real datastore")), + Example: cmdutil.ServeExample(programName), } }