refactor: impl health checks, graceful shutdown & structured logging

This commit is contained in:
2026-01-04 15:06:35 +03:00
parent 192ec80010
commit 0751ddb88a
3 changed files with 71 additions and 24 deletions

View File

@@ -3,7 +3,7 @@ package api
import (
"encoding/json"
"errors"
"log"
"log/slog"
"net/http"
"gitea.mrixs.me/minecraft-platform/backend/internal/core"
@@ -40,7 +40,7 @@ func (h *AuthHandler) Authenticate(w http.ResponseWriter, r *http.Request) {
}
// Другие ошибки - внутренние
log.Printf("internal server error during authentication: %v", err)
slog.Error("internal server error during authentication", "error", err)
http.Error(w, "Internal server error", http.StatusInternalServerError)
return
}
@@ -69,7 +69,7 @@ func (h *AuthHandler) Join(w http.ResponseWriter, r *http.Request) {
return
}
log.Printf("internal server error during join: %v", err)
slog.Error("internal server error during join", "error", err)
http.Error(w, "Internal server error", http.StatusInternalServerError)
return
}
@@ -90,7 +90,7 @@ func (h *AuthHandler) Login(w http.ResponseWriter, r *http.Request) {
http.Error(w, "Invalid username or password", http.StatusUnauthorized)
return
}
log.Printf("internal server error during login: %v", err)
slog.Error("internal server error during login", "error", err)
http.Error(w, "Internal server error", http.StatusInternalServerError)
return
}

View File

@@ -3,7 +3,7 @@ package core
import (
"context"
"encoding/json"
"log"
"log/slog"
"time"
"gitea.mrixs.me/minecraft-platform/backend/internal/database"
@@ -29,7 +29,7 @@ type ServerPoller struct {
}
func (p *ServerPoller) Start(ctx context.Context) {
log.Println("Starting server poller...")
slog.Info("Starting server poller...")
ticker := time.NewTicker(60 * time.Second)
defer ticker.Stop()
@@ -40,7 +40,7 @@ func (p *ServerPoller) Start(ctx context.Context) {
case <-ticker.C:
p.pollAllServers(ctx)
case <-ctx.Done():
log.Println("Stopping server poller...")
slog.Info("Stopping server poller...")
return
}
}
@@ -49,7 +49,7 @@ func (p *ServerPoller) Start(ctx context.Context) {
func (p *ServerPoller) pollAllServers(ctx context.Context) {
servers, err := p.Repo.GetAllEnabledServers(ctx)
if err != nil {
log.Printf("Poller: failed to get servers: %v", err)
slog.Error("Poller: failed to get servers", "error", err)
return
}
@@ -61,13 +61,13 @@ func (p *ServerPoller) pollAllServers(ctx context.Context) {
func (p *ServerPoller) pollServer(ctx context.Context, server *models.GameServer) {
resp, delay, err := bot.PingAndList(server.Address)
if err != nil {
log.Printf("Poller: failed to ping %s (%s): %v", server.Name, server.Address, err)
slog.Warn("Poller: failed to ping server", "server", server.Name, "address", server.Address, "error", err)
return
}
var status pingResponse
if err := json.Unmarshal(resp, &status); err != nil {
log.Printf("Poller: failed to unmarshal status for %s: %v", server.Name, err)
slog.Error("Poller: failed to unmarshal status", "server", server.Name, "error", err)
return
}
@@ -83,8 +83,8 @@ func (p *ServerPoller) pollServer(ctx context.Context, server *models.GameServer
}
if err := p.Repo.UpdateServerStatus(ctx, server.ID, updateData); err != nil {
log.Printf("Poller: failed to update status for %s: %v", server.Name, err)
slog.Error("Poller: failed to update status", "server", server.Name, "error", err)
} else {
log.Printf("Poller: successfully polled %s", server.Name)
slog.Info("Poller: successfully polled server", "server", server.Name)
}
}