From ccac6e05c5e13db874aa51f0d2cfadc8346d70f0 Mon Sep 17 00:00:00 2001 From: gongna <2036479155@qq.com> Date: Mon, 22 Aug 2022 00:49:38 +0800 Subject: [PATCH 1/5] add http api for nodes --- pkg/admin/router/nodes.go | 142 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 pkg/admin/router/nodes.go diff --git a/pkg/admin/router/nodes.go b/pkg/admin/router/nodes.go new file mode 100644 index 00000000..d722ccd7 --- /dev/null +++ b/pkg/admin/router/nodes.go @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package router + +import ( + "context" + "net/http" +) + +import ( + "github.com/gin-gonic/gin" +) + +import ( + "github.com/arana-db/arana/pkg/admin" + "github.com/arana-db/arana/pkg/boot" + "github.com/arana-db/arana/pkg/config" +) + +func init() { + admin.Register(func(router gin.IRoutes) { + router.GET("/tenants/:tenant/nodes", ListNodes) + router.POST("/tenants/:tenant/nodes", CreateNode) + router.GET("/tenants/:tenant/nodes/:node", GetNode) + router.PUT("/tenants/:tenant/nodes/:node", UpdateNode) + router.DELETE("/tenants/:tenant/nodes/:node", RemoveNode) + }) +} + +func ListNodes(c *gin.Context) { + service := admin.GetService(c) + tenantName := c.Param("tenant") + clusters, err := service.ListClusters(context.Background(), tenantName) + if err != nil { + _ = c.Error(err) + return + } + var data []string + for _, cluster := range clusters { + groups, err := service.ListGroups(context.Background(), cluster) + if err != nil { + _ = c.Error(err) + return + } + for _, group := range groups { + temp, err := service.ListNodes(context.Background(), cluster, group) + if err != nil { + _ = c.Error(err) + return + } else { + data = append(data, temp...) + } + } + } + c.JSON(http.StatusOK, data) +} + +func GetNode(c *gin.Context) { + service := admin.GetService(c) + tenant := c.Param("tenant") + node := c.Param("node") + clusters, err := service.ListClusters(context.Background(), tenant) + if err != nil { + _ = c.Error(err) + return + } + var data *config.Node + for _, cluster := range clusters { + groups, err := service.ListGroups(context.Background(), cluster) + if err != nil { + _ = c.Error(err) + return + } + for _, group := range groups { + data, err = service.GetNode(context.Background(), cluster, group, node) + if err != nil { + _ = c.Error(err) + return + } + } + } + c.JSON(http.StatusOK, data) +} + +func CreateNode(c *gin.Context) { + service := admin.GetService(c) + tenant := c.Param("tenant") + var node *boot.NodeBody + if err := c.ShouldBindJSON(&node); err == nil { + err := service.UpsertNode(context.Background(), tenant, "", node) + if err != nil { + _ = c.Error(err) + return + } + c.JSON(http.StatusOK, nil) + } else { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + } +} + +func UpdateNode(c *gin.Context) { + service := admin.GetService(c) + tenant := c.Param("tenant") + node := c.Param("node") + var nodeBody *boot.NodeBody + if err := c.ShouldBindJSON(&nodeBody); err == nil { + err := service.UpsertNode(context.Background(), tenant, node, nodeBody) + if err != nil { + _ = c.Error(err) + return + } + c.JSON(http.StatusOK, nil) + } else { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + } +} + +func RemoveNode(c *gin.Context) { + service := admin.GetService(c) + tenant := c.Param("tenant") + node := c.Param("node") + err := service.RemoveNode(context.Background(), tenant, node) + if err != nil { + _ = c.Error(err) + return + } + c.JSON(http.StatusNoContent, nil) +} From b011133b2f05806c2023d6c75864ad374d8f3663 Mon Sep 17 00:00:00 2001 From: gongna <2036479155@qq.com> Date: Mon, 22 Aug 2022 19:58:56 +0800 Subject: [PATCH 2/5] fix:bug --- pkg/admin/router/nodes.go | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/pkg/admin/router/nodes.go b/pkg/admin/router/nodes.go index d722ccd7..1ec2976e 100644 --- a/pkg/admin/router/nodes.go +++ b/pkg/admin/router/nodes.go @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package router import ( - "context" "net/http" ) @@ -33,6 +33,7 @@ import ( func init() { admin.Register(func(router gin.IRoutes) { + router.GET("/tenants/:tenant/nodes", ListNodes) router.POST("/tenants/:tenant/nodes", CreateNode) router.GET("/tenants/:tenant/nodes/:node", GetNode) @@ -44,23 +45,23 @@ func init() { func ListNodes(c *gin.Context) { service := admin.GetService(c) tenantName := c.Param("tenant") - clusters, err := service.ListClusters(context.Background(), tenantName) + clusters, err := service.ListClusters(c, tenantName) if err != nil { _ = c.Error(err) return } var data []string for _, cluster := range clusters { - groups, err := service.ListGroups(context.Background(), cluster) + groups, err := service.ListGroups(c, cluster) if err != nil { _ = c.Error(err) - return + continue } for _, group := range groups { - temp, err := service.ListNodes(context.Background(), cluster, group) + temp, err := service.ListNodes(c, cluster, group) if err != nil { _ = c.Error(err) - return + continue } else { data = append(data, temp...) } @@ -73,20 +74,20 @@ func GetNode(c *gin.Context) { service := admin.GetService(c) tenant := c.Param("tenant") node := c.Param("node") - clusters, err := service.ListClusters(context.Background(), tenant) + clusters, err := service.ListClusters(c, tenant) if err != nil { _ = c.Error(err) return } var data *config.Node for _, cluster := range clusters { - groups, err := service.ListGroups(context.Background(), cluster) + groups, err := service.ListGroups(c, cluster) if err != nil { _ = c.Error(err) return } for _, group := range groups { - data, err = service.GetNode(context.Background(), cluster, group, node) + data, err = service.GetNode(c, cluster, group, node) if err != nil { _ = c.Error(err) return @@ -101,7 +102,7 @@ func CreateNode(c *gin.Context) { tenant := c.Param("tenant") var node *boot.NodeBody if err := c.ShouldBindJSON(&node); err == nil { - err := service.UpsertNode(context.Background(), tenant, "", node) + err := service.UpsertNode(c, tenant, "", node) if err != nil { _ = c.Error(err) return @@ -118,7 +119,7 @@ func UpdateNode(c *gin.Context) { node := c.Param("node") var nodeBody *boot.NodeBody if err := c.ShouldBindJSON(&nodeBody); err == nil { - err := service.UpsertNode(context.Background(), tenant, node, nodeBody) + err := service.UpsertNode(c, tenant, node, nodeBody) if err != nil { _ = c.Error(err) return @@ -133,7 +134,7 @@ func RemoveNode(c *gin.Context) { service := admin.GetService(c) tenant := c.Param("tenant") node := c.Param("node") - err := service.RemoveNode(context.Background(), tenant, node) + err := service.RemoveNode(c, tenant, node) if err != nil { _ = c.Error(err) return From 44aecd165d556003908fe4dbd5bb612041b8f0c2 Mon Sep 17 00:00:00 2001 From: gongna <2036479155@qq.com> Date: Mon, 22 Aug 2022 20:20:40 +0800 Subject: [PATCH 3/5] fix:bug --- pkg/admin/router/nodes.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/admin/router/nodes.go b/pkg/admin/router/nodes.go index 1ec2976e..a51a9fe5 100644 --- a/pkg/admin/router/nodes.go +++ b/pkg/admin/router/nodes.go @@ -33,12 +33,16 @@ import ( func init() { admin.Register(func(router gin.IRoutes) { + if e, ok := router.(*gin.RouterGroup); ok { + routerGroup := e.Group("/") + routerGroup.GET("/tenants/:tenant/nodes", ListNodes) + routerGroup.POST("/tenants/:tenant/nodes", CreateNode) + routerGroup.GET("/tenants/:tenant/nodes/:node", GetNode) + routerGroup.PUT("/tenants/:tenant/nodes/:node", UpdateNode) + routerGroup.DELETE("/tenants/:tenant/nodes/:node", RemoveNode) + + } - router.GET("/tenants/:tenant/nodes", ListNodes) - router.POST("/tenants/:tenant/nodes", CreateNode) - router.GET("/tenants/:tenant/nodes/:node", GetNode) - router.PUT("/tenants/:tenant/nodes/:node", UpdateNode) - router.DELETE("/tenants/:tenant/nodes/:node", RemoveNode) }) } From 9e3a10197e084f1c81a54b50176acd271282e75d Mon Sep 17 00:00:00 2001 From: gongna <2036479155@qq.com> Date: Mon, 22 Aug 2022 20:57:13 +0800 Subject: [PATCH 4/5] fix:bug --- pkg/admin/router/nodes.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/admin/router/nodes.go b/pkg/admin/router/nodes.go index a51a9fe5..260e2aca 100644 --- a/pkg/admin/router/nodes.go +++ b/pkg/admin/router/nodes.go @@ -34,6 +34,7 @@ import ( func init() { admin.Register(func(router gin.IRoutes) { if e, ok := router.(*gin.RouterGroup); ok { + routerGroup := e.Group("/") routerGroup.GET("/tenants/:tenant/nodes", ListNodes) routerGroup.POST("/tenants/:tenant/nodes", CreateNode) @@ -94,7 +95,7 @@ func GetNode(c *gin.Context) { data, err = service.GetNode(c, cluster, group, node) if err != nil { _ = c.Error(err) - return + continue } } } From bc8578902b4761f9a061757f0ff5731b6ebf8d1b Mon Sep 17 00:00:00 2001 From: gongna <2036479155@qq.com> Date: Mon, 22 Aug 2022 21:01:59 +0800 Subject: [PATCH 5/5] fix:bug --- pkg/admin/router/nodes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/admin/router/nodes.go b/pkg/admin/router/nodes.go index 260e2aca..a4de7f98 100644 --- a/pkg/admin/router/nodes.go +++ b/pkg/admin/router/nodes.go @@ -89,7 +89,7 @@ func GetNode(c *gin.Context) { groups, err := service.ListGroups(c, cluster) if err != nil { _ = c.Error(err) - return + continue } for _, group := range groups { data, err = service.GetNode(c, cluster, group, node)