diff --git a/prometheus/server/httphandler/service/target.go b/prometheus/server/httphandler/service/target.go index 6101acde706652e8aeab80d78843b7beb8df278e..dec4fe34f7e7c013cff752bef13ee3227958fcad 100644 --- a/prometheus/server/httphandler/service/target.go +++ b/prometheus/server/httphandler/service/target.go @@ -1,23 +1,55 @@ package service -import "openeuler.org/PilotGo/prometheus-plugin/global" +import ( + "errors" + + "openeuler.org/PilotGo/prometheus-plugin/global" +) type PrometheusTarget struct { ID uint `gorm:"primary_key;AUTO_INCREMENT" json:"id"` UUID string `json:"uuid"` TargetIP string `json:"targetIp"` + Port string `json:"port"` + ID_idx string `gorm:"index"` } func GetPrometheusTarget() ([]string, error) { var ips []PrometheusTarget - err := global.GlobalDB.Order("id desc").Find(&ips).Error + err := global.GlobalDB.Raw("SELECT * FROM prometheus_target ORDER BY id DESC").Scan(&ips).Error if err != nil { - return nil, err + return []string{}, err + } + + if len(ips) == 0 { + return []string{}, errors.New("ip targets is null") } var targets []string for _, ip := range ips { - target := ip.TargetIP + ":9100" + target := ip.TargetIP + ":" + ip.Port targets = append(targets, target) } return targets, nil } + +func AddPrometheusTarget(pt PrometheusTarget) error { + t := PrometheusTarget{ + UUID: pt.UUID, + TargetIP: pt.TargetIP, + Port: pt.Port, + } + err := global.GlobalDB.Save(&t).Error + if err != nil { + return err + } + return nil +} + +func DeletePrometheusTarget(pt PrometheusTarget) error { + var t PrometheusTarget + err := global.GlobalDB.Where("uuid = ?", pt.UUID).Unscoped().Delete(t).Error + if err != nil { + return err + } + return nil +} diff --git a/prometheus/server/httphandler/targetManager.go b/prometheus/server/httphandler/targetManager.go new file mode 100644 index 0000000000000000000000000000000000000000..74678a19dc3e6b7ec68086bb8e6757a8001b518b --- /dev/null +++ b/prometheus/server/httphandler/targetManager.go @@ -0,0 +1,56 @@ +package httphandler + +import ( + "net/http" + + "github.com/gin-gonic/gin" + "openeuler.org/PilotGo/prometheus-plugin/httphandler/service" +) + +// 将监控target添加到prometheus插件db +func AddPrometheusTarget(c *gin.Context) { + var target service.PrometheusTarget + if err := c.BindJSON(&target); err != nil { + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusBadRequest, + "data": nil, + "msg": err.Error()}) + return + } + err := service.AddPrometheusTarget(target) + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusBadRequest, + "data": nil, + "msg": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusOK, + "data": nil, + "msg": "添加成功"}) +} + +// 将监控target从prometheus插件db中删除 +func DeletePrometheusTarget(c *gin.Context) { + var target service.PrometheusTarget + if err := c.BindJSON(&target); err != nil { + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusBadRequest, + "data": nil, + "msg": err.Error()}) + return + } + err := service.DeletePrometheusTarget(target) + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusBadRequest, + "data": nil, + "msg": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusOK, + "data": nil, + "msg": "删除成功"}) +} diff --git a/prometheus/server/router/router.go b/prometheus/server/router/router.go index 9369e8bd030981ce50c3d2ad1983f573c1f7f5ec..d23851dd65f0f65b7007fc87a3ff81a63f692a47 100644 --- a/prometheus/server/router/router.go +++ b/prometheus/server/router/router.go @@ -19,25 +19,34 @@ func InitRouter() *gin.Engine { func RegisterAPIs(router *gin.Engine) { global.GlobalClient.RegisterHandlers(router) - pg := router.Group("/plugin/" + global.GlobalClient.PluginInfo.Name + "/api/v1") + // prometheus配置文件http方式获取监控target + DBTarget := router.Group("/plugin/" + global.GlobalClient.PluginInfo.Name) { - pg.GET("/query", func(c *gin.Context) { + DBTarget.GET("target", httphandler.DBTargets) + } + + // prometheus api代理 + prometheus := router.Group("/plugin/" + global.GlobalClient.PluginInfo.Name + "/api/v1") + { + prometheus.GET("/query", func(c *gin.Context) { c.Set("query", global.GlobalClient.PluginInfo.ReverseDest) httphandler.Query(c) }) - pg.GET("/query_range", func(c *gin.Context) { + prometheus.GET("/query_range", func(c *gin.Context) { c.Set("query_range", global.GlobalClient.PluginInfo.ReverseDest) httphandler.QueryRange(c) }) - pg.GET("/targets", func(c *gin.Context) { + prometheus.GET("/targets", func(c *gin.Context) { c.Set("targets", global.GlobalClient.PluginInfo.ReverseDest) httphandler.PrometheusAPITargets(c) }) } - target := router.Group("/plugin/" + global.GlobalClient.PluginInfo.Name) + //prometheus target crud + targetManager := router.Group("/plugin/" + global.GlobalClient.PluginInfo.Name) { - target.GET("target", httphandler.DBTargets) + targetManager.POST("addTarget", httphandler.AddPrometheusTarget) + targetManager.DELETE("delTarget", httphandler.DeletePrometheusTarget) } }