diff --git a/src/kpi_manager/service/KpiManagerService.py b/src/kpi_manager/service/KpiManagerService.py index d42ce14eb217df2ead7c224df9b7c273ddbac524..dbbcec2cf0e017b5797348578b3537da1420ecbc 100755 --- a/src/kpi_manager/service/KpiManagerService.py +++ b/src/kpi_manager/service/KpiManagerService.py @@ -12,106 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -import logging, os, grpc -from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method -from common.proto.context_pb2 import Empty - from common.Constants import ServiceNameEnum from common.Settings import get_service_port_grpc +# from common.proto.monitoring_pb2_grpc import add_MonitoringServiceServicer_to_server from common.proto.kpi_manager_pb2_grpc import add_KpiManagerServiceServicer_to_server -from common.proto.kpi_manager_pb2_grpc import KpiManagerServiceServicer -from monitoring.service.NameMapping import NameMapping - -from common.proto.kpi_manager_pb2 import kpiDescriptor, KpiId, KpiDescriptorList -from monitoring.service import ManagementDBTools - from common.tools.service.GenericGrpcService import GenericGrpcService +from kpi_manager.service.KpiManagerServiceServicerImpl import KpiManagerServiceServicerImpl +# from monitoring.service.MonitoringServiceServicerImpl import MonitoringServiceServicerImpl +from monitoring.service.NameMapping import NameMapping -LOGGER = logging.getLogger(__name__) - -METRICS_POOL = MetricsPool('Monitoring', 'RPC') - -class KpiManagerServer(KpiManagerServiceServicer): - def __init__(self, cls_name: str = __name__): - LOGGER.info('Init KpiManagerService') - port = get_service_port_grpc(ServiceNameEnum.KPIMANAGER) # port updated - GenericGrpcService(port, cls_name = cls_name) # class inheretence was removed - - # Init sqlite monitoring db - self.management_db = ManagementDBTools.ManagementDB('monitoring.db') # why monitoring.db here??? - LOGGER.info('MetricsDB initialized --- KPI Manager Service') +class KpiManagerService(GenericGrpcService): + def __init__(self, name_mapping : NameMapping, cls_name: str = __name__) -> None: + port = get_service_port_grpc(ServiceNameEnum.KPIMANAGER) + super().__init__(port, cls_name=cls_name) + self.kpiManagerService_servicer = KpiManagerServiceServicerImpl(name_mapping) def install_servicers(self): - # There is no need to create the "MonitoringServiceServicerImpl" instance because actual class - # implementation exists in the same class. - add_KpiManagerServiceServicer_to_server(KpiManagerServer(), self.server) - - @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) - def SetKpi( - self, request: KpiDescriptor, grpc_context: grpc.ServicerContext - ) -> KpiId: - response = KpiId() - kpi_description = request.kpi_description - kpi_sample_type = request.kpi_sample_type - kpi_device_id = request.device_id.device_uuid.uuid - kpi_endpoint_id = request.endpoint_id.endpoint_uuid.uuid - kpi_service_id = request.service_id.service_uuid.uuid - kpi_slice_id = request.slice_id.slice_uuid.uuid - kpi_connection_id = request.connection_id.connection_uuid.uuid - kpi_link_id = request.link_id.link_uuid.uuid - if request.kpi_id.kpi_id.uuid != "": - response.kpi_id.uuid = request.kpi_id.kpi_id.uuid - # Here the code to modify an existing kpi - else: - data = self.management_db.insert_KPI( - kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, - kpi_service_id, kpi_slice_id, kpi_connection_id, kpi_link_id) - response.kpi_id.uuid = str(data) - return response - - @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) - def DeleteKpi(self, request: KpiId, grpc_context: grpc.ServicerContext) -> Empty: - kpi_id = int(request.kpi_id.uuid) - kpi = self.management_db.get_KPI(kpi_id) - if kpi: - self.management_db.delete_KPI(kpi_id) - else: - LOGGER.info('DeleteKpi error: KpiID({:s}): not found in database'.format(str(kpi_id))) - return Empty() - - @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) - def GetKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> KpiDescriptor: - kpi_id = request.kpi_id.uuid - kpi_db = self.management_db.get_KPI(int(kpi_id)) - kpiDescriptor = KpiDescriptor() - if kpi_db is None: - LOGGER.info('GetKpiDescriptor error: KpiID({:s}): not found in database'.format(str(kpi_id))) - else: - kpiDescriptor.kpi_description = kpi_db[1] - kpiDescriptor.kpi_sample_type = kpi_db[2] - kpiDescriptor.device_id.device_uuid.uuid = str(kpi_db[3]) - kpiDescriptor.endpoint_id.endpoint_uuid.uuid = str(kpi_db[4]) - kpiDescriptor.service_id.service_uuid.uuid = str(kpi_db[5]) - kpiDescriptor.slice_id.slice_uuid.uuid = str(kpi_db[6]) - kpiDescriptor.connection_id.connection_uuid.uuid = str(kpi_db[7]) - kpiDescriptor.link_id.link_uuid.uuid = str(kpi_db[8]) - return kpiDescriptor - - @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) - def GetKpiDescriptorList(self, request: Empty, grpc_context: grpc.ServicerContext) -> KpiDescriptorList: - kpi_descriptor_list = KpiDescriptorList() - data = self.management_db.get_KPIS() - LOGGER.debug(f"data: {data}") - for item in data: - kpi_descriptor = KpiDescriptor() - kpi_descriptor.kpi_id.kpi_id.uuid = str(item[0]) - kpi_descriptor.kpi_description = item[1] - kpi_descriptor.kpi_sample_type = item[2] - kpi_descriptor.device_id.device_uuid.uuid = str(item[3]) - kpi_descriptor.endpoint_id.endpoint_uuid.uuid = str(item[4]) - kpi_descriptor.service_id.service_uuid.uuid = str(item[5]) - kpi_descriptor.slice_id.slice_uuid.uuid = str(item[6]) - kpi_descriptor.connection_id.connection_uuid.uuid = str(item[7]) - kpi_descriptor.link_id.link_uuid.uuid = str(item[8]) - kpi_descriptor_list.kpi_descriptor_list.append(kpi_descriptor) - return kpi_descriptor_list \ No newline at end of file + add_KpiManagerServiceServicer_to_server(self.kpiManagerService_servicer, self.server)