refactor(app): moved all db and log to one intialize spot
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user