Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(pp): various tweaks to logging #787

Merged
merged 1 commit into from
Jul 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
)
Loading