Skip to main content
Glama
action.go4.63 kB
package event import ( "encoding/json" "fmt" "strings" "github.com/gin-gonic/gin" "github.com/weibaohui/k8m/internal/dao" "github.com/weibaohui/k8m/pkg/comm/utils" "github.com/weibaohui/k8m/pkg/comm/utils/amis" "github.com/weibaohui/k8m/pkg/eventhandler/worker" "github.com/weibaohui/k8m/pkg/models" "gorm.io/gorm" ) // AdminEventController 事件转发配置管理控制器 // 负责事件配置的列表、保存、删除、快速启用/禁用等操作 type AdminEventController struct{} // RegisterAdminEventRoutes 注册事件配置管理相关路由 // 路由前缀:/admin/event func RegisterAdminEventRoutes(admin *gin.RouterGroup) { ctrl := &AdminEventController{} admin.GET("/event/list", ctrl.List) admin.POST("/event/save", ctrl.Save) admin.POST("/event/delete/:ids", ctrl.Delete) admin.POST("/event/save/id/:id/status/:enabled", ctrl.QuickSave) } // List 获取事件配置列表 // @Summary 获取事件配置列表 // @Security BearerAuth // @Success 200 {object} string // @Router /admin/event/list [get] func (s *AdminEventController) List(c *gin.Context) { params := dao.BuildParams(c) m := &models.K8sEventConfig{} items, total, err := m.List(params, func(db *gorm.DB) *gorm.DB { return db.Order("id desc") }) if err != nil { amis.WriteJsonError(c, err) return } amis.WriteJsonListWithTotal(c, total, items) } // Save 保存或更新事件配置 // @Summary 保存事件配置 // @Security BearerAuth // @Success 200 {object} string // @Router /admin/event/save [post] func (s *AdminEventController) Save(c *gin.Context) { params := dao.BuildParams(c) m := models.K8sEventConfig{} err := c.ShouldBindJSON(&m) if err != nil { amis.WriteJsonError(c, err) return } // 验证AI总结配置 if m.AIEnabled { if len(m.AIPromptTemplate) > 2000 { amis.WriteJsonError(c, fmt.Errorf("AI提示词模板长度不能超过2000个字符")) return } if strings.TrimSpace(m.AIPromptTemplate) != "" { if strings.Contains(m.AIPromptTemplate, "<script>") || strings.Contains(m.AIPromptTemplate, "javascript:") { amis.WriteJsonError(c, fmt.Errorf("AI提示词模板包含不安全的内容")) return } } } // 保存webhook名称快照 receiver := models.WebhookReceiver{} if names, nErr := receiver.GetNamesByIds(m.Webhooks); nErr == nil { m.WebhookNames = strings.Join(names, ",") } else { amis.WriteJsonError(c, nErr) return } // 规范化规则字段:将以逗号分隔的字符串转换为JSON数组字符串 normalize := func(v string) string { t := strings.TrimSpace(v) if t == "" { return "" } if strings.HasPrefix(t, "[") { return t } parts := strings.Split(t, ",") arr := make([]string, 0, len(parts)) for _, p := range parts { p = strings.TrimSpace(p) if p != "" { arr = append(arr, p) } } b, _ := json.Marshal(arr) return string(b) } m.RuleNamespaces = normalize(m.RuleNamespaces) m.RuleNames = normalize(m.RuleNames) m.RuleReasons = normalize(m.RuleReasons) err = m.Save(params) if err != nil { amis.WriteJsonError(c, err) return } // 保存成功后,通知事件处理Worker刷新配置,立即生效 if w := worker.Instance(); w != nil { w.UpdateConfig() } amis.WriteJsonOK(c) } // Delete 删除事件配置 // @Summary 删除事件配置 // @Security BearerAuth // @Param ids path string true "事件配置ID,多个用逗号分隔" // @Success 200 {object} string // @Router /admin/event/delete/{ids} [post] func (s *AdminEventController) Delete(c *gin.Context) { ids := c.Param("ids") params := dao.BuildParams(c) m := &models.K8sEventConfig{} err := m.Delete(params, ids) if err != nil { amis.WriteJsonError(c, err) return } // 删除成功后刷新Worker配置 if w := worker.Instance(); w != nil { w.UpdateConfig() } amis.WriteJsonOK(c) } // QuickSave 快速更新事件配置启用状态 // @Summary 快速更新事件配置状态 // @Security BearerAuth // @Param id path int true "事件配置ID" // @Param enabled path string true "状态,例如:true、false" // @Success 200 {object} string // @Router /admin/event/save/id/{id}/status/{enabled} [post] func (s *AdminEventController) QuickSave(c *gin.Context) { id := c.Param("id") enabled := c.Param("enabled") var entity models.K8sEventConfig entity.ID = utils.ToUInt(id) entity.Enabled = enabled == "true" err := dao.DB().Model(&entity).Select("enabled").Updates(entity).Error if err != nil { amis.WriteJsonError(c, err) return } // 快速启用/禁用后刷新Worker配置 if w := worker.Instance(); w != nil { w.UpdateConfig() } amis.WriteJsonOK(c) }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/weibaohui/k8m'

If you have feedback or need assistance with the MCP directory API, please join our Discord server