Skip to content

Commit

Permalink
penne: serve and dump commands
Browse files Browse the repository at this point in the history
Signed-off-by: Alejandro Mery <amery@jpi.io>
  • Loading branch information
amery committed Dec 22, 2023
1 parent f5848d2 commit 8e65dac
Show file tree
Hide file tree
Showing 7 changed files with 253 additions and 1 deletion.
58 changes: 58 additions & 0 deletions cmd/penne/config.go
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"

Check failure on line 8 in cmd/penne/config.go

View workflow job for this annotation

GitHub Actions / golangci-lint

could not import darvaza.org/penne/pkg/config (-: # 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")
}
55 changes: 55 additions & 0 deletions cmd/penne/dump.go
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)
}
47 changes: 47 additions & 0 deletions cmd/penne/logger.go
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")
}
32 changes: 31 additions & 1 deletion cmd/penne/main.go
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)
}
33 changes: 33 additions & 0 deletions cmd/penne/serve.go
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)
}
7 changes: 7 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,21 @@ go 1.20
require (
darvaza.org/core v0.11.0
darvaza.org/sidecar v0.0.9
darvaza.org/sidecar/pkg/service v0.0.4
darvaza.org/slog v0.5.4
darvaza.org/slog/handlers/discard v0.4.6
)

require (
github.com/mgechev/revive v1.3.4
github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.5
)

require (
darvaza.org/darvaza/shared/config v0.2.5 // indirect
darvaza.org/slog/handlers/filter v0.4.6 // indirect
darvaza.org/slog/handlers/zerolog v0.4.6 // indirect
github.com/BurntSushi/toml v1.3.2 // indirect
github.com/amery/defaults v0.1.0 // indirect
github.com/chavacava/garif v0.1.0 // indirect
Expand All @@ -25,6 +29,8 @@ require (
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.16.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/kardianos/service v1.2.2 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
Expand All @@ -34,6 +40,7 @@ require (
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
github.com/rs/zerolog v1.31.0 // indirect
golang.org/x/crypto v0.16.0 // indirect
golang.org/x/net v0.19.0 // indirect
golang.org/x/sys v0.15.0 // indirect
Expand Down
22 changes: 22 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,24 @@ darvaza.org/darvaza/shared/config v0.2.5 h1:A4XYgKMkGgYuvxPDfPuoWSNHUXVSUGlBs2Lm
darvaza.org/darvaza/shared/config v0.2.5/go.mod h1:yYxZLw5Be6pnfAn79IcVfUhqKpMzCxKYbqmUMjAebsU=
darvaza.org/sidecar v0.0.9 h1:7I3BItBpeLQR7ab93K8qxxl3VZacixtnnbozK1pB4L0=
darvaza.org/sidecar v0.0.9/go.mod h1:jPDSezJAZKYHwN2aX1H1rEglPTIU/PI3MTzaZO5dvBM=
darvaza.org/sidecar/pkg/service v0.0.4 h1:L6FHIdAemdQMGGzOUekKvkuvVIhwe+qBMt+ZsB1l0IU=
darvaza.org/sidecar/pkg/service v0.0.4/go.mod h1:ovR95RPbyZv+MS8B5vYjgRR+YxzIflfesmJW+35OR40=
darvaza.org/slog v0.5.4 h1:xzlWVzYh4tuZLnj4A9tOHXfn/SAEIkApXPvK3YDiW9g=
darvaza.org/slog v0.5.4/go.mod h1:QFtY3QoQ7xxww85umlEKPcMCNzqNrHYqnj53KehsmBU=
darvaza.org/slog/handlers/discard v0.4.6 h1:TatHJn34y6eKQzNRHSo6lGZnJg4SLOGaWstlvwwOyrE=
darvaza.org/slog/handlers/discard v0.4.6/go.mod h1:AG8WKr7m11NPPzvHW/b8nCT5RvYR9RZcIT/NWUOoMAo=
darvaza.org/slog/handlers/filter v0.4.6 h1:AI5AQDyXS534QeXIV54pAKxplA6AVZNr4H2PEmAXT0k=
darvaza.org/slog/handlers/filter v0.4.6/go.mod h1:MGTKdlnA/FanOn3GU2mltzwBn41HgSxxNeWUQEKFbl8=
darvaza.org/slog/handlers/zerolog v0.4.6 h1:Di+FXUD2R2pKUrynaidyXzS0WsrEiwbL11LQlQzwZv4=
darvaza.org/slog/handlers/zerolog v0.4.6/go.mod h1:r5B9/FQ256R3Wo5vFLOa2YarM2P8WOjVjFn8xHikNjk=
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/amery/defaults v0.1.0 h1:4AhTgLUnj8BPjVRBzg4+/cSCwPWPT6+yWCM4rD6Feyc=
github.com/amery/defaults v0.1.0/go.mod h1:duOYkvd60q8XOL1+vdSHx5ABTGDMU2iFKr5xJnMEpBk=
github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand All @@ -31,14 +39,20 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.16.0 h1:x+plE831WK4vaKHO/jpgUGsvLKIqRRkz6M78GuJAfGE=
github.com/go-playground/validator/v10 v10.16.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/kardianos/service v1.2.2 h1:ZvePhAHfvo0A7Mftk/tEzqEZ7Q4lgnR8sGz4xu1YX60=
github.com/kardianos/service v1.2.2/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
Expand All @@ -60,6 +74,12 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.10.1-0.20230524175051-ec119421bb97 h1:3RPlVWzZ/PDqmVuf/FKHARG5EMid/tl7cv54Sw/QRVY=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
Expand All @@ -76,8 +96,10 @@ golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
Expand Down

0 comments on commit 8e65dac

Please sign in to comment.