Loading src/kpi_manager/service/KPI_configs.json 0 → 100644 +8 −0 Original line number Diff line number Diff line { "KPIs": [ "node_network_receive_packets_total", "node_network_receive_bytes_total", "node_network_transmit_bytes_total" ] } No newline at end of file src/kpi_manager/service/KpiManagerServiceServicerImpl.py +16 −57 Original line number Diff line number Diff line Loading @@ -37,10 +37,6 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): LOGGER.info('Init KpiManagerService') self.Kpi_DBobj = Kpi_DB() @staticmethod def create_database_if_not_exist(engine: sqlalchemy.engine.Engine) -> None: if not sqlalchemy_utils.database_exists(engine.url): sqlalchemy_utils.create_database(engine.url) @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) def SetKpiDescriptor(self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore Loading Loading @@ -82,12 +78,13 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): response.slice_id.slice_uuid.uuid = row.slice_id response.endpoint_id.endpoint_uuid.uuid = row.endpoint_id response.connection_id.connection_uuid.uuid = row.connection_id response.link_id.link_uuid.uuid = row.link_id return response except Exception as e: LOGGER.info('Unable to search kpi id. {:}'.format(e)) @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore ) -> Empty: # type: ignore LOGGER.info("Received gRPC message object: {:}".format(request)) try: Loading @@ -106,8 +103,13 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): # LOGGER.info("Recevied requested Object: {:}".format(request)) # re-structre the filter. create dynamic filter filter_to_apply = dict() filter_to_apply['device_id'] = request.device_id[0].device_uuid.uuid filter_to_apply['kpi_sample_type'] = request.kpi_sample_type[0] filter_to_apply['device_id'] = request.device_id[0].device_uuid.uuid filter_to_apply['endpoint_id'] = request.endpoint_id[0].endpoint_uuid.uuid filter_to_apply['service_id'] = request.service_id[0].service_uuid.uuid filter_to_apply['slice_id'] = request.slice_id[0].slice_uuid.uuid filter_to_apply['connection_id'] = request.connection_id[0].connection_uuid.uuid filter_to_apply['link_id'] = request.link_id[0].link_uuid.uuid try: rows = self.Kpi_DBobj.select_with_filter(KpiModel, **filter_to_apply) except Exception as e: Loading @@ -117,57 +119,14 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): for row in rows: kpiDescriptor_obj = KpiDescriptor() kpiDescriptor_obj.kpi_id.kpi_id.uuid = row.kpi_id # kpiDescriptor_obj.kpi_description = row.kpi_description kpiDescriptor_obj.kpi_description = row.kpi_description kpiDescriptor_obj.kpi_sample_type = row.kpi_sample_type kpiDescriptor_obj.service_id.service_uuid.uuid = row.service_id kpiDescriptor_obj.device_id.device_uuid.uuid = row.device_id kpiDescriptor_obj.slice_id.slice_uuid.uuid = row.slice_id kpiDescriptor_obj.endpoint_id.endpoint_uuid.uuid = row.endpoint_id kpiDescriptor_obj.connection_id.connection_uuid.uuid = row.connection_id response.kpi_descriptor_list.append(kpiDescriptor_obj) return response except Exception as e: LOGGER.info('Unable to process response {:}'.format(e)) # @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) # def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> Empty: # type: ignore # 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: # type: ignore # 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 SelectKpiDescriptor(self, request: KpiDescriptorFilter, grpc_context: grpc.ServicerContext) -> KpiDescriptorList: # type: ignore # 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 src/kpi_manager/service/database/Kpi_DB.py +4 −1 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ class Kpi_DB: return True except Exception as e: session.rollback() if "psycopg2.errors.UniqueViolation" in str(e): LOGGER.warning(f"Unique key voilation: {row.__class__.__name__} table. {str(e)}") else: LOGGER.error(f"Failed to insert new row into {row.__class__.__name__} table. {str(e)}") return False finally: Loading src/kpi_manager/tests/test_kpi_manager.py +25 −26 Original line number Diff line number Diff line Loading @@ -43,10 +43,8 @@ from device.service.driver_api.DriverInstanceCache import DriverInstanceCache from device.service.DeviceService import DeviceService from device.client.DeviceClient import DeviceClient from kpi_manager.tests.test_messages import create_kpi_request, create_kpi_request_b, \ create_kpi_request_c, create_kpi_request_d, create_kpi_filter_request, \ create_kpi_descriptor_request, create_kpi_id_request, create_kpi_filter_request_a, \ create_kpi_descriptor_request_a from kpi_manager.tests.test_messages import create_kpi_descriptor_request, create_kpi_id_request, \ create_kpi_filter_request_a, create_kpi_descriptor_request_a # from monitoring.service.MonitoringService import MonitoringService from kpi_manager.service.KpiManagerService import KpiManagerService # from monitoring.client.MonitoringClient import MonitoringClient Loading Loading @@ -215,33 +213,34 @@ def kpi_manager_client(kpi_manager_service : KpiManagerService): # pylint: disab # ---------- 2nd Iteration Tests ----------------- def test_SetKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_SetKpiDescriptor: START <<< ") _descriptors = ["node_network_receive_packets_total", "node_network_receive_bytes_total", "node_network_transmit_bytes_total"] with open("kpi_manager/service/KPI_configs.json", 'r') as file: data = json.load(file) _descriptors = data.get('KPIs', []) for _descritor_name in _descriptors: response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request_a(_descritor_name)) LOGGER.info("Response gRPC message object: {:}".format(response)) assert isinstance(response, KpiId) # def test_GetKpiDescriptor(kpi_manager_client): # LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ") # response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request()) # LOGGER.info("Response gRPC message object: {:}".format(response)) # assert isinstance(response, KpiDescriptor) # def test_DeleteKpiDescriptor(kpi_manager_client): # LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ") # response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request()) # del_response = kpi_manager_client.DeleteKpiDescriptor(response) # kpi_manager_client.GetKpiDescriptor(response) # LOGGER.info("Response of delete method gRPC message object: {:}".format(del_response)) # assert isinstance(response, KpiId) # def test_SelectKpiDescriptor(kpi_manager_client): # LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ") # response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request_a()) # LOGGER.info("Response gRPC message object: {:}".format(response)) # assert isinstance(response, KpiDescriptorList) def test_GetKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ") response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request()) LOGGER.info("Response gRPC message object: {:}".format(response)) assert isinstance(response, KpiDescriptor) def test_DeleteKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ") response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request()) del_response = kpi_manager_client.DeleteKpiDescriptor(response) kpi_manager_client.GetKpiDescriptor(response) LOGGER.info("Response of delete method gRPC message object: {:}".format(del_response)) assert isinstance(del_response, Empty) def test_SelectKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ") kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request_a()) response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request_a()) LOGGER.info("Response gRPC message object: {:}".format(response)) assert isinstance(response, KpiDescriptorList) # ------------- INITIAL TESTs ---------------- # Test case that makes use of client fixture to test server's CreateKpi method Loading src/kpi_manager/tests/test_messages.py +82 −76 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ def create_kpi_id_request(): _kpi_id.kpi_id.uuid = "34f73604-eca6-424f-9995-18b519ad0978" return _kpi_id def create_kpi_descriptor_request_a(descriptor_name: str): def create_kpi_descriptor_request_a(descriptor_name: str = "Test_name"): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_id.kpi_id.uuid = str(uuid.uuid4()) _create_kpi_request.kpi_description = descriptor_name Loading Loading @@ -52,14 +52,87 @@ def create_kpi_descriptor_request(): def create_kpi_filter_request_a(): _create_kpi_filter_request = kpi_manager_pb2.KpiDescriptorFilter() _create_kpi_filter_request.kpi_sample_type.append(102) _create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED) device_id_obj = DeviceId() device_id_obj.device_uuid.uuid = "SERV3" endpoint_id_obj = EndPointId() service_id_obj = ServiceId() slice_id_obj = SliceId() connection_id_obj = ConnectionId() link_id_obj = LinkId() device_id_obj.device_uuid.uuid = "DEV1" endpoint_id_obj.endpoint_uuid.uuid = "END1" service_id_obj.service_uuid.uuid = "SERV1" slice_id_obj.slice_uuid.uuid = "SLC1" connection_id_obj.connection_uuid.uuid = "CON1" link_id_obj.link_uuid.uuid = "LNK1" _create_kpi_filter_request.device_id.append(device_id_obj) _create_kpi_filter_request.endpoint_id.append(endpoint_id_obj) _create_kpi_filter_request.service_id.append(service_id_obj) _create_kpi_filter_request.slice_id.append(slice_id_obj) _create_kpi_filter_request.connection_id.append(connection_id_obj) _create_kpi_filter_request.link_id.append(link_id_obj) return _create_kpi_filter_request # -------------------- Initial Test messages ------------------------------------- # def create_kpi_request(kpi_id_str): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV' + str(kpi_id_str) # _create_kpi_request.service_id.service_uuid.uuid = 'SERV' + str(kpi_id_str) # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC' + str(kpi_id_str) # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END' + str(kpi_id_str) # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON' + str(kpi_id_str) # return _create_kpi_request # def create_kpi_request_b(): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request = str(uuid.uuid4()) # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV2' # pylint: disable=maybe-no-member # _create_kpi_request.service_id.service_uuid.uuid = 'SERV2' # pylint: disable=maybe-no-member # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC2' # pylint: disable=maybe-no-member # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END2' # pylint: disable=maybe-no-member # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON2' # pylint: disable=maybe-no-member # return _create_kpi_request # def create_kpi_request_c(): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV3' # pylint: disable=maybe-no-member # _create_kpi_request.service_id.service_uuid.uuid = 'SERV3' # pylint: disable=maybe-no-member # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC3' # pylint: disable=maybe-no-member # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END3' # pylint: disable=maybe-no-member # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON3' # pylint: disable=maybe-no-member # return _create_kpi_request # def create_kpi_request_d(): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV4' # pylint: disable=maybe-no-member # _create_kpi_request.service_id.service_uuid.uuid = 'SERV4' # pylint: disable=maybe-no-member # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC4' # pylint: disable=maybe-no-member # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END4' # pylint: disable=maybe-no-member # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON4' # pylint: disable=maybe-no-member # return _create_kpi_request # def kpi_descriptor_list(): # _kpi_descriptor_list = kpi_manager_pb2.KpiDescriptorList() # return _kpi_descriptor_list # def create_kpi_filter_request(): # _create_kpi_filter_request = kpi_manager_pb2.KpiDescriptorFilter() # _create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED) # new_device_id = _create_kpi_filter_request.device_id.add() # new_device_id.device_uuid.uuid = 'DEV3' # new_device_id.device_uuid.uuid = 'DEV1' # new_service_id = _create_kpi_filter_request.service_id.add() # new_service_id.service_uuid.uuid = 'SERV1' # new_slice_id = _create_kpi_filter_request.slice_id.add() Loading @@ -69,71 +142,4 @@ def create_kpi_filter_request_a(): # new_connection_id = _create_kpi_filter_request.connection_id.add() # new_connection_id.connection_uuid.uuid = 'CON1' return _create_kpi_filter_request # -------------------- Initial Test messages ------------------------------------- def create_kpi_request(kpi_id_str): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV' + str(kpi_id_str) _create_kpi_request.service_id.service_uuid.uuid = 'SERV' + str(kpi_id_str) _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC' + str(kpi_id_str) _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END' + str(kpi_id_str) _create_kpi_request.connection_id.connection_uuid.uuid = 'CON' + str(kpi_id_str) return _create_kpi_request def create_kpi_request_b(): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request = str(uuid.uuid4()) _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV2' # pylint: disable=maybe-no-member _create_kpi_request.service_id.service_uuid.uuid = 'SERV2' # pylint: disable=maybe-no-member _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC2' # pylint: disable=maybe-no-member _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END2' # pylint: disable=maybe-no-member _create_kpi_request.connection_id.connection_uuid.uuid = 'CON2' # pylint: disable=maybe-no-member return _create_kpi_request def create_kpi_request_c(): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV3' # pylint: disable=maybe-no-member _create_kpi_request.service_id.service_uuid.uuid = 'SERV3' # pylint: disable=maybe-no-member _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC3' # pylint: disable=maybe-no-member _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END3' # pylint: disable=maybe-no-member _create_kpi_request.connection_id.connection_uuid.uuid = 'CON3' # pylint: disable=maybe-no-member return _create_kpi_request def create_kpi_request_d(): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV4' # pylint: disable=maybe-no-member _create_kpi_request.service_id.service_uuid.uuid = 'SERV4' # pylint: disable=maybe-no-member _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC4' # pylint: disable=maybe-no-member _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END4' # pylint: disable=maybe-no-member _create_kpi_request.connection_id.connection_uuid.uuid = 'CON4' # pylint: disable=maybe-no-member return _create_kpi_request def kpi_descriptor_list(): _kpi_descriptor_list = kpi_manager_pb2.KpiDescriptorList() return _kpi_descriptor_list def create_kpi_filter_request(): _create_kpi_filter_request = kpi_manager_pb2.KpiDescriptorFilter() _create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED) new_device_id = _create_kpi_filter_request.device_id.add() new_device_id.device_uuid.uuid = 'DEV1' new_service_id = _create_kpi_filter_request.service_id.add() new_service_id.service_uuid.uuid = 'SERV1' new_slice_id = _create_kpi_filter_request.slice_id.add() new_slice_id.slice_uuid.uuid = 'SLC1' new_endpoint_id = _create_kpi_filter_request.endpoint_id.add() new_endpoint_id.endpoint_uuid.uuid = 'END1' new_connection_id = _create_kpi_filter_request.connection_id.add() new_connection_id.connection_uuid.uuid = 'CON1' return _create_kpi_filter_request No newline at end of file # return _create_kpi_filter_request No newline at end of file Loading
src/kpi_manager/service/KPI_configs.json 0 → 100644 +8 −0 Original line number Diff line number Diff line { "KPIs": [ "node_network_receive_packets_total", "node_network_receive_bytes_total", "node_network_transmit_bytes_total" ] } No newline at end of file
src/kpi_manager/service/KpiManagerServiceServicerImpl.py +16 −57 Original line number Diff line number Diff line Loading @@ -37,10 +37,6 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): LOGGER.info('Init KpiManagerService') self.Kpi_DBobj = Kpi_DB() @staticmethod def create_database_if_not_exist(engine: sqlalchemy.engine.Engine) -> None: if not sqlalchemy_utils.database_exists(engine.url): sqlalchemy_utils.create_database(engine.url) @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) def SetKpiDescriptor(self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore Loading Loading @@ -82,12 +78,13 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): response.slice_id.slice_uuid.uuid = row.slice_id response.endpoint_id.endpoint_uuid.uuid = row.endpoint_id response.connection_id.connection_uuid.uuid = row.connection_id response.link_id.link_uuid.uuid = row.link_id return response except Exception as e: LOGGER.info('Unable to search kpi id. {:}'.format(e)) @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore ) -> Empty: # type: ignore LOGGER.info("Received gRPC message object: {:}".format(request)) try: Loading @@ -106,8 +103,13 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): # LOGGER.info("Recevied requested Object: {:}".format(request)) # re-structre the filter. create dynamic filter filter_to_apply = dict() filter_to_apply['device_id'] = request.device_id[0].device_uuid.uuid filter_to_apply['kpi_sample_type'] = request.kpi_sample_type[0] filter_to_apply['device_id'] = request.device_id[0].device_uuid.uuid filter_to_apply['endpoint_id'] = request.endpoint_id[0].endpoint_uuid.uuid filter_to_apply['service_id'] = request.service_id[0].service_uuid.uuid filter_to_apply['slice_id'] = request.slice_id[0].slice_uuid.uuid filter_to_apply['connection_id'] = request.connection_id[0].connection_uuid.uuid filter_to_apply['link_id'] = request.link_id[0].link_uuid.uuid try: rows = self.Kpi_DBobj.select_with_filter(KpiModel, **filter_to_apply) except Exception as e: Loading @@ -117,57 +119,14 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): for row in rows: kpiDescriptor_obj = KpiDescriptor() kpiDescriptor_obj.kpi_id.kpi_id.uuid = row.kpi_id # kpiDescriptor_obj.kpi_description = row.kpi_description kpiDescriptor_obj.kpi_description = row.kpi_description kpiDescriptor_obj.kpi_sample_type = row.kpi_sample_type kpiDescriptor_obj.service_id.service_uuid.uuid = row.service_id kpiDescriptor_obj.device_id.device_uuid.uuid = row.device_id kpiDescriptor_obj.slice_id.slice_uuid.uuid = row.slice_id kpiDescriptor_obj.endpoint_id.endpoint_uuid.uuid = row.endpoint_id kpiDescriptor_obj.connection_id.connection_uuid.uuid = row.connection_id response.kpi_descriptor_list.append(kpiDescriptor_obj) return response except Exception as e: LOGGER.info('Unable to process response {:}'.format(e)) # @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) # def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> Empty: # type: ignore # 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: # type: ignore # 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 SelectKpiDescriptor(self, request: KpiDescriptorFilter, grpc_context: grpc.ServicerContext) -> KpiDescriptorList: # type: ignore # 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
src/kpi_manager/service/database/Kpi_DB.py +4 −1 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ class Kpi_DB: return True except Exception as e: session.rollback() if "psycopg2.errors.UniqueViolation" in str(e): LOGGER.warning(f"Unique key voilation: {row.__class__.__name__} table. {str(e)}") else: LOGGER.error(f"Failed to insert new row into {row.__class__.__name__} table. {str(e)}") return False finally: Loading
src/kpi_manager/tests/test_kpi_manager.py +25 −26 Original line number Diff line number Diff line Loading @@ -43,10 +43,8 @@ from device.service.driver_api.DriverInstanceCache import DriverInstanceCache from device.service.DeviceService import DeviceService from device.client.DeviceClient import DeviceClient from kpi_manager.tests.test_messages import create_kpi_request, create_kpi_request_b, \ create_kpi_request_c, create_kpi_request_d, create_kpi_filter_request, \ create_kpi_descriptor_request, create_kpi_id_request, create_kpi_filter_request_a, \ create_kpi_descriptor_request_a from kpi_manager.tests.test_messages import create_kpi_descriptor_request, create_kpi_id_request, \ create_kpi_filter_request_a, create_kpi_descriptor_request_a # from monitoring.service.MonitoringService import MonitoringService from kpi_manager.service.KpiManagerService import KpiManagerService # from monitoring.client.MonitoringClient import MonitoringClient Loading Loading @@ -215,33 +213,34 @@ def kpi_manager_client(kpi_manager_service : KpiManagerService): # pylint: disab # ---------- 2nd Iteration Tests ----------------- def test_SetKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_SetKpiDescriptor: START <<< ") _descriptors = ["node_network_receive_packets_total", "node_network_receive_bytes_total", "node_network_transmit_bytes_total"] with open("kpi_manager/service/KPI_configs.json", 'r') as file: data = json.load(file) _descriptors = data.get('KPIs', []) for _descritor_name in _descriptors: response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request_a(_descritor_name)) LOGGER.info("Response gRPC message object: {:}".format(response)) assert isinstance(response, KpiId) # def test_GetKpiDescriptor(kpi_manager_client): # LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ") # response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request()) # LOGGER.info("Response gRPC message object: {:}".format(response)) # assert isinstance(response, KpiDescriptor) # def test_DeleteKpiDescriptor(kpi_manager_client): # LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ") # response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request()) # del_response = kpi_manager_client.DeleteKpiDescriptor(response) # kpi_manager_client.GetKpiDescriptor(response) # LOGGER.info("Response of delete method gRPC message object: {:}".format(del_response)) # assert isinstance(response, KpiId) # def test_SelectKpiDescriptor(kpi_manager_client): # LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ") # response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request_a()) # LOGGER.info("Response gRPC message object: {:}".format(response)) # assert isinstance(response, KpiDescriptorList) def test_GetKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ") response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request()) LOGGER.info("Response gRPC message object: {:}".format(response)) assert isinstance(response, KpiDescriptor) def test_DeleteKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ") response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request()) del_response = kpi_manager_client.DeleteKpiDescriptor(response) kpi_manager_client.GetKpiDescriptor(response) LOGGER.info("Response of delete method gRPC message object: {:}".format(del_response)) assert isinstance(del_response, Empty) def test_SelectKpiDescriptor(kpi_manager_client): LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ") kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request_a()) response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request_a()) LOGGER.info("Response gRPC message object: {:}".format(response)) assert isinstance(response, KpiDescriptorList) # ------------- INITIAL TESTs ---------------- # Test case that makes use of client fixture to test server's CreateKpi method Loading
src/kpi_manager/tests/test_messages.py +82 −76 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ def create_kpi_id_request(): _kpi_id.kpi_id.uuid = "34f73604-eca6-424f-9995-18b519ad0978" return _kpi_id def create_kpi_descriptor_request_a(descriptor_name: str): def create_kpi_descriptor_request_a(descriptor_name: str = "Test_name"): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_id.kpi_id.uuid = str(uuid.uuid4()) _create_kpi_request.kpi_description = descriptor_name Loading Loading @@ -52,14 +52,87 @@ def create_kpi_descriptor_request(): def create_kpi_filter_request_a(): _create_kpi_filter_request = kpi_manager_pb2.KpiDescriptorFilter() _create_kpi_filter_request.kpi_sample_type.append(102) _create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED) device_id_obj = DeviceId() device_id_obj.device_uuid.uuid = "SERV3" endpoint_id_obj = EndPointId() service_id_obj = ServiceId() slice_id_obj = SliceId() connection_id_obj = ConnectionId() link_id_obj = LinkId() device_id_obj.device_uuid.uuid = "DEV1" endpoint_id_obj.endpoint_uuid.uuid = "END1" service_id_obj.service_uuid.uuid = "SERV1" slice_id_obj.slice_uuid.uuid = "SLC1" connection_id_obj.connection_uuid.uuid = "CON1" link_id_obj.link_uuid.uuid = "LNK1" _create_kpi_filter_request.device_id.append(device_id_obj) _create_kpi_filter_request.endpoint_id.append(endpoint_id_obj) _create_kpi_filter_request.service_id.append(service_id_obj) _create_kpi_filter_request.slice_id.append(slice_id_obj) _create_kpi_filter_request.connection_id.append(connection_id_obj) _create_kpi_filter_request.link_id.append(link_id_obj) return _create_kpi_filter_request # -------------------- Initial Test messages ------------------------------------- # def create_kpi_request(kpi_id_str): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV' + str(kpi_id_str) # _create_kpi_request.service_id.service_uuid.uuid = 'SERV' + str(kpi_id_str) # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC' + str(kpi_id_str) # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END' + str(kpi_id_str) # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON' + str(kpi_id_str) # return _create_kpi_request # def create_kpi_request_b(): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request = str(uuid.uuid4()) # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV2' # pylint: disable=maybe-no-member # _create_kpi_request.service_id.service_uuid.uuid = 'SERV2' # pylint: disable=maybe-no-member # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC2' # pylint: disable=maybe-no-member # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END2' # pylint: disable=maybe-no-member # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON2' # pylint: disable=maybe-no-member # return _create_kpi_request # def create_kpi_request_c(): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV3' # pylint: disable=maybe-no-member # _create_kpi_request.service_id.service_uuid.uuid = 'SERV3' # pylint: disable=maybe-no-member # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC3' # pylint: disable=maybe-no-member # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END3' # pylint: disable=maybe-no-member # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON3' # pylint: disable=maybe-no-member # return _create_kpi_request # def create_kpi_request_d(): # _create_kpi_request = kpi_manager_pb2.KpiDescriptor() # _create_kpi_request.kpi_description = 'KPI Description Test' # _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED # _create_kpi_request.device_id.device_uuid.uuid = 'DEV4' # pylint: disable=maybe-no-member # _create_kpi_request.service_id.service_uuid.uuid = 'SERV4' # pylint: disable=maybe-no-member # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC4' # pylint: disable=maybe-no-member # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END4' # pylint: disable=maybe-no-member # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON4' # pylint: disable=maybe-no-member # return _create_kpi_request # def kpi_descriptor_list(): # _kpi_descriptor_list = kpi_manager_pb2.KpiDescriptorList() # return _kpi_descriptor_list # def create_kpi_filter_request(): # _create_kpi_filter_request = kpi_manager_pb2.KpiDescriptorFilter() # _create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED) # new_device_id = _create_kpi_filter_request.device_id.add() # new_device_id.device_uuid.uuid = 'DEV3' # new_device_id.device_uuid.uuid = 'DEV1' # new_service_id = _create_kpi_filter_request.service_id.add() # new_service_id.service_uuid.uuid = 'SERV1' # new_slice_id = _create_kpi_filter_request.slice_id.add() Loading @@ -69,71 +142,4 @@ def create_kpi_filter_request_a(): # new_connection_id = _create_kpi_filter_request.connection_id.add() # new_connection_id.connection_uuid.uuid = 'CON1' return _create_kpi_filter_request # -------------------- Initial Test messages ------------------------------------- def create_kpi_request(kpi_id_str): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV' + str(kpi_id_str) _create_kpi_request.service_id.service_uuid.uuid = 'SERV' + str(kpi_id_str) _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC' + str(kpi_id_str) _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END' + str(kpi_id_str) _create_kpi_request.connection_id.connection_uuid.uuid = 'CON' + str(kpi_id_str) return _create_kpi_request def create_kpi_request_b(): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request = str(uuid.uuid4()) _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV2' # pylint: disable=maybe-no-member _create_kpi_request.service_id.service_uuid.uuid = 'SERV2' # pylint: disable=maybe-no-member _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC2' # pylint: disable=maybe-no-member _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END2' # pylint: disable=maybe-no-member _create_kpi_request.connection_id.connection_uuid.uuid = 'CON2' # pylint: disable=maybe-no-member return _create_kpi_request def create_kpi_request_c(): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV3' # pylint: disable=maybe-no-member _create_kpi_request.service_id.service_uuid.uuid = 'SERV3' # pylint: disable=maybe-no-member _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC3' # pylint: disable=maybe-no-member _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END3' # pylint: disable=maybe-no-member _create_kpi_request.connection_id.connection_uuid.uuid = 'CON3' # pylint: disable=maybe-no-member return _create_kpi_request def create_kpi_request_d(): _create_kpi_request = kpi_manager_pb2.KpiDescriptor() _create_kpi_request.kpi_description = 'KPI Description Test' _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED _create_kpi_request.device_id.device_uuid.uuid = 'DEV4' # pylint: disable=maybe-no-member _create_kpi_request.service_id.service_uuid.uuid = 'SERV4' # pylint: disable=maybe-no-member _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC4' # pylint: disable=maybe-no-member _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END4' # pylint: disable=maybe-no-member _create_kpi_request.connection_id.connection_uuid.uuid = 'CON4' # pylint: disable=maybe-no-member return _create_kpi_request def kpi_descriptor_list(): _kpi_descriptor_list = kpi_manager_pb2.KpiDescriptorList() return _kpi_descriptor_list def create_kpi_filter_request(): _create_kpi_filter_request = kpi_manager_pb2.KpiDescriptorFilter() _create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED) new_device_id = _create_kpi_filter_request.device_id.add() new_device_id.device_uuid.uuid = 'DEV1' new_service_id = _create_kpi_filter_request.service_id.add() new_service_id.service_uuid.uuid = 'SERV1' new_slice_id = _create_kpi_filter_request.slice_id.add() new_slice_id.slice_uuid.uuid = 'SLC1' new_endpoint_id = _create_kpi_filter_request.endpoint_id.add() new_endpoint_id.endpoint_uuid.uuid = 'END1' new_connection_id = _create_kpi_filter_request.connection_id.add() new_connection_id.connection_uuid.uuid = 'CON1' return _create_kpi_filter_request No newline at end of file # return _create_kpi_filter_request No newline at end of file