From 34d93306d6ea25d934a66e2cdd82285cec596545 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Fri, 9 Oct 2020 16:49:29 +0300 Subject: [PATCH] new registry util func Signed-off-by: Vasiliy Tolstov --- util/registry/util.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/util/registry/util.go b/util/registry/util.go index e430f35c..a76be462 100644 --- a/util/registry/util.go +++ b/util/registry/util.go @@ -1,7 +1,11 @@ package registry import ( + "net" + "github.com/unistack-org/micro/v3/registry" + "github.com/unistack-org/micro/v3/server" + "github.com/unistack-org/micro/v3/util/addr" ) func addNodes(old, neu []*registry.Node) []*registry.Node { @@ -146,3 +150,42 @@ func Remove(old, del []*registry.Service) []*registry.Service { return services } + +func NewService(s server.Server) (*registry.Service, error) { + opts := s.Options() + + advt := opts.Address + if len(opts.Advertise) > 0 { + advt = opts.Advertise + } + + host, port, err := net.SplitHostPort(advt) + if err != nil { + return nil, err + } + + addr, err := addr.Extract(host) + if err != nil { + addr = host + } + + node := ®istry.Node{ + Id: opts.Name + "-" + opts.Id, + Address: net.JoinHostPort(addr, port), + Metadata: opts.Metadata, + } + + if node.Metadata == nil { + node.Metadata = make(map[string]string, 3) + } + + node.Metadata["server"] = s.String() + node.Metadata["broker"] = opts.Broker.String() + node.Metadata["registry"] = opts.Registry.String() + + return ®istry.Service{ + Name: opts.Name, + Version: opts.Version, + Nodes: []*registry.Node{node}, + }, nil +}