Implementation with iwd
This commit is contained in:
parent
2b3a5b89f8
commit
17d665e21a
10 changed files with 755 additions and 171 deletions
|
|
@ -3,6 +3,9 @@ package app
|
|||
import (
|
||||
"embed"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
|
|
@ -71,6 +74,52 @@ func (a *App) Shutdown() {
|
|||
logging.AddLog("Système", "Application arrêtée")
|
||||
}
|
||||
|
||||
// getSystemUptime reads system uptime from /proc/uptime
|
||||
func getSystemUptime() int64 {
|
||||
data, err := os.ReadFile("/proc/uptime")
|
||||
if err != nil {
|
||||
log.Printf("Error reading /proc/uptime: %v", err)
|
||||
return 0
|
||||
}
|
||||
|
||||
fields := strings.Fields(string(data))
|
||||
if len(fields) == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
uptime, err := strconv.ParseFloat(fields[0], 64)
|
||||
if err != nil {
|
||||
log.Printf("Error parsing uptime: %v", err)
|
||||
return 0
|
||||
}
|
||||
|
||||
return int64(uptime)
|
||||
}
|
||||
|
||||
// getInterfaceBytes reads rx and tx bytes for a network interface
|
||||
func getInterfaceBytes(interfaceName string) (rxBytes, txBytes int64) {
|
||||
rxPath := "/sys/class/net/" + interfaceName + "/statistics/rx_bytes"
|
||||
txPath := "/sys/class/net/" + interfaceName + "/statistics/tx_bytes"
|
||||
|
||||
// Read RX bytes
|
||||
rxData, err := os.ReadFile(rxPath)
|
||||
if err != nil {
|
||||
log.Printf("Error reading rx_bytes for %s: %v", interfaceName, err)
|
||||
} else {
|
||||
rxBytes, _ = strconv.ParseInt(strings.TrimSpace(string(rxData)), 10, 64)
|
||||
}
|
||||
|
||||
// Read TX bytes
|
||||
txData, err := os.ReadFile(txPath)
|
||||
if err != nil {
|
||||
log.Printf("Error reading tx_bytes for %s: %v", interfaceName, err)
|
||||
} else {
|
||||
txBytes, _ = strconv.ParseInt(strings.TrimSpace(string(txData)), 10, 64)
|
||||
}
|
||||
|
||||
return rxBytes, txBytes
|
||||
}
|
||||
|
||||
// periodicStatusUpdate updates WiFi connection status periodically
|
||||
func (a *App) periodicStatusUpdate() {
|
||||
ticker := time.NewTicker(5 * time.Second)
|
||||
|
|
@ -79,10 +128,16 @@ func (a *App) periodicStatusUpdate() {
|
|||
for range ticker.C {
|
||||
a.StatusMutex.Lock()
|
||||
a.Status.Connected = wifi.IsConnected()
|
||||
if !a.Status.Connected {
|
||||
a.Status.ConnectedSSID = ""
|
||||
a.Status.ConnectedSSID = wifi.GetConnectedSSID()
|
||||
a.Status.Uptime = getSystemUptime()
|
||||
|
||||
// Get network data usage for WiFi interface
|
||||
if a.Config != nil {
|
||||
rxBytes, txBytes := getInterfaceBytes(a.Config.WifiInterface)
|
||||
// Convert to MB and sum rx + tx
|
||||
a.Status.DataUsage = float64(rxBytes+txBytes) / (1024 * 1024)
|
||||
}
|
||||
a.Status.Uptime = int64(time.Since(a.StartTime).Seconds())
|
||||
|
||||
a.StatusMutex.Unlock()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue