refactor(app): moved all db and log to one intialize spot

This commit is contained in:
2025-08-04 06:54:21 -05:00
parent 486e4fb6b8
commit 0ecbe29ec1
13 changed files with 148 additions and 99 deletions

View File

@@ -2,12 +2,13 @@ package ws
import (
"encoding/json"
"log"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"gorm.io/gorm"
"lst.net/pkg/logger"
)
type JoinPayload struct {
@@ -26,11 +27,11 @@ var upgrader = websocket.Upgrader{
EnableCompression: true,
}
func SocketHandler(c *gin.Context, channels map[string]*Channel) {
func SocketHandler(c *gin.Context, channels map[string]*Channel, log *logger.CustomLogger, db *gorm.DB) {
// Upgrade HTTP to WebSocket
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
log.Println("WebSocket upgrade failed:", err)
log.Error("WebSocket upgrade failed", "websocket", map[string]interface{}{"error": err})
return
}
//defer conn.Close()
@@ -53,7 +54,7 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
clientsMu.Unlock()
// Save initial connection to DB
client.SaveToDB()
client.SaveToDB(log, db)
// Save initial connection to DB
// if err := client.SaveToDB(); err != nil {
// log.Println("Failed to save client to DB:", err)
@@ -70,12 +71,12 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
now := time.Now()
client.markActive() // Track last pong time
client.lastActive = now
client.updateHeartbeat()
client.updateHeartbeat(log, db)
return nil
})
// Start server-side ping ticker
go client.startServerPings()
go client.startServerPings(log, db)
defer func() {
// Unregister from all channels
@@ -91,11 +92,13 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
clientsMu.Unlock()
// Mark disconnected in DB
client.MarkDisconnected()
client.MarkDisconnected(log, db)
// Close connection
conn.Close()
log.Printf("Client disconnected: %s", client.ClientID)
log.Info("Client disconnected", "websocket", map[string]interface{}{
"client": client.ClientID,
})
}()
// Send welcome message immediately
@@ -104,7 +107,7 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
"message": "Welcome to the WebSocket server. Send subscription request to begin.",
}
if err := conn.WriteJSON(welcomeMsg); err != nil {
log.Println("Failed to send welcome message:", err)
log.Error("Failed to send welcome message", "websocket", map[string]interface{}{"error": err})
return
}
@@ -118,14 +121,14 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
}
}
close(client.Send)
client.MarkDisconnected()
client.MarkDisconnected(log, db)
}()
for {
_, msg, err := conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway) {
log.Printf("Client disconnected unexpectedly: %v", err)
log.Error("Client disconnected unexpectedl", "websocket", map[string]interface{}{"error": err})
}
break
}
@@ -173,6 +176,7 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
client.Channels["logServices"] = true
conn.WriteJSON(map[string]string{
"message": "You are now subscribed to the the service channel",
"status": "subscribed",
"channel": "logServices",
})
@@ -194,12 +198,13 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
client.Channels["labels"] = true
// Update DB record
client.SaveToDB()
client.SaveToDB(log, db)
// if err := client.SaveToDB(); err != nil {
// log.Println("Failed to update client labels:", err)
// }
conn.WriteJSON(map[string]interface{}{
"message": "You are now subscribed to the label channel",
"status": "subscribed",
"channel": "labels",
"filters": client.Labels,
@@ -217,7 +222,7 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
// Send messages to client
for message := range client.Send {
if err := conn.WriteMessage(websocket.TextMessage, message); err != nil {
log.Println("Write error:", err)
log.Error("Write erro", "websocket", map[string]interface{}{"error": err})
break
}
}