mirror of https://github.com/jetkvm/kvm.git
fix(network): only trigger time sync when network transitions to online rather than every state change
This commit is contained in:
parent
61c2fa4a88
commit
86be6df1d3
19
cmd/main.go
19
cmd/main.go
|
|
@ -101,15 +101,22 @@ func supervise() error {
|
||||||
cmd.Args = os.Args
|
cmd.Args = os.Args
|
||||||
|
|
||||||
logFile, err := os.CreateTemp("", "jetkvm-stdout.log")
|
logFile, err := os.CreateTemp("", "jetkvm-stdout.log")
|
||||||
defer func() {
|
|
||||||
// we don't care about the errors here
|
|
||||||
_ = logFile.Close()
|
|
||||||
_ = os.Remove(logFile.Name())
|
|
||||||
}()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to create log file: %w", err)
|
return fmt.Errorf("failed to create log file: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logFileName := logFile.Name()
|
||||||
|
defer func() {
|
||||||
|
// Close file if it's still open (safe to call even if already closed)
|
||||||
|
if logFile != nil {
|
||||||
|
_ = logFile.Close()
|
||||||
|
}
|
||||||
|
// Only remove if file still exists at original location (wasn't renamed)
|
||||||
|
if _, err := os.Stat(logFileName); err == nil {
|
||||||
|
_ = os.Remove(logFileName)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
// Use io.MultiWriter to write to both the original streams and our buffers
|
// Use io.MultiWriter to write to both the original streams and our buffers
|
||||||
cmd.Stdout = io.MultiWriter(os.Stdout, logFile)
|
cmd.Stdout = io.MultiWriter(os.Stdout, logFile)
|
||||||
cmd.Stderr = io.MultiWriter(os.Stderr, logFile)
|
cmd.Stderr = io.MultiWriter(os.Stderr, logFile)
|
||||||
|
|
@ -133,6 +140,8 @@ func supervise() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if exiterr, ok := cmdErr.(*exec.ExitError); ok {
|
if exiterr, ok := cmdErr.(*exec.ExitError); ok {
|
||||||
|
// createErrorDump will close and rename the file if successful
|
||||||
|
// Note: os.Exit bypasses defer, but file is already handled by createErrorDump
|
||||||
createErrorDump(logFile)
|
createErrorDump(logFile)
|
||||||
os.Exit(exiterr.ExitCode())
|
os.Exit(exiterr.ExitCode())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
10
network.go
10
network.go
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jetkvm/kvm/internal/confparser"
|
"github.com/jetkvm/kvm/internal/confparser"
|
||||||
|
|
@ -118,6 +119,10 @@ func setPublicIPReadyState(ipv4Ready, ipv6Ready bool) {
|
||||||
publicIPState.SetIPv4AndIPv6(ipv4Ready, ipv6Ready)
|
publicIPState.SetIPv4AndIPv6(ipv4Ready, ipv6Ready)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
isOnline = &atomic.Bool{}
|
||||||
|
)
|
||||||
|
|
||||||
func networkStateChanged(_ string, state types.InterfaceState) {
|
func networkStateChanged(_ string, state types.InterfaceState) {
|
||||||
// do not block the main thread
|
// do not block the main thread
|
||||||
go waitCtrlAndRequestDisplayUpdate(true, "network_state_changed")
|
go waitCtrlAndRequestDisplayUpdate(true, "network_state_changed")
|
||||||
|
|
@ -126,7 +131,10 @@ func networkStateChanged(_ string, state types.InterfaceState) {
|
||||||
writeJSONRPCEvent("networkState", state.ToRpcInterfaceState(), currentSession)
|
writeJSONRPCEvent("networkState", state.ToRpcInterfaceState(), currentSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
if state.Online {
|
previousOnline := isOnline.Load()
|
||||||
|
isOnline.Store(state.Online)
|
||||||
|
|
||||||
|
if state.Online && !previousOnline {
|
||||||
networkLogger.Info().Msg("network state changed to online, triggering time sync")
|
networkLogger.Info().Msg("network state changed to online, triggering time sync")
|
||||||
triggerTimeSyncOnNetworkStateChange()
|
triggerTimeSyncOnNetworkStateChange()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue