Skip to content

Commit f8f6524

Browse files
committed
More cleanup
1 parent ec7c1b5 commit f8f6524

Some content is hidden

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

85 files changed

+1233
-1087
lines changed

block_device.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/jetkvm/kvm/internal/logging"
1111
"github.com/pojntfx/go-nbd/pkg/server"
12+
"github.com/rs/zerolog"
1213
)
1314

1415
type remoteImageBackend struct {
@@ -68,10 +69,13 @@ func NewNBDDevice() *NBDDevice {
6869
return &NBDDevice{}
6970
}
7071

71-
func (d *NBDDevice) getLogger() *logging.Context {
72-
return logging.GetSubsystemLogger("nbd").
72+
func (d *NBDDevice) getLogger() *zerolog.Logger {
73+
logger := logging.GetSubsystemLogger("nbd").
74+
With().
7375
Str("socket_path", nbdSocketPath).
74-
Str("device_path", nbdDevicePath)
76+
Str("device_path", nbdDevicePath).
77+
Logger()
78+
return &logger
7579
}
7680

7781
func (d *NBDDevice) Start() error {

cloud.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/coder/websocket/wsjson"
1515
"github.com/google/uuid"
1616
"github.com/jetkvm/kvm/internal/logging"
17+
"github.com/jetkvm/kvm/internal/utils"
1718
"github.com/prometheus/client_golang/prometheus"
1819
"github.com/prometheus/client_golang/prometheus/promauto"
1920

@@ -324,13 +325,13 @@ func runWebsocketClient() error {
324325
header.Set("Authorization", "Bearer "+config.CloudToken)
325326
dialCtx, cancelDial := context.WithTimeout(context.Background(), CloudWebSocketConnectTimeout)
326327

327-
logger := logging.GetSubsystemLogger("websocket").Str("source", wsURL.Host).Str("sourceType", "cloud")
328+
logger := logging.GetSubsystemLogger("cloud").With().Str("subcomponent", "websocket").Str("source", wsURL.Host).Str("sourceType", "cloud").Logger()
328329

329330
defer cancelDial()
330331
c, resp, err := websocket.Dial(dialCtx, wsURL.String(), &websocket.DialOptions{
331332
HTTPHeader: header,
332333
OnPingReceived: func(ctx context.Context, payload []byte) bool {
333-
logger.Debug().Bytes("payload", payload).Int("length", len(payload)).Msg("ping frame received")
334+
logger.Debug().Object("data", utils.ByteSlice(payload)).Int("length", len(payload)).Msg("ping frame received")
334335

335336
metricConnectionTotalPingReceivedCount.WithLabelValues("cloud", wsURL.Host).Inc()
336337
metricConnectionLastPingReceivedTimestamp.WithLabelValues("cloud", wsURL.Host).SetToCurrentTime()
@@ -357,8 +358,7 @@ func runWebsocketClient() error {
357358
Msg("no connection id received from the server, generating a new one")
358359
}
359360

360-
logger = logger.With().Str("connectionID", connectionId)
361-
361+
logger = logger.With().Str("connectionID", connectionId).Logger()
362362
cloudLogger := logging.GetSubsystemLogger("cloud")
363363

364364
// if the context is canceled, we don't want to return an error

failsafe.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func notifyFailsafeMode(session *Session) {
103103

104104
logging.GetSubsystemLogger("failsafe").Info().Str("reason", failsafeModeReason).Msg("sending failsafe mode notification")
105105

106-
writeJSONRPCEvent("failsafeMode", FailsafeModeNotification{
106+
go writeJSONRPCEvent("failsafeMode", FailsafeModeNotification{
107107
Active: true,
108108
Reason: failsafeModeReason,
109109
}, session)

hidrpc.go

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func handleHidRPCMessage(message hidrpc.Message, session *Session) error {
3434
}
3535

3636
func handleHidRPCHandshake(session *Session) error {
37+
hidrpc.GetHidRpcLogger().Debug().Msg("handling handshake")
3738
message, err := hidrpc.NewHandshakeMessage().Marshal()
3839
if err != nil {
3940
return err
@@ -50,6 +51,7 @@ func handleKeyboardMacro(message hidrpc.Message) error {
5051
if err != nil {
5152
return err
5253
}
54+
hidrpc.GetHidRpcLogger().Debug().Interface("keyboardMacroReport", keyboardMacroReport).Msg("handling keyboard macro")
5355
return rpcExecuteKeyboardMacro(keyboardMacroReport.Steps)
5456
}
5557

@@ -58,6 +60,7 @@ func handleMouseReport(message hidrpc.Message) error {
5860
if err != nil {
5961
return err
6062
}
63+
hidrpc.GetHidRpcLogger().Debug().Interface("mouseReport", mouseReport).Msg("handling relative mouse")
6164
return rpcRelMouseReport(mouseReport.DX, mouseReport.DY, mouseReport.Button)
6265
}
6366

@@ -66,37 +69,31 @@ func handlePointerReport(message hidrpc.Message) error {
6669
if err != nil {
6770
return err
6871
}
72+
hidrpc.GetHidRpcLogger().Debug().Interface("pointerReport", pointerReport).Msg("handling absolute pointer")
6973
return rpcAbsMouseReport(pointerReport.X, pointerReport.Y, pointerReport.Button)
7074
}
7175

72-
func onHidMessage(msg hidQueueMessage, session *Session, queueContext *logging.Context) {
73-
logger := queueContext.With().Str("channel", msg.channel)
76+
func onHidMessage(msg hidQueueMessage, session *Session, index int) {
77+
logger := hidrpc.GetHidRpcLogger().With().Int("queueIndex", index).Str("channel", msg.channel).Logger()
7478
data := msg.Data
7579

76-
if logger.IsDebugLevel() {
77-
logger = logger.Object("data", utils.ByteSlice(data))
80+
if logging.IsTraceLevel(&logger) {
81+
logger.Trace().Object("data", utils.ByteSlice(data)).Msg("HID RPC message received")
7882
}
7983

80-
logger.Debug().Msg("HID RPC message received")
81-
8284
if len(data) < 1 {
83-
logger.Int("length", len(data)).Warn().Msg("received empty data in HID RPC message handler")
85+
logger.Warn().Int("length", len(data)).Msg("received empty data in HID RPC message handler")
8486
return
8587
}
8688

8789
var message hidrpc.Message
8890

8991
if err := hidrpc.Unmarshal(data, &message); err != nil {
90-
logger.Err(err).Warn().Msg("failed to unmarshal HID RPC message")
92+
logger.Warn().Err(err).Msg("failed to unmarshal HID RPC message")
9193
return
9294
}
9395

94-
if logger.IsDebugLevel() {
95-
logger = logger.Str("message", message.String())
96-
}
97-
9896
t := time.Now()
99-
10097
r := make(chan interface{})
10198
go func() {
10299
r <- handleHidRPCMessage(message, session)
@@ -170,9 +167,7 @@ func handleHidRPCKeypressKeepAlive(session *Session) error {
170167
}
171168

172169
func handleHidRPCKeyboardInput(message hidrpc.Message) error {
173-
logger := hidrpc.GetHidRpcLoggingContext().
174-
With().
175-
Interface("message", message)
170+
logger := hidrpc.GetHidRpcLogger().With().Interface("message", message).Logger()
176171

177172
switch message.Type() {
178173
case hidrpc.TypeKeypressReport:
@@ -181,24 +176,23 @@ func handleHidRPCKeyboardInput(message hidrpc.Message) error {
181176
logger.Warn().Err(err).Msg("failed to get keypress report")
182177
return err
183178
}
179+
logger.Debug().Interface("keypressReport", keypressReport).Msg("handling key press")
184180
return rpcKeypressReport(keypressReport.Key, keypressReport.Press)
185181
case hidrpc.TypeKeyboardReport:
186182
keyboardReport, err := message.KeyboardReport()
187183
if err != nil {
188184
logger.Warn().Err(err).Msg("failed to get keyboard report")
189185
return err
190186
}
187+
logger.Debug().Interface("keyboardReport", keyboardReport).Msg("handling keyboard")
191188
return rpcKeyboardReport(keyboardReport.Modifier, keyboardReport.Keys)
192189
}
193190

194191
return fmt.Errorf("unknown HID RPC message type: %d", message.Type())
195192
}
196193

197194
func reportHidRPC(params any, session *Session) {
198-
logger := hidrpc.GetHidRpcLoggingContext().
199-
With().
200-
Interface("params", params).
201-
Interface("session", session)
195+
logger := hidrpc.GetHidRpcLogger().With().Interface("params", params).Logger()
202196

203197
if session == nil {
204198
logger.Warn().Msg("session is nil, skipping reportHidRPC")
@@ -229,22 +223,33 @@ func reportHidRPC(params any, session *Session) {
229223
err = fmt.Errorf("unknown HID RPC message type: %T", params)
230224
}
231225

232-
logger = logger.Bytes("message", message)
226+
logger = logger.With().Type("type", params).Logger()
233227

234228
if err != nil || message == nil {
235229
logger.Warn().Err(err).Msg("failed to marshal HID RPC message")
236230
return
237231
}
238232

239233
// fire and forget...
240-
logger.Debug().Msg("sending HID RPC report")
241234
go func() {
242-
if err := session.HidChannel.Send(message); err != nil {
243-
if errors.Is(err, io.ErrClosedPipe) {
244-
logger.Debug().Err(err).Msg("HID RPC channel closed, skipping reportHidRPC")
245-
return
235+
t := time.Now()
236+
r := make(chan interface{})
237+
go func() {
238+
logger.Trace().Msg("sending HID RPC report")
239+
r <- session.HidChannel.Send(message)
240+
}()
241+
select {
242+
case <-time.After(1 * time.Second):
243+
logger.Warn().Msg("HID RPC report took too long")
244+
case err := <-r:
245+
logger.Debug().Dur("duration", time.Since(t)).Msg("HID RPC report sent")
246+
if err != nil {
247+
if errors.Is(err.(error), io.ErrClosedPipe) {
248+
logger.Warn().Err(err.(error)).Msg("HID RPC channel closed, skipping reportHidRPC")
249+
return
250+
}
251+
logger.Warn().Err(err.(error)).Msg("failed to send HID RPC report")
246252
}
247-
logger.Warn().Err(err).Msg("failed to send HID RPC message")
248253
}
249254
}()
250255
}

hw.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func GetDefaultHostname() string {
9292
}
9393

9494
func runWatchdog() {
95-
watchdogLogger := logging.GetSubsystemLogger("watchdog")
95+
watchdogLogger := logging.GetSubsystemLogger("hw").With().Str("subcomponent", "watchdog").Logger()
9696

9797
file, err := os.OpenFile("/dev/watchdog", os.O_WRONLY, 0)
9898
if err != nil {

internal/hidrpc/hidrpc.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
)
88

99
const (
10-
Version byte = 0x01 // Version of the HID RPC protocol
10+
Version byte = 0x01 // Version of the HID RPC protocol
11+
MaximumQueues int = 4 // Maximum number of HID RPC queues
1112
)
1213

1314
// GetQueueIndex returns the index of the queue to which the message should be enqueued.

internal/hidrpc/log.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ package hidrpc
22

33
import (
44
"github.com/jetkvm/kvm/internal/logging"
5+
"github.com/rs/zerolog"
56
)
67

7-
func GetHidRpcLoggingContext() *logging.Context {
8+
func GetHidRpcLogger() *zerolog.Logger {
89
return logging.GetSubsystemLogger("hidrpc")
910
}

internal/hidrpc/message.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ 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)
34+
func (m Message) MarshalZerologObject(e *zerolog.Event) {
35+
e.Uint8("Type", uint8(m.t))
36+
e.Bytes("Payload", m.d)
3737
}
3838

3939
// Marshal marshals the message to a byte array.
@@ -98,8 +98,8 @@ type KeypressReport struct {
9898
Press bool
9999
}
100100

101-
func (k *KeypressReport) MarshalZerologObject(e *zerolog.Event) {
102-
e.Hex("Modifier", []byte{k.Key})
101+
func (k KeypressReport) MarshalZerologObject(e *zerolog.Event) {
102+
e.Hex("Key", []byte{k.Key})
103103
e.Bool("Press", k.Press)
104104
}
105105

@@ -121,7 +121,7 @@ type KeyboardReport struct {
121121
Keys []byte // 6 bytes: HidKeyBufferSize
122122
}
123123

124-
func (k *KeyboardReport) MarshalZerologObject(e *zerolog.Event) {
124+
func (k KeyboardReport) MarshalZerologObject(e *zerolog.Event) {
125125
e.Hex("Modifier", []byte{k.Modifier})
126126
e.Hex("Keys", k.Keys)
127127
}
@@ -145,7 +145,7 @@ type KeyboardMacroStep struct {
145145
Delay uint16 // 2 bytes
146146
}
147147

148-
func (s *KeyboardMacroStep) MarshalZerologObject(e *zerolog.Event) {
148+
func (s KeyboardMacroStep) MarshalZerologObject(e *zerolog.Event) {
149149
e.Hex("Modifier", []byte{s.Modifier})
150150
e.Hex("Keys", s.Keys)
151151
e.Uint16("Delay", s.Delay)

0 commit comments

Comments
 (0)