Skip to content
Snippets Groups Projects
ContextServiceServicerImpl.py 19.1 KiB
Newer Older
# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
import grpc, logging, sqlalchemy
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from typing import Iterator
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from common.message_broker.MessageBroker import MessageBroker
from common.proto.context_pb2 import (
    Connection, ConnectionEvent, ConnectionId, ConnectionIdList, ConnectionList,
    Context, ContextEvent, ContextId, ContextIdList, ContextList,
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    Device, DeviceEvent, DeviceFilter, DeviceId, DeviceIdList, DeviceList,
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    Empty, EndPointIdList, EndPointNameList,
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    Link, LinkEvent, LinkId, LinkIdList, LinkList,
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    Service, ServiceEvent, ServiceFilter, ServiceId, ServiceIdList, ServiceList,
    Slice, SliceEvent, SliceFilter, SliceId, SliceIdList, SliceList,
    Topology, TopologyDetails, TopologyEvent, TopologyId, TopologyIdList, TopologyList,
    OpticalConfigList, OpticalConfigId, OpticalConfig, OpticalLink, OpticalLinkList,
Mohammad Ismaeel's avatar
Mohammad Ismaeel committed
    ServiceConfigRule
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from common.proto.policy_pb2 import PolicyRuleIdList, PolicyRuleId, PolicyRuleList, PolicyRule
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from common.proto.context_pb2_grpc import ContextServiceServicer
from common.proto.context_policy_pb2_grpc import ContextPolicyServiceServicer
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from .database.Connection import (
    connection_delete, connection_get, connection_list_ids, connection_list_objs, connection_set
)
from .database.Context import (
    context_delete, context_get, context_list_ids, context_list_objs, context_set
)
from .database.Device import (
    device_delete, device_get, device_list_ids, device_list_objs, device_select, device_set
)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from .database.EndPoint import endpoint_list_names
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from .database.Events import EventTopicEnum, consume_events
from .database.Link import (
    link_delete, link_get, link_list_ids, link_list_objs, link_set
)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from .database.PolicyRule import (
    policyrule_delete, policyrule_get, policyrule_list_ids, policyrule_list_objs,
    policyrule_set
)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from .database.Service import (
    service_delete, service_get, service_list_ids, service_list_objs, service_select,
    service_set, service_unset
)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from .database.Slice import (
    slice_delete, slice_get, slice_list_ids, slice_list_objs, slice_select,
    slice_set, slice_unset
)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
from .database.Topology import (
    topology_delete, topology_get, topology_get_details, topology_list_ids,
    topology_list_objs, topology_set
)
from .database.OpticalConfig import (
    set_opticalconfig, select_opticalconfig, get_opticalconfig, delete_opticalconfig,
    update_opticalconfig, delete_opticalchannel
)
from .database.OpticalLink import (
    optical_link_delete, optical_link_get, optical_link_list_objs, optical_link_set
Mohammad Ismaeel's avatar
Mohammad Ismaeel committed
from .database.ConfigRule import delete_config_rule
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
LOGGER = logging.getLogger(__name__)

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
METRICS_POOL = MetricsPool('Context', 'RPC')
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

class ContextServiceServicerImpl(ContextServiceServicer, ContextPolicyServiceServicer):
    def __init__(self, db_engine : sqlalchemy.engine.Engine, messagebroker : MessageBroker) -> None:
        LOGGER.debug('Creating Servicer...')
        self.db_engine = db_engine
        self.messagebroker = messagebroker
        LOGGER.debug('Servicer Created')

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def _get_metrics(self) -> MetricsPool: return METRICS_POOL
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    # ----- Context ----------------------------------------------------------------------------------------------------

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListContextIds(self, request : Empty, context : grpc.ServicerContext) -> ContextIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return context_list_ids(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListContexts(self, request : Empty, context : grpc.ServicerContext) -> ContextList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return context_list_objs(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetContext(self, request : ContextId, context : grpc.ServicerContext) -> Context:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return context_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetContext(self, request : Context, context : grpc.ServicerContext) -> ContextId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return context_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemoveContext(self, request : ContextId, context : grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return context_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetContextEvents(self, request : Empty, context : grpc.ServicerContext) -> Iterator[ContextEvent]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        for message in consume_events(self.messagebroker, {EventTopicEnum.CONTEXT}): yield message
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

    # ----- Topology ---------------------------------------------------------------------------------------------------

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListTopologyIds(self, request : ContextId, context : grpc.ServicerContext) -> TopologyIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return topology_list_ids(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListTopologies(self, request : ContextId, context : grpc.ServicerContext) -> TopologyList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return topology_list_objs(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetTopology(self, request : TopologyId, context : grpc.ServicerContext) -> Topology:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return topology_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def GetTopologyDetails(self, request : TopologyId, context : grpc.ServicerContext) -> TopologyDetails:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return topology_get_details(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetTopology(self, request : Topology, context : grpc.ServicerContext) -> TopologyId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return topology_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemoveTopology(self, request : TopologyId, context : grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return topology_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetTopologyEvents(self, request : Empty, context : grpc.ServicerContext) -> Iterator[TopologyEvent]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        for message in consume_events(self.messagebroker, {EventTopicEnum.TOPOLOGY}): yield message
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

    # ----- Device -----------------------------------------------------------------------------------------------------

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListDeviceIds(self, request : Empty, context : grpc.ServicerContext) -> DeviceIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return device_list_ids(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListDevices(self, request : Empty, context : grpc.ServicerContext) -> DeviceList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return device_list_objs(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetDevice(self, request : DeviceId, context : grpc.ServicerContext) -> Device:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return device_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetDevice(self, request : Device, context : grpc.ServicerContext) -> DeviceId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return device_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemoveDevice(self, request : DeviceId, context : grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return device_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SelectDevice(self, request : DeviceFilter, context : grpc.ServicerContext) -> DeviceList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return device_select(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetDeviceEvents(self, request : Empty, context : grpc.ServicerContext) -> Iterator[DeviceEvent]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        for message in consume_events(self.messagebroker, {EventTopicEnum.DEVICE}): yield message
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def ListEndPointNames(self, request : EndPointIdList, context : grpc.ServicerContext) -> EndPointNameList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return endpoint_list_names(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    # ----- Link -------------------------------------------------------------------------------------------------------
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListLinkIds(self, request : Empty, context : grpc.ServicerContext) -> LinkIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return link_list_ids(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListLinks(self, request : Empty, context : grpc.ServicerContext) -> LinkList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return link_list_objs(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetLink(self, request : LinkId, context : grpc.ServicerContext) -> Link:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return link_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetLink(self, request : Link, context : grpc.ServicerContext) -> LinkId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return link_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemoveLink(self, request : LinkId, context : grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return link_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetLinkEvents(self, request : Empty, context : grpc.ServicerContext) -> Iterator[LinkEvent]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        for message in consume_events(self.messagebroker, {EventTopicEnum.LINK}): yield message
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    # ----- Service ----------------------------------------------------------------------------------------------------

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListServiceIds(self, request : ContextId, context : grpc.ServicerContext) -> ServiceIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return service_list_ids(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListServices(self, request : ContextId, context : grpc.ServicerContext) -> ServiceList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return service_list_objs(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetService(self, request : ServiceId, context : grpc.ServicerContext) -> Service:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return service_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return service_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def UnsetService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return service_unset(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemoveService(self, request : ServiceId, context : grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return service_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def SelectService(self, request : ServiceFilter, context : grpc.ServicerContext) -> ServiceList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return service_select(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetServiceEvents(self, request : Empty, context : grpc.ServicerContext) -> Iterator[ServiceEvent]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        for message in consume_events(self.messagebroker, {EventTopicEnum.SERVICE}): yield message
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    # ----- Slice ----------------------------------------------------------------------------------------------------

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListSliceIds(self, request : ContextId, context : grpc.ServicerContext) -> SliceIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return slice_list_ids(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListSlices(self, request : ContextId, context : grpc.ServicerContext) -> SliceList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return slice_list_objs(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetSlice(self, request : SliceId, context : grpc.ServicerContext) -> Slice:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return slice_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetSlice(self, request : Slice, context : grpc.ServicerContext) -> SliceId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return slice_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def UnsetSlice(self, request : Slice, context : grpc.ServicerContext) -> SliceId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return slice_unset(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemoveSlice(self, request : SliceId, context : grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return slice_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SelectSlice(self, request : SliceFilter, context : grpc.ServicerContext) -> SliceList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return slice_select(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetSliceEvents(self, request : Empty, context : grpc.ServicerContext) -> Iterator[SliceEvent]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        for message in consume_events(self.messagebroker, {EventTopicEnum.SLICE}): yield message
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    # ----- Connection -------------------------------------------------------------------------------------------------

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListConnectionIds(self, request : ServiceId, context : grpc.ServicerContext) -> ConnectionIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return connection_list_ids(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListConnections(self, request : ContextId, context : grpc.ServicerContext) -> ConnectionList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return connection_list_objs(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetConnection(self, request : ConnectionId, context : grpc.ServicerContext) -> Connection:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return connection_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetConnection(self, request : Connection, context : grpc.ServicerContext) -> ConnectionId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return connection_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemoveConnection(self, request : ConnectionId, context : grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return connection_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetConnectionEvents(self, request : Empty, context : grpc.ServicerContext) -> Iterator[ConnectionEvent]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        for message in consume_events(self.messagebroker, {EventTopicEnum.CONNECTION}): yield message
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    # ----- Policy Rule ------------------------------------------------------------------------------------------------
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListPolicyRuleIds(self, request : Empty, context: grpc.ServicerContext) -> PolicyRuleIdList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return policyrule_list_ids(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def ListPolicyRules(self, request : Empty, context: grpc.ServicerContext) -> PolicyRuleList:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return policyrule_list_objs(self.db_engine)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def GetPolicyRule(self, request : PolicyRuleId, context: grpc.ServicerContext) -> PolicyRule:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return policyrule_get(self.db_engine, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def SetPolicyRule(self, request : PolicyRule, context: grpc.ServicerContext) -> PolicyRuleId:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return policyrule_set(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def RemovePolicyRule(self, request : PolicyRuleId, context: grpc.ServicerContext) -> Empty:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return policyrule_delete(self.db_engine, self.messagebroker, request)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

    # ---------------------------- Experimental -------------------

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def GetOpticalConfig(self, request : Empty, context : grpc.ServicerContext) -> OpticalConfigList:
        result = get_opticalconfig(self.db_engine)
        return OpticalConfigList(opticalconfigs=result)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def SetOpticalConfig(self, request : OpticalConfig, context : grpc.ServicerContext) -> OpticalConfigId:
        result = set_opticalconfig(self.db_engine, request)
        return OpticalConfigId(**result)
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def UpdateOpticalConfig(self, request : OpticalConfig, context : grpc.ServicerContext) -> OpticalConfigId:
        result = update_opticalconfig(self.db_engine, request)
        return OpticalConfigId(**result)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def SelectOpticalConfig(self, request : OpticalConfigId, context : grpc.ServicerContext) -> OpticalConfig:
        result = select_opticalconfig(self.db_engine, request)
        optical_config_id = OpticalConfigId()
        device_id = DeviceId()
        optical_config_id.CopyFrom(result.opticalconfig_id)
        device_id.CopyFrom(result.device_id)
        return OpticalConfig(config=result.config, opticalconfig_id=optical_config_id , device_id=device_id)
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def DeleteOpticalConfig(self, request : OpticalConfigId, context : grpc.ServicerContext) -> Empty:
        delete_opticalconfig(self.db_engine, self.messagebroker, request)
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def DeleteOpticalChannel(self, request : OpticalConfig, context : grpc.ServicerContext) -> Empty:
        delete_opticalchannel(self.db_engine, self.messagebroker, request)
        return Empty()

    #--------------------- Experimental Optical Link -------------------
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def GetOpticalLinkList(self, request : Empty, context : grpc.ServicerContext) -> OpticalLinkList:
        return optical_link_list_objs(self.db_engine)

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def GetOpticalLink(self, request : LinkId, context : grpc.ServicerContext) -> OpticalLink:
        return optical_link_get(self.db_engine, request)

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def SetOpticalLink(self, request : Link, context : grpc.ServicerContext) -> LinkId:
        return optical_link_set(self.db_engine, self.messagebroker, request)

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def DeleteOpticalLink(self, request : LinkId, context : grpc.ServicerContext) -> Empty:
        return optical_link_delete(self.db_engine, self.messagebroker, request)

Mohammad Ismaeel's avatar
Mohammad Ismaeel committed
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def DeleteServiceConfigRule(self, request : ServiceConfigRule, context : grpc.ServicerContext) -> Empty:
        return delete_config_rule(self.db_engine,  request)