From 34e33e45bfc45b4953048f4fc78a37c4e0d4902a Mon Sep 17 00:00:00 2001 From: SuperQ Date: Sat, 1 Mar 2025 09:48:13 +0100 Subject: [PATCH] Cleanup logging Make sure all logging output is called via the main logger instead of stdlib `"log"` or `fmt.Print(f|ln)`. Signed-off-by: SuperQ --- block_device.go | 10 +++++----- cloud.go | 2 +- display.go | 29 ++++++++++++++--------------- fuse.go | 3 +-- jsonrpc.go | 33 ++++++++++++++++----------------- main.go | 7 +++---- native.go | 20 ++++++++++---------- network.go | 26 +++++++++++++------------- ntp.go | 17 ++++++++--------- ota.go | 25 ++++++++++++------------- usb.go | 3 +-- usb_mass_storage.go | 3 +-- video.go | 3 +-- webrtc.go | 13 ++++++------- 14 files changed, 92 insertions(+), 102 deletions(-) diff --git a/block_device.go b/block_device.go index 1e34884..5df008c 100644 --- a/block_device.go +++ b/block_device.go @@ -3,7 +3,6 @@ package kvm import ( "context" "errors" - "log" "net" "os" "time" @@ -94,7 +93,8 @@ func (d *NBDDevice) Start() error { // Remove the socket file if it already exists if _, err := os.Stat(nbdSocketPath); err == nil { if err := os.Remove(nbdSocketPath); err != nil { - log.Fatalf("Failed to remove existing socket file %s: %v", nbdSocketPath, err) + logger.Errorf("Failed to remove existing socket file %s: %v", nbdSocketPath, err) + os.Exit(1) } } @@ -134,7 +134,7 @@ func (d *NBDDevice) runServerConn() { MaximumBlockSize: uint32(16 * 1024), SupportsMultiConn: false, }) - log.Println("nbd server exited:", err) + logger.Infof("nbd server exited: %v", err) } func (d *NBDDevice) runClientConn() { @@ -142,14 +142,14 @@ func (d *NBDDevice) runClientConn() { ExportName: "jetkvm", BlockSize: uint32(4 * 1024), }) - log.Println("nbd client exited:", err) + logger.Infof("nbd client exited: %w", err) } func (d *NBDDevice) Close() { if d.dev != nil { err := client.Disconnect(d.dev) if err != nil { - log.Println("error disconnecting nbd client:", err) + logger.Warnf("error disconnecting nbd client: %v", err) } _ = d.dev.Close() } diff --git a/cloud.go b/cloud.go index 628837b..1049769 100644 --- a/cloud.go +++ b/cloud.go @@ -151,7 +151,7 @@ func runWebsocketClient() error { return err } defer c.CloseNow() - cloudLogger.Infof("websocket connected to %s", wsURL.String()) + cloudLogger.Infof("websocket connected to %s", wsURL) runCtx, cancelRun := context.WithCancel(context.Background()) defer cancelRun() go func() { diff --git a/display.go b/display.go index a956830..8e4ad72 100644 --- a/display.go +++ b/display.go @@ -3,7 +3,6 @@ package kvm import ( "errors" "fmt" - "log" "os" "strconv" "time" @@ -25,7 +24,7 @@ const ( func switchToScreen(screen string) { _, err := CallCtrlAction("lv_scr_load", map[string]interface{}{"obj": screen}) if err != nil { - log.Printf("failed to switch to screen %s: %v", screen, err) + logger.Warnf("failed to switch to screen %s: %v", screen, err) return } currentScreen = screen @@ -41,7 +40,7 @@ func updateLabelIfChanged(objName string, newText string) { } func switchToScreenIfDifferent(screenName string) { - fmt.Println("switching screen from", currentScreen, screenName) + logger.Infof("switching screen from %s to %s", currentScreen, screenName) if currentScreen != screenName { switchToScreen(screenName) } @@ -75,12 +74,12 @@ var displayInited = false func requestDisplayUpdate() { if !displayInited { - fmt.Println("display not inited, skipping updates") + logger.Info("display not inited, skipping updates") return } go func() { wakeDisplay(false) - fmt.Println("display updating........................") + logger.Info("display updating") //TODO: only run once regardless how many pending updates updateDisplay() }() @@ -119,7 +118,7 @@ func setDisplayBrightness(brightness int) error { return err } - fmt.Printf("display: set brightness to %v\n", brightness) + logger.Infof("display: set brightness to %v", brightness) return nil } @@ -128,7 +127,7 @@ func setDisplayBrightness(brightness int) error { func tick_displayDim() { err := setDisplayBrightness(config.DisplayMaxBrightness / 2) if err != nil { - fmt.Printf("display: failed to dim display: %s\n", err) + logger.Warnf("display: failed to dim display: %s", err) } dimTicker.Stop() @@ -141,7 +140,7 @@ func tick_displayDim() { func tick_displayOff() { err := setDisplayBrightness(0) if err != nil { - fmt.Printf("display: failed to turn off display: %s\n", err) + logger.Warnf("display: failed to turn off display: %s", err) } offTicker.Stop() @@ -164,7 +163,7 @@ func wakeDisplay(force bool) { err := setDisplayBrightness(config.DisplayMaxBrightness) if err != nil { - fmt.Printf("display wake failed, %s\n", err) + logger.Warnf("display wake failed, %s", err) } if config.DisplayDimAfterSec != 0 { @@ -184,7 +183,7 @@ func wakeDisplay(force bool) { func watchTsEvents() { ts, err := os.OpenFile(touchscreenDevice, os.O_RDONLY, 0666) if err != nil { - fmt.Printf("display: failed to open touchscreen device: %s\n", err) + logger.Warnf("display: failed to open touchscreen device: %s", err) return } @@ -197,7 +196,7 @@ func watchTsEvents() { for { _, err := ts.Read(buf) if err != nil { - fmt.Printf("display: failed to read from touchscreen device: %s\n", err) + logger.Warnf("display: failed to read from touchscreen device: %s", err) return } @@ -217,7 +216,7 @@ func startBacklightTickers() { } if dimTicker == nil && config.DisplayDimAfterSec != 0 { - fmt.Printf("display: dim_ticker has started\n") + logger.Info("display: dim_ticker has started") dimTicker = time.NewTicker(time.Duration(config.DisplayDimAfterSec) * time.Second) defer dimTicker.Stop() @@ -232,7 +231,7 @@ func startBacklightTickers() { } if offTicker == nil && config.DisplayOffAfterSec != 0 { - fmt.Printf("display: off_ticker has started\n") + logger.Info("display: off_ticker has started") offTicker = time.NewTicker(time.Duration(config.DisplayOffAfterSec) * time.Second) defer offTicker.Stop() @@ -252,11 +251,11 @@ func init() { go func() { waitCtrlClientConnected() - fmt.Println("setting initial display contents") + logger.Info("setting initial display contents") time.Sleep(500 * time.Millisecond) updateStaticContents() displayInited = true - fmt.Println("display inited") + logger.Info("display inited") startBacklightTickers() wakeDisplay(true) requestDisplayUpdate() diff --git a/fuse.go b/fuse.go index 6ecc49c..29b11f7 100644 --- a/fuse.go +++ b/fuse.go @@ -2,7 +2,6 @@ package kvm import ( "context" - "fmt" "os" "sync" "syscall" @@ -104,7 +103,7 @@ func RunFuseServer() { var err error fuseServer, err = fs.Mount(fuseMountPoint, &FuseRoot{}, opts) if err != nil { - fmt.Println("failed to mount fuse: %w", err) + logger.Warnf("failed to mount fuse: %v", err) } fuseServer.Wait() } diff --git a/jsonrpc.go b/jsonrpc.go index c9ca5b3..7c06388 100644 --- a/jsonrpc.go +++ b/jsonrpc.go @@ -6,7 +6,6 @@ import ( "errors" "fmt" "kvm/internal/usbgadget" - "log" "os" "os/exec" "path/filepath" @@ -47,12 +46,12 @@ type BacklightSettings struct { func writeJSONRPCResponse(response JSONRPCResponse, session *Session) { responseBytes, err := json.Marshal(response) if err != nil { - log.Println("Error marshalling JSONRPC response:", err) + logger.Warnf("Error marshalling JSONRPC response: %v", err) return } err = session.RPCChannel.SendText(string(responseBytes)) if err != nil { - log.Println("Error sending JSONRPC response:", err) + logger.Warnf("Error sending JSONRPC response: %v", err) return } } @@ -65,16 +64,16 @@ func writeJSONRPCEvent(event string, params interface{}, session *Session) { } requestBytes, err := json.Marshal(request) if err != nil { - log.Println("Error marshalling JSONRPC event:", err) + logger.Warnf("Error marshalling JSONRPC event: %v", err) return } if session == nil || session.RPCChannel == nil { - log.Println("RPC channel not available") + logger.Info("RPC channel not available") return } err = session.RPCChannel.SendText(string(requestBytes)) if err != nil { - log.Println("Error sending JSONRPC event:", err) + logger.Warnf("Error sending JSONRPC event: %v", err) return } } @@ -95,7 +94,7 @@ func onRPCMessage(message webrtc.DataChannelMessage, session *Session) { return } - //log.Printf("Received RPC request: Method=%s, Params=%v, ID=%d", request.Method, request.Params, request.ID) + //logger.Infof("Received RPC request: Method=%s, Params=%v, ID=%d", request.Method, request.Params, request.ID) handler, ok := rpcHandlers[request.Method] if !ok { errorResponse := JSONRPCResponse{ @@ -148,7 +147,7 @@ func rpcGetStreamQualityFactor() (float64, error) { } func rpcSetStreamQualityFactor(factor float64) error { - log.Printf("Setting stream quality factor to: %f", factor) + logger.Infof("Setting stream quality factor to: %f", factor) var _, err = CallCtrlAction("set_video_quality_factor", map[string]interface{}{"quality_factor": factor}) if err != nil { return err @@ -184,10 +183,10 @@ func rpcGetEDID() (string, error) { func rpcSetEDID(edid string) error { if edid == "" { - log.Println("Restoring EDID to default") + logger.Info("Restoring EDID to default") edid = "00ffffffffffff0052620188008888881c150103800000780a0dc9a05747982712484c00000001010101010101010101010101010101023a801871382d40582c4500c48e2100001e011d007251d01e206e285500c48e2100001e000000fc00543734392d6648443732300a20000000fd00147801ff1d000a202020202020017b" } else { - log.Printf("Setting EDID to: %s", edid) + logger.Infof("Setting EDID to: %s", edid) } _, err := CallCtrlAction("set_edid", map[string]interface{}{"edid": edid}) if err != nil { @@ -258,7 +257,7 @@ func rpcSetBacklightSettings(params BacklightSettings) error { return fmt.Errorf("failed to save config: %w", err) } - log.Printf("rpc: display: settings applied, max_brightness: %d, dim after: %ds, off after: %ds", config.DisplayMaxBrightness, config.DisplayDimAfterSec, config.DisplayOffAfterSec) + logger.Infof("rpc: display: settings applied, max_brightness: %d, dim after: %ds, off after: %ds", config.DisplayMaxBrightness, config.DisplayDimAfterSec, config.DisplayOffAfterSec) // If the device started up with auto-dim and/or auto-off set to zero, the display init // method will not have started the tickers. So in case that has changed, attempt to start the tickers now. @@ -479,23 +478,23 @@ type RPCHandler struct { } func rpcSetMassStorageMode(mode string) (string, error) { - log.Printf("[jsonrpc.go:rpcSetMassStorageMode] Setting mass storage mode to: %s", mode) + logger.Infof("[jsonrpc.go:rpcSetMassStorageMode] Setting mass storage mode to: %s", mode) var cdrom bool if mode == "cdrom" { cdrom = true } else if mode != "file" { - log.Printf("[jsonrpc.go:rpcSetMassStorageMode] Invalid mode provided: %s", mode) + logger.Infof("[jsonrpc.go:rpcSetMassStorageMode] Invalid mode provided: %s", mode) return "", fmt.Errorf("invalid mode: %s", mode) } - log.Printf("[jsonrpc.go:rpcSetMassStorageMode] Setting mass storage mode to: %s", mode) + logger.Infof("[jsonrpc.go:rpcSetMassStorageMode] Setting mass storage mode to: %s", mode) err := setMassStorageMode(cdrom) if err != nil { return "", fmt.Errorf("failed to set mass storage mode: %w", err) } - log.Printf("[jsonrpc.go:rpcSetMassStorageMode] Mass storage mode set to %s", mode) + logger.Infof("[jsonrpc.go:rpcSetMassStorageMode] Mass storage mode set to %s", mode) // Get the updated mode after setting return rpcGetMassStorageMode() @@ -564,7 +563,7 @@ func rpcResetConfig() error { return fmt.Errorf("failed to reset config: %w", err) } - log.Println("Configuration reset to default") + logger.Info("Configuration reset to default") return nil } @@ -580,7 +579,7 @@ func rpcGetDCPowerState() (DCPowerState, error) { } func rpcSetDCPowerState(enabled bool) error { - log.Printf("[jsonrpc.go:rpcSetDCPowerState] Setting DC power state to: %v", enabled) + logger.Infof("[jsonrpc.go:rpcSetDCPowerState] Setting DC power state to: %v", enabled) err := setDCPowerState(enabled) if err != nil { return fmt.Errorf("failed to set DC power state: %w", err) diff --git a/main.go b/main.go index 910f4e8..8d933e2 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,6 @@ package kvm import ( "context" - "log" "net/http" "os" "os/signal" @@ -77,15 +76,15 @@ func Main() { sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) <-sigs - log.Println("JetKVM Shutting Down") + logger.Info("JetKVM Shutting Down") //if fuseServer != nil { // err := setMassStorageImage(" ") // if err != nil { - // log.Printf("Failed to unmount mass storage image: %v", err) + // logger.Infof("Failed to unmount mass storage image: %v", err) // } // err = fuseServer.Unmount() // if err != nil { - // log.Printf("Failed to unmount fuse: %v", err) + // logger.Infof("Failed to unmount fuse: %v", err) // } // os.Exit(0) diff --git a/native.go b/native.go index 7940f64..0342290 100644 --- a/native.go +++ b/native.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "kvm/resource" - "log" "net" "os" "os/exec" @@ -61,7 +60,7 @@ func CallCtrlAction(action string, params map[string]interface{}) (*CtrlResponse return nil, fmt.Errorf("error marshaling ctrl action: %w", err) } - fmt.Println("sending ctrl action", string(jsonData)) + logger.Infof("sending ctrl action: %s", string(jsonData)) err = WriteCtrlMessage(jsonData) if err != nil { @@ -104,16 +103,18 @@ func StartNativeSocketServer(socketPath string, handleClient func(net.Conn), isC // Remove the socket file if it already exists if _, err := os.Stat(socketPath); err == nil { if err := os.Remove(socketPath); err != nil { - log.Fatalf("Failed to remove existing socket file %s: %v", socketPath, err) + logger.Errorf("Failed to remove existing socket file %s: %v", socketPath, err) + os.Exit(1) } } listener, err := net.Listen("unixpacket", socketPath) if err != nil { - log.Fatalf("Failed to start server on %s: %v", socketPath, err) + logger.Errorf("Failed to start server on %s: %v", socketPath, err) + os.Exit(1) } - log.Printf("Server listening on %s", socketPath) + logger.Infof("Server listening on %s", socketPath) go func() { conn, err := listener.Accept() @@ -188,24 +189,23 @@ func handleCtrlClient(conn net.Conn) { func handleVideoClient(conn net.Conn) { defer conn.Close() - log.Printf("Native video socket client connected: %v", conn.RemoteAddr()) + logger.Infof("Native video socket client connected: %v", conn.RemoteAddr()) inboundPacket := make([]byte, maxFrameSize) lastFrame := time.Now() for { n, err := conn.Read(inboundPacket) if err != nil { - log.Println("error during read: %s", err) + logger.Warnf("error during read: %v", err) return } now := time.Now() sinceLastFrame := now.Sub(lastFrame) lastFrame = now - //fmt.Println("Video packet received", n, sinceLastFrame) if currentSession != nil { err := currentSession.VideoTrack.WriteSample(media.Sample{Data: inboundPacket[:n], Duration: sinceLastFrame}) if err != nil { - log.Println("Error writing sample", err) + logger.Warnf("error writing sample: %v", err) } } } @@ -250,7 +250,7 @@ func ExtractAndRunNativeBin() error { } }() - fmt.Printf("Binary started with PID: %d\n", cmd.Process.Pid) + logger.Infof("Binary started with PID: %d", cmd.Process.Pid) return nil } diff --git a/network.go b/network.go index 3553015..339f71c 100644 --- a/network.go +++ b/network.go @@ -56,14 +56,14 @@ func setDhcpClientState(active bool) { cmd := exec.Command("/usr/bin/killall", signal, "udhcpc") if err := cmd.Run(); err != nil { - fmt.Printf("network: setDhcpClientState: failed to change udhcpc state: %s\n", err) + logger.Warnf("network: setDhcpClientState: failed to change udhcpc state: %s", err) } } func checkNetworkState() { iface, err := netlink.LinkByName(NetIfName) if err != nil { - fmt.Printf("failed to get [%s] interface: %v\n", NetIfName, err) + logger.Warnf("failed to get [%s] interface: %v", NetIfName, err) return } @@ -76,7 +76,7 @@ func checkNetworkState() { addrs, err := netlink.AddrList(iface, nl.FAMILY_ALL) if err != nil { - fmt.Printf("failed to get addresses for [%s]: %v\n", NetIfName, err) + logger.Warnf("failed to get addresses for [%s]: %v", NetIfName, err) } // If the link is going down, put udhcpc into idle mode. @@ -89,10 +89,10 @@ func checkNetworkState() { if addr.IP.To4() != nil { if !newState.Up && networkState.Up { // If the network is going down, remove all IPv4 addresses from the interface. - fmt.Printf("network: state transitioned to down, removing IPv4 address %s\n", addr.IP.String()) + logger.Infof("network: state transitioned to down, removing IPv4 address %s", addr.IP.String()) err := netlink.AddrDel(iface, &addr) if err != nil { - fmt.Printf("network: failed to delete %s", addr.IP.String()) + logger.Warnf("network: failed to delete %s", addr.IP.String()) } newState.IPv4 = "..." @@ -105,7 +105,7 @@ func checkNetworkState() { } if newState != networkState { - fmt.Println("network state changed") + logger.Info("network state changed") // restart MDNS startMDNS() networkState = newState @@ -116,15 +116,15 @@ func checkNetworkState() { func startMDNS() error { // If server was previously running, stop it if mDNSConn != nil { - fmt.Printf("Stopping mDNS server\n") + logger.Info("Stopping mDNS server") err := mDNSConn.Close() if err != nil { - fmt.Printf("failed to stop mDNS server: %v\n", err) + logger.Warnf("failed to stop mDNS server: %v", err) } } // Start a new server - fmt.Printf("Starting mDNS server on jetkvm.local\n") + logger.Info("Starting mDNS server on jetkvm.local") addr4, err := net.ResolveUDPAddr("udp4", mdns.DefaultAddressIPv4) if err != nil { return err @@ -181,7 +181,7 @@ func getNTPServersFromDHCPInfo() ([]string, error) { for _, server := range strings.Fields(val) { if net.ParseIP(server) == nil { - fmt.Printf("invalid NTP server IP: %s, ignoring ... \n", server) + logger.Infof("invalid NTP server IP: %s, ignoring", server) } servers = append(servers, server) } @@ -196,7 +196,7 @@ func init() { done := make(chan struct{}) if err := netlink.LinkSubscribe(updates, done); err != nil { - fmt.Println("failed to subscribe to link updates: %v", err) + logger.Warnf("failed to subscribe to link updates: %v", err) return } @@ -210,7 +210,7 @@ func init() { select { case update := <-updates: if update.Link.Attrs().Name == NetIfName { - fmt.Printf("link update: %+v\n", update) + logger.Infof("link update: %+v", update) checkNetworkState() } case <-ticker.C: @@ -222,6 +222,6 @@ func init() { }() err := startMDNS() if err != nil { - fmt.Println("failed to run mDNS: %v", err) + logger.Warnf("failed to run mDNS: %v", err) } } diff --git a/ntp.go b/ntp.go index 92d0471..06cb201 100644 --- a/ntp.go +++ b/ntp.go @@ -3,7 +3,6 @@ package kvm import ( "errors" "fmt" - "log" "net/http" "os/exec" "time" @@ -37,16 +36,16 @@ func TimeSyncLoop() { } if !networkState.Up { - log.Printf("Waiting for network to come up") + logger.Infof("Waiting for network to come up") time.Sleep(timeSyncWaitNetUpInt) continue } - log.Printf("Syncing system time") + logger.Infof("Syncing system time") start := time.Now() err := SyncSystemTime() if err != nil { - log.Printf("Failed to sync system time: %v", err) + logger.Warnf("Failed to sync system time: %v", err) // retry after a delay timeSyncRetryInterval += timeSyncRetryStep @@ -58,7 +57,7 @@ func TimeSyncLoop() { continue } - log.Printf("Time sync successful, now is: %v, time taken: %v", time.Now(), time.Since(start)) + logger.Infof("Time sync successful, now is: %v, time taken: %v", time.Now(), time.Since(start)) timeSynced = true time.Sleep(timeSyncInterval) // after the first sync is done } @@ -79,20 +78,20 @@ func SyncSystemTime() (err error) { func queryNetworkTime() (*time.Time, error) { ntpServers, err := getNTPServersFromDHCPInfo() if err != nil { - log.Printf("failed to get NTP servers from DHCP info: %v\n", err) + logger.Warnf("failed to get NTP servers from DHCP info: %v\n", err) } if ntpServers == nil { ntpServers = defaultNTPServers - log.Printf("Using default NTP servers: %v\n", ntpServers) + logger.Infof("Using default NTP servers: %v\n", ntpServers) } else { - log.Printf("Using NTP servers from DHCP: %v\n", ntpServers) + logger.Infof("Using NTP servers from DHCP: %v\n", ntpServers) } for _, server := range ntpServers { now, err := queryNtpServer(server, timeSyncTimeout) if err == nil { - log.Printf("NTP server [%s] returned time: %v\n", server, now) + logger.Infof("NTP server [%s] returned time: %v\n", server, now) return now, nil } } diff --git a/ota.go b/ota.go index 9f9cb6f..f813c09 100644 --- a/ota.go +++ b/ota.go @@ -8,7 +8,6 @@ import ( "encoding/json" "fmt" "io" - "log" "net/http" "net/url" "os" @@ -77,7 +76,7 @@ func fetchUpdateMetadata(ctx context.Context, deviceId string, includePreRelease query.Set("prerelease", fmt.Sprintf("%v", includePreRelease)) updateUrl.RawQuery = query.Encode() - fmt.Println("Checking for updates at:", updateUrl.String()) + logger.Infof("Checking for updates at: %s", updateUrl) req, err := http.NewRequestWithContext(ctx, "GET", updateUrl.String(), nil) if err != nil { @@ -230,7 +229,7 @@ func verifyFile(path string, expectedHash string, verifyProgress *float32) error } hashSum := hash.Sum(nil) - fmt.Printf("SHA256 hash of %s: %x\n", path, hashSum) + logger.Infof("SHA256 hash of %s: %x", path, hashSum) if hex.EncodeToString(hashSum) != expectedHash { return fmt.Errorf("hash mismatch: %x != %s", hashSum, expectedHash) @@ -272,7 +271,7 @@ var otaState = OTAState{} func triggerOTAStateUpdate() { go func() { if currentSession == nil { - log.Println("No active RPC session, skipping update state update") + logger.Info("No active RPC session, skipping update state update") return } writeJSONRPCEvent("otaState", otaState, currentSession) @@ -280,7 +279,7 @@ func triggerOTAStateUpdate() { } func TryUpdate(ctx context.Context, deviceId string, includePreRelease bool) error { - log.Println("Trying to update...") + logger.Info("Trying to update...") if otaState.Updating { return fmt.Errorf("update already in progress") } @@ -315,7 +314,7 @@ func TryUpdate(ctx context.Context, deviceId string, includePreRelease bool) err rebootNeeded := false if appUpdateAvailable { - fmt.Printf("App update available: %s -> %s\n", local.AppVersion, remote.AppVersion) + logger.Infof("App update available: %s -> %s", local.AppVersion, remote.AppVersion) err := downloadFile(ctx, "/userdata/jetkvm/jetkvm_app.update", remote.AppUrl, &otaState.AppDownloadProgress) if err != nil { @@ -341,14 +340,14 @@ func TryUpdate(ctx context.Context, deviceId string, includePreRelease bool) err otaState.AppUpdateProgress = 1 triggerOTAStateUpdate() - fmt.Println("App update downloaded") + logger.Info("App update downloaded") rebootNeeded = true } else { - fmt.Println("App is up to date") + logger.Info("App is up to date") } if systemUpdateAvailable { - fmt.Printf("System update available: %s -> %s\n", local.SystemVersion, remote.SystemVersion) + logger.Infof("System update available: %s -> %s", local.SystemVersion, remote.SystemVersion) err := downloadFile(ctx, "/userdata/jetkvm/update_system.tar", remote.SystemUrl, &otaState.SystemDownloadProgress) if err != nil { otaState.Error = fmt.Sprintf("Error downloading system update: %v", err) @@ -366,7 +365,7 @@ func TryUpdate(ctx context.Context, deviceId string, includePreRelease bool) err triggerOTAStateUpdate() return err } - fmt.Println("System update downloaded") + logger.Info("System update downloaded") verifyFinished := time.Now() otaState.SystemVerifiedAt = &verifyFinished otaState.SystemVerificationProgress = 1 @@ -413,17 +412,17 @@ func TryUpdate(ctx context.Context, deviceId string, includePreRelease bool) err return fmt.Errorf("error executing rk_ota command: %w\nOutput: %s", err, output) } - fmt.Printf("rk_ota success, output: %s\n", output) + logger.Infof("rk_ota success, output: %s", output) otaState.SystemUpdateProgress = 1 otaState.SystemUpdatedAt = &verifyFinished triggerOTAStateUpdate() rebootNeeded = true } else { - fmt.Println("System is up to date") + logger.Info("System is up to date") } if rebootNeeded { - fmt.Println("System Rebooting in 10s...") + logger.Info("System Rebooting in 10s") time.Sleep(10 * time.Second) cmd := exec.Command("reboot") err := cmd.Start() diff --git a/usb.go b/usb.go index 1488183..6a3c2c3 100644 --- a/usb.go +++ b/usb.go @@ -2,7 +2,6 @@ package kvm import ( "kvm/internal/usbgadget" - "log" "time" ) @@ -51,7 +50,7 @@ func rpcGetUSBState() (state string) { func triggerUSBStateUpdate() { go func() { if currentSession == nil { - log.Println("No active RPC session, skipping update state update") + logger.Info("No active RPC session, skipping update state update") return } writeJSONRPCEvent("usbState", usbState, currentSession) diff --git a/usb_mass_storage.go b/usb_mass_storage.go index 46bdd52..39e6dd9 100644 --- a/usb_mass_storage.go +++ b/usb_mass_storage.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "kvm/resource" - "log" "net/http" "os" "path" @@ -80,7 +79,7 @@ var nbdDevice *NBDDevice const imagesFolder = "/userdata/jetkvm/images" func rpcMountBuiltInImage(filename string) error { - log.Println("Mount Built-In Image", filename) + logger.Infof("Mount Built-In Image: %s", filename) _ = os.MkdirAll(imagesFolder, 0755) imagePath := filepath.Join(imagesFolder, filename) diff --git a/video.go b/video.go index 8fc2bfa..ade9353 100644 --- a/video.go +++ b/video.go @@ -2,7 +2,6 @@ package kvm import ( "encoding/json" - "log" ) // max frame size for 1080p video, specified in mpp venc setting @@ -39,7 +38,7 @@ func HandleVideoStateMessage(event CtrlResponse) { videoState := VideoInputState{} err := json.Unmarshal(event.Data, &videoState) if err != nil { - log.Println("Error parsing video state json:", err) + logger.Warnf("Error parsing video state json: %v", err) return } lastVideoState = videoState diff --git a/webrtc.go b/webrtc.go index 5e9ce3d..12d4f95 100644 --- a/webrtc.go +++ b/webrtc.go @@ -3,7 +3,6 @@ package kvm import ( "encoding/base64" "encoding/json" - "fmt" "net" "strings" @@ -74,17 +73,17 @@ func newSession(config SessionConfig) (*Session, error) { if config.IsCloud { if config.ICEServers == nil { - fmt.Printf("ICE Servers not provided by cloud") + logger.Info("ICE Servers not provided by cloud") } else { iceServer.URLs = config.ICEServers - fmt.Printf("Using ICE Servers provided by cloud: %v\n", iceServer.URLs) + logger.Infof("Using ICE Servers provided by cloud: %v", iceServer.URLs) } if config.LocalIP == "" || net.ParseIP(config.LocalIP) == nil { - fmt.Printf("Local IP address %v not provided or invalid, won't set NAT1To1IPs\n", config.LocalIP) + logger.Infof("Local IP address %v not provided or invalid, won't set NAT1To1IPs", config.LocalIP) } else { webrtcSettingEngine.SetNAT1To1IPs([]string{config.LocalIP}, webrtc.ICECandidateTypeSrflx) - fmt.Printf("Setting NAT1To1IPs to %s\n", config.LocalIP) + logger.Infof("Setting NAT1To1IPs to %s", config.LocalIP) } } @@ -98,7 +97,7 @@ func newSession(config SessionConfig) (*Session, error) { session := &Session{peerConnection: peerConnection} peerConnection.OnDataChannel(func(d *webrtc.DataChannel) { - fmt.Printf("New DataChannel %s %d\n", d.Label(), d.ID()) + logger.Infof("New DataChannel %s %d", d.Label(), d.ID()) switch d.Label() { case "rpc": session.RPCChannel = d @@ -146,7 +145,7 @@ func newSession(config SessionConfig) (*Session, error) { var isConnected bool peerConnection.OnICEConnectionStateChange(func(connectionState webrtc.ICEConnectionState) { - fmt.Printf("Connection State has changed %s \n", connectionState.String()) + logger.Infof("Connection State has changed %s", connectionState) if connectionState == webrtc.ICEConnectionStateConnected { if !isConnected { isConnected = true