diff --git a/prometheus/server/db/db.go b/prometheus/server/db/db.go index de58a3efebc639df13f1e1ae438310397aea98a2..81d749e2cdc823b13d4fea56edb37552a52f0009 100644 --- a/prometheus/server/db/db.go +++ b/prometheus/server/db/db.go @@ -9,6 +9,7 @@ import ( "gorm.io/gorm/schema" "openeuler.org/PilotGo/prometheus-plugin/config" "openeuler.org/PilotGo/prometheus-plugin/global" + "openeuler.org/PilotGo/prometheus-plugin/httphandler/service" ) var Url string @@ -33,6 +34,8 @@ func MysqldbInit(conf *config.MysqlDBInfo) error { return err } + global.GlobalDB.AutoMigrate(&service.PrometheusTarget{}) + return nil } diff --git a/prometheus/server/httphandler/query.go b/prometheus/server/httphandler/query.go new file mode 100644 index 0000000000000000000000000000000000000000..d071d27ae2cb8b72c27f87ed0ea1f951e221e940 --- /dev/null +++ b/prometheus/server/httphandler/query.go @@ -0,0 +1,43 @@ +package httphandler + +import ( + "fmt" + "net/http/httputil" + "net/url" + + "github.com/gin-gonic/gin" +) + +func Query(c *gin.Context) { + remote := c.GetString("query") + if remote == "" { + fmt.Println("get reverse dest failed!") + return + } + url, err := url.Parse(remote) + if err != nil { + return + } + + proxy := httputil.NewSingleHostReverseProxy(url) + + c.Request.URL.Path = "api/v1/query" //请求API + proxy.ServeHTTP(c.Writer, c.Request) +} + +func QueryRange(c *gin.Context) { + remote := c.GetString("query_range") + if remote == "" { + fmt.Println("get reverse dest failed!") + return + } + url, err := url.Parse(remote) + if err != nil { + return + } + + proxy := httputil.NewSingleHostReverseProxy(url) + + c.Request.URL.Path = "api/v1/query_range" //请求API + proxy.ServeHTTP(c.Writer, c.Request) +} diff --git a/prometheus/server/httphandler/service/target.go b/prometheus/server/httphandler/service/target.go new file mode 100644 index 0000000000000000000000000000000000000000..6101acde706652e8aeab80d78843b7beb8df278e --- /dev/null +++ b/prometheus/server/httphandler/service/target.go @@ -0,0 +1,23 @@ +package service + +import "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"` +} + +func GetPrometheusTarget() ([]string, error) { + var ips []PrometheusTarget + err := global.GlobalDB.Order("id desc").Find(&ips).Error + if err != nil { + return nil, err + } + var targets []string + for _, ip := range ips { + target := ip.TargetIP + ":9100" + targets = append(targets, target) + } + return targets, nil +} diff --git a/prometheus/server/httphandler/target.go b/prometheus/server/httphandler/target.go new file mode 100644 index 0000000000000000000000000000000000000000..e01535a7cf0b946e5510b3ba181440c9a2865d9f --- /dev/null +++ b/prometheus/server/httphandler/target.go @@ -0,0 +1,50 @@ +package httphandler + +import ( + "fmt" + "net/http" + "net/http/httputil" + "net/url" + + "github.com/gin-gonic/gin" + "openeuler.org/PilotGo/prometheus-plugin/httphandler/service" +) + +func DBTargets(c *gin.Context) { + targets, err := service.GetPrometheusTarget() + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusBadRequest, + "data": nil, + "msg": err.Error()}) + return + } + + objs := []PrometheusObject{ + { + Targets: targets, + }, + } + c.JSON(http.StatusOK, objs) +} + +func PrometheusAPITargets(c *gin.Context) { + remote := c.GetString("targets") + if remote == "" { + fmt.Println("get reverse dest failed!") + return + } + url, err := url.Parse(remote) + if err != nil { + return + } + + proxy := httputil.NewSingleHostReverseProxy(url) + + c.Request.URL.Path = "api/v1/targets" //请求API + proxy.ServeHTTP(c.Writer, c.Request) +} + +type PrometheusObject struct { + Targets []string `json:"targets"` +} diff --git a/prometheus/server/router/router.go b/prometheus/server/router/router.go index b77e32f342cd4b25ccd2ef3f5e1eec9d79df91fe..823a7c6bd8791af3dca34080afaae0be36a9019a 100644 --- a/prometheus/server/router/router.go +++ b/prometheus/server/router/router.go @@ -1,14 +1,10 @@ package router import ( - "fmt" - "net/http" - "net/http/httputil" - "net/url" - "gitee.com/openeuler/PilotGo-plugins/sdk/logger" "github.com/gin-gonic/gin" "openeuler.org/PilotGo/prometheus-plugin/global" + "openeuler.org/PilotGo/prometheus-plugin/httphandler" ) func InitRouter() *gin.Engine { @@ -27,68 +23,21 @@ func RegisterAPIs(router *gin.Engine) { { pg.GET("/query", func(c *gin.Context) { c.Set("query", global.GlobalClient.PluginInfo.ReverseDest) - Query(c) + httphandler.Query(c) }) pg.GET("/query_range", func(c *gin.Context) { c.Set("query_range", global.GlobalClient.PluginInfo.ReverseDest) - QueryRange(c) + httphandler.QueryRange(c) }) pg.GET("/targets", func(c *gin.Context) { c.Set("targets", global.GlobalClient.PluginInfo.ReverseDest) - Targets(c) + httphandler.PrometheusAPITargets(c) }) } - router.GET("/ping", func(c *gin.Context) { c.String(http.StatusOK, "pong") }) -} - -func Query(c *gin.Context) { - remote := c.GetString("query") - if remote == "" { - fmt.Println("get reverse dest failed!") - return - } - url, err := url.Parse(remote) - if err != nil { - return - } - - proxy := httputil.NewSingleHostReverseProxy(url) - - c.Request.URL.Path = "api/v1/query" //请求API - proxy.ServeHTTP(c.Writer, c.Request) -} - -func QueryRange(c *gin.Context) { - remote := c.GetString("query_range") - if remote == "" { - fmt.Println("get reverse dest failed!") - return - } - url, err := url.Parse(remote) - if err != nil { - return - } - - proxy := httputil.NewSingleHostReverseProxy(url) - - c.Request.URL.Path = "api/v1/query_range" //请求API - proxy.ServeHTTP(c.Writer, c.Request) -} -func Targets(c *gin.Context) { - remote := c.GetString("targets") - if remote == "" { - fmt.Println("get reverse dest failed!") - return - } - url, err := url.Parse(remote) - if err != nil { - return + target := router.Group("/plugin/" + global.GlobalClient.PluginInfo.Name) + { + target.GET("target", httphandler.DBTargets) } - - proxy := httputil.NewSingleHostReverseProxy(url) - - c.Request.URL.Path = "api/v1/targets" //请求API - proxy.ServeHTTP(c.Writer, c.Request) }