Files
pika/internal/handler/ssh_login_handler.go
T
2026-08-12 18:59:29 +08:00

119 lines
3.1 KiB
Go

package handler
import (
"github.com/go-orz/orz"
"github.com/labstack/echo/v5"
"github.com/pika-monitor/pika/internal/models"
"github.com/pika-monitor/pika/internal/service"
"go.uber.org/zap"
)
// SSHLoginHandler SSH登录处理器
type SSHLoginHandler struct {
logger *zap.Logger
service *service.SSHLoginService
}
// NewSSHLoginHandler 创建处理器
func NewSSHLoginHandler(logger *zap.Logger, service *service.SSHLoginService) *SSHLoginHandler {
return &SSHLoginHandler{
logger: logger,
service: service,
}
}
// GetConfig 获取SSH登录监控配置
// GET /api/agents/:id/ssh-login/config
func (h *SSHLoginHandler) GetConfig(c *echo.Context) error {
agentID := c.Param("id")
if agentID == "" {
return orz.NewError(400, "探针ID不能为空")
}
config, err := h.service.GetConfig(c.Request().Context(), agentID)
if err != nil {
h.logger.Error("获取SSH登录监控配置失败", zap.Error(err))
return orz.NewError(500, "获取配置失败")
}
return orz.Ok(c, config)
}
// UpdateConfig 更新SSH登录监控配置
// POST /api/agents/:id/ssh-login/config
func (h *SSHLoginHandler) UpdateConfig(c *echo.Context) error {
agentID := c.Param("id")
var req models.SSHLoginConfigData
if err := c.Bind(&req); err != nil {
return err
}
err := h.service.UpdateConfig(c.Request().Context(), agentID, &req)
if err != nil {
h.logger.Error("更新SSH登录监控配置失败", zap.Error(err))
return orz.NewError(500, "更新配置失败")
}
return orz.Ok(c, orz.Map{})
}
// ListEvents 查询SSH登录事件
// GET /api/agents/:id/ssh-login/events
func (h *SSHLoginHandler) ListEvents(c *echo.Context) error {
agentID := c.Param("id")
// 获取分页参数
pageReq := orz.GetPageRequest(c, "createdAt")
builder := orz.NewPageBuilder(h.service.SSHLoginEventRepo.Repository).
PageRequest(pageReq).
Equal("agentId", agentID).
Equal("username", c.QueryParam("username")).
Equal("ip", c.QueryParam("ip")).
Equal("status", c.QueryParam("status"))
ctx := c.Request().Context()
page, err := builder.Execute(ctx)
if err != nil {
return err
}
return orz.Ok(c, page)
}
// GetEvent 获取单个SSH登录事件
// GET /api/ssh-login/events/:id
func (h *SSHLoginHandler) GetEvent(c *echo.Context) error {
eventID := c.Param("id")
if eventID == "" {
return orz.NewError(400, "事件ID不能为空")
}
ctx := c.Request().Context()
event, exists, err := h.service.SSHLoginEventRepo.FindByIdExists(ctx, eventID)
if err != nil {
h.logger.Error("获取SSH登录事件失败", zap.Error(err))
return orz.NewError(500, "获取事件失败")
}
if !exists {
return orz.NewError(404, "事件不存在")
}
return orz.Ok(c, event)
}
// DeleteEvents 删除探针的所有SSH登录事件
// DELETE /api/agents/:id/ssh-login/events
func (h *SSHLoginHandler) DeleteEvents(c *echo.Context) error {
agentID := c.Param("id")
ctx := c.Request().Context()
if err := h.service.DeleteEventsByAgentID(ctx, agentID); err != nil {
h.logger.Error("删除SSH登录事件失败", zap.Error(err))
return orz.NewError(500, "删除失败")
}
return orz.Ok(c, orz.Map{})
}