Rough outline of Network introspection interface

This commit is contained in:
Milos Gajdos 2019-09-02 11:42:45 +01:00
parent 6c3631728b
commit bf53c16e4b
No known key found for this signature in database
GPG Key ID: 8B31058CC55DFD4F
6 changed files with 255 additions and 38 deletions

View File

@ -52,7 +52,7 @@ type network struct {
// client is network client // client is network client
client client.Client client client.Client
// tunClient is a mao of tunnel clients keyed over channel names // tunClient is a map of tunnel clients keyed over tunnel channel names
tunClient map[string]transport.Client tunClient map[string]transport.Client
sync.RWMutex sync.RWMutex
@ -118,6 +118,15 @@ func newNetwork(opts ...Option) Network {
} }
} }
// Options returns network options
func (n *network) Options() Options {
n.Lock()
options := n.options
n.Unlock()
return options
}
// Name returns network name // Name returns network name
func (n *network) Name() string { func (n *network) Name() string {
return n.options.Name return n.options.Name

View File

@ -0,0 +1,51 @@
package handler
import (
"context"
"github.com/micro/go-micro/errors"
"github.com/micro/go-micro/network"
pbNet "github.com/micro/go-micro/network/proto"
pbRtr "github.com/micro/go-micro/router/proto"
)
// Network implements network handler
type Network struct {
Network network.Network
}
// ListRoutes returns a list of routing table routes
func (n *Network) ListRoutes(ctx context.Context, req *pbRtr.Request, resp *pbRtr.ListResponse) error {
routes, err := n.Network.Options().Router.Table().List()
if err != nil {
return errors.InternalServerError("go.micro.network", "failed to list routes: %s", err)
}
var respRoutes []*pbRtr.Route
for _, route := range routes {
respRoute := &pbRtr.Route{
Service: route.Service,
Address: route.Address,
Gateway: route.Gateway,
Network: route.Network,
Router: route.Router,
Link: route.Link,
Metric: int64(route.Metric),
}
respRoutes = append(respRoutes, respRoute)
}
resp.Routes = respRoutes
return nil
}
// ListNodes returns a list of all accessible nodes in the network
func (n *Network) ListNodes(ctx context.Context, req *pbNet.ListRequest, resp *pbNet.ListResponse) error {
return nil
}
// ListNeighbours returns a list of immediate neighbours
func (n *Network) ListNeighbours(ctx context.Context, req *pbNet.NeighbourhoodRequest, resp *pbNet.NeighbourhoodResponse) error {
return nil
}

View File

@ -21,6 +21,8 @@ var (
// Network is micro network // Network is micro network
type Network interface { type Network interface {
// Options returns the network options
Options() Options
// Name of the network // Name of the network
Name() string Name() string
// Address returns network bind address // Address returns network bind address

View File

@ -37,7 +37,7 @@ var _ server.Option
type NetworkService interface { type NetworkService interface {
ListRoutes(ctx context.Context, in *proto1.Request, opts ...client.CallOption) (*proto1.ListResponse, error) ListRoutes(ctx context.Context, in *proto1.Request, opts ...client.CallOption) (*proto1.ListResponse, error)
ListNodes(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error) ListNodes(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error)
ListNeighbours(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error) Neighbourhood(ctx context.Context, in *NeighbourhoodRequest, opts ...client.CallOption) (*NeighbourhoodResponse, error)
} }
type networkService struct { type networkService struct {
@ -78,9 +78,9 @@ func (c *networkService) ListNodes(ctx context.Context, in *ListRequest, opts ..
return out, nil return out, nil
} }
func (c *networkService) ListNeighbours(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error) { func (c *networkService) Neighbourhood(ctx context.Context, in *NeighbourhoodRequest, opts ...client.CallOption) (*NeighbourhoodResponse, error) {
req := c.c.NewRequest(c.name, "Network.ListNeighbours", in) req := c.c.NewRequest(c.name, "Network.Neighbourhood", in)
out := new(ListResponse) out := new(NeighbourhoodResponse)
err := c.c.Call(ctx, req, out, opts...) err := c.c.Call(ctx, req, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
@ -93,14 +93,14 @@ func (c *networkService) ListNeighbours(ctx context.Context, in *ListRequest, op
type NetworkHandler interface { type NetworkHandler interface {
ListRoutes(context.Context, *proto1.Request, *proto1.ListResponse) error ListRoutes(context.Context, *proto1.Request, *proto1.ListResponse) error
ListNodes(context.Context, *ListRequest, *ListResponse) error ListNodes(context.Context, *ListRequest, *ListResponse) error
ListNeighbours(context.Context, *ListRequest, *ListResponse) error Neighbourhood(context.Context, *NeighbourhoodRequest, *NeighbourhoodResponse) error
} }
func RegisterNetworkHandler(s server.Server, hdlr NetworkHandler, opts ...server.HandlerOption) error { func RegisterNetworkHandler(s server.Server, hdlr NetworkHandler, opts ...server.HandlerOption) error {
type network interface { type network interface {
ListRoutes(ctx context.Context, in *proto1.Request, out *proto1.ListResponse) error ListRoutes(ctx context.Context, in *proto1.Request, out *proto1.ListResponse) error
ListNodes(ctx context.Context, in *ListRequest, out *ListResponse) error ListNodes(ctx context.Context, in *ListRequest, out *ListResponse) error
ListNeighbours(ctx context.Context, in *ListRequest, out *ListResponse) error Neighbourhood(ctx context.Context, in *NeighbourhoodRequest, out *NeighbourhoodResponse) error
} }
type Network struct { type Network struct {
network network
@ -121,6 +121,6 @@ func (h *networkHandler) ListNodes(ctx context.Context, in *ListRequest, out *Li
return h.NetworkHandler.ListNodes(ctx, in, out) return h.NetworkHandler.ListNodes(ctx, in, out)
} }
func (h *networkHandler) ListNeighbours(ctx context.Context, in *ListRequest, out *ListResponse) error { func (h *networkHandler) Neighbourhood(ctx context.Context, in *NeighbourhoodRequest, out *NeighbourhoodResponse) error {
return h.NetworkHandler.ListNeighbours(ctx, in, out) return h.NetworkHandler.Neighbourhood(ctx, in, out)
} }

View File

@ -93,6 +93,136 @@ func (m *ListResponse) GetNodes() []*Node {
return nil return nil
} }
// NeighbourhoodRequest is sent to query node neighbourhood
type NeighbourhoodRequest struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *NeighbourhoodRequest) Reset() { *m = NeighbourhoodRequest{} }
func (m *NeighbourhoodRequest) String() string { return proto.CompactTextString(m) }
func (*NeighbourhoodRequest) ProtoMessage() {}
func (*NeighbourhoodRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_8571034d60397816, []int{2}
}
func (m *NeighbourhoodRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NeighbourhoodRequest.Unmarshal(m, b)
}
func (m *NeighbourhoodRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_NeighbourhoodRequest.Marshal(b, m, deterministic)
}
func (m *NeighbourhoodRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_NeighbourhoodRequest.Merge(m, src)
}
func (m *NeighbourhoodRequest) XXX_Size() int {
return xxx_messageInfo_NeighbourhoodRequest.Size(m)
}
func (m *NeighbourhoodRequest) XXX_DiscardUnknown() {
xxx_messageInfo_NeighbourhoodRequest.DiscardUnknown(m)
}
var xxx_messageInfo_NeighbourhoodRequest proto.InternalMessageInfo
func (m *NeighbourhoodRequest) GetId() string {
if m != nil {
return m.Id
}
return ""
}
// NeighbourhoodResponse contains node neighbourhood hierarchy
type NeighbourhoodResponse struct {
Neighbourhood *Neighbour `protobuf:"bytes,1,opt,name=neighbourhood,proto3" json:"neighbourhood,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *NeighbourhoodResponse) Reset() { *m = NeighbourhoodResponse{} }
func (m *NeighbourhoodResponse) String() string { return proto.CompactTextString(m) }
func (*NeighbourhoodResponse) ProtoMessage() {}
func (*NeighbourhoodResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_8571034d60397816, []int{3}
}
func (m *NeighbourhoodResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NeighbourhoodResponse.Unmarshal(m, b)
}
func (m *NeighbourhoodResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_NeighbourhoodResponse.Marshal(b, m, deterministic)
}
func (m *NeighbourhoodResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_NeighbourhoodResponse.Merge(m, src)
}
func (m *NeighbourhoodResponse) XXX_Size() int {
return xxx_messageInfo_NeighbourhoodResponse.Size(m)
}
func (m *NeighbourhoodResponse) XXX_DiscardUnknown() {
xxx_messageInfo_NeighbourhoodResponse.DiscardUnknown(m)
}
var xxx_messageInfo_NeighbourhoodResponse proto.InternalMessageInfo
func (m *NeighbourhoodResponse) GetNeighbourhood() *Neighbour {
if m != nil {
return m.Neighbourhood
}
return nil
}
// Neighbourhood is node neighbourhood
type Neighbourhood struct {
// network node
Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
// node neighbours
Neighbour []*Neighbour `protobuf:"bytes,2,rep,name=neighbour,proto3" json:"neighbour,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Neighbourhood) Reset() { *m = Neighbourhood{} }
func (m *Neighbourhood) String() string { return proto.CompactTextString(m) }
func (*Neighbourhood) ProtoMessage() {}
func (*Neighbourhood) Descriptor() ([]byte, []int) {
return fileDescriptor_8571034d60397816, []int{4}
}
func (m *Neighbourhood) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Neighbourhood.Unmarshal(m, b)
}
func (m *Neighbourhood) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Neighbourhood.Marshal(b, m, deterministic)
}
func (m *Neighbourhood) XXX_Merge(src proto.Message) {
xxx_messageInfo_Neighbourhood.Merge(m, src)
}
func (m *Neighbourhood) XXX_Size() int {
return xxx_messageInfo_Neighbourhood.Size(m)
}
func (m *Neighbourhood) XXX_DiscardUnknown() {
xxx_messageInfo_Neighbourhood.DiscardUnknown(m)
}
var xxx_messageInfo_Neighbourhood proto.InternalMessageInfo
func (m *Neighbourhood) GetNode() *Node {
if m != nil {
return m.Node
}
return nil
}
func (m *Neighbourhood) GetNeighbour() []*Neighbour {
if m != nil {
return m.Neighbour
}
return nil
}
// Node is network node // Node is network node
type Node struct { type Node struct {
// node ide // node ide
@ -108,7 +238,7 @@ func (m *Node) Reset() { *m = Node{} }
func (m *Node) String() string { return proto.CompactTextString(m) } func (m *Node) String() string { return proto.CompactTextString(m) }
func (*Node) ProtoMessage() {} func (*Node) ProtoMessage() {}
func (*Node) Descriptor() ([]byte, []int) { func (*Node) Descriptor() ([]byte, []int) {
return fileDescriptor_8571034d60397816, []int{2} return fileDescriptor_8571034d60397816, []int{5}
} }
func (m *Node) XXX_Unmarshal(b []byte) error { func (m *Node) XXX_Unmarshal(b []byte) error {
@ -156,7 +286,7 @@ func (m *Connect) Reset() { *m = Connect{} }
func (m *Connect) String() string { return proto.CompactTextString(m) } func (m *Connect) String() string { return proto.CompactTextString(m) }
func (*Connect) ProtoMessage() {} func (*Connect) ProtoMessage() {}
func (*Connect) Descriptor() ([]byte, []int) { func (*Connect) Descriptor() ([]byte, []int) {
return fileDescriptor_8571034d60397816, []int{3} return fileDescriptor_8571034d60397816, []int{6}
} }
func (m *Connect) XXX_Unmarshal(b []byte) error { func (m *Connect) XXX_Unmarshal(b []byte) error {
@ -186,7 +316,7 @@ func (m *Connect) GetNode() *Node {
// Close is sent when the node disconnects from the network // Close is sent when the node disconnects from the network
type Close struct { type Close struct {
// network mode // network node
Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -197,7 +327,7 @@ func (m *Close) Reset() { *m = Close{} }
func (m *Close) String() string { return proto.CompactTextString(m) } func (m *Close) String() string { return proto.CompactTextString(m) }
func (*Close) ProtoMessage() {} func (*Close) ProtoMessage() {}
func (*Close) Descriptor() ([]byte, []int) { func (*Close) Descriptor() ([]byte, []int) {
return fileDescriptor_8571034d60397816, []int{4} return fileDescriptor_8571034d60397816, []int{7}
} }
func (m *Close) XXX_Unmarshal(b []byte) error { func (m *Close) XXX_Unmarshal(b []byte) error {
@ -227,7 +357,7 @@ func (m *Close) GetNode() *Node {
// Neighbour is used to nnounce node neighbourhood // Neighbour is used to nnounce node neighbourhood
type Neighbour struct { type Neighbour struct {
// network mode // network node
Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
// neighbours // neighbours
Neighbours []*Node `protobuf:"bytes,3,rep,name=neighbours,proto3" json:"neighbours,omitempty"` Neighbours []*Node `protobuf:"bytes,3,rep,name=neighbours,proto3" json:"neighbours,omitempty"`
@ -240,7 +370,7 @@ func (m *Neighbour) Reset() { *m = Neighbour{} }
func (m *Neighbour) String() string { return proto.CompactTextString(m) } func (m *Neighbour) String() string { return proto.CompactTextString(m) }
func (*Neighbour) ProtoMessage() {} func (*Neighbour) ProtoMessage() {}
func (*Neighbour) Descriptor() ([]byte, []int) { func (*Neighbour) Descriptor() ([]byte, []int) {
return fileDescriptor_8571034d60397816, []int{5} return fileDescriptor_8571034d60397816, []int{8}
} }
func (m *Neighbour) XXX_Unmarshal(b []byte) error { func (m *Neighbour) XXX_Unmarshal(b []byte) error {
@ -278,6 +408,9 @@ func (m *Neighbour) GetNeighbours() []*Node {
func init() { func init() {
proto.RegisterType((*ListRequest)(nil), "go.micro.network.ListRequest") proto.RegisterType((*ListRequest)(nil), "go.micro.network.ListRequest")
proto.RegisterType((*ListResponse)(nil), "go.micro.network.ListResponse") proto.RegisterType((*ListResponse)(nil), "go.micro.network.ListResponse")
proto.RegisterType((*NeighbourhoodRequest)(nil), "go.micro.network.NeighbourhoodRequest")
proto.RegisterType((*NeighbourhoodResponse)(nil), "go.micro.network.NeighbourhoodResponse")
proto.RegisterType((*Neighbourhood)(nil), "go.micro.network.Neighbourhood")
proto.RegisterType((*Node)(nil), "go.micro.network.Node") proto.RegisterType((*Node)(nil), "go.micro.network.Node")
proto.RegisterType((*Connect)(nil), "go.micro.network.Connect") proto.RegisterType((*Connect)(nil), "go.micro.network.Connect")
proto.RegisterType((*Close)(nil), "go.micro.network.Close") proto.RegisterType((*Close)(nil), "go.micro.network.Close")
@ -287,24 +420,28 @@ func init() {
func init() { proto.RegisterFile("network.proto", fileDescriptor_8571034d60397816) } func init() { proto.RegisterFile("network.proto", fileDescriptor_8571034d60397816) }
var fileDescriptor_8571034d60397816 = []byte{ var fileDescriptor_8571034d60397816 = []byte{
// 302 bytes of a gzipped FileDescriptorProto // 367 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x52, 0x5d, 0x4b, 0xc3, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xc1, 0x4e, 0xc2, 0x40,
0x14, 0xb5, 0xfb, 0x70, 0xec, 0xce, 0x0d, 0xc9, 0x83, 0x84, 0xc2, 0x64, 0xe4, 0x69, 0x88, 0xa6, 0x10, 0x95, 0x02, 0x92, 0x0e, 0x62, 0xcc, 0x46, 0x4d, 0x53, 0x83, 0x21, 0x7b, 0x40, 0x62, 0xb4,
0xb2, 0xa2, 0x4f, 0xbe, 0xed, 0xc1, 0x97, 0x51, 0xb0, 0xff, 0xc0, 0x36, 0xa1, 0x0b, 0xba, 0xdc, 0x18, 0x88, 0x26, 0x26, 0x5e, 0x0c, 0x07, 0x2f, 0x84, 0x43, 0x8f, 0xde, 0x2c, 0xbb, 0x29, 0x8d,
0x99, 0xa4, 0xf8, 0xc3, 0xfd, 0x03, 0xd2, 0xb4, 0x9b, 0xc5, 0x31, 0x61, 0xf8, 0x96, 0x73, 0xcf, 0xd2, 0xc1, 0xdd, 0xad, 0xfe, 0x80, 0x1f, 0x6e, 0xba, 0x5d, 0x4a, 0x29, 0x82, 0xe1, 0xd6, 0x99,
0x3d, 0xe7, 0x5e, 0xee, 0x09, 0x8c, 0xb5, 0x74, 0x9f, 0x68, 0xde, 0xf8, 0xd6, 0xa0, 0x43, 0x72, 0x79, 0xf3, 0xde, 0xbc, 0xf6, 0x15, 0x5a, 0x31, 0x57, 0xdf, 0x28, 0xde, 0xbd, 0x85, 0x40, 0x85,
0x59, 0x20, 0xdf, 0xa8, 0xdc, 0x20, 0x6f, 0xea, 0x61, 0x5c, 0x28, 0xb7, 0x2e, 0x33, 0x9e, 0xe3, 0xe4, 0x24, 0x44, 0x6f, 0x1e, 0x4d, 0x05, 0x7a, 0xa6, 0xef, 0x0e, 0xc3, 0x48, 0xcd, 0x92, 0xc0,
0x26, 0xf2, 0x4c, 0x54, 0xe0, 0x5d, 0xfd, 0x30, 0x58, 0x3a, 0x69, 0x22, 0xaf, 0x6c, 0x40, 0x6d, 0x9b, 0xe2, 0xbc, 0xaf, 0x27, 0xfd, 0x10, 0x6f, 0xb3, 0x07, 0x81, 0x89, 0xe2, 0xa2, 0xaf, 0x37,
0xc3, 0xc6, 0x30, 0x5a, 0x29, 0xeb, 0x52, 0xf9, 0x51, 0x4a, 0xeb, 0xd8, 0x13, 0x5c, 0xd4, 0xd0, 0x4d, 0x91, 0xd1, 0xd0, 0x16, 0x34, 0xc7, 0x91, 0x54, 0x3e, 0xff, 0x4c, 0xb8, 0x54, 0xf4, 0x09,
0x6e, 0x51, 0x5b, 0x49, 0x6e, 0xa1, 0xaf, 0x51, 0x48, 0x4b, 0x83, 0x59, 0x77, 0x3e, 0x5a, 0x5c, 0x8e, 0xb2, 0x52, 0x2e, 0x30, 0x96, 0x9c, 0xdc, 0x40, 0x3d, 0x46, 0xc6, 0xa5, 0x53, 0xe9, 0x54,
0xf1, 0xdf, 0x53, 0x79, 0x82, 0x42, 0xa6, 0x75, 0x13, 0xbb, 0x87, 0x5e, 0x05, 0xc9, 0x04, 0x3a, 0x7b, 0xcd, 0xc1, 0xb9, 0x57, 0x56, 0xf5, 0x26, 0xc8, 0xb8, 0x9f, 0x81, 0x68, 0x17, 0x4e, 0x27,
0x4a, 0xd0, 0x60, 0x16, 0xcc, 0x87, 0x69, 0x47, 0x09, 0x42, 0x61, 0xf0, 0x2a, 0x84, 0x91, 0xd6, 0x3c, 0x0a, 0x67, 0x01, 0x26, 0x62, 0x86, 0xc8, 0x0c, 0x2b, 0x39, 0x06, 0x2b, 0x62, 0x4e, 0xa5,
0xd2, 0x8e, 0x2f, 0xee, 0x20, 0x7b, 0x80, 0xc1, 0x12, 0xb5, 0x96, 0xb9, 0x23, 0x37, 0xd0, 0xab, 0x53, 0xe9, 0xd9, 0xbe, 0x15, 0x31, 0xfa, 0x0a, 0x67, 0x25, 0x9c, 0x91, 0x7b, 0x4e, 0x5d, 0x16,
0x5c, 0xbc, 0xec, 0xf8, 0x24, 0xdf, 0xc3, 0x62, 0xe8, 0x2f, 0xdf, 0xd1, 0xca, 0x93, 0x44, 0x08, 0x06, 0x7a, 0xa7, 0x39, 0xb8, 0xf8, 0x43, 0x76, 0x09, 0xf3, 0xd7, 0x37, 0xe8, 0x17, 0xb4, 0xd6,
0xc3, 0x44, 0xaa, 0x62, 0x9d, 0x61, 0x69, 0x4e, 0x11, 0x92, 0x47, 0x00, 0xbd, 0x13, 0x5a, 0xda, 0xb8, 0xc9, 0x35, 0xd4, 0xd2, 0xeb, 0x0c, 0xd5, 0x36, 0x07, 0x1a, 0x43, 0x1e, 0xc1, 0xce, 0xd9,
0xfd, 0xf3, 0x12, 0xad, 0xce, 0xc5, 0x57, 0x00, 0x83, 0xa4, 0x26, 0xc9, 0x33, 0x80, 0x3f, 0x6c, 0x1c, 0x4b, 0x5b, 0xde, 0xa9, 0xbd, 0x42, 0xd3, 0x3b, 0xa8, 0xa5, 0x44, 0x65, 0xaf, 0xc4, 0x81,
0x75, 0x7b, 0x4b, 0xe8, 0x8f, 0xba, 0x49, 0xa3, 0x09, 0x20, 0x9c, 0x1e, 0x30, 0xed, 0x3c, 0xd8, 0xc6, 0x1b, 0x63, 0x82, 0x4b, 0xe9, 0x58, 0xba, 0xb9, 0x2c, 0xe9, 0x3d, 0x34, 0x46, 0x18, 0xc7,
0x19, 0x59, 0xc1, 0xb0, 0xaa, 0x54, 0xc3, 0x2c, 0x99, 0x1e, 0x6e, 0xd1, 0x4a, 0x33, 0xbc, 0x3e, 0x7c, 0xaa, 0xf6, 0xb9, 0x91, 0x0e, 0xa1, 0x3e, 0xfa, 0x40, 0xc9, 0xf7, 0x5a, 0x42, 0xb0, 0xf3,
0x46, 0xef, 0xdd, 0x5e, 0x60, 0xe2, 0xdd, 0xf6, 0x4b, 0xff, 0xdb, 0x32, 0x3b, 0xf7, 0x1f, 0x2b, 0xab, 0xf7, 0x7a, 0x23, 0x0f, 0x00, 0xb9, 0x47, 0xe9, 0x54, 0x77, 0xa6, 0xa0, 0x80, 0x1c, 0xfc,
0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x19, 0x6e, 0xfe, 0x91, 0xb0, 0x02, 0x00, 0x00, 0x58, 0xd0, 0x98, 0x64, 0x43, 0xf2, 0x02, 0xa0, 0x43, 0x95, 0xe6, 0x4e, 0x12, 0x67, 0xb5, 0x6d,
0x92, 0x68, 0x62, 0xe2, 0xb6, 0x37, 0x26, 0xc5, 0x2c, 0xd2, 0x03, 0x32, 0x06, 0x3b, 0xed, 0xa4,
0x62, 0x92, 0xb4, 0x37, 0xaf, 0x28, 0x24, 0xd9, 0xbd, 0xdc, 0x36, 0xce, 0xd9, 0x82, 0x72, 0x52,
0xba, 0x3b, 0x3e, 0x75, 0x21, 0xce, 0xee, 0xd5, 0xbf, 0xb8, 0xa5, 0x46, 0x70, 0xa8, 0xff, 0xb2,
0xe1, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x4f, 0xab, 0x3f, 0xbd, 0x03, 0x00, 0x00,
} }

View File

@ -8,7 +8,7 @@ import "github.com/micro/go-micro/router/proto/router.proto";
service Network { service Network {
rpc ListRoutes(go.micro.router.Request) returns (go.micro.router.ListResponse) {}; rpc ListRoutes(go.micro.router.Request) returns (go.micro.router.ListResponse) {};
rpc ListNodes(ListRequest) returns (ListResponse) {}; rpc ListNodes(ListRequest) returns (ListResponse) {};
rpc ListNeighbours(ListRequest) returns (ListResponse) {}; rpc Neighbourhood(NeighbourhoodRequest) returns (NeighbourhoodResponse) {};
} }
// Empty request // Empty request
@ -19,6 +19,24 @@ message ListResponse {
repeated Node nodes = 1; repeated Node nodes = 1;
} }
// NeighbourhoodRequest is sent to query node neighbourhood
message NeighbourhoodRequest {
string id = 1;
}
// NeighbourhoodResponse contains node neighbourhood hierarchy
message NeighbourhoodResponse {
Neighbour neighbourhood = 1;
}
// Neighbourhood is node neighbourhood
message Neighbourhood {
// network node
Node node = 1;
// node neighbours
repeated Neighbour neighbour = 2;
}
// Node is network node // Node is network node
message Node { message Node {
// node ide // node ide
@ -35,13 +53,13 @@ message Connect {
// Close is sent when the node disconnects from the network // Close is sent when the node disconnects from the network
message Close { message Close {
// network mode // network node
Node node = 1; Node node = 1;
} }
// Neighbour is used to nnounce node neighbourhood // Neighbour is used to nnounce node neighbourhood
message Neighbour { message Neighbour {
// network mode // network node
Node node = 1; Node node = 1;
// neighbours // neighbours
repeated Node neighbours = 3; repeated Node neighbours = 3;