feat: implement centralized logging helper

- remove direct log usage
- create a new logging helper
- update all log calls to use the new Logger instance
- set timestamp to ISO8601

🤖
This commit is contained in:
Sebastian Mark 2024-11-04 20:33:25 +01:00
parent 76f3954299
commit 600d2ed2ff
6 changed files with 30 additions and 17 deletions

View file

@ -3,11 +3,11 @@ package server
import ( import (
"flag" "flag"
"fmt" "fmt"
"github.com/charmbracelet/log"
"github.com/gorilla/handlers" "github.com/gorilla/handlers"
"net/http" "net/http"
"os" "os"
"git.smsvc.net/pomodoro/GoTomato/internal/helper"
"git.smsvc.net/pomodoro/GoTomato/internal/metadata" "git.smsvc.net/pomodoro/GoTomato/internal/metadata"
"git.smsvc.net/pomodoro/GoTomato/internal/shared" "git.smsvc.net/pomodoro/GoTomato/internal/shared"
"git.smsvc.net/pomodoro/GoTomato/internal/websocket" "git.smsvc.net/pomodoro/GoTomato/internal/websocket"
@ -48,12 +48,12 @@ func Start() {
r.HandleFunc("/ws", websocket.HandleConnection) r.HandleFunc("/ws", websocket.HandleConnection)
go websocket.SendPermanentBroadCastMessage() go websocket.SendPermanentBroadCastMessage()
log.Info("GoTomato started", "version", metadata.GoTomatoVersion) helper.Logger.Info("GoTomato started", "version", metadata.GoTomatoVersion)
log.Info("Websocket listening", "address", listen) helper.Logger.Info("Websocket listening", "address", listen)
// start the listener // start the listener
err := http.ListenAndServe(listen, handlers.ProxyHeaders(r)) err := http.ListenAndServe(listen, handlers.ProxyHeaders(r))
if err != nil { if err != nil {
log.Fatal("Error starting server:", "msg", err) helper.Logger.Fatal("Error starting server:", "msg", err)
} }
} }

View file

@ -0,0 +1,12 @@
package helper
import (
"github.com/charmbracelet/log"
"os"
"time"
)
var Logger = log.NewWithOptions(os.Stdout, log.Options{
ReportTimestamp: true,
TimeFormat: time.RFC3339,
})

View file

@ -2,10 +2,10 @@ package websocket
import ( import (
"encoding/json" "encoding/json"
"github.com/charmbracelet/log"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"time" "time"
"git.smsvc.net/pomodoro/GoTomato/internal/helper"
"git.smsvc.net/pomodoro/GoTomato/internal/shared" "git.smsvc.net/pomodoro/GoTomato/internal/shared"
) )
@ -16,14 +16,14 @@ func SendPermanentBroadCastMessage() {
// Marshal the message into JSON format // Marshal the message into JSON format
jsonMessage, err := json.Marshal(shared.State) jsonMessage, err := json.Marshal(shared.State)
if err != nil { if err != nil {
log.Error("Error marshalling message:", "msg", err) helper.Logger.Error("Error marshalling message:", "msg", err)
return return
} }
// Iterate over all connected clients and broadcast the message // Iterate over all connected clients and broadcast the message
for _, client := range Clients { for _, client := range Clients {
err := client.SendMessage(websocket.TextMessage, jsonMessage) err := client.SendMessage(websocket.TextMessage, jsonMessage)
if err != nil { if err != nil {
log.Error("Error broadcasting to client:", "msg", err) helper.Logger.Error("Error broadcasting to client:", "msg", err)
// The client is responsible for closing itself on error // The client is responsible for closing itself on error
} }
} }

View file

@ -2,8 +2,8 @@ package websocket
import ( import (
"encoding/json" "encoding/json"
"github.com/charmbracelet/log"
"git.smsvc.net/pomodoro/GoTomato/internal/helper"
"git.smsvc.net/pomodoro/GoTomato/internal/pomodoro" "git.smsvc.net/pomodoro/GoTomato/internal/pomodoro"
"git.smsvc.net/pomodoro/GoTomato/internal/shared" "git.smsvc.net/pomodoro/GoTomato/internal/shared"
"git.smsvc.net/pomodoro/GoTomato/pkg/models" "git.smsvc.net/pomodoro/GoTomato/pkg/models"
@ -22,14 +22,14 @@ func handleClientCommands(c models.WebsocketClient) {
_, message, err := ws.ReadMessage() _, message, err := ws.ReadMessage()
if err != nil { if err != nil {
delete(Clients, ws.LocalAddr()) delete(Clients, ws.LocalAddr())
log.Info("Client disconnected:", "msg", err, "host", c.RealIP, "clients", len(Clients)) helper.Logger.Info("Client disconnected:", "msg", err, "host", c.RealIP, "clients", len(Clients))
break break
} }
// Handle incoming commands // Handle incoming commands
err = json.Unmarshal(message, &clientCommand) err = json.Unmarshal(message, &clientCommand)
if err != nil { if err != nil {
log.Error("Error unmarshalling command:", "msg", err) helper.Logger.Error("Error unmarshalling command:", "msg", err)
continue continue
} }
@ -55,10 +55,10 @@ func handleClientCommands(c models.WebsocketClient) {
case "updateSettings": case "updateSettings":
if !pomodoro.IsPomodoroOngoing() { if !pomodoro.IsPomodoroOngoing() {
if !checkSettings(clientCommand.Settings) { if !checkSettings(clientCommand.Settings) {
log.Warn("Ignoring invalid config:", "msg", clientCommand.Settings, "host", c.Conn.RemoteAddr()) helper.Logger.Warn("Ignoring invalid config:", "msg", clientCommand.Settings, "host", c.Conn.RemoteAddr())
break break
} }
log.Info("Client send config", "config", clientCommand.Settings, "host", c.Conn.RemoteAddr()) helper.Logger.Info("Client send config", "config", clientCommand.Settings, "host", c.Conn.RemoteAddr())
pomodoro.UpdateSettings(clientCommand.Settings) pomodoro.UpdateSettings(clientCommand.Settings)
} }
} }

View file

@ -1,12 +1,12 @@
package websocket package websocket
import ( import (
"github.com/charmbracelet/log"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"net" "net"
"net/http" "net/http"
"sync" "sync"
"git.smsvc.net/pomodoro/GoTomato/internal/helper"
"git.smsvc.net/pomodoro/GoTomato/pkg/models" "git.smsvc.net/pomodoro/GoTomato/pkg/models"
) )
@ -24,7 +24,7 @@ func HandleConnection(w http.ResponseWriter, r *http.Request) {
// Upgrade initial GET request to a WebSocket // Upgrade initial GET request to a WebSocket
ws, err := upgrader.Upgrade(w, r, nil) ws, err := upgrader.Upgrade(w, r, nil)
if err != nil { if err != nil {
log.Error("WebSocket upgrade error:", "msg", err) helper.Logger.Error("WebSocket upgrade error:", "msg", err)
return return
} }
defer ws.Close() defer ws.Close()
@ -38,7 +38,7 @@ func HandleConnection(w http.ResponseWriter, r *http.Request) {
Clients[ws.LocalAddr()] = &client Clients[ws.LocalAddr()] = &client
mu.Unlock() mu.Unlock()
log.Info("Client connected", "host", client.RealIP, "clients", len(Clients)) helper.Logger.Info("Client connected", "host", client.RealIP, "clients", len(Clients))
// Listen for commands from the connected client // Listen for commands from the connected client
handleClientCommands(client) handleClientCommands(client)

View file

@ -1,8 +1,9 @@
package models package models
import ( import (
"github.com/charmbracelet/log"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"git.smsvc.net/pomodoro/GoTomato/internal/helper"
) )
// Represents a command from the client (start/stop) // Represents a command from the client (start/stop)
@ -23,7 +24,7 @@ type WebsocketClient struct {
func (c *WebsocketClient) SendMessage(messageType int, data []byte) error { func (c *WebsocketClient) SendMessage(messageType int, data []byte) error {
err := c.Conn.WriteMessage(messageType, data) err := c.Conn.WriteMessage(messageType, data)
if err != nil { if err != nil {
log.Error("Error writing to WebSocket:", "msg", err) helper.Logger.Error("Error writing to WebSocket:", "msg", err)
c.Conn.Close() // Close the connection on error c.Conn.Close() // Close the connection on error
} }
return err return err