gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/router/handler/table.go (about)

     1  package handler
     2  
     3  import (
     4  	"context"
     5  
     6  	"gitee.com/liuxuezhan/go-micro-v1.18.0/errors"
     7  	"gitee.com/liuxuezhan/go-micro-v1.18.0/router"
     8  	pb "gitee.com/liuxuezhan/go-micro-v1.18.0/router/proto"
     9  )
    10  
    11  type Table struct {
    12  	Router router.Router
    13  }
    14  
    15  func (t *Table) Create(ctx context.Context, route *pb.Route, resp *pb.CreateResponse) error {
    16  	err := t.Router.Table().Create(router.Route{
    17  		Service: route.Service,
    18  		Address: route.Address,
    19  		Gateway: route.Gateway,
    20  		Network: route.Network,
    21  		Router:  route.Router,
    22  		Link:    route.Link,
    23  		Metric:  route.Metric,
    24  	})
    25  	if err != nil {
    26  		return errors.InternalServerError("go.micro.router", "failed to create route: %s", err)
    27  	}
    28  
    29  	return nil
    30  }
    31  
    32  func (t *Table) Update(ctx context.Context, route *pb.Route, resp *pb.UpdateResponse) error {
    33  	err := t.Router.Table().Update(router.Route{
    34  		Service: route.Service,
    35  		Address: route.Address,
    36  		Gateway: route.Gateway,
    37  		Network: route.Network,
    38  		Router:  route.Router,
    39  		Link:    route.Link,
    40  		Metric:  route.Metric,
    41  	})
    42  	if err != nil {
    43  		return errors.InternalServerError("go.micro.router", "failed to update route: %s", err)
    44  	}
    45  
    46  	return nil
    47  }
    48  
    49  func (t *Table) Delete(ctx context.Context, route *pb.Route, resp *pb.DeleteResponse) error {
    50  	err := t.Router.Table().Delete(router.Route{
    51  		Service: route.Service,
    52  		Address: route.Address,
    53  		Gateway: route.Gateway,
    54  		Network: route.Network,
    55  		Router:  route.Router,
    56  		Link:    route.Link,
    57  		Metric:  route.Metric,
    58  	})
    59  	if err != nil {
    60  		return errors.InternalServerError("go.micro.router", "failed to delete route: %s", err)
    61  	}
    62  
    63  	return nil
    64  }
    65  
    66  // List returns all routes in the routing table
    67  func (t *Table) List(ctx context.Context, req *pb.Request, resp *pb.ListResponse) error {
    68  	routes, err := t.Router.Table().List()
    69  	if err != nil {
    70  		return errors.InternalServerError("go.micro.router", "failed to list routes: %s", err)
    71  	}
    72  
    73  	respRoutes := make([]*pb.Route, 0, len(routes))
    74  	for _, route := range routes {
    75  		respRoute := &pb.Route{
    76  			Service: route.Service,
    77  			Address: route.Address,
    78  			Gateway: route.Gateway,
    79  			Network: route.Network,
    80  			Router:  route.Router,
    81  			Link:    route.Link,
    82  			Metric:  route.Metric,
    83  		}
    84  		respRoutes = append(respRoutes, respRoute)
    85  	}
    86  
    87  	resp.Routes = respRoutes
    88  
    89  	return nil
    90  }
    91  
    92  func (t *Table) Query(ctx context.Context, req *pb.QueryRequest, resp *pb.QueryResponse) error {
    93  	routes, err := t.Router.Table().Query(router.QueryService(req.Query.Service))
    94  	if err != nil {
    95  		return errors.InternalServerError("go.micro.router", "failed to lookup routes: %s", err)
    96  	}
    97  
    98  	respRoutes := make([]*pb.Route, 0, len(routes))
    99  	for _, route := range routes {
   100  		respRoute := &pb.Route{
   101  			Service: route.Service,
   102  			Address: route.Address,
   103  			Gateway: route.Gateway,
   104  			Network: route.Network,
   105  			Router:  route.Router,
   106  			Link:    route.Link,
   107  			Metric:  route.Metric,
   108  		}
   109  		respRoutes = append(respRoutes, respRoute)
   110  	}
   111  
   112  	resp.Routes = respRoutes
   113  
   114  	return nil
   115  }