Skip to content
Snippets Groups Projects

Resolve "Implement missing functionality of subscription management"

3 files
+ 115
0
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -6,6 +6,8 @@ import (
subpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/subscriptionmanagement"
"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
"code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
"github.com/google/uuid"
)
// SubManagementServer represents a SubsriptionManagementServer.
@@ -67,3 +69,99 @@ func (s *SubManagementServer) GetAll(ctx context.Context, request *subpb.GetAllR
Subscriptions: subInfosToReturn,
}, nil
}
// Get fetches detailed info for one specific available subscription.
func (s *SubManagementServer) Get(ctx context.Context, request *subpb.GetRequest) (*subpb.GetResponse, error) {
subUUID, err := uuid.Parse(request.GetSubid())
if err != nil {
return &subpb.GetResponse{
Timestamp: time.Now().UnixNano(),
}, err
}
info, err := s.networkElementWatchter.GetSubscriptionInformations(subUUID)
if err != nil {
return &subpb.GetResponse{
Timestamp: time.Now().UnixNano(),
}, err
}
var pathsToReturn []*subpb.Path
for _, path := range info.Opts.Paths {
var elems []string
for _, elem := range path {
elems = append(elems, elem)
}
pathsToReturn = append(pathsToReturn, &subpb.Path{Elem: elems})
}
return &subpb.GetResponse{
Timestamp: time.Now().UnixNano(),
Subscriptions: &subpb.Subscription{
Subid: info.SubID,
Pid: info.PndID,
Mneid: info.MneID,
MneName: info.MneName,
Paths: pathsToReturn,
SubscribeOptions: &subpb.SubscribeOptions{
GnmiMode: info.Opts.Mode,
GnmiStreamMode: info.Opts.StreamMode,
SampleInterval: info.Opts.SampleInterval,
},
},
}, nil
}
// Delete stops and removes one specific running subscription is a no-op if object connected to ID does not exist.
func (s *SubManagementServer) Delete(ctx context.Context, request *subpb.DeleteRequest) (*subpb.DeleteResponse, error) {
subUUID, err := uuid.Parse(request.GetSubid())
if err != nil {
return &subpb.DeleteResponse{
Timestamp: time.Now().UnixNano(),
}, err
}
s.networkElementWatchter.StopAndRemoveNetworkElementSubscription(subUUID)
return &subpb.DeleteResponse{
Timestamp: time.Now().UnixNano(),
}, nil
}
// Add creates a new subscription for the network element matching the provided ID using the provided subscribe options.
func (s *SubManagementServer) Add(ctx context.Context, request *subpb.AddRequest) (*subpb.AddResponse, error) {
mneID, err := uuid.Parse(request.GetMneid())
if err != nil {
return &subpb.AddResponse{
Timestamp: time.Now().UnixNano(),
}, err
}
var paths [][]string
for _, path := range request.Subscription.Paths {
var elems []string
for _, elem := range path.Elem {
elems = append(elems, elem)
}
paths = append(paths, elems)
}
err = s.networkElementWatchter.SubscribeToNetworkElementWithID(mneID,
&gnmi.SubscribeOptions{
Mode: request.Subscription.SubscribeOptions.GnmiMode,
StreamMode: request.Subscription.SubscribeOptions.GnmiStreamMode,
SampleInterval: request.Subscription.SubscribeOptions.SampleInterval,
Paths: paths,
},
)
if err != nil {
return &subpb.AddResponse{
Timestamp: time.Now().UnixNano(),
}, err
}
return &subpb.AddResponse{
Timestamp: time.Now().UnixNano(),
}, nil
}
Loading