代码拉取完成,页面将自动刷新
package eureka
import (
"encoding/json"
"errors"
"fmt"
"strings"
"github.com/hudl/fargo"
"github.com/micro/go-micro/registry"
)
func appToService(app *fargo.Application) []*registry.Service {
serviceMap := make(map[string]*registry.Service)
for _, instance := range app.Instances {
id := instance.Id()
addr := instance.IPAddr
port := instance.Port
var version string
var metadata map[string]string
var endpoints []*registry.Endpoint
// get version
k, err := instance.Metadata.GetString("version")
if err != nil {
continue
}
k, err = instance.Metadata.GetString("endpoints")
if err == nil {
json.Unmarshal([]byte(k), &endpoints)
}
k, err = instance.Metadata.GetString("metadata")
if err == nil {
json.Unmarshal([]byte(k), &metadata)
}
// get existing service
service, ok := serviceMap[version]
if !ok {
// create new if doesn't exist
service = ®istry.Service{
Name: strings.ToLower(app.Name),
Version: version,
Endpoints: endpoints,
}
}
// append node
service.Nodes = append(service.Nodes, ®istry.Node{
Id: id,
Address: addr,
Port: port,
Metadata: metadata,
})
// save
serviceMap[version] = service
}
var services []*registry.Service
for _, service := range serviceMap {
services = append(services, service)
}
return services
}
// only parses first node
func serviceToInstance(service *registry.Service) (*fargo.Instance, error) {
if len(service.Nodes) == 0 {
return nil, errors.New("Require nodes")
}
node := service.Nodes[0]
instance := &fargo.Instance{
App: service.Name,
HostName: node.Address,
IPAddr: node.Address,
VipAddress: node.Address,
SecureVipAddress: node.Address,
Port: node.Port,
Status: fargo.UP,
UniqueID: func(i fargo.Instance) string {
return fmt.Sprintf("%s:%s", node.Address, node.Id)
},
DataCenterInfo: fargo.DataCenterInfo{Name: fargo.MyOwn},
}
// set version
instance.SetMetadataString("version", service.Version)
// set instance ID
instance.SetMetadataString("instanceId", node.Id)
// set endpoints
if b, err := json.Marshal(service.Endpoints); err == nil {
instance.SetMetadataString("endpoints", string(b))
}
// set metadata
if b, err := json.Marshal(node.Metadata); err == nil {
instance.SetMetadataString("metadata", string(b))
}
return instance, nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。