agent v0.3.8: fix crash UI notifications, auto Podman machine DNS, WordPress 7.0.0 ready template

This commit is contained in:
EduBox Dev
2026-06-26 15:24:21 +00:00
parent a414f03a59
commit cf8b66340a
15 changed files with 590 additions and 35 deletions
+23 -9
View File
@@ -251,9 +251,16 @@ func sendUILog(message string) {
"level": "info",
}
for _, conn := range conns {
if err := conn.WriteJSON(msg); err != nil {
// Client may have disconnected; ignore.
}
func(c *websocket.Conn) {
defer func() {
if r := recover(); r != nil {
log.Printf("PANIC in sendUILog: %v", r)
}
}()
if err := c.WriteJSON(msg); err != nil {
// Client may have disconnected; ignore.
}
}(conn)
}
}
@@ -278,9 +285,16 @@ func broadcastUI(msg map[string]interface{}) {
uiConnectionsMu.RUnlock()
for _, conn := range conns {
if err := conn.WriteJSON(msg); err != nil {
// Ignore write errors for disconnected clients.
}
func(c *websocket.Conn) {
defer func() {
if r := recover(); r != nil {
log.Printf("PANIC in broadcastUI: %v", r)
}
}()
if err := c.WriteJSON(msg); err != nil {
// Ignore write errors for disconnected clients.
}
}(conn)
}
}
@@ -416,7 +430,7 @@ func uiStopInstance(dataDir, instanceID string) {
inst[instanceID].Status = "stopped"
_ = saveInstances(dataDir, inst)
}
_ = sendMessage(WSMessage{Action: "instance_stopped", InstanceID: instanceID})
go sendMessage(WSMessage{Action: "instance_stopped", InstanceID: instanceID})
notifyUI(map[string]interface{}{"action": "instances_updated"})
}
@@ -427,7 +441,7 @@ func uiDeleteInstance(dataDir, instanceID string) {
}
dockerComposeRm(dataDir, instanceID)
removeInstance(dataDir, instanceID)
_ = sendMessage(WSMessage{Action: "instance_deleted", InstanceID: instanceID})
go sendMessage(WSMessage{Action: "instance_deleted", InstanceID: instanceID})
notifyUI(map[string]interface{}{"action": "instances_updated"})
}
@@ -446,7 +460,7 @@ func uiResetInstance(dataDir, nodeID, instanceID string) {
return
}
dockerComposeRm(dataDir, instanceID)
handleStartInstance(dataDir, nodeID, instanceID, info.TemplateName, string(composeBytes), info.Port)
handleStartInstance(dataDir, nodeID, instanceID, info.TemplateName, string(composeBytes), "", info.Port)
}
// instanceContainersExist returns true if compose containers already exist for this instance.