63 lines
1.6 KiB
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})
|
|
}
|