Commit 5c64c58b authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

KPI Manager:

- Corrected exception handling
parent cef03c41
Loading
Loading
Loading
Loading
+34 −51
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_m
from common.proto.context_pb2 import Empty
from common.proto.kpi_manager_pb2_grpc import KpiManagerServiceServicer
from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor, KpiDescriptorFilter, KpiDescriptorList
# from kpi_manager.database.Kpi_DB import KpiDB
from common.method_wrappers.ServiceExceptions import NotFoundException
from kpi_manager.database.KpiDB import KpiDB
from kpi_manager.database.KpiModel import Kpi as KpiModel

@@ -31,65 +31,48 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
        self.kpi_db_obj = KpiDB(KpiModel)
    
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def SetKpiDescriptor(self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore
    def SetKpiDescriptor(
        self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore
    ) -> KpiId: # type: ignore
        response = KpiId()
        LOGGER.info("Received gRPC message object: {:}".format(request))
        try:
        kpi_to_insert = KpiModel.convert_KpiDescriptor_to_row(request)
            if(self.kpi_db_obj.add_row_to_db(kpi_to_insert)):
        if self.kpi_db_obj.add_row_to_db(kpi_to_insert):
            response.kpi_id.uuid = request.kpi_id.kpi_id.uuid
            # LOGGER.info("Added Row: {:}".format(response))
        return response
        except Exception as e:
            LOGGER.info("Unable to create KpiModel class object. {:}".format(e))

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)        
    def GetKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore
    def GetKpiDescriptor(
        self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore
    ) -> KpiDescriptor: # type: ignore
        response = KpiDescriptor()
        print("--> Received gRPC message object: {:}".format(request))
        LOGGER.info("Received gRPC message object: {:}".format(request))
        try: 
        kpi_id_to_search = request.kpi_id.uuid
        row = self.kpi_db_obj.search_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search)
        if row is None:
                print ('No matching row found for kpi id: {:}'.format(kpi_id_to_search))
            LOGGER.info('No matching row found kpi id: {:}'.format(kpi_id_to_search))
                return Empty()
            else:
            raise NotFoundException('KpiDescriptor', kpi_id_to_search)
        response = KpiModel.convert_row_to_KpiDescriptor(row)
        return response
        except Exception as e:
            print ('Unable to search kpi id. {:}'.format(e))
            LOGGER.info('Unable to search kpi id. {:}'.format(e))
            raise e
    
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore
    def DeleteKpiDescriptor(
        self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore
    ) -> Empty: # type: ignore
        LOGGER.info("Received gRPC message object: {:}".format(request))
        try:
        kpi_id_to_search = request.kpi_id.uuid
        self.kpi_db_obj.delete_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search)
        except Exception as e:
            LOGGER.info('Unable to search kpi id. {:}'.format(e))
        finally:
        return Empty()

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def SelectKpiDescriptor(self, filter: KpiDescriptorFilter, grpc_context: grpc.ServicerContext # type: ignore
    def SelectKpiDescriptor(
        self, filter: KpiDescriptorFilter, grpc_context: grpc.ServicerContext # type: ignore
    ) -> KpiDescriptorList: # type: ignore
        LOGGER.info("Received gRPC message object: {:}".format(filter))
        response = KpiDescriptorList()
        try:
        rows = self.kpi_db_obj.select_with_filter(KpiModel, filter)
        except Exception as e:
            LOGGER.info('Unable to apply filter on kpi descriptor. {:}'.format(e))
        try:
        for row in rows:
            kpiDescriptor_obj = KpiModel.convert_row_to_KpiDescriptor(row)
            response.kpi_descriptor_list.append(kpiDescriptor_obj)
        return response
        except Exception as e:
            LOGGER.info('Unable to process filter response {:}'.format(e))