-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Alejandro Mery <amery@jpi.io>
- Loading branch information
Showing
7 changed files
with
253 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package main | ||
|
||
import ( | ||
"context" | ||
|
||
"github.com/spf13/pflag" | ||
|
||
"darvaza.org/penne/pkg/config" | ||
"darvaza.org/penne/pkg/server" | ||
"darvaza.org/slog" | ||
) | ||
|
||
const ( | ||
configFileFlag = "config" | ||
configFileShortFlag = "f" | ||
configFileDefault = CmdName + ".{conf,json,toml,yaml,yml}" | ||
) | ||
|
||
var confLoader = config.Loader[server.Config]{ | ||
Base: CmdName, | ||
} | ||
|
||
func loadConfigFileFlag(ctx context.Context, log slog.Logger, | ||
flag *pflag.Flag) (*server.Config, error) { | ||
// | ||
init := func(cfg *server.Config) error { | ||
cfg.Context = ctx | ||
cfg.Logger = log | ||
return nil | ||
} | ||
|
||
cfg, err := confLoader.LoadFileFlag(flag, init) | ||
if err != nil { | ||
log.Error().WithField(slog.ErrorFieldName, err).Print("LoadConfigFile") | ||
return nil, err | ||
} | ||
return cfg, nil | ||
} | ||
|
||
func prepareConfig(ctx context.Context, flags *pflag.FlagSet) (*server.Config, error) { | ||
log, err := newLogger(nil, flags) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
flag := flags.Lookup(configFileFlag) | ||
cfg, err := loadConfigFileFlag(ctx, log, flag) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
return cfg, nil | ||
} | ||
|
||
func init() { | ||
pFlags := rootCmd.PersistentFlags() | ||
pFlags.StringP(configFileFlag, configFileShortFlag, configFileDefault, "config file to use") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package main | ||
|
||
import ( | ||
"context" | ||
"os" | ||
|
||
"github.com/spf13/cobra" | ||
|
||
"darvaza.org/sidecar/pkg/config" | ||
) | ||
|
||
const ( | ||
// DefaultDumpFormat indicates the format used by `penne dump` if none | ||
// is specified. | ||
DefaultDumpFormat = "toml" | ||
|
||
dumpFormatFlag = "format" | ||
) | ||
|
||
var dumpCmd = &cobra.Command{ | ||
Use: "dump", | ||
Short: "prints out the configuration", | ||
Args: cobra.NoArgs, | ||
|
||
RunE: func(cmd *cobra.Command, _ []string) error { | ||
flags := cmd.Flags() | ||
|
||
ctx := context.TODO() | ||
cfg, err := prepareConfig(ctx, flags) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
encFormat, err := flags.GetString(dumpFormatFlag) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
enc, err := config.NewEncoder(encFormat) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
_, err = enc.WriteTo(cfg, os.Stdout) | ||
return err | ||
}, | ||
} | ||
|
||
func init() { | ||
flags := dumpCmd.Flags() | ||
flags.StringP(dumpFormatFlag, "F", DefaultDumpFormat, | ||
"file format for the dump (yaml, toml or json)") | ||
|
||
rootCmd.AddCommand(dumpCmd) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package main | ||
|
||
import ( | ||
"io" | ||
|
||
"github.com/spf13/pflag" | ||
|
||
"darvaza.org/sidecar/pkg/logger/zerolog" | ||
"darvaza.org/slog" | ||
) | ||
|
||
func newLogger(w io.Writer, flags *pflag.FlagSet) (slog.Logger, error) { | ||
level := slog.Error | ||
|
||
if flags != nil { | ||
verbosity, err := flags.GetCount(verbosityFlag) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
level += slog.LogLevel(verbosity) | ||
switch { | ||
case level < slog.Error: | ||
level = slog.Error | ||
case level > slog.Debug: | ||
level = slog.Debug | ||
} | ||
} | ||
|
||
log := zerolog.New(w, level) | ||
return log, nil | ||
} | ||
|
||
func mustLogger(w io.Writer, flags *pflag.FlagSet) slog.Logger { | ||
log, err := newLogger(w, flags) | ||
if err != nil { | ||
panic(err) | ||
} | ||
return log | ||
} | ||
|
||
const verbosityFlag = "verbose" | ||
|
||
func init() { | ||
pFlags := rootCmd.PersistentFlags() | ||
pFlags.CountP(verbosityFlag, "v", "increase verbosity") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,34 @@ | ||
// Package main implements the Penne server | ||
package main | ||
|
||
func main() {} | ||
import ( | ||
"os" | ||
|
||
"github.com/spf13/cobra" | ||
|
||
"darvaza.org/sidecar/pkg/service" | ||
"darvaza.org/slog" | ||
) | ||
|
||
const ( | ||
// CmdName is the name of this executable | ||
CmdName = "penne" | ||
) | ||
|
||
var rootCmd = &cobra.Command{ | ||
Use: CmdName, | ||
Short: "penne resolves names", | ||
} | ||
|
||
func main() { | ||
err := rootCmd.Execute() | ||
code, err := service.AsExitStatus(err) | ||
|
||
if err != nil { | ||
mustLogger(nil, nil).Error(). | ||
WithField(slog.ErrorFieldName, err). | ||
Print() | ||
} | ||
|
||
os.Exit(code) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package main | ||
|
||
import ( | ||
"context" | ||
|
||
"github.com/spf13/cobra" | ||
|
||
"darvaza.org/penne/pkg/server" | ||
) | ||
|
||
var serveCmd = &cobra.Command{ | ||
Use: "serve", | ||
Short: "Run DNS server", | ||
Args: cobra.NoArgs, | ||
RunE: func(cmd *cobra.Command, _ []string) error { | ||
ctx := context.Background() | ||
cfg, err := prepareConfig(ctx, cmd.Flags()) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
srv, err := server.New(cfg) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return srv.ListenAndServe() | ||
}, | ||
} | ||
|
||
func init() { | ||
rootCmd.AddCommand(serveCmd) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters