Newer
Older
pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core"
cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi"
ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
"code.fbi.h-da.de/danet/gosdn/controller/metrics"
"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
"code.fbi.h-da.de/danet/gosdn/controller/store"
// CoreServer represents a core server.
Fabian Seidl
committed
pndService networkdomain.Service
pluginService plugin.Service
csbiClient cpb.CsbiServiceClient
pndCallbackFn func(uuid.UUID, chan networkelement.Details)
// NewCoreServer receives a pndStore and returns a new coreServer.
Fabian Seidl
committed
func NewCoreServer(pndService networkdomain.Service, pluginService plugin.Service, pndCallbackFn func(uuid.UUID, chan networkelement.Details), csbiClient cpb.CsbiServiceClient) *CoreServer {
Fabian Seidl
committed
pndService: pndService,
pluginService: pluginService,
pndCallbackFn: pndCallbackFn,
csbiClient: csbiClient,
// GetPnd returns a existing pnd.
func (s CoreServer) GetPnd(ctx context.Context, request *pb.GetPndRequest) (*pb.GetPndResponse, error) {
labels := prometheus.Labels{"service": "core", "rpc": "get"}
start := metrics.StartHook(labels, grpcRequestsTotal)
defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
Fabian Seidl
committed
pndID, err := uuid.Parse(request.Pid)
if err != nil {
return nil, handleRPCError(labels, err)
storedPnd, err := s.pndService.Get(store.Query{ID: pndID})
Fabian Seidl
committed
if err != nil {
return nil, err
}
pnd := &ppb.PrincipalNetworkDomain{
Id: storedPnd.ID().String(),
Name: storedPnd.GetName(),
Description: storedPnd.GetDescription(),
Fabian Seidl
committed
return &pb.GetPndResponse{
Timestamp: time.Now().UnixNano(),
Fabian Seidl
committed
Pnd: pnd,
// GetPndList returns all existing pnds.
func (s CoreServer) GetPndList(ctx context.Context, request *pb.GetPndListRequest) (*pb.GetPndListResponse, error) {
labels := prometheus.Labels{"service": "core", "rpc": "get"}
start := metrics.StartHook(labels, grpcRequestsTotal)
defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
pndList, err := s.pndService.GetAll()
if err != nil {
return nil, err
}
pnds := make([]*ppb.PrincipalNetworkDomain, len(pndList))
for i, pnd := range pndList {
pnds[i] = &ppb.PrincipalNetworkDomain{
Id: pnd.ID().String(),
Name: pnd.GetName(),
Description: pnd.GetDescription(),
}
}
Timestamp: time.Now().UnixNano(),
Pnd: pnds,
}, nil
}
// CreatePndList creates a pnd list.
func (s CoreServer) CreatePndList(ctx context.Context, request *pb.CreatePndListRequest) (*pb.CreatePndListResponse, error) {
labels := prometheus.Labels{"service": "core", "rpc": "set"}
start := metrics.StartHook(labels, grpcRequestsTotal)
defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
pnd := nucleus.NewPND(uuid.New(), r.Name, r.Description)
if err := s.pndService.Add(pnd); err != nil {
return &pb.CreatePndListResponse{
Timestamp: time.Now().UnixNano(),
Status: pb.Status_STATUS_OK,
}, nil
}
// DeletePnd deletes an existing pnd.
func (s CoreServer) DeletePnd(ctx context.Context, request *pb.DeletePndRequest) (*pb.DeletePndResponse, error) {
labels := prometheus.Labels{"service": "core", "rpc": "set"}
start := metrics.StartHook(labels, grpcRequestsTotal)
defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
pndID, err := uuid.Parse(request.Pid)
if err != nil {
return nil, handleRPCError(labels, err)
}
pnd, err := s.pndService.Get(store.Query{ID: pndID})
if err != nil {
return nil, handleRPCError(labels, err)
}
err = s.pndService.Delete(pnd)
if err != nil {
return &pb.DeletePndResponse{
Timestamp: time.Now().UnixNano(),
Status: pb.Status_STATUS_ERROR,
}, err
}