Files
acc-server-manager/local/controller/log.go

63 lines
1.6 KiB
Go

package controller
import (
"acc-server-manager/local/middleware"
"acc-server-manager/local/model"
"acc-server-manager/local/service"
"acc-server-manager/local/utl/common"
"acc-server-manager/local/utl/error_handler"
"strconv"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
)
type LogController struct {
service *service.ServerService
errorHandler *error_handler.ControllerErrorHandler
}
func NewLogController(ss *service.ServerService, routeGroups *common.RouteGroups, auth *middleware.AuthMiddleware) *LogController {
lc := &LogController{
service: ss,
errorHandler: error_handler.NewControllerErrorHandler(),
}
logRoutes := routeGroups.Log
logRoutes.Use(auth.Authenticate)
logRoutes.Get("/", auth.HasPermission(model.ServerView), lc.GetLogLines)
return lc
}
// GetLogLines godoc
// @Summary Get last N lines of server log
// @Tags Server
// @Param id path string true "Server ID"
// @Param lines query int false "Number of lines to return (default 100)"
// @Success 200 {object} object{lines=[]string}
// @Security BearerAuth
// @Router /server/{id}/log [get]
func (lc *LogController) GetLogLines(c *fiber.Ctx) error {
serverIDStr := c.Params("id")
serverID, err := uuid.Parse(serverIDStr)
if err != nil {
return lc.errorHandler.HandleUUIDError(c, "server ID")
}
n, _ := strconv.Atoi(c.Query("lines", "100"))
if n <= 0 {
n = 100
}
if n > 10000 {
n = 10000
}
lines, err := lc.service.GetLastLogLines(c, serverID, n)
if err != nil {
return lc.errorHandler.HandleServiceError(c, err)
}
return c.JSON(fiber.Map{"lines": lines})
}