Commit 1ef912c5 authored by Waleed Akbar's avatar Waleed Akbar
Browse files

KpiManager with monitoringDB working fine

parent 5d3979fa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -24,5 +24,5 @@ cd $PROJECTDIR/src
# python3 kpi_manager/tests/test_unitary.py

RCFILE=$PROJECTDIR/coverage/.coveragerc
python3 -m pytest --log-level=INFO --verbose \
python3 -m pytest --log-level=INFO --log-cli-level=INFO --verbose \
    kpi_manager/tests/test_unitary.py
 No newline at end of file
+132 −66
Original line number Diff line number Diff line
@@ -19,8 +19,12 @@ 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 monitoring.service.NameMapping import NameMapping
from monitoring.service import ManagementDBTools
# from monitoring.service import ManagementDBTools
from telemetry.database.managementDB import managementDB

from telemetry.database.TelemetryModel import Kpi as KpiModel
from common.proto.context_pb2 import DeviceId, LinkId, ServiceId, SliceId,\
                             ConnectionId, EndPointId

LOGGER = logging.getLogger(__name__)

@@ -29,77 +33,139 @@ METRICS_POOL = MetricsPool('Monitoring', 'KpiManager')
class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
    def __init__(self, name_mapping : NameMapping):
        LOGGER.info('Init KpiManagerService')

        # Init sqlite monitoring db
        self.management_db = ManagementDBTools.ManagementDB('monitoring.db') # why monitoring.db here???
        LOGGER.info('MetricsDB initialized --- KPI Manager Service')
        self.managementDBobj = managementDB()
  
    @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()
        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 != "":

        try:
            kpi_to_insert                 = KpiModel()
            kpi_to_insert.kpi_id          = request.kpi_id.kpi_id.uuid
            kpi_to_insert.kpi_description = request.kpi_description
            kpi_to_insert.kpi_sample_type = request.kpi_sample_type
            kpi_to_insert.device_id       = request.service_id.service_uuid.uuid 
            kpi_to_insert.endpoint_id     = request.device_id.device_uuid.uuid 
            kpi_to_insert.service_id      = request.slice_id.slice_uuid.uuid 
            kpi_to_insert.slice_id        = request.endpoint_id.endpoint_uuid.uuid
            kpi_to_insert.connection_id   = request.connection_id.connection_uuid.uuid
            # kpi_to_insert.link_id         = request.link_id.link_id.uuid
            self.managementDBobj.add_row_to_db(kpi_to_insert)
            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)
            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 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()
    def GetKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore
                         ) -> KpiDescriptor: # type: ignore
        response = KpiDescriptor()

        try: 
            kpi_id_to_search = request.kpi_id.uuid
            row = self.managementDBobj.search_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search)
            if row is not None:
                response.kpi_id.kpi_id.uuid                 = row.kpi_id
                response.kpi_description                    = row.kpi_description
                response.kpi_sample_type                    = row.kpi_sample_type
                response.service_id.service_uuid.uuid       = row.service_id
                response.device_id.device_uuid.uuid         = row.device_id
                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
            return response
        except Exception as e:
            LOGGER.info('Unable to search kpi id. {:}'.format(e))

    @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
    def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext
                            ) -> Empty: # type: ignore
        try:
            kpi_id_to_search = request.kpi_id.uuid
            self.managementDBobj.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, 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
    def SelectKpiDescriptor(self, request: KpiDescriptorFilter, grpc_context: grpc.ServicerContext # type: ignore
                            ) -> KpiDescriptorList: # type: ignore
        response = KpiDescriptorList()
        # 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]
        try:
            rows = self.managementDBobj.select_with_filter(KpiModel, **filter_to_apply)
        except Exception as e:
            LOGGER.info('Unable to apply filter on kpi descriptor. {:}'.format(e))
        try:
            if len(rows) != 0:
                kpi_id_obj    = KpiId()
                device_id_obj = DeviceId()
                endpoint_id_obj = EndPointId()
                service_id_obj = ServiceId()
                slice_id_obj = SliceId()
                link_id_obj = LinkId()

                for row in rows:
                    kpiDescriptor_obj = KpiDescriptor()
                    kpiDescriptor_obj.kpi_id.kpi_id.uuid = row.kpi_id
                    # kpiDescriptor_obj.kpi_description    = row.kpi_description

                    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
+42 −2
Original line number Diff line number Diff line
@@ -12,14 +12,53 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import uuid
from common.proto import kpi_manager_pb2
from common.proto.kpi_sample_types_pb2 import KpiSampleType
from common.proto.context_pb2 import DeviceId, LinkId, ServiceId, SliceId,\
                             ConnectionId, EndPointId

def kpi_id():
#  ---------------------- New Test Messages ---------------------------------
def create_kpi_id_request():
    _kpi_id             = kpi_manager_pb2.KpiId()
    _kpi_id.kpi_id.uuid = str(1)            # pylint: disable=maybe-no-member
    _kpi_id.kpi_id.uuid = "34f73604-eca6-424f-9995-18b519ad0978"
    return _kpi_id

def create_kpi_descriptor_request():
    _create_kpi_request                                    = kpi_manager_pb2.KpiDescriptor()
    _create_kpi_request.kpi_id.kpi_id.uuid                 = 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         = 'DEV4'     # 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     = '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_filter_request_a():
    _create_kpi_filter_request             = kpi_manager_pb2.KpiDescriptorFilter()
    _create_kpi_filter_request.kpi_sample_type.append(102)

    device_id_obj = DeviceId()
    device_id_obj.device_uuid.uuid = "SERV3"
    _create_kpi_filter_request.device_id.append(device_id_obj)
    
    # new_device_id                          = _create_kpi_filter_request.device_id.add()
    # new_device_id.device_uuid.uuid         = 'DEV3'
    # 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

# -------------------- 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'
@@ -33,6 +72,7 @@ def create_kpi_request(kpi_id_str):

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
+68 −41
Original line number Diff line number Diff line
@@ -43,7 +43,9 @@ 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
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
# from monitoring.service.MonitoringService import MonitoringService
from kpi_manager.service.KpiManagerService import KpiManagerService
# from monitoring.client.MonitoringClient import MonitoringClient
@@ -63,7 +65,7 @@ from device.service.drivers import DRIVERS
LOCAL_HOST = '127.0.0.1'
MOCKSERVICE_PORT = 10000

KPIMANAGER_SERVICE_PORT = MOCKSERVICE_PORT + get_service_port_grpc(ServiceNameEnum.KPIMANAGER) # avoid privileged ports
KPIMANAGER_SERVICE_PORT = MOCKSERVICE_PORT + get_service_port_grpc(ServiceNameEnum.KPIMANAGER)  # type: ignore
os.environ[get_env_var_name(ServiceNameEnum.KPIMANAGER, ENVVAR_SUFIX_SERVICE_HOST     )] = str(LOCAL_HOST)
os.environ[get_env_var_name(ServiceNameEnum.KPIMANAGER, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(KPIMANAGER_SERVICE_PORT)

@@ -127,18 +129,18 @@ def device_service(context_service : MockContextService): # pylint: disable=rede

    LOGGER.info('Terminated DeviceService...')

@pytest.fixture(scope='session')
def device_client(device_service : DeviceService): # pylint: disable=redefined-outer-name,unused-argument
    LOGGER.info('Initializing DeviceClient...')
    _client = DeviceClient()
# @pytest.fixture(scope='session')
# def device_client(device_service : DeviceService): # pylint: disable=redefined-outer-name,unused-argument
#     LOGGER.info('Initializing DeviceClient...')
#     _client = DeviceClient()

    LOGGER.info('Yielding DeviceClient...')
    yield _client
#     LOGGER.info('Yielding DeviceClient...')
#     yield _client

    LOGGER.info('Closing DeviceClient...')
    _client.close()
#     LOGGER.info('Closing DeviceClient...')
#     _client.close()

    LOGGER.info('Closed DeviceClient...')
#     LOGGER.info('Closed DeviceClient...')

@pytest.fixture(scope='session')
def device_client(device_service : DeviceService): # pylint: disable=redefined-outer-name,unused-argument
@@ -195,39 +197,64 @@ def kpi_manager_client(kpi_manager_service : KpiManagerService): # pylint: disab
# Prepare Environment, should be the first test
##################################################

# ERROR on this test --- 
def test_prepare_environment(
    context_client : ContextClient,                 # pylint: disable=redefined-outer-name,unused-argument
):
    context_id = json_context_id(DEFAULT_CONTEXT_NAME)
    context_client.SetContext(Context(**json_context(DEFAULT_CONTEXT_NAME)))
    context_client.SetTopology(Topology(**json_topology(DEFAULT_TOPOLOGY_NAME, context_id=context_id)))
# # ERROR on this test --- 
# def test_prepare_environment(
#     context_client : ContextClient,                 # pylint: disable=redefined-outer-name,unused-argument
# ):
#     context_id = json_context_id(DEFAULT_CONTEXT_NAME)
#     context_client.SetContext(Context(**json_context(DEFAULT_CONTEXT_NAME)))
#     context_client.SetTopology(Topology(**json_topology(DEFAULT_TOPOLOGY_NAME, context_id=context_id)))

###########################
# Tests Implementation of Kpi Manager
###########################

# Test case that makes use of client fixture to test server's CreateKpi method
def test_set_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
    # make call to server
    LOGGER.warning('test_create_kpi requesting')
    for i in range(3):
        response = kpi_manager_client.SetKpiDescriptor(create_kpi_request(str(i+1)))
        LOGGER.debug(str(response))
# ---------- 2nd Iteration Tests -----------------
def test_SetKpiDescriptor(kpi_manager_client):
    LOGGER.info(" >>> test_SetKpiDescriptor: START <<< ")
    response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
    assert isinstance(response, KpiId)

def test_GetKpiDescriptor(kpi_manager_client):
    LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ")
    response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request())
    assert isinstance(response, KpiDescriptor)

def test_DeleteKpiDescriptor(kpi_manager_client):
    LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ")
    response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
    kpi_manager_client.DeleteKpiDescriptor(response)
    kpi_manager_client.GetKpiDescriptor(response)
    assert isinstance(response, KpiId)

# Test case that makes use of client fixture to test server's DeleteKpi method
def test_delete_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
    # make call to server
    LOGGER.warning('delete_kpi requesting')
    response = kpi_manager_client.SetKpiDescriptor(create_kpi_request('4'))
    response = kpi_manager_client.DeleteKpiDescriptor(response)
    LOGGER.debug(str(response))
    assert isinstance(response, Empty)

# Test case that makes use of client fixture to test server's GetKpiDescriptor method
def test_select_kpi_descriptor(kpi_manager_client): # pylint: disable=redefined-outer-name
    LOGGER.warning('test_selectkpidescritor begin')
    response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request())
    LOGGER.debug(str(response))
def test_SelectKpiDescriptor(kpi_manager_client):
    LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ")
    response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request_a())
    # LOGGER.info(" >>> test_SelectKpiDescriptor: END <<< {:}".format(response))
    assert isinstance(response, KpiDescriptorList)

# ------------- INITIAL TESTs ----------------
# Test case that makes use of client fixture to test server's CreateKpi method
# def test_set_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
#     # make call to server
#     LOGGER.warning('test_create_kpi requesting')
#     for i in range(3):
#         response = kpi_manager_client.SetKpiDescriptor(create_kpi_request(str(i+1)))
#         LOGGER.debug(str(response))
#         assert isinstance(response, KpiId)

# # Test case that makes use of client fixture to test server's DeleteKpi method
# def test_delete_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
#     # make call to server
#     LOGGER.warning('delete_kpi requesting')
#     response = kpi_manager_client.SetKpiDescriptor(create_kpi_request('4'))
#     response = kpi_manager_client.DeleteKpiDescriptor(response)
#     LOGGER.debug(str(response))
#     assert isinstance(response, Empty)

# # Test case that makes use of client fixture to test server's GetKpiDescriptor method
# def test_select_kpi_descriptor(kpi_manager_client): # pylint: disable=redefined-outer-name
#     LOGGER.warning('test_selectkpidescritor begin')
#     response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request())
#     LOGGER.debug(str(response))
#     assert isinstance(response, KpiDescriptorList)
+1 −1
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ class TelemetryDBmanager:
    def inser_kpi(self, request: KpiDescriptor):
        session = self.Session()
        try:
            # Create a new Collector instance
            # Create a new Kpi instance
            kpi_to_insert                 = KpiModel()
            kpi_to_insert.kpi_id          = request.kpi_id.kpi_id.uuid
            kpi_to_insert.kpi_description = request.kpi_description
Loading