Skip to content

Commit

Permalink
refactor(pp): various tweaks to logging (#787)
Browse files Browse the repository at this point in the history
  • Loading branch information
favonia authored Jul 7, 2024
1 parent d724a60 commit ece052d
Show file tree
Hide file tree
Showing 10 changed files with 78 additions and 81 deletions.
4 changes: 2 additions & 2 deletions internal/config/config_print.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func (c *Config) Print(ppfmt pp.PP) {
item("Delete on stop?", "%t", c.DeleteOnStop)
item("Cache expiration:", "%v", c.CacheExpiration)

section("New DNS records:")
section("Parameters of new DNS records:")
item("TTL:", "%s", c.TTL.Describe())
{
_, inverseMap := getInverseMap(c.Proxied)
Expand All @@ -106,7 +106,7 @@ func (c *Config) Print(ppfmt pp.PP) {
}

if len(c.Notifiers) > 0 {
section("Notifiers (via shoutrrr):")
section("Notification services (via shoutrrr):")
notifier.DescribeAll(func(service, params string) {
item(service+":", "%s", params)
}, c.Notifiers)
Expand Down
8 changes: 4 additions & 4 deletions internal/config/config_print_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func TestPrintDefault(t *testing.T) {
printItem(innerMockPP, "Update on start?", "true"),
printItem(innerMockPP, "Delete on stop?", "false"),
printItem(innerMockPP, "Cache expiration:", "6h0m0s"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "New DNS records:"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "Parameters of new DNS records:"),
printItem(innerMockPP, "TTL:", "1 (auto)"),
printItem(innerMockPP, "Proxied domains:", "(none)"),
printItem(innerMockPP, "Unproxied domains:", "(none)"),
Expand Down Expand Up @@ -78,7 +78,7 @@ func TestPrintValues(t *testing.T) {
printItem(innerMockPP, "Update on start?", "true"),
printItem(innerMockPP, "Delete on stop?", "false"),
printItem(innerMockPP, "Cache expiration:", "6h0m0s"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "New DNS records:"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "Parameters of new DNS records:"),
printItem(innerMockPP, "TTL:", "30000"),
printItem(innerMockPP, "Proxied domains:", "a, b"),
printItem(innerMockPP, "Unproxied domains:", "c, d"),
Expand All @@ -88,7 +88,7 @@ func TestPrintValues(t *testing.T) {
printItem(innerMockPP, "Record updating:", "30s"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "Monitors:"),
printItem(innerMockPP, "Meow:", "purrrr"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "Notifiers (via shoutrrr):"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "Notification services (via shoutrrr):"),
printItem(innerMockPP, "Snake:", "hissss"),
)

Expand Down Expand Up @@ -144,7 +144,7 @@ func TestPrintEmpty(t *testing.T) {
printItem(innerMockPP, "Update on start?", "false"),
printItem(innerMockPP, "Delete on stop?", "false"),
printItem(innerMockPP, "Cache expiration:", "0s"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "New DNS records:"),
mockPP.EXPECT().Infof(pp.EmojiConfig, "Parameters of new DNS records:"),
printItem(innerMockPP, "TTL:", "0"),
printItem(innerMockPP, "Proxied domains:", "(none)"),
printItem(innerMockPP, "Unproxied domains:", "(none)"),
Expand Down
4 changes: 2 additions & 2 deletions internal/config/env_base.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ func ReadQuiet(key string, ppfmt *pp.PP) bool {
}

if quiet {
*ppfmt = (*ppfmt).SetLevel(pp.Quiet)
*ppfmt = (*ppfmt).SetVerbosity(pp.Quiet)
} else {
*ppfmt = (*ppfmt).SetLevel(pp.Verbose)
*ppfmt = (*ppfmt).SetVerbosity(pp.Verbose)
}

return true
Expand Down
4 changes: 2 additions & 2 deletions internal/config/env_base_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,13 +186,13 @@ func TestReadQuiet(t *testing.T) {
"true": {
true, " true", true,
func(m *mocks.MockPP) {
m.EXPECT().SetLevel(pp.Notice)
m.EXPECT().SetVerbosity(pp.Notice)
},
},
"false": {
true, " false ", true,
func(m *mocks.MockPP) {
m.EXPECT().SetLevel(pp.Info)
m.EXPECT().SetVerbosity(pp.Info)
},
},
"illform": {
Expand Down
30 changes: 15 additions & 15 deletions internal/mocks/mock_pp.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions internal/pp/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ type PP interface {
// SetEmoji sets whether emojis should be used.
SetEmoji(emoji bool) PP

// SetLevel sets the level under which messages will be hidden.
SetLevel(level Level) PP
// SetVerbosity sets the level under which messages will be hidden.
SetVerbosity(v Verbosity) PP

// IsEnabledFor checks whether a message of a certain level will be displayed.
IsEnabledFor(level Level) bool
IsEnabledFor(v Verbosity) bool

// IncIndent returns a new pretty-printer with more indentation.
IncIndent() PP
Expand Down
59 changes: 28 additions & 31 deletions internal/pp/fmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,46 +7,43 @@ import (
)

type formatter struct {
writer io.Writer
emoji bool
indent int
level Level
writer io.Writer
emoji bool
indent int
verbosity Verbosity
}

// New creates a new pretty printer.
func New(writer io.Writer) PP {
return &formatter{
writer: writer,
emoji: true,
indent: 0,
level: DefaultLevel,
return formatter{
writer: writer,
emoji: true,
indent: 0,
verbosity: DefaultVerbosity,
}
}

func (f *formatter) SetEmoji(emoji bool) PP {
fmt := *f
fmt.emoji = emoji
return &fmt
func (f formatter) SetEmoji(emoji bool) PP {
f.emoji = emoji
return f
}

func (f *formatter) SetLevel(lvl Level) PP {
fmt := *f
fmt.level = lvl
return &fmt
func (f formatter) SetVerbosity(v Verbosity) PP {
f.verbosity = v
return f
}

func (f *formatter) IsEnabledFor(lvl Level) bool {
return lvl >= f.level
func (f formatter) IsEnabledFor(v Verbosity) bool {
return v >= f.verbosity
}

func (f *formatter) IncIndent() PP {
fmt := *f
fmt.indent++
return &fmt
func (f formatter) IncIndent() PP {
f.indent++
return f
}

func (f *formatter) output(lvl Level, emoji Emoji, msg string) {
if lvl < f.level {
func (f formatter) output(v Verbosity, emoji Emoji, msg string) {
if v < f.verbosity {
return
}

Expand All @@ -65,22 +62,22 @@ func (f *formatter) output(lvl Level, emoji Emoji, msg string) {
fmt.Fprintln(f.writer, line)
}

func (f *formatter) printf(lvl Level, emoji Emoji, format string, args ...any) {
f.output(lvl, emoji, fmt.Sprintf(format, args...))
func (f formatter) printf(v Verbosity, emoji Emoji, format string, args ...any) {
f.output(v, emoji, fmt.Sprintf(format, args...))
}

func (f *formatter) Infof(emoji Emoji, format string, args ...any) {
func (f formatter) Infof(emoji Emoji, format string, args ...any) {
f.printf(Info, emoji, format, args...)
}

func (f *formatter) Noticef(emoji Emoji, format string, args ...any) {
func (f formatter) Noticef(emoji Emoji, format string, args ...any) {
f.printf(Notice, emoji, format, args...)
}

func (f *formatter) Warningf(emoji Emoji, format string, args ...any) {
func (f formatter) Warningf(emoji Emoji, format string, args ...any) {
f.printf(Warning, emoji, format, args...)
}

func (f *formatter) Errorf(emoji Emoji, format string, args ...any) {
func (f formatter) Errorf(emoji Emoji, format string, args ...any) {
f.printf(Error, emoji, format, args...)
}
14 changes: 7 additions & 7 deletions internal/pp/fmt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ func TestIsEnabledFor(t *testing.T) {
t.Parallel()

for name, tc := range map[string]struct {
set pp.Level
test pp.Level
set pp.Verbosity
test pp.Verbosity
expected bool
}{
"info-notice": {pp.Info, pp.Notice, true},
Expand All @@ -24,7 +24,7 @@ func TestIsEnabledFor(t *testing.T) {
t.Parallel()

var buf strings.Builder
fmt := pp.New(&buf).SetLevel(tc.set)
fmt := pp.New(&buf).SetVerbosity(tc.set)

require.Equal(t, tc.expected, fmt.IsEnabledFor(tc.test))
})
Expand Down Expand Up @@ -59,9 +59,9 @@ func TestPrint(t *testing.T) {
t.Parallel()

for name, tc := range map[string]struct {
emoji bool
level pp.Level
expected string
emoji bool
verbosity pp.Verbosity
expected string
}{
"info": {true, pp.Info, "🌟 info\n🌟 notice\n🌟 warning\n🌟 error\n"},
"notice": {true, pp.Notice, "🌟 notice\n🌟 warning\n🌟 error\n"},
Expand All @@ -76,7 +76,7 @@ func TestPrint(t *testing.T) {
t.Parallel()

var buf strings.Builder
fmt := pp.New(&buf).SetEmoji(tc.emoji).SetLevel(tc.level)
fmt := pp.New(&buf).SetEmoji(tc.emoji).SetVerbosity(tc.verbosity)

fmt.Infof(pp.EmojiStar, "info")
fmt.Noticef(pp.EmojiStar, "notice")
Expand Down
15 changes: 0 additions & 15 deletions internal/pp/level.go

This file was deleted.

15 changes: 15 additions & 0 deletions internal/pp/verbosity.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package pp

// Level is the type of message levels.
type Verbosity int

const (
Debug Verbosity = iota // debugging info, currently not used
Info // additional information that is not an action, a warning, or an error
Notice // an action (e.g., changing the IP) has happened and it is not an error
Warning // non-fatal errors where the updater should continue updating IP addresses
Error // fatal errors where the updater should stop
DefaultVerbosity Verbosity = Info
Verbose Verbosity = Info
Quiet Verbosity = Notice
)

0 comments on commit ece052d

Please sign in to comment.