Fix traffic backend, get and delete api methods (#1159)
diff --git a/Makefile b/Makefile
index c0f6157..5d86b21 100644
--- a/Makefile
+++ b/Makefile
@@ -100,8 +100,8 @@
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
#$(CONTROLLER_GEN) object:headerFile="./hack/boilerplate.go.txt" crd:allowDangerousTypes=true paths="./..."
-.PHONY: dubbo-admin-swagger
-dubbo-admin-swagger: swagger-install ## Generate dubbo-admin swagger docs.
+.PHONY: swagger
+swagger: swagger-install ## Generate dubbo-admin swagger docs.
$(SWAGGER) init --parseDependency -d cmd/admin,pkg/admin -o hack/swagger
@rm -f hack/swagger/docs.go hack/swagger/swagger.yaml
diff --git a/README.md b/README.md
index e58c3e7..c9c2737 100644
--- a/README.md
+++ b/README.md
@@ -73,7 +73,7 @@
### Swagger API
```shell
-make dubbo-admin-swagger #Generate dubbo-admin swagger docs in hack/swagger
+make swagger #Generate dubbo-admin swagger docs in hack/swagger
```
### 打包
diff --git a/hack/swagger/swagger.json b/hack/swagger/swagger.json
index a8b52ea..51b5000 100644
--- a/hack/swagger/swagger.json
+++ b/hack/swagger/swagger.json
@@ -95,6 +95,93 @@
}
}
},
+ "/api/{env}/metrics/cluster": {
+ "get": {
+ "description": "show cluster overview",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "metrics"
+ ],
+ "summary": "show cluster overview",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/model.ClusterMetricsRes"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/model.HTTPError"
+ }
+ }
+ }
+ }
+ },
+ "/api/{env}/metrics/flow": {
+ "get": {
+ "description": "show Prometheus collected metrics",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "metrics"
+ ],
+ "summary": "show Prometheus collected metrics",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/model.FlowMetricsRes"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/model.HTTPError"
+ }
+ }
+ }
+ }
+ },
+ "/api/{env}/metrics/metadata": {
+ "get": {
+ "description": "show metadata of the cluster, like dubbo versions, protocols, etc.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "metrics"
+ ],
+ "summary": "show metadata of the cluster, like dubbo versions, protocols, etc.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/model.Metadata"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/model.HTTPError"
+ }
+ }
+ }
+ }
+ },
"/api/{env}/mock/rule": {
"post": {
"description": "Create or update MockRule",
@@ -1488,13 +1575,11 @@
"summary": "get rule list",
"parameters": [
{
- "description": "rule",
- "name": "accesslog",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Accesslog"
- }
+ "type": "string",
+ "description": "application name",
+ "name": "application",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -1617,13 +1702,11 @@
"summary": "delete rule",
"parameters": [
{
- "description": "rule",
- "name": "accesslog",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Accesslog"
- }
+ "type": "string",
+ "description": "application name",
+ "name": "application",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -1633,12 +1716,6 @@
"type": "bool"
}
},
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/model.HTTPError"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -1663,13 +1740,25 @@
"summary": "get rule list",
"parameters": [
{
- "description": "rule",
- "name": "argument",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Argument"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -1792,13 +1881,25 @@
"summary": "delete rule",
"parameters": [
{
- "description": "rule",
- "name": "argument",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Argument"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -1808,12 +1909,6 @@
"type": "bool"
}
},
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/model.HTTPError"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -1838,13 +1933,11 @@
"summary": "get rule list",
"parameters": [
{
- "description": "rule",
- "name": "gray",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Gray"
- }
+ "type": "string",
+ "description": "application name",
+ "name": "application",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -1967,13 +2060,11 @@
"summary": "delete rule",
"parameters": [
{
- "description": "rule",
- "name": "gray",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Gray"
- }
+ "type": "string",
+ "description": "application name",
+ "name": "application",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -1983,12 +2074,6 @@
"type": "bool"
}
},
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/model.HTTPError"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -2013,13 +2098,25 @@
"summary": "get rule list",
"parameters": [
{
- "description": "rule",
- "name": "mock",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Mock"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2142,13 +2239,25 @@
"summary": "delete rule",
"parameters": [
{
- "description": "rule",
- "name": "mock",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Mock"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2188,13 +2297,25 @@
"summary": "get rule list",
"parameters": [
{
- "description": "rule",
- "name": "region",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Region"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2317,13 +2438,25 @@
"summary": "delete rule",
"parameters": [
{
- "description": "rule",
- "name": "region",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Region"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2363,13 +2496,25 @@
"summary": "get rule list",
"parameters": [
{
- "description": "rule",
- "name": "retry",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Retry"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2382,12 +2527,6 @@
}
}
},
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/model.HTTPError"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -2498,13 +2637,25 @@
"summary": "delete rule",
"parameters": [
{
- "description": "rule",
- "name": "retry",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Retry"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2514,12 +2665,6 @@
"type": "bool"
}
},
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/model.HTTPError"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -2544,13 +2689,25 @@
"summary": "get timeout rule list",
"parameters": [
{
- "description": "timeout rule",
- "name": "timeout",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Timeout"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2673,13 +2830,25 @@
"summary": "delete a new timeout rule",
"parameters": [
{
- "description": "timeout rule",
- "name": "timeout",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Timeout"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2689,12 +2858,6 @@
"type": "boolean"
}
},
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/model.HTTPError"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -2719,13 +2882,25 @@
"summary": "get rule list",
"parameters": [
{
- "description": "rule",
- "name": "weight",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Weight"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2848,13 +3023,25 @@
"summary": "delete rule",
"parameters": [
{
- "description": "rule",
- "name": "weight",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/model.Weight"
- }
+ "type": "string",
+ "description": "service name",
+ "name": "service",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service version",
+ "name": "version",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "service group",
+ "name": "group",
+ "in": "query",
+ "required": true
}
],
"responses": {
@@ -2864,12 +3051,6 @@
"type": "bool"
}
},
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/model.HTTPError"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -2878,6 +3059,29 @@
}
}
}
+ },
+ "/api/{env}/version": {
+ "get": {
+ "description": "show basic information of the Admin process",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "metrics"
+ ],
+ "summary": "show basic information of the Admin process",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/version.Version"
+ }
+ }
+ }
+ }
}
},
"definitions": {
@@ -2931,6 +3135,17 @@
}
}
},
+ "model.ClusterMetricsRes": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ }
+ },
"model.ConditionMatch": {
"type": "object",
"properties": {
@@ -3097,6 +3312,17 @@
}
}
},
+ "model.FlowMetricsRes": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ }
+ }
+ },
"model.Gray": {
"type": "object",
"required": [
@@ -3181,6 +3407,34 @@
}
}
},
+ "model.Metadata": {
+ "type": "object",
+ "properties": {
+ "configCenter": {
+ "type": "string"
+ },
+ "metadataCenter": {
+ "type": "string"
+ },
+ "protocols": {
+ "type": "array",
+ "items": {}
+ },
+ "registry": {
+ "type": "string"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "versions": {
+ "type": "array",
+ "items": {}
+ }
+ }
+ },
"model.Mock": {
"type": "object",
"required": [
@@ -3590,11 +3844,6 @@
1000000,
1000000000,
60000000000,
- 1,
- 1000,
- 1000000,
- 1000000000,
- 60000000000,
3600000000000,
1,
1000,
@@ -3609,11 +3858,6 @@
"Millisecond",
"Second",
"Minute",
- "Nanosecond",
- "Microsecond",
- "Millisecond",
- "Second",
- "Minute",
"Hour",
"Nanosecond",
"Microsecond",
@@ -3622,6 +3866,32 @@
"Minute",
"Hour"
]
+ },
+ "version.Version": {
+ "type": "object",
+ "properties": {
+ "buildDate": {
+ "type": "string"
+ },
+ "compiler": {
+ "type": "string"
+ },
+ "gitCommit": {
+ "type": "string"
+ },
+ "gitTreeState": {
+ "type": "string"
+ },
+ "gitVersion": {
+ "type": "string"
+ },
+ "goVersion": {
+ "type": "string"
+ },
+ "platform": {
+ "type": "string"
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/pkg/admin/handlers/traffic/accesslog.go b/pkg/admin/handlers/traffic/accesslog.go
index 3fc7e48..56682da 100644
--- a/pkg/admin/handlers/traffic/accesslog.go
+++ b/pkg/admin/handlers/traffic/accesslog.go
@@ -68,15 +68,21 @@
// @Tags TrafficAccesslog
// @Accept json
// @Produce json
-// @Param accesslog body model.Accesslog true "rule"
+// @Param application query string true "application name"
// @Success 200 {bool} true
-// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/accesslog [delete]
func DeleteAccesslog(c *gin.Context) {
- doAccesslogUpdate(c, func(a *model.Accesslog) error {
- return accesslogSvc.Delete(a)
- })
+ a := &model.Accesslog{
+ Application: c.Query("application"),
+ }
+
+ err := accesslogSvc.Delete(a)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchAccesslog get rule list
@@ -85,7 +91,7 @@
// @Tags TrafficAccesslog
// @Accept json
// @Produce json
-// @Param accesslog body model.Accesslog true "rule"
+// @Param application query string true "application name"
// @Success 200 {object} []model.Accesslog
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/accesslog [get]
diff --git a/pkg/admin/handlers/traffic/argument.go b/pkg/admin/handlers/traffic/argument.go
index c643b86..ada5194 100644
--- a/pkg/admin/handlers/traffic/argument.go
+++ b/pkg/admin/handlers/traffic/argument.go
@@ -68,15 +68,25 @@
// @Tags TrafficArgument
// @Accept json
// @Produce json
-// @Param argument body model.Argument true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {bool} true
-// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/argument [delete]
func DeleteArgument(c *gin.Context) {
- doArgumentUpdate(c, func(a *model.Argument) error {
- return argumentSvc.Delete(a)
- })
+ a := &model.Argument{
+ Service: c.Query("service"),
+ Group: c.Query("group"),
+ Version: c.Query("version"),
+ }
+
+ err := argumentSvc.Delete(a)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchArgument get rule list
@@ -85,7 +95,9 @@
// @Tags TrafficArgument
// @Accept json
// @Produce json
-// @Param argument body model.Argument true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {object} []model.Argument
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/argument [get]
diff --git a/pkg/admin/handlers/traffic/gray.go b/pkg/admin/handlers/traffic/gray.go
index dc7150b..c0c4a17 100644
--- a/pkg/admin/handlers/traffic/gray.go
+++ b/pkg/admin/handlers/traffic/gray.go
@@ -68,15 +68,21 @@
// @Tags TrafficGray
// @Accept json
// @Produce json
-// @Param gray body model.Gray true "rule"
+// @Param application query string true "application name"
// @Success 200 {bool} true
-// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/gray [delete]
func DeleteGray(c *gin.Context) {
- doGrayUpdate(c, func(g *model.Gray) error {
- return graySVC.Delete(g)
- })
+ g := &model.Gray{
+ Application: c.Query("application"),
+ }
+
+ err := graySVC.Delete(g)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchGray get rule list
@@ -85,7 +91,7 @@
// @Tags TrafficGray
// @Accept json
// @Produce json
-// @Param gray body model.Gray true "rule"
+// @Param application query string true "application name"
// @Success 200 {object} []model.Gray
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/gray [get]
diff --git a/pkg/admin/handlers/traffic/mock.go b/pkg/admin/handlers/traffic/mock.go
index bf80a78..b452fb7 100644
--- a/pkg/admin/handlers/traffic/mock.go
+++ b/pkg/admin/handlers/traffic/mock.go
@@ -68,15 +68,26 @@
// @Tags TrafficMock
// @Accept json
// @Produce json
-// @Param mock body model.Mock true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {bool} true
// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/mock [delete]
func DeleteMock(c *gin.Context) {
- doMockUpdate(c, func(m *model.Mock) error {
- return mockSvc.Delete(m)
- })
+ m := &model.Mock{
+ Service: c.Query("service"),
+ Group: c.Query("group"),
+ Version: c.Query("version"),
+ }
+
+ err := mockSvc.Delete(m)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchMock get rule list
@@ -85,7 +96,9 @@
// @Tags TrafficMock
// @Accept json
// @Produce json
-// @Param mock body model.Mock true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {object} []model.Mock
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/mock [get]
diff --git a/pkg/admin/handlers/traffic/region.go b/pkg/admin/handlers/traffic/region.go
index 616b252..e07504d 100644
--- a/pkg/admin/handlers/traffic/region.go
+++ b/pkg/admin/handlers/traffic/region.go
@@ -68,15 +68,26 @@
// @Tags TrafficRegion
// @Accept json
// @Produce json
-// @Param region body model.Region true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {bool} true
// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/region [delete]
func DeleteRegion(c *gin.Context) {
- doRegionUpdate(c, func(r *model.Region) error {
- return regionSVC.Delete(r)
- })
+ r := &model.Region{
+ Service: c.Query("service"),
+ Group: c.Query("group"),
+ Version: c.Query("version"),
+ }
+
+ err := regionSVC.Delete(r)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchRegion get rule list
@@ -85,7 +96,9 @@
// @Tags TrafficRegion
// @Accept json
// @Produce json
-// @Param region body model.Region true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {object} []model.Region
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/region [get]
diff --git a/pkg/admin/handlers/traffic/retry.go b/pkg/admin/handlers/traffic/retry.go
index 0c7c158..71cbba3 100644
--- a/pkg/admin/handlers/traffic/retry.go
+++ b/pkg/admin/handlers/traffic/retry.go
@@ -68,15 +68,25 @@
// @Tags TrafficRetry
// @Accept json
// @Produce json
-// @Param retry body model.Retry true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {bool} true
-// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/retry [delete]
func DeleteRetry(c *gin.Context) {
- doRetryUpdate(c, func(r *model.Retry) error {
- return retrySvc.Delete(r)
- })
+ r := &model.Retry{
+ Service: c.Query("service"),
+ Group: c.Query("group"),
+ Version: c.Query("version"),
+ }
+
+ err := retrySvc.Delete(r)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchRetry get rule list
@@ -85,9 +95,10 @@
// @Tags TrafficRetry
// @Accept json
// @Produce json
-// @Param retry body model.Retry true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {object} []model.Retry
-// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/retry [get]
func SearchRetry(c *gin.Context) {
@@ -96,11 +107,6 @@
Group: c.Query("group"),
Version: c.Query("version"),
}
- if err := c.ShouldBindJSON(&r); err != nil {
- logger.Errorf("Error parsing rule input when trying to create override rule, err msg is %s.", err.Error())
- c.JSON(http.StatusBadRequest, model.HTTPError{Error: err.Error()})
- return
- }
result, err := retrySvc.Search(r)
if err != nil {
diff --git a/pkg/admin/handlers/traffic/timeout.go b/pkg/admin/handlers/traffic/timeout.go
index 9b8ec23..48adc85 100644
--- a/pkg/admin/handlers/traffic/timeout.go
+++ b/pkg/admin/handlers/traffic/timeout.go
@@ -68,15 +68,25 @@
// @Tags TrafficTimeout
// @Accept json
// @Produce json
-// @Param timeout body model.Timeout true "timeout rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {boolean} true
-// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/timeout [delete]
func DeleteTimeout(c *gin.Context) {
- doTimeoutUpdate(c, func(t *model.Timeout) error {
- return timeoutSvc.Delete(t)
- })
+ t := &model.Timeout{
+ Service: c.Query("service"),
+ Group: c.Query("group"),
+ Version: c.Query("version"),
+ }
+
+ err := timeoutSvc.Delete(t)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchTimeout get timeout rule list
@@ -85,7 +95,9 @@
// @Tags TrafficTimeout
// @Accept json
// @Produce json
-// @Param timeout body model.Timeout true "timeout rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {object} []model.Timeout
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/timeout [get]
diff --git a/pkg/admin/handlers/traffic/weight.go b/pkg/admin/handlers/traffic/weight.go
index 4afae5b..ad12b36 100644
--- a/pkg/admin/handlers/traffic/weight.go
+++ b/pkg/admin/handlers/traffic/weight.go
@@ -68,15 +68,25 @@
// @Tags TrafficWeight
// @Accept json
// @Produce json
-// @Param weight body model.Weight true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {bool} true
-// @Failure 400 {object} model.HTTPError
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/weight [delete]
func DeleteWeight(c *gin.Context) {
- doWeightUpdate(c, func(p *model.Percentage) error {
- return weightSvc.Delete(p)
- })
+ p := &model.Percentage{
+ Service: c.Query("service"),
+ Group: c.Query("group"),
+ Version: c.Query("version"),
+ }
+
+ err := weightSvc.Delete(p)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+ }
+
+ c.JSON(http.StatusOK, true)
}
// SearchWeight get rule list
@@ -85,7 +95,9 @@
// @Tags TrafficWeight
// @Accept json
// @Produce json
-// @Param weight body model.Weight true "rule"
+// @Param service query string true "service name"
+// @Param version query string true "service version"
+// @Param group query string true "service group"
// @Success 200 {object} []model.Weight
// @Failure 500 {object} model.HTTPError
// @Router /api/{env}/traffic/weight [get]