Skip to content

Commit 88f6b5c

Browse files
committed
Switched to fluent logging contexts
Add missing types for enhancing context Also cleaned up the syntax to be more compact Expose the zerolog.Event for levels Ported synctrace and timesync
1 parent 7dc2857 commit 88f6b5c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+900
-687
lines changed

cloud.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,8 @@ func runWebsocketClient() error {
325325
header.Set("Authorization", "Bearer "+config.CloudToken)
326326
dialCtx, cancelDial := context.WithTimeout(context.Background(), CloudWebSocketConnectTimeout)
327327

328-
l := logging.GetSubsystemLogger("websocket").With().
328+
l := logging.GetSubsystemLogger("websocket").
329+
With().
329330
Str("source", wsURL.Host).
330331
Str("sourceType", "cloud").
331332
Logger()
@@ -457,7 +458,6 @@ func handleSessionRequest(
457458
IsCloud: isCloudConnection,
458459
LocalIP: req.IP,
459460
ICEServers: req.ICEServers,
460-
Logger: scopedLogger,
461461
})
462462
if err != nil {
463463
_ = wsjson.Write(context.Background(), c, gin.H{"error": err})

cmd/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import (
1111
"syscall"
1212
"time"
1313

14-
"github.com/erikdubbelboer/gspt"
1514
"github.com/jetkvm/kvm"
1615
"github.com/jetkvm/kvm/internal/native"
1716
"github.com/jetkvm/kvm/internal/supervisor"
17+
18+
"github.com/erikdubbelboer/gspt"
1819
)
1920

2021
var (

hidrpc.go

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/jetkvm/kvm/internal/hidrpc"
1010
"github.com/jetkvm/kvm/internal/logging"
1111
"github.com/jetkvm/kvm/internal/usbgadget"
12-
"github.com/rs/zerolog"
12+
"github.com/jetkvm/kvm/internal/utils"
1313
)
1414

1515
func handleHidRPCMessage(message hidrpc.Message, session *Session) error {
@@ -69,30 +69,30 @@ func handlePointerReport(message hidrpc.Message) error {
6969
return rpcAbsMouseReport(pointerReport.X, pointerReport.Y, pointerReport.Button)
7070
}
7171

72-
func onHidMessage(msg hidQueueMessage, session *Session) {
72+
func onHidMessage(msg hidQueueMessage, session *Session, queueContext *logging.Context) {
73+
logger := queueContext.With().Str("channel", msg.channel)
7374
data := msg.Data
7475

75-
scopedLogger := logging.GetSubsystemLogger("hidrpc").
76-
With().
77-
Str("channel", msg.channel).
78-
Bytes("data", data).
79-
Logger()
80-
scopedLogger.Debug().Msg("HID RPC message received")
76+
if logger.IsDebugLevel() {
77+
logger = logger.Object("data", utils.ByteSlice(data))
78+
}
79+
80+
logger.Debug().Msg("HID RPC message received")
8181

8282
if len(data) < 1 {
83-
scopedLogger.Warn().Int("length", len(data)).Msg("received empty data in HID RPC message handler")
83+
logger.Int("length", len(data)).Warn().Msg("received empty data in HID RPC message handler")
8484
return
8585
}
8686

8787
var message hidrpc.Message
8888

8989
if err := hidrpc.Unmarshal(data, &message); err != nil {
90-
scopedLogger.Warn().Err(err).Msg("failed to unmarshal HID RPC message")
90+
logger.Err(err).Warn().Msg("failed to unmarshal HID RPC message")
9191
return
9292
}
9393

94-
if scopedLogger.GetLevel() <= zerolog.DebugLevel {
95-
scopedLogger = scopedLogger.With().Str("descr", message.String()).Logger()
94+
if logger.IsDebugLevel() {
95+
logger = logger.Str("message", message.String())
9696
}
9797

9898
t := time.Now()
@@ -103,11 +103,11 @@ func onHidMessage(msg hidQueueMessage, session *Session) {
103103
}()
104104
select {
105105
case <-time.After(1 * time.Second):
106-
scopedLogger.Warn().Msg("HID RPC message timed out")
106+
logger.Warn().Msg("HID RPC message took too long")
107107
case err := <-r:
108-
scopedLogger.Debug().Dur("duration", time.Since(t)).Msg("HID RPC message handled")
108+
logger.Debug().Dur("duration", time.Since(t)).Msg("HID RPC message handled")
109109
if err != nil {
110-
scopedLogger.Warn().Err(err.(error)).Msg("failed to handle HID RPC message")
110+
logger.Warn().Err(err.(error)).Msg("failed to handle HID RPC message")
111111
}
112112
}
113113
}
@@ -117,12 +117,10 @@ func onHidMessage(msg hidQueueMessage, session *Session) {
117117
// macOS default: 15 * 15 = 225ms https://discussions.apple.com/thread/1316947?sortBy=rank
118118
// Linux default: 250ms https://man.archlinux.org/man/kbdrate.8.en
119119
// Windows default: 1s `HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response\AutoRepeatDelay`
120-
121120
const expectedRate = 50 * time.Millisecond // expected keepalive interval
122121
const maxLateness = 50 * time.Millisecond // max jitter we'll tolerate OR jitter budget
123122
const baseExtension = expectedRate + maxLateness // 100ms extension on perfect tick
124-
125-
const maxStaleness = 225 * time.Millisecond // discard ancient packets outright
123+
const maxStaleness = 225 * time.Millisecond // discard ancient packets outright
126124

127125
func handleHidRPCKeypressKeepAlive(session *Session) error {
128126
session.keepAliveJitterLock.Lock()
@@ -172,19 +170,23 @@ func handleHidRPCKeypressKeepAlive(session *Session) error {
172170
}
173171

174172
func handleHidRPCKeyboardInput(message hidrpc.Message) error {
175-
context := logging.GetSubsystemLogger("hidrpc").With().Interface("message", message)
173+
logger := hidrpc.GetHidRpcLoggingContext().
174+
With().
175+
Interface("message", message)
176176

177177
switch message.Type() {
178178
case hidrpc.TypeKeypressReport:
179179
keypressReport, err := message.KeypressReport()
180180
if err != nil {
181-
return logging.LogWarnE(context, err, "failed to get keypress report")
181+
logger.Warn().Err(err).Msg("failed to get keypress report")
182+
return err
182183
}
183184
return rpcKeypressReport(keypressReport.Key, keypressReport.Press)
184185
case hidrpc.TypeKeyboardReport:
185186
keyboardReport, err := message.KeyboardReport()
186187
if err != nil {
187-
return logging.LogWarnE(context, err, "failed to get keyboard report")
188+
logger.Warn().Err(err).Msg("failed to get keyboard report")
189+
return err
188190
}
189191
return rpcKeyboardReport(keyboardReport.Modifier, keyboardReport.Keys)
190192
}
@@ -193,7 +195,10 @@ func handleHidRPCKeyboardInput(message hidrpc.Message) error {
193195
}
194196

195197
func reportHidRPC(params any, session *Session) {
196-
logger := logging.GetSubsystemLogger("hidrpc")
198+
logger := hidrpc.GetHidRpcLoggingContext().
199+
With().
200+
Interface("params", params).
201+
Interface("session", session)
197202

198203
if session == nil {
199204
logger.Warn().Msg("session is nil, skipping reportHidRPC")
@@ -224,15 +229,16 @@ func reportHidRPC(params any, session *Session) {
224229
err = fmt.Errorf("unknown HID RPC message type: %T", params)
225230
}
226231

232+
logger = logger.Bytes("message", message)
233+
227234
if err != nil || message == nil {
228235
logger.Warn().Err(err).Msg("failed to marshal HID RPC message")
229236
return
230237
}
231238

232239
// fire and forget...
240+
logger.Debug().Msg("sending HID RPC report")
233241
go func() {
234-
logger.Debug().Bytes("message", message).Msg("executing keyboard macro")
235-
236242
if err := session.HidChannel.Send(message); err != nil {
237243
if errors.Is(err, io.ErrClosedPipe) {
238244
logger.Debug().Err(err).Msg("HID RPC channel closed, skipping reportHidRPC")

internal/hidrpc/hidrpc.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,6 @@ func Unmarshal(data []byte, message *Message) error {
3939
return nil
4040
}
4141

42-
// Marshal marshals the HID RPC message to the data.
43-
func Marshal(message *Message) ([]byte, error) {
44-
if message.t == 0 {
45-
return nil, fmt.Errorf("invalid message type: %d", message.t)
46-
}
47-
48-
data := make([]byte, len(message.d)+1)
49-
data[0] = byte(message.t)
50-
copy(data[1:], message.d)
51-
52-
return data, nil
53-
}
54-
5542
// NewHandshakeMessage creates a new handshake message.
5643
func NewHandshakeMessage() *Message {
5744
return &Message{

internal/hidrpc/log.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package hidrpc
2+
3+
import (
4+
"github.com/jetkvm/kvm/internal/logging"
5+
)
6+
7+
func GetHidRpcLoggingContext() *logging.Context {
8+
return logging.NewContext(logging.GetSubsystemLogger("hidrpc"))
9+
}

internal/hidrpc/message.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,22 @@ type Message struct {
3131
d []byte
3232
}
3333

34+
func (m *Message) MarshalZerologObject(e *zerolog.Event) {
35+
e.Uint8("type", uint8(m.t))
36+
e.Bytes("payload", m.d)
37+
}
38+
3439
// Marshal marshals the message to a byte array.
3540
func (m *Message) Marshal() ([]byte, error) {
36-
return Marshal(m)
41+
if m.t == 0 {
42+
return nil, fmt.Errorf("invalid message type: %d", m.t)
43+
}
44+
45+
data := make([]byte, len(m.d)+1)
46+
data[0] = byte(m.t)
47+
copy(data[1:], m.d)
48+
49+
return data, nil
3750
}
3851

3952
func (m *Message) Type() MessageType {
@@ -85,7 +98,7 @@ type KeypressReport struct {
8598
Press bool
8699
}
87100

88-
func (k KeypressReport) MarshalZerologObject(e *zerolog.Event) {
101+
func (k *KeypressReport) MarshalZerologObject(e *zerolog.Event) {
89102
e.Hex("Modifier", []byte{k.Key})
90103
e.Bool("Press", k.Press)
91104
}
@@ -108,7 +121,7 @@ type KeyboardReport struct {
108121
Keys []byte // 6 bytes: HidKeyBufferSize
109122
}
110123

111-
func (k KeyboardReport) MarshalZerologObject(e *zerolog.Event) {
124+
func (k *KeyboardReport) MarshalZerologObject(e *zerolog.Event) {
112125
e.Hex("Modifier", []byte{k.Modifier})
113126
e.Hex("Keys", k.Keys)
114127
}
@@ -132,7 +145,7 @@ type KeyboardMacroStep struct {
132145
Delay uint16 // 2 bytes
133146
}
134147

135-
func (s KeyboardMacroStep) MarshalZerologObject(e *zerolog.Event) {
148+
func (s *KeyboardMacroStep) MarshalZerologObject(e *zerolog.Event) {
136149
e.Hex("Modifier", []byte{s.Modifier})
137150
e.Hex("Keys", s.Keys)
138151
e.Uint16("Delay", s.Delay)

0 commit comments

Comments
 (0)