Files
WatchDog_Linux-systemd/postLog/logSocketHandler.go
NanamiAdmin f6005cb324 feat: add initial project structure with logging and watchdog service
Implement basic watchdog service for Linux systemd with:
- Configuration loading
- Logging system with database support
- WebSocket log broadcasting
- TCP server for agent communication
- Project setup with Go modules
2026-04-02 21:56:40 +08:00

67 lines
1.2 KiB
Go

package postLog
import (
"encoding/json"
"log"
"net/http"
"time"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
type LogSocketHandler struct {
broadcaster *LogBroadcaster
}
func NewLogSocketHandler(b *LogBroadcaster) *LogSocketHandler {
return &LogSocketHandler{
broadcaster: b,
}
}
func (h *LogSocketHandler) Handle(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Printf("Failed to upgrade connection: %v", err)
return
}
defer conn.Close()
clientID := conn.RemoteAddr().String() + "-" + time.Now().Format("20060102150405")
clientCh := h.broadcaster.AddClient(clientID)
defer h.broadcaster.RemoveClient(clientID)
h.broadcaster.SendHistory(clientCh)
done := make(chan struct{})
go func() {
defer close(done)
for {
msg := <-clientCh
data, err := json.Marshal(msg)
if err != nil {
log.Printf("Failed to marshal log message: %v", err)
return
}
if err := conn.WriteMessage(websocket.TextMessage, data); err != nil {
return
}
}
}()
for {
_, _, err := conn.ReadMessage()
if err != nil {
return
}
}
}