You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dashboard/handler/registry/service.go

74 lines
1.9 KiB
Go

package registry
import (
"github.com/gin-gonic/gin"
"github.com/xpunch/go-micro-dashboard/handler/route"
"go-micro.dev/v4/registry"
)
type service struct {
registry registry.Registry
}
func NewRouteRegistrar(registry registry.Registry) route.Registrar {
return service{registry: registry}
}
func (s service) RegisterRoute(router gin.IRoutes) {
router.POST("/api/registry/services", s.GetServices)
}
// @Tags Registry
// @ID registry_getServices
// @Success 200 {object} getServiceListResponse
// @Failure 400 {object} string
// @Failure 401 {object} string
// @Failure 500 {object} string
// @Router /api/registry/services [get]
func (h *service) GetServices(ctx *gin.Context) {
services, err := h.registry.ListServices()
if err != nil {
ctx.AbortWithStatusJSON(500, err)
}
var convertValue func(v *registry.Value) registryValue
convertValue = func(v *registry.Value) registryValue {
res := registryValue{
Name: v.Name,
Type: v.Type,
Values: make([]registryValue, 0, len(v.Values)),
}
for _, vv := range v.Values {
res.Values = append(res.Values, convertValue(vv))
}
return res
}
resp := getServiceListResponse{Services: make([]registryService, 0, len(services))}
for _, s := range services {
endpoints := make([]registryEndpoint, 0, len(s.Endpoints))
for _, e := range s.Endpoints {
endpoints = append(endpoints, registryEndpoint{
Name: e.Name,
Request: convertValue(e.Request),
Response: convertValue(e.Response),
Metadata: e.Metadata,
})
}
nodes := make([]registryNode, 0, len(s.Nodes))
for _, n := range s.Nodes {
nodes = append(nodes, registryNode{
Id: n.Id,
Address: n.Address,
Metadata: n.Metadata,
})
}
resp.Services = append(resp.Services, registryService{
Name: s.Name,
Version: s.Version,
Metadata: s.Metadata,
Endpoints: endpoints,
Nodes: nodes,
})
}
ctx.JSON(200, services)
}