diff --git a/src/models/collect_rule.go b/src/models/collect_rule.go deleted file mode 100644 index e35d557e..00000000 --- a/src/models/collect_rule.go +++ /dev/null @@ -1,212 +0,0 @@ -package models - -import ( - "encoding/json" - "strings" - "time" - - "github.com/pkg/errors" - "github.com/toolkits/pkg/str" -) - -type CollectRule struct { - Id int64 `json:"id"` - GroupId int64 `json:"group_id"` - Cluster string `json:"cluster"` - TargetIdents string `json:"-"` - TargetIdentsJSON []string `json:"target_idents" gorm:"-"` - TargetTags string `json:"-"` - TargetTagsJSON []string `json:"target_tags" gorm:"-"` - Name string `json:"name"` - Note string `json:"note"` - Step int `json:"step"` - Type string `json:"type"` - Data string `json:"data"` - AppendTags string `json:"-"` - AppendTagsJSON []string `json:"append_tags" gorm:"-"` - CreateAt int64 `json:"create_at"` - CreateBy string `json:"create_by"` - UpdateAt int64 `json:"update_at"` - UpdateBy string `json:"update_by"` -} - -type PortConfig struct { - Port int `json:"port"` - Protocol string `json:"protocol"` // tcp or udp - Timeout int `json:"timeout"` // second -} - -type ProcConfig struct { - Method string `json:"method"` - Param string `json:"param"` -} - -type ScriptConfig struct { - Path string `json:"path"` - Params string `json:"params"` - Stdin string `json:"stdin"` - Env map[string]string `json:"env"` - Timeout int `json:"timeout"` // second -} - -type LogConfig struct { - FilePath string `json:"file_path"` - Func string `json:"func"` - Pattern string `json:"pattern"` - TagsPattern map[string]string `json:"tags_pattern"` -} - -func (cr *CollectRule) TableName() string { - return "collect_rule" -} - -func (cr *CollectRule) FE2DB() { - cr.TargetIdents = strings.Join(cr.TargetIdentsJSON, " ") - cr.TargetTags = strings.Join(cr.TargetTagsJSON, " ") - cr.AppendTags = strings.Join(cr.AppendTagsJSON, " ") -} - -func (cr *CollectRule) DB2FE() { - cr.TargetIdentsJSON = strings.Fields(cr.TargetIdents) - cr.TargetTagsJSON = strings.Fields(cr.TargetTags) - cr.AppendTagsJSON = strings.Fields(cr.AppendTags) -} - -func (cr *CollectRule) Verify() error { - if str.Dangerous(cr.Name) { - return errors.New("Name has invalid characters") - } - - if cr.TargetIdents == "" && cr.TargetTags == "" { - return errors.New("target_idents and target_tags are both blank") - } - - if cr.Step <= 0 { - cr.Step = 15 - } - - if cr.Cluster == "" { - return errors.New("cluster is blank") - } - - switch cr.Type { - case "port": - var conf PortConfig - err := json.Unmarshal([]byte(cr.Data), &conf) - if err != nil { - return err - } - case "script": - var conf ScriptConfig - err := json.Unmarshal([]byte(cr.Data), &conf) - if err != nil { - return err - } - case "log": - var conf LogConfig - err := json.Unmarshal([]byte(cr.Data), &conf) - if err != nil { - return err - } - case "process": - var conf ProcConfig - err := json.Unmarshal([]byte(cr.Data), &conf) - if err != nil { - return err - } - default: - return errors.New("unsupported type") - } - - return nil -} - -func CollectRuleDels(ids []int64, busiGroupId int64) error { - return DB().Where("id in ? and group_id=?", ids, busiGroupId).Delete(&CollectRule{}).Error -} - -func CollectRuleExists(where string, args ...interface{}) (bool, error) { - return Exists(DB().Model(&CollectRule{}).Where(where, args...)) -} - -func CollectRuleGets(groupId int64, typ string) ([]CollectRule, error) { - session := DB().Where("group_id=?", groupId).Order("name") - - if typ != "" { - session = session.Where("type = ?", typ) - } - - var lst []CollectRule - err := session.Find(&lst).Error - if err == nil { - for i := 0; i < len(lst); i++ { - lst[i].DB2FE() - } - } - - return lst, err -} - -func CollectRuleGet(where string, args ...interface{}) (*CollectRule, error) { - var lst []*CollectRule - err := DB().Where(where, args...).Find(&lst).Error - if err != nil { - return nil, err - } - - if len(lst) == 0 { - return nil, nil - } - - lst[0].DB2FE() - - return lst[0], nil -} - -func CollectRuleGetById(id int64) (*CollectRule, error) { - return CollectRuleGet("id=?", id) -} - -func (cr *CollectRule) Add() error { - if err := cr.Verify(); err != nil { - return err - } - - exists, err := CollectRuleExists("group_id=? and type=? and name=? and cluster=?", cr.GroupId, cr.Type, cr.Name, cr.Cluster) - if err != nil { - return err - } - - if exists { - return errors.New("CollectRule already exists") - } - - now := time.Now().Unix() - cr.CreateAt = now - cr.UpdateAt = now - - return Insert(cr) -} - -func (cr *CollectRule) Update(crf CollectRule) error { - if cr.Name != crf.Name { - exists, err := CollectRuleExists("group_id=? and type=? and name=? and id <> ? and cluster=?", cr.GroupId, cr.Type, crf.Name, cr.Id, cr.Cluster) - if err != nil { - return err - } - - if exists { - return errors.New("CollectRule already exists") - } - } - - crf.FE2DB() - crf.Id = cr.Id - crf.GroupId = cr.GroupId - crf.Type = cr.Type - crf.CreateAt = cr.CreateAt - crf.CreateBy = cr.CreateBy - crf.UpdateAt = time.Now().Unix() - - return DB().Model(cr).Select("*").Updates(crf).Error -} diff --git a/src/webapi/router/router.go b/src/webapi/router/router.go index 43127bb5..81b0e0b4 100644 --- a/src/webapi/router/router.go +++ b/src/webapi/router/router.go @@ -209,17 +209,6 @@ func configRoute(r *gin.Engine, version string) { pages.PUT("/busi-group/:id/alert-subscribes", jwtAuth(), user(), perm("/alert-subscribes/put"), bgrw(), alertSubscribePut) pages.DELETE("/busi-group/:id/alert-subscribes", jwtAuth(), user(), perm("/alert-subscribes/del"), bgrw(), alertSubscribeDel) - // pages.GET("/busi-group/:id/collect-rules", jwtAuth(), user(), bgro(), collectRuleGets) - // pages.POST("/busi-group/:id/collect-rules", jwtAuth(), user(), bgrw(), collectRuleAdd) - // pages.DELETE("/busi-group/:id/collect-rules", jwtAuth(), user(), bgrw(), collectRuleDel) - // pages.GET("/busi-group/:id/collect-rule/:crid", jwtAuth(), user(), bgro(), collectRuleGet) - // pages.PUT("/busi-group/:id/collect-rule/:crid", jwtAuth(), user(), bgrw(), collectRulePut) - - // card逻辑fe改造完之后,这三个方法可以删除 - pages.GET("/busi-group/:id/alert-his-events", jwtAuth(), user(), bgro(), alertHisEventGets) - pages.GET("/busi-group/:id/alert-cur-events", jwtAuth(), user(), bgro(), alertCurEventGets) - pages.DELETE("/busi-group/:id/alert-cur-events", jwtAuth(), user(), perm("/alert-cur-events/del"), alertCurEventDel) - if config.C.AnonymousAccess.AlertDetail { pages.GET("/alert-cur-event/:eid", alertCurEventGet) pages.GET("/alert-his-event/:eid", alertHisEventGet) diff --git a/src/webapi/router/router_alert_cur_event.go b/src/webapi/router/router_alert_cur_event.go index d146167c..ff677859 100644 --- a/src/webapi/router/router_alert_cur_event.go +++ b/src/webapi/router/router_alert_cur_event.go @@ -139,32 +139,6 @@ func alertCurEventsList(c *gin.Context) { }, nil) } -func alertCurEventGets(c *gin.Context) { - stime, etime := getTimeRange(c) - - severity := ginx.QueryInt(c, "severity", -1) - query := ginx.QueryStr(c, "query", "") - limit := ginx.QueryInt(c, "limit", 20) - busiGroupId := ginx.UrlParamInt64(c, "id") - clusters := queryClusters(c) - - total, err := models.AlertCurEventTotal(busiGroupId, stime, etime, severity, clusters, query) - ginx.Dangerous(err) - - list, err := models.AlertCurEventGets(busiGroupId, stime, etime, severity, clusters, query, limit, ginx.Offset(c, limit)) - ginx.Dangerous(err) - - cache := make(map[int64]*models.UserGroup) - for i := 0; i < len(list); i++ { - list[i].FillNotifyGroups(cache) - } - - ginx.NewRender(c).Data(gin.H{ - "list": list, - "total": total, - }, nil) -} - func alertCurEventDel(c *gin.Context) { var f idsForm ginx.BindJSON(c, &f) diff --git a/src/webapi/router/router_alert_his_event.go b/src/webapi/router/router_alert_his_event.go index 856af3f0..ba7c38e9 100644 --- a/src/webapi/router/router_alert_his_event.go +++ b/src/webapi/router/router_alert_his_event.go @@ -52,33 +52,6 @@ func alertHisEventsList(c *gin.Context) { }, nil) } -func alertHisEventGets(c *gin.Context) { - stime, etime := getTimeRange(c) - - severity := ginx.QueryInt(c, "severity", -1) - recovered := ginx.QueryInt(c, "is_recovered", -1) - query := ginx.QueryStr(c, "query", "") - limit := ginx.QueryInt(c, "limit", 20) - busiGroupId := ginx.UrlParamInt64(c, "id") - clusters := queryClusters(c) - - total, err := models.AlertHisEventTotal(busiGroupId, stime, etime, severity, recovered, clusters, query) - ginx.Dangerous(err) - - list, err := models.AlertHisEventGets(busiGroupId, stime, etime, severity, recovered, clusters, query, limit, ginx.Offset(c, limit)) - ginx.Dangerous(err) - - cache := make(map[int64]*models.UserGroup) - for i := 0; i < len(list); i++ { - list[i].FillNotifyGroups(cache) - } - - ginx.NewRender(c).Data(gin.H{ - "list": list, - "total": total, - }, nil) -} - func alertHisEventGet(c *gin.Context) { eid := ginx.UrlParamInt64(c, "eid") event, err := models.AlertHisEventGetById(eid) diff --git a/src/webapi/router/router_collect_rule.go b/src/webapi/router/router_collect_rule.go deleted file mode 100644 index fb485f79..00000000 --- a/src/webapi/router/router_collect_rule.go +++ /dev/null @@ -1,79 +0,0 @@ -package router - -// import ( -// "net/http" - -// "github.com/gin-gonic/gin" -// "github.com/toolkits/pkg/ginx" - -// "github.com/didi/nightingale/v5/src/models" -// ) - -// func collectRuleGets(c *gin.Context) { -// busiGroupId := ginx.UrlParamInt64(c, "id") -// crs, err := models.CollectRuleGets(busiGroupId, ginx.QueryStr(c, "type", "")) -// ginx.NewRender(c).Data(crs, err) -// } - -// func collectRuleAdd(c *gin.Context) { -// var lst []models.CollectRule -// ginx.BindJSON(c, &lst) - -// count := len(lst) -// if count == 0 { -// ginx.Bomb(http.StatusBadRequest, "input json is empty") -// } - -// username := c.MustGet("username").(string) -// bgid := ginx.UrlParamInt64(c, "id") - -// // collect rule name -> error string -// reterr := make(map[string]string) -// for i := 0; i < count; i++ { -// lst[i].Id = 0 -// lst[i].GroupId = bgid -// lst[i].CreateBy = username -// lst[i].UpdateBy = username -// lst[i].FE2DB() - -// if err := lst[i].Add(); err != nil { -// reterr[lst[i].Name] = err.Error() -// } else { -// reterr[lst[i].Name] = "" -// } -// } - -// ginx.NewRender(c).Data(reterr, nil) -// } - -// func collectRuleDel(c *gin.Context) { -// var f idsForm -// ginx.BindJSON(c, &f) -// f.Verify() - -// // param(busiGroupId) for protect -// ginx.NewRender(c).Message(models.CollectRuleDels(f.Ids, ginx.UrlParamInt64(c, "id"))) -// } - -// func collectRuleGet(c *gin.Context) { -// crid := ginx.UrlParamInt64(c, "crid") -// cr, err := models.CollectRuleGetById(crid) -// ginx.NewRender(c).Data(cr, err) -// } - -// func collectRulePut(c *gin.Context) { -// var f models.CollectRule -// ginx.BindJSON(c, &f) - -// crid := ginx.UrlParamInt64(c, "crid") -// cr, err := models.CollectRuleGetById(crid) -// ginx.Dangerous(err) - -// if cr == nil { -// ginx.NewRender(c, http.StatusNotFound).Message("No such CollectRule") -// return -// } - -// f.UpdateBy = c.MustGet("username").(string) -// ginx.NewRender(c).Message(cr.Update(f)) -// } diff --git a/src/webapi/router/router_mw.go b/src/webapi/router/router_mw.go index 840f9f78..2b6193ed 100644 --- a/src/webapi/router/router_mw.go +++ b/src/webapi/router/router_mw.go @@ -140,6 +140,19 @@ func bgrwCheck(c *gin.Context, bgid int64) { c.Set("busi_group", bg) } +func bgrwChecks(c *gin.Context, bgids []int64) { + set := make(map[int64]struct{}) + + for i := 0; i < len(bgids); i++ { + if _, has := set[bgids[i]]; has { + continue + } + + bgrwCheck(c, bgids[i]) + set[bgids[i]] = struct{}{} + } +} + func perm(operation string) gin.HandlerFunc { return func(c *gin.Context) { me := c.MustGet("user").(*models.User)