Initial commit
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/owncloud/reva-webdav/pkg/version"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// Root is the entry point for the reva-webdav command.
|
||||
func Root() *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "reva-webdav",
|
||||
Short: "Reva service for webdav",
|
||||
Long: ``,
|
||||
Version: version.String,
|
||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||
setupLogger()
|
||||
setupConfig()
|
||||
},
|
||||
}
|
||||
|
||||
cmd.PersistentFlags().String("log-level", "", "Set logging level")
|
||||
viper.BindPFlag("log.level", cmd.PersistentFlags().Lookup("log-level"))
|
||||
viper.SetDefault("log.level", "info")
|
||||
viper.BindEnv("log.level", "WEBDAV_LOG_LEVEL")
|
||||
|
||||
cmd.PersistentFlags().Bool("log-pretty", false, "Enable pretty logging")
|
||||
viper.BindPFlag("log.pretty", cmd.PersistentFlags().Lookup("log-pretty"))
|
||||
viper.SetDefault("log.pretty", true)
|
||||
viper.BindEnv("log.pretty", "WEBDAV_LOG_PRETTY")
|
||||
|
||||
cmd.PersistentFlags().Bool("log-color", false, "Enable colored logging")
|
||||
viper.BindPFlag("log.color", cmd.PersistentFlags().Lookup("log-color"))
|
||||
viper.SetDefault("log.color", true)
|
||||
viper.BindEnv("log.color", "WEBDAV_LOG_COLOR")
|
||||
|
||||
cmd.AddCommand(Server())
|
||||
cmd.AddCommand(Health())
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
func setupLogger() {
|
||||
switch strings.ToLower(viper.GetString("log.level")) {
|
||||
case "panic":
|
||||
zerolog.SetGlobalLevel(zerolog.PanicLevel)
|
||||
case "fatal":
|
||||
zerolog.SetGlobalLevel(zerolog.FatalLevel)
|
||||
case "error":
|
||||
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
|
||||
case "warn":
|
||||
zerolog.SetGlobalLevel(zerolog.WarnLevel)
|
||||
case "info":
|
||||
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||
case "debug":
|
||||
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
||||
default:
|
||||
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||
}
|
||||
|
||||
if viper.GetBool("log.pretty") {
|
||||
log.Logger = log.Output(
|
||||
zerolog.ConsoleWriter{
|
||||
Out: os.Stderr,
|
||||
NoColor: !viper.GetBool("log.color"),
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func setupConfig() {
|
||||
viper.SetConfigName("phoenix")
|
||||
|
||||
viper.AddConfigPath("/etc/reva")
|
||||
viper.AddConfigPath("$HOME/.reva")
|
||||
viper.AddConfigPath("./config")
|
||||
|
||||
if err := viper.ReadInConfig(); err != nil {
|
||||
switch err.(type) {
|
||||
case viper.ConfigFileNotFoundError:
|
||||
log.Debug().
|
||||
Msg("Continue without config")
|
||||
case viper.UnsupportedConfigError:
|
||||
log.Fatal().
|
||||
Msg("Unsupported config type")
|
||||
default:
|
||||
if e := log.Debug(); e.Enabled() {
|
||||
log.Fatal().
|
||||
Err(err).
|
||||
Msg("Failed to read config")
|
||||
} else {
|
||||
log.Fatal().
|
||||
Msg("Failed to read config")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
func init() {
|
||||
viper.SetDefault("server.addr", "0.0.0.0:8180")
|
||||
viper.SetDefault("metrics.addr", "0.0.0.0:8190")
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// Health is the entrypoint for the health command.
|
||||
func Health() *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "health",
|
||||
Short: "Check health status",
|
||||
Long: "",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
log.Info().
|
||||
Str("addr", viper.GetString("metrics.addr")).
|
||||
Msg("Executed health command")
|
||||
},
|
||||
}
|
||||
|
||||
cmd.Flags().String("metrics-addr", "", "Address to metrics endpoint")
|
||||
viper.BindPFlag("metrics.addr", cmd.Flags().Lookup("metrics-addr"))
|
||||
viper.BindEnv("metrics.addr", "WEBDAV_METRICS_ADDR")
|
||||
|
||||
return cmd
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// Server is the entrypoint for the server command.
|
||||
func Server() *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "server",
|
||||
Short: "Start integrated server",
|
||||
Long: "",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
log.Info().
|
||||
Str("addr", viper.GetString("server.addr")).
|
||||
Msg("Executed server command")
|
||||
},
|
||||
}
|
||||
|
||||
cmd.Flags().String("server-addr", "", "Address to bind the server")
|
||||
viper.BindPFlag("server.addr", cmd.Flags().Lookup("server-addr"))
|
||||
viper.BindEnv("server.addr", "WEBDAV_SERVER_ADDR")
|
||||
|
||||
return cmd
|
||||
}
|
||||
Reference in New Issue
Block a user