Skip to content

Commit 3e7d8fb

Browse files
authored
feat(usbgadget): suppress duplicate error logs (#630).
1 parent 0d7f47c commit 3e7d8fb

File tree

5 files changed

+44
-6
lines changed

5 files changed

+44
-6
lines changed

internal/usbgadget/hid_keyboard.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,21 @@ func (u *UsbGadget) listenKeyboardEvents() {
143143
default:
144144
l.Trace().Msg("reading from keyboard")
145145
if u.keyboardHidFile == nil {
146-
l.Error().Msg("keyboardHidFile is nil")
146+
u.logWithSupression("keyboardHidFileNil", 100, &l, nil, "keyboardHidFile is nil")
147+
// show the error every 100 times to avoid spamming the logs
147148
time.Sleep(time.Second)
148149
continue
149150
}
151+
// reset the counter
152+
u.resetLogSuppressionCounter("keyboardHidFileNil")
153+
150154
n, err := u.keyboardHidFile.Read(buf)
151155
if err != nil {
152-
l.Error().Err(err).Msg("failed to read")
156+
u.logWithSupression("keyboardHidFileRead", 100, &l, err, "failed to read")
153157
continue
154158
}
159+
u.resetLogSuppressionCounter("keyboardHidFileRead")
160+
155161
l.Trace().Int("n", n).Bytes("buf", buf).Msg("got data from keyboard")
156162
if n != 1 {
157163
l.Trace().Int("n", n).Msg("expected 1 byte, got")
@@ -195,12 +201,12 @@ func (u *UsbGadget) keyboardWriteHidFile(data []byte) error {
195201

196202
_, err := u.keyboardHidFile.Write(data)
197203
if err != nil {
198-
u.log.Error().Err(err).Msg("failed to write to hidg0")
204+
u.logWithSupression("keyboardWriteHidFile", 100, u.log, err, "failed to write to hidg0")
199205
u.keyboardHidFile.Close()
200206
u.keyboardHidFile = nil
201207
return err
202208
}
203-
209+
u.resetLogSuppressionCounter("keyboardWriteHidFile")
204210
return nil
205211
}
206212

internal/usbgadget/hid_mouse_absolute.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,12 @@ func (u *UsbGadget) absMouseWriteHidFile(data []byte) error {
7575

7676
_, err := u.absMouseHidFile.Write(data)
7777
if err != nil {
78-
u.log.Error().Err(err).Msg("failed to write to hidg1")
78+
u.logWithSupression("absMouseWriteHidFile", 100, u.log, err, "failed to write to hidg1")
7979
u.absMouseHidFile.Close()
8080
u.absMouseHidFile = nil
8181
return err
8282
}
83+
u.resetLogSuppressionCounter("absMouseWriteHidFile")
8384
return nil
8485
}
8586

internal/usbgadget/hid_mouse_relative.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,12 @@ func (u *UsbGadget) relMouseWriteHidFile(data []byte) error {
6565

6666
_, err := u.relMouseHidFile.Write(data)
6767
if err != nil {
68-
u.log.Error().Err(err).Msg("failed to write to hidg2")
68+
u.logWithSupression("relMouseWriteHidFile", 100, u.log, err, "failed to write to hidg2")
6969
u.relMouseHidFile.Close()
7070
u.relMouseHidFile = nil
7171
return err
7272
}
73+
u.resetLogSuppressionCounter("relMouseWriteHidFile")
7374
return nil
7475
}
7576

internal/usbgadget/usbgadget.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ type UsbGadget struct {
7979
onKeyboardStateChange *func(state KeyboardState)
8080

8181
log *zerolog.Logger
82+
83+
logSuppressionCounter map[string]int
8284
}
8385

8486
const configFSPath = "/sys/kernel/config"
@@ -126,6 +128,8 @@ func newUsbGadget(name string, configMap map[string]gadgetConfigItem, enabledDev
126128

127129
strictMode: config.strictMode,
128130

131+
logSuppressionCounter: make(map[string]int),
132+
129133
absMouseAccumulatedWheelY: 0,
130134
}
131135
if err := g.Init(); err != nil {

internal/usbgadget/utils.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"path/filepath"
77
"strconv"
88
"strings"
9+
10+
"github.com/rs/zerolog"
911
)
1012

1113
func joinPath(basePath string, paths []string) string {
@@ -78,3 +80,27 @@ func compareFileContent(oldContent []byte, newContent []byte, looserMatch bool)
7880

7981
return false
8082
}
83+
84+
func (u *UsbGadget) logWithSupression(counterName string, every int, logger *zerolog.Logger, err error, msg string, args ...interface{}) {
85+
if _, ok := u.logSuppressionCounter[counterName]; !ok {
86+
u.logSuppressionCounter[counterName] = 0
87+
} else {
88+
u.logSuppressionCounter[counterName]++
89+
}
90+
91+
l := logger.With().Int("counter", u.logSuppressionCounter[counterName]).Logger()
92+
93+
if u.logSuppressionCounter[counterName]%every == 0 {
94+
if err != nil {
95+
l.Error().Err(err).Msgf(msg, args...)
96+
} else {
97+
l.Error().Msgf(msg, args...)
98+
}
99+
}
100+
}
101+
102+
func (u *UsbGadget) resetLogSuppressionCounter(counterName string) {
103+
if _, ok := u.logSuppressionCounter[counterName]; !ok {
104+
u.logSuppressionCounter[counterName] = 0
105+
}
106+
}

0 commit comments

Comments
 (0)