chore: 初始化仓库基线(AGENTS.md、git 规范、敏感文件排除)
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"silk-server-go/internal/middleware"
|
||||
"silk-server-go/internal/model"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// RegisterAlarmRoutes 注册告警路由
|
||||
func RegisterAlarmRoutes(rg *gin.RouterGroup, db *gorm.DB) {
|
||||
rg.GET("/alarms", middleware.RequirePermission(db, "alarm:read"), listAlarms(db))
|
||||
rg.GET("/alarms/:id", middleware.RequirePermission(db, "alarm:read"), getAlarm(db))
|
||||
rg.POST("/alarms/:id/ack", middleware.RequirePermission(db, "alarm:ack"), ackAlarm(db))
|
||||
rg.POST("/alarms/:id/resolve", middleware.RequirePermission(db, "alarm:ack"), resolveAlarm(db))
|
||||
}
|
||||
|
||||
// listAlarms 告警列表(query: openOnly,默认上限500,按 triggeredAt DESC)
|
||||
func listAlarms(db *gorm.DB) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
limit := 500
|
||||
q := db.Model(&model.Alarm{}).Order("triggered_at DESC").Limit(limit)
|
||||
if c.Query("openOnly") == "true" {
|
||||
q = q.Where("open = true")
|
||||
}
|
||||
var alarms []model.Alarm
|
||||
q.Find(&alarms)
|
||||
c.JSON(http.StatusOK, alarms)
|
||||
}
|
||||
}
|
||||
|
||||
// getAlarm 告警详情
|
||||
func getAlarm(db *gorm.DB) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var alarm model.Alarm
|
||||
if db.Where("id = ?", id).First(&alarm).Error != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "alarm not found"})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, alarm)
|
||||
}
|
||||
}
|
||||
|
||||
// ackAlarm 确认告警(设置 acknowledged=true, acknowledgedAt=now)
|
||||
func ackAlarm(db *gorm.DB) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var alarm model.Alarm
|
||||
if db.Where("id = ?", id).First(&alarm).Error != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "alarm not found"})
|
||||
return
|
||||
}
|
||||
now := time.Now()
|
||||
db.Model(&model.Alarm{}).Where("id = ?", id).Updates(map[string]interface{}{
|
||||
"acknowledged": true,
|
||||
"acknowledged_at": now,
|
||||
})
|
||||
db.Where("id = ?", id).First(&alarm)
|
||||
c.JSON(http.StatusOK, alarm)
|
||||
}
|
||||
}
|
||||
|
||||
// resolveAlarm 解除告警(设置 open=false, resolvedAt=now)
|
||||
func resolveAlarm(db *gorm.DB) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var alarm model.Alarm
|
||||
if db.Where("id = ?", id).First(&alarm).Error != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "alarm not found"})
|
||||
return
|
||||
}
|
||||
now := time.Now()
|
||||
db.Model(&model.Alarm{}).Where("id = ?", id).Updates(map[string]interface{}{
|
||||
"open": false,
|
||||
"resolved_at": now,
|
||||
})
|
||||
db.Where("id = ?", id).First(&alarm)
|
||||
c.JSON(http.StatusOK, alarm)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user