|
@@ -9,7 +9,6 @@ import (
|
|
|
"goseg/startram"
|
|
"goseg/startram"
|
|
|
"goseg/structs"
|
|
"goseg/structs"
|
|
|
"goseg/system"
|
|
"goseg/system"
|
|
|
- "log/slog"
|
|
|
|
|
"math"
|
|
"math"
|
|
|
"os"
|
|
"os"
|
|
|
"reflect"
|
|
"reflect"
|
|
@@ -21,7 +20,6 @@ import (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
- logger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
|
|
|
|
|
clients = make(map[*websocket.Conn]bool)
|
|
clients = make(map[*websocket.Conn]bool)
|
|
|
hostInfoInterval = 3 * time.Second // how often we refresh system info
|
|
hostInfoInterval = 3 * time.Second // how often we refresh system info
|
|
|
shipInfoInterval = 3 * time.Second // how often we refresh ship info
|
|
shipInfoInterval = 3 * time.Second // how often we refresh ship info
|
|
@@ -32,8 +30,8 @@ var (
|
|
|
|
|
|
|
|
func init() {
|
|
func init() {
|
|
|
// initialize broadcastState global var
|
|
// initialize broadcastState global var
|
|
|
- config := config.Conf()
|
|
|
|
|
- broadcast, err := bootstrapBroadcastState(config)
|
|
|
|
|
|
|
+ conf := config.Conf()
|
|
|
|
|
+ broadcast, err := bootstrapBroadcastState(conf)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Unable to initialize broadcast: %v", err)
|
|
errmsg := fmt.Sprintf("Unable to initialize broadcast: %v", err)
|
|
|
panic(errmsg)
|
|
panic(errmsg)
|
|
@@ -61,13 +59,13 @@ func UnregisterClient(conn *websocket.Conn) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// take in config file and addt'l info to initialize broadcast
|
|
// take in config file and addt'l info to initialize broadcast
|
|
|
-func bootstrapBroadcastState(config structs.SysConfig) (structs.AuthBroadcast, error) {
|
|
|
|
|
- logger.Info("Bootstrapping state")
|
|
|
|
|
|
|
+func bootstrapBroadcastState(conf structs.SysConfig) (structs.AuthBroadcast, error) {
|
|
|
|
|
+ config.Logger.Info("Bootstrapping state")
|
|
|
var res structs.AuthBroadcast
|
|
var res structs.AuthBroadcast
|
|
|
// get a list of piers from config
|
|
// get a list of piers from config
|
|
|
- piers := config.Piers
|
|
|
|
|
|
|
+ piers := conf.Piers
|
|
|
// this returns a map of ship:running status
|
|
// this returns a map of ship:running status
|
|
|
- logger.Info("Resolving pier status")
|
|
|
|
|
|
|
+ config.Logger.Info("Resolving pier status")
|
|
|
updates, err := constructPierInfo(piers)
|
|
updates, err := constructPierInfo(piers)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return res, err
|
|
return res, err
|
|
@@ -78,16 +76,16 @@ func bootstrapBroadcastState(config structs.SysConfig) (structs.AuthBroadcast, e
|
|
|
})
|
|
})
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Unable to update broadcast state: %v", err)
|
|
errmsg := fmt.Sprintf("Unable to update broadcast state: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
return res, err
|
|
return res, err
|
|
|
}
|
|
}
|
|
|
// wgRegistered := config.WgRegistered
|
|
// wgRegistered := config.WgRegistered
|
|
|
// wgOn := config.WgOn
|
|
// wgOn := config.WgOn
|
|
|
// get startram regions
|
|
// get startram regions
|
|
|
- logger.Info("Retrieving StarTram region info")
|
|
|
|
|
|
|
+ config.Logger.Info("Retrieving StarTram region info")
|
|
|
regions, err := startram.GetRegions()
|
|
regions, err := startram.GetRegions()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- logger.Warn("Couldn't get StarTram regions")
|
|
|
|
|
|
|
+ config.Logger.Warn("Couldn't get StarTram regions")
|
|
|
} else {
|
|
} else {
|
|
|
updates := map[string]interface{}{
|
|
updates := map[string]interface{}{
|
|
|
"Profile": map[string]interface{}{
|
|
"Profile": map[string]interface{}{
|
|
@@ -101,7 +99,7 @@ func bootstrapBroadcastState(config structs.SysConfig) (structs.AuthBroadcast, e
|
|
|
err := UpdateBroadcastState(updates)
|
|
err := UpdateBroadcastState(updates)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Error updating broadcast state:", err)
|
|
errmsg := fmt.Sprintf("Error updating broadcast state:", err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// update with system state
|
|
// update with system state
|
|
@@ -109,7 +107,7 @@ func bootstrapBroadcastState(config structs.SysConfig) (structs.AuthBroadcast, e
|
|
|
err = UpdateBroadcastState(sysInfo)
|
|
err = UpdateBroadcastState(sysInfo)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Error updating broadcast state:", err)
|
|
errmsg := fmt.Sprintf("Error updating broadcast state:", err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
}
|
|
}
|
|
|
// start looping info refreshes
|
|
// start looping info refreshes
|
|
|
go hostStatusLoop()
|
|
go hostStatusLoop()
|
|
@@ -130,13 +128,13 @@ func constructPierInfo(piers []string) (map[string]structs.Urbit, error) {
|
|
|
pierStatus, err := docker.GetShipStatus(piers)
|
|
pierStatus, err := docker.GetShipStatus(piers)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Unable to bootstrap urbit states: %v", err)
|
|
errmsg := fmt.Sprintf("Unable to bootstrap urbit states: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
return updates, err
|
|
return updates, err
|
|
|
}
|
|
}
|
|
|
hostName, err := os.Hostname()
|
|
hostName, err := os.Hostname()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Error getting hostname, defaulting to `nativeplanet`: %v", err)
|
|
errmsg := fmt.Sprintf("Error getting hostname, defaulting to `nativeplanet`: %v", err)
|
|
|
- logger.Warn(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Warn(errmsg)
|
|
|
hostName = "nativeplanet"
|
|
hostName = "nativeplanet"
|
|
|
}
|
|
}
|
|
|
// convert the running status into bools
|
|
// convert the running status into bools
|
|
@@ -145,7 +143,7 @@ func constructPierInfo(piers []string) (map[string]structs.Urbit, error) {
|
|
|
err := config.LoadUrbitConfig(pier)
|
|
err := config.LoadUrbitConfig(pier)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Unable to load %s config: %v", pier, err)
|
|
errmsg := fmt.Sprintf("Unable to load %s config: %v", pier, err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
dockerConfig := config.UrbitConf(pier)
|
|
dockerConfig := config.UrbitConf(pier)
|
|
@@ -154,7 +152,7 @@ func constructPierInfo(piers []string) (map[string]structs.Urbit, error) {
|
|
|
dockerStats, err = docker.GetContainerStats(pier)
|
|
dockerStats, err = docker.GetContainerStats(pier)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Unable to load %s stats: %v", pier, err)
|
|
errmsg := fmt.Sprintf("Unable to load %s stats: %v", pier, err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
urbit := structs.Urbit{}
|
|
urbit := structs.Urbit{}
|
|
@@ -222,7 +220,7 @@ func GetContainerNetworks(containers []string) map[string]string {
|
|
|
network, err := docker.GetContainerNetwork(container)
|
|
network, err := docker.GetContainerNetwork(container)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Error getting container network: %v", err)
|
|
errmsg := fmt.Sprintf("Error getting container network: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
continue
|
|
continue
|
|
|
} else {
|
|
} else {
|
|
|
res[container] = network
|
|
res[container] = network
|
|
@@ -320,13 +318,11 @@ func GetState() structs.AuthBroadcast {
|
|
|
|
|
|
|
|
// return json string of current broadcast state
|
|
// return json string of current broadcast state
|
|
|
func GetStateJson() ([]byte, error) {
|
|
func GetStateJson() ([]byte, error) {
|
|
|
- mu.Lock()
|
|
|
|
|
- defer mu.Unlock()
|
|
|
|
|
bState := GetState()
|
|
bState := GetState()
|
|
|
broadcastJson, err := json.Marshal(bState)
|
|
broadcastJson, err := json.Marshal(bState)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Error marshalling response: %v", err)
|
|
errmsg := fmt.Sprintf("Error marshalling response: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
return nil, err
|
|
return nil, err
|
|
|
}
|
|
}
|
|
|
return broadcastJson, nil
|
|
return broadcastJson, nil
|
|
@@ -343,7 +339,7 @@ func BroadcastToClients() error {
|
|
|
defer auth.AuthenticatedClients.Unlock()
|
|
defer auth.AuthenticatedClients.Unlock()
|
|
|
for client := range auth.AuthenticatedClients.Conns {
|
|
for client := range auth.AuthenticatedClients.Conns {
|
|
|
if err := client.WriteMessage(websocket.TextMessage, authJson); err != nil {
|
|
if err := client.WriteMessage(websocket.TextMessage, authJson); err != nil {
|
|
|
- logger.Error(fmt.Sprintf("Error writing response: %v", err))
|
|
|
|
|
|
|
+ config.Logger.Error(fmt.Sprintf("Error writing response: %v", err))
|
|
|
return err
|
|
return err
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -359,7 +355,7 @@ func hostStatusLoop() {
|
|
|
update := constructSystemInfo()
|
|
update := constructSystemInfo()
|
|
|
err := UpdateBroadcastState(update)
|
|
err := UpdateBroadcastState(update)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- logger.Warn(fmt.Sprintf("Error updating system status: %v", err))
|
|
|
|
|
|
|
+ config.Logger.Warn(fmt.Sprintf("Error updating system status: %v", err))
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -371,9 +367,12 @@ func shipStatusLoop() {
|
|
|
for {
|
|
for {
|
|
|
select {
|
|
select {
|
|
|
case <-ticker.C:
|
|
case <-ticker.C:
|
|
|
|
|
+ conf := config.Conf()
|
|
|
|
|
+ piers := conf.Piers
|
|
|
updates, err := constructPierInfo(piers)
|
|
updates, err := constructPierInfo(piers)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return res, err
|
|
|
|
|
|
|
+ errmsg := fmt.Sprintf("Unable to build pier info: %v",err)
|
|
|
|
|
+ config.Logger.Warn(errmsg)
|
|
|
}
|
|
}
|
|
|
// update broadcastState
|
|
// update broadcastState
|
|
|
err = UpdateBroadcastState(map[string]interface{}{
|
|
err = UpdateBroadcastState(map[string]interface{}{
|
|
@@ -381,8 +380,7 @@ func shipStatusLoop() {
|
|
|
})
|
|
})
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
errmsg := fmt.Sprintf("Unable to update ship state: %v", err)
|
|
errmsg := fmt.Sprintf("Unable to update ship state: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
|
|
- return res, err
|
|
|
|
|
|
|
+ config.Logger.Error(errmsg)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|