From 174f1b857cc6f701b19f0ad728db3512708704c5 Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Sun, 13 Oct 2019 12:37:56 +0100 Subject: [PATCH] Network handler moves to service/handler --- network/handler/handler.go | 166 ------------------------------------- 1 file changed, 166 deletions(-) delete mode 100644 network/handler/handler.go diff --git a/network/handler/handler.go b/network/handler/handler.go deleted file mode 100644 index 62162e64..00000000 --- a/network/handler/handler.go +++ /dev/null @@ -1,166 +0,0 @@ -// Package handler implements network RPC handler -package handler - -import ( - "context" - - "github.com/micro/go-micro/errors" - "github.com/micro/go-micro/network" - pbNet "github.com/micro/go-micro/network/proto" - "github.com/micro/go-micro/router" - pbRtr "github.com/micro/go-micro/router/proto" -) - -// Network implements network handler -type Network struct { - Network network.Network -} - -func flatten(n network.Node, visited map[string]bool) []network.Node { - // if node is nil runaway - if n == nil { - return nil - } - - // set visisted - if visited == nil { - visited = make(map[string]bool) - } - - // create new list of nodes - var nodes []network.Node - - // check if already visited - if visited[n.Id()] == false { - // append the current node - nodes = append(nodes, n) - } - - // set to visited - visited[n.Id()] = true - - // visit the list of peers - for _, node := range n.Peers() { - nodes = append(nodes, flatten(node, visited)...) - } - - return nodes -} - -// Nodes returns the list of nodes -func (n *Network) Nodes(ctx context.Context, req *pbNet.NodesRequest, resp *pbNet.NodesResponse) error { - depth := uint(req.Depth) - if depth <= 0 || depth > network.MaxDepth { - depth = network.MaxDepth - } - - // root node - nodes := map[string]network.Node{} - - // get peers encoded into protobuf - peers := flatten(n.Network, nil) - - // walk all the peers - for _, peer := range peers { - if peer == nil { - continue - } - if _, ok := nodes[peer.Id()]; ok { - continue - } - - // add to visited list - nodes[n.Network.Id()] = peer - - resp.Nodes = append(resp.Nodes, &pbNet.Node{ - Id: peer.Id(), - Address: peer.Address(), - }) - } - - return nil -} - -// Graph returns the network graph from this root node -func (n *Network) Graph(ctx context.Context, req *pbNet.GraphRequest, resp *pbNet.GraphResponse) error { - depth := uint(req.Depth) - if depth <= 0 || depth > network.MaxDepth { - depth = network.MaxDepth - } - - // get peers encoded into protobuf - peers := network.PeersToProto(n.Network, depth) - - // set the root node - resp.Root = peers - - return nil -} - -// Routes returns a list of routing table routes -func (n *Network) Routes(ctx context.Context, req *pbNet.RoutesRequest, resp *pbNet.RoutesResponse) error { - // build query - - var qOpts []router.QueryOption - - if q := req.Query; q != nil { - if len(q.Service) > 0 { - qOpts = append(qOpts, router.QueryService(q.Service)) - } - if len(q.Address) > 0 { - qOpts = append(qOpts, router.QueryAddress(q.Address)) - } - if len(q.Gateway) > 0 { - qOpts = append(qOpts, router.QueryGateway(q.Gateway)) - } - if len(q.Router) > 0 { - qOpts = append(qOpts, router.QueryRouter(q.Router)) - } - if len(q.Network) > 0 { - qOpts = append(qOpts, router.QueryNetwork(q.Network)) - } - } - - routes, err := n.Network.Options().Router.Table().Query(qOpts...) - 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 -} - -// Services returns a list of services based on the routing table -func (n *Network) Services(ctx context.Context, req *pbNet.ServicesRequest, resp *pbNet.ServicesResponse) error { - routes, err := n.Network.Options().Router.Table().List() - if err != nil { - return errors.InternalServerError("go.micro.network", "failed to list services: %s", err) - } - - services := make(map[string]bool) - - for _, route := range routes { - if _, ok := services[route.Service]; ok { - continue - } - services[route.Service] = true - resp.Services = append(resp.Services, route.Service) - } - - return nil -}