Skip to content
Snippets Groups Projects
ContextServiceServicerImpl.py 15.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • Lluis Gifre Renom's avatar
    Lluis Gifre Renom committed
    # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (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,
    
    Lluis Gifre Renom's avatar
    Lluis Gifre Renom committed
        Topology, TopologyDetails, TopologyEvent, TopologyId, TopologyIdList, TopologyList)
    
    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)
    
    Lluis Gifre Renom's avatar
    Lluis Gifre Renom committed
    from .database.Context import context_delete, context_get, context_list_ids, context_list_objs, context_set
    
    Lluis Gifre Renom's avatar
    Lluis Gifre Renom committed
    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
    
    Lluis Gifre Renom's avatar
    Lluis Gifre Renom committed
    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)
    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)
    
    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 : ContextId, 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)