mirror of https://github.com/jetkvm/kvm.git
Cleanup logging (#216)
This commit is contained in:
commit
4884240f5f
|
@ -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()
|
||||
}
|
||||
|
|
2
cloud.go
2
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() {
|
||||
|
|
29
display.go
29
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()
|
||||
|
|
3
fuse.go
3
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()
|
||||
}
|
||||
|
|
33
jsonrpc.go
33
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)
|
||||
|
|
7
main.go
7
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)
|
||||
|
|
20
native.go
20
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
|
||||
}
|
||||
|
|
26
network.go
26
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)
|
||||
}
|
||||
}
|
||||
|
|
17
ntp.go
17
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
|
||||
}
|
||||
}
|
||||
|
|
25
ota.go
25
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()
|
||||
|
|
3
usb.go
3
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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
3
video.go
3
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
|
||||
|
|
13
webrtc.go
13
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
|
||||
|
|
Loading…
Reference in New Issue