Skip to content
Snippets Groups Projects
networkElement.go 30.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • 		return status.Errorf(codes.Aborted, "%v", err)
    
    	if err := n.subscribePath(networkElement, request.Sublist); err != nil {
    
    func (n *NetworkElementServer) subscribePath(networkElement networkelement.NetworkElement, subList *mnepb.SubscriptionList) error {
    
    	mode, err := n.mapModeToAristaFork(subList.GetMode())
    	if err != nil {
    		return err
    	}
    
    	for _, sub := range subList.Subscription {
    		streamMode, err := n.mapStreamModeToAristaFork(sub.GetStreamMode())
    		if err != nil {
    			return err
    		}
    
    		opts := &aGNMI.SubscribeOptions{
    			Mode:           mode,
    			StreamMode:     streamMode,
    			Paths:          [][]string{n.splitStringPath(sub.GetPath())},
    			SampleInterval: sub.SampleInterval,
    		}
    
    		ctx := context.Background()
    		ctx = context.WithValue(ctx, types.CtxKeyOpts, opts)
    
    
    		if err = networkElement.Transport().Subscribe(ctx); err != nil {
    
    			return err
    		}
    	}
    
    	return nil
    }
    
    func (n *NetworkElementServer) splitStringPath(s string) []string {
    	return strings.Split(s, "/")
    }
    
    func (n *NetworkElementServer) mapStreamModeToAristaFork(mode mnepb.StreamMode) (string, error) {
    	switch mode {
    	case mnepb.StreamMode_STREAM_MODE_TARGET_DEFINED:
    		return "target_defined", nil
    	case mnepb.StreamMode_STREAM_MODE_ON_CHANGE:
    		return "on_change", nil
    	case mnepb.StreamMode_STREAM_MODE_SAMPLE:
    		return "sample", nil
    	default:
    		return "", fmt.Errorf("StreamMode of type: %T is not supported", mode)
    	}
    }
    
    func (n *NetworkElementServer) mapModeToAristaFork(mode mnepb.SubscriptionMode) (string, error) {
    	switch mode {
    	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_STREAM:
    		return "stream", nil
    	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_ONCE:
    		return "once", nil
    	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_POLL:
    		return "poll", nil
    	default:
    		return "", fmt.Errorf("SubscriptionMode of type: %T is not supported", mode)
    	}
    }