Skip to content
Snippets Groups Projects
Commit dd371d2d authored by Waleed Akbar's avatar Waleed Akbar
Browse files

KPI gRPC NBI Completely working with Tests

parent 38b1e333
No related branches found
No related tags found
2 merge requests!294Release TeraFlowSDN 4.0,!207Resolve "(CTTC) Separation of Monitoring"
......@@ -18,7 +18,7 @@ from sqlalchemy import Column, Integer, String, Float, Text, ForeignKey
# from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import registry
from sqlalchemy.orm import sessionmaker, relationship
from common.proto.kpi_management_pb2 import KpiDescriptor
logging.basicConfig(level=logging.INFO)
LOGGER = logging.getLogger(__name__)
......@@ -31,14 +31,14 @@ class Kpi(Base):
__tablename__ = 'kpi'
kpi_id = Column(UUID(as_uuid=False), primary_key=True)
kpi_description = Column(Text, nullable=False)
kpi_sample_type = Column(Integer, nullable=False)
device_id = Column(String, nullable=False)
endpoint_id = Column(String, nullable=False)
service_id = Column(String, nullable=False)
slice_id = Column(String, nullable=False)
connection_id = Column(String, nullable=False)
link_id = Column(String, nullable=False)
kpi_description = Column(Text , nullable=False)
kpi_sample_type = Column(Integer , nullable=False)
device_id = Column(String , nullable=False)
endpoint_id = Column(String , nullable=False)
service_id = Column(String , nullable=False)
slice_id = Column(String , nullable=False)
connection_id = Column(String , nullable=False)
link_id = Column(String , nullable=False)
# helps in logging the information
def __repr__(self):
......@@ -49,20 +49,39 @@ class Kpi(Base):
f"link_id='{self.link_id}')>")
@classmethod
def create_row_from_kpiDescriptor(cls, request):
def convert_KpiDescriptor_to_row(cls, request):
"""
Create an instance of Kpi from a request object.
Args: request: The request object containing the data.
Args: request: The request object containing the data.
Returns: An instance of Kpi initialized with data from the request.
"""
return cls(
kpi_id=request.kpi_id.kpi_id.uuid,
kpi_description=request.kpi_description,
kpi_sample_type=request.kpi_sample_type,
device_id=request.device_id.device_uuid.uuid,
endpoint_id=request.endpoint_id.endpoint_uuid.uuid,
service_id=request.service_id.service_uuid.uuid,
slice_id=request.slice_id.slice_uuid.uuid,
connection_id=request.connection_id.connection_uuid.uuid,
link_id=request.link_id.link_uuid.uuid
)
\ No newline at end of file
kpi_id = request.kpi_id.kpi_id.uuid,
kpi_description = request.kpi_description,
kpi_sample_type = request.kpi_sample_type,
device_id = request.device_id.device_uuid.uuid,
endpoint_id = request.endpoint_id.endpoint_uuid.uuid,
service_id = request.service_id.service_uuid.uuid,
slice_id = request.slice_id.slice_uuid.uuid,
connection_id = request.connection_id.connection_uuid.uuid,
link_id = request.link_id.link_uuid.uuid
)
@classmethod
def convert_row_to_KpiDescriptor(cls, row):
"""
Create and return a dictionary representation of a Kpi instance.
Args: row: The Kpi instance (row) containing the data.
Returns: KpiDescriptor object
"""
response = KpiDescriptor()
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
response.link_id.link_uuid.uuid = row.link_id
return response
\ No newline at end of file
......@@ -37,24 +37,13 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
LOGGER.info('Init KpiManagerService')
self.Kpi_DBobj = Kpi_DB()
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
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()
# 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.device_id.device_uuid.uuid
# kpi_to_insert.endpoint_id = request.endpoint_id.endpoint_uuid.uuid
# kpi_to_insert.service_id = request.service_id.service_uuid.uuid
# kpi_to_insert.slice_id = request.slice_id.slice_uuid.uuid
# kpi_to_insert.connection_id = request.connection_id.connection_uuid.uuid
# kpi_to_insert.link_id = request.link_id.link_uuid.uuid
kpi_to_insert = KpiModel.create_row_from_kpiDescriptor(request)
kpi_to_insert = KpiModel.convert_KpiDescriptor_to_row(request)
if(self.Kpi_DBobj.add_row_to_db(kpi_to_insert)):
response.kpi_id.uuid = request.kpi_id.kpi_id.uuid
# LOGGER.info("Added Row: {:}".format(response))
......@@ -71,15 +60,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
kpi_id_to_search = request.kpi_id.uuid
row = self.Kpi_DBobj.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
response.link_id.link_uuid.uuid = row.link_id
response = KpiModel.convert_row_to_KpiDescriptor(row)
return response
except Exception as e:
LOGGER.info('Unable to search kpi id. {:}'.format(e))
......@@ -118,15 +99,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
try:
if len(rows) != 0:
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_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
kpiDescriptor_obj = KpiModel.convert_row_to_KpiDescriptor(row)
response.kpi_descriptor_list.append(kpiDescriptor_obj)
return response
except Exception as e:
......
......@@ -43,7 +43,7 @@ from device.service.driver_api.DriverInstanceCache import DriverInstanceCache
from device.service.DeviceService import DeviceService
from device.client.DeviceClient import DeviceClient
from kpi_management.kpi_manager.tests.test_messages import create_kpi_descriptor_request
from kpi_management.kpi_manager.tests.test_messages import create_kpi_descriptor_request, create_kpi_filter_request
# from monitoring.service.MonitoringService import MonitoringService
from kpi_management.kpi_manager.service.KpiManagerService import KpiManagerService
# from monitoring.client.MonitoringClient import MonitoringClient
......@@ -219,14 +219,32 @@ def test_SetKpiDescriptor(kpi_manager_client):
def test_DeleteKpiDescriptor(kpi_manager_client):
LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ")
# adding KPI
response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
response_id = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
# deleting KPI
del_response = kpi_manager_client.DeleteKpiDescriptor(response)
# verifing KPI
kpi_manager_client.GetKpiDescriptor(response)
del_response = kpi_manager_client.DeleteKpiDescriptor(response_id)
# select KPI
kpi_manager_client.GetKpiDescriptor(response_id)
LOGGER.info("Response of delete method gRPC message object: {:}".format(del_response))
assert isinstance(del_response, Empty)
def test_GetKpiDescriptor(kpi_manager_client):
LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ")
# adding KPI
response_id = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
# get KPI
response = kpi_manager_client.GetKpiDescriptor(response_id)
LOGGER.info("Response gRPC message object: {:}".format(response))
assert isinstance(response, KpiDescriptor)
def test_SelectKpiDescriptor(kpi_manager_client):
LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ")
# adding KPI
kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
# select KPI(s)
response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request())
LOGGER.info("Response gRPC message object: {:}".format(response))
assert isinstance(response, KpiDescriptorList)
# ---------- 2nd Iteration Tests -----------------
# def test_SetKpiDescriptor(kpi_manager_client):
......
......@@ -15,16 +15,45 @@
import uuid
from common.proto import kpi_management_pb2
from common.proto.kpi_sample_types_pb2 import KpiSampleType
from common.proto.context_pb2 import DeviceId, LinkId, ServiceId, SliceId,\
ConnectionId, EndPointId
def create_kpi_descriptor_request(descriptor_name: str = "Test_name"):
_create_kpi_request = kpi_management_pb2.KpiDescriptor()
_create_kpi_request.kpi_id.kpi_id.uuid = str(uuid.uuid4())
_create_kpi_request.kpi_description = descriptor_name
_create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
_create_kpi_request.device_id.device_uuid.uuid = 'DEV1' # pylint: disable=maybe-no-member
_create_kpi_request.service_id.service_uuid.uuid = 'SERV1' # pylint: disable=maybe-no-member
_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 = 'SLC1' # pylint: disable=maybe-no-member
_create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END1' # pylint: disable=maybe-no-member
_create_kpi_request.connection_id.connection_uuid.uuid = 'CON1' # pylint: disable=maybe-no-member
_create_kpi_request.link_id.link_uuid.uuid = 'LNK1' # pylint: disable=maybe-no-member
return _create_kpi_request
\ No newline at end of file
return _create_kpi_request
def create_kpi_filter_request():
_create_kpi_filter_request = kpi_management_pb2.KpiDescriptorFilter()
_create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED)
device_id_obj = DeviceId()
service_id_obj = ServiceId()
slice_id_obj = SliceId()
endpoint_id_obj = EndPointId()
connection_id_obj = ConnectionId()
link_id_obj = LinkId()
device_id_obj.device_uuid.uuid = "DEV2"
service_id_obj.service_uuid.uuid = "SERV2"
slice_id_obj.slice_uuid.uuid = "SLC1"
endpoint_id_obj.endpoint_uuid.uuid = "END1"
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.service_id.append(service_id_obj)
_create_kpi_filter_request.slice_id.append(slice_id_obj)
_create_kpi_filter_request.endpoint_id.append(endpoint_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
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment