chore: 初始化仓库基线(AGENTS.md、git 规范、敏感文件排除)

This commit is contained in:
weijuesen
2026-08-10 22:30:53 +08:00
commit 84abf4454c
358 changed files with 75993 additions and 0 deletions
+85
View File
@@ -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)
}
}