Commits (6)
......@@ -19,27 +19,41 @@ import "context.proto";
import "kpi_sample_types.proto";
service KpiManagerService{
rpc SetKpi (KpiDescriptor ) returns (KpiId ) {} // Stable not final
rpc DeleteKpi (KpiId ) returns (context.Empty ) {} // Stable and final
rpc GetKpiDescriptor (KpiId ) returns (KpiDescriptor ) {} // Stable and final
rpc GetKpiDescriptorList (context.Empty ) returns (KpiDescriptorList ) {} // Stable and final
rpc SetKpiDescriptor (KpiDescriptor ) returns (KpiId ) {} // Stable not final
rpc DeleteKpiDescriptor (KpiId ) returns (context.Empty ) {} // Stable and final
rpc GetKpiDescriptor (KpiId ) returns (KpiDescriptor ) {} // Stable and final
rpc SelectKpiDescriptor (KpiDescriptorFilter) returns (KpiDescriptorList ) {} // Stable and final
}
message KpiId {
context.Uuid kpi_id = 1;
}
message KpiDescriptor {
KpiId kpi_id = 1;
string kpi_description = 2;
repeated KpiId kpi_id_list = 3;
kpi_sample_types.KpiSampleType kpi_sample_type = 4;
context.DeviceId device_id = 5;
context.EndPointId endpoint_id = 6;
context.ServiceId service_id = 7;
context.SliceId slice_id = 8;
context.ConnectionId connection_id = 9;
context.LinkId link_id = 10;
kpi_sample_types.KpiSampleType kpi_sample_type = 3;
context.DeviceId device_id = 4;
context.EndPointId endpoint_id = 5;
context.ServiceId service_id = 6;
context.SliceId slice_id = 7;
context.ConnectionId connection_id = 8;
context.LinkId link_id = 9;
}
message KpiId {
context.Uuid kpi_id = 1;
message KpiDescriptorFilter {
// KPI Descriptors that fulfill the filter are those that match ALL the following fields.
// An empty list means: any value is accepted.
// All fields empty means: list all KPI Descriptors
repeated KpiId kpi_id = 1;
repeated kpi_sample_types.KpiSampleType kpi_sample_type = 2;
repeated context.DeviceId device_id = 3;
repeated context.EndPointId endpoint_id = 4;
repeated context.ServiceId service_id = 5;
repeated context.SliceId slice_id = 6;
repeated context.ConnectionId connection_id = 7;
repeated context.LinkId link_id = 8;
}
message KpiDescriptorList {
......
......@@ -19,7 +19,7 @@ from common.Settings import get_service_host, get_service_port_grpc
from common.tools.client.RetryDecorator import retry, delay_exponential
from common.tools.grpc.Tools import grpc_message_to_json_string
from common.proto.context_pb2 import Empty
from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor, KpiDescriptorList
from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor, KpiDescriptorFilter, KpiDescriptorList
from common.proto.kpi_manager_pb2_grpc import KpiManagerServiceStub
LOGGER = logging.getLogger(__name__)
......@@ -29,8 +29,8 @@ RETRY_DECORATOR = retry(max_retries=MAX_RETRIES, delay_function=DELAY_FUNCTION,
class KpiManagerClient:
def __init__(self, host=None, port=None):
if not host: host = get_service_host(ServiceNameEnum.KPIMANAGER) # update enum
if not port: port = get_service_port_grpc(ServiceNameEnum.KPIMANAGER) # update enum
if not host: host = get_service_host(ServiceNameEnum.KPIMANAGER)
if not port: port = get_service_port_grpc(ServiceNameEnum.KPIMANAGER)
self.endpoint = '{:s}:{:s}'.format(str(host), str(port))
LOGGER.debug('Creating channel to {:s}...'.format(str(self.endpoint)))
self.channel = None
......@@ -48,17 +48,17 @@ class KpiManagerClient:
self.stub = None
@RETRY_DECORATOR
def SetKpi(self, request : KpiDescriptor) -> KpiId:
LOGGER.debug('SetKpi: {:s}'.format(grpc_message_to_json_string(request)))
response = self.stub.SetKpi(request)
LOGGER.debug('SetKpi result: {:s}'.format(grpc_message_to_json_string(response)))
def SetKpiDescriptor(self, request : KpiDescriptor) -> KpiId:
LOGGER.debug('SetKpiDescriptor: {:s}'.format(grpc_message_to_json_string(request)))
response = self.stub.SetKpiDescriptor(request)
LOGGER.debug('SetKpiDescriptor result: {:s}'.format(grpc_message_to_json_string(response)))
return response
@RETRY_DECORATOR
def DeleteKpi(self,request : KpiId) -> Empty:
LOGGER.debug('DeleteKpi: {:s}'.format(grpc_message_to_json_string(request)))
response = self.stub.DeleteKpi(request)
LOGGER.info('DeleteKpi result: {:s}'.format(grpc_message_to_json_string(response)))
def DeleteKpiDescriptor(self,request : KpiId) -> Empty:
LOGGER.debug('DeleteKpiDescriptor: {:s}'.format(grpc_message_to_json_string(request)))
response = self.stub.DeleteKpiDescriptor(request)
LOGGER.info('DeleteKpiDescriptor result: {:s}'.format(grpc_message_to_json_string(response)))
return response
@RETRY_DECORATOR
......@@ -69,8 +69,8 @@ class KpiManagerClient:
return response
@RETRY_DECORATOR
def GetKpiDescriptorList(self, request : Empty) -> KpiDescriptorList:
LOGGER.debug('GetKpiDescriptorList: {:s}'.format(grpc_message_to_json_string(request)))
response = self.stub.GetKpiDescriptorList(request)
LOGGER.debug('GetKpiDescriptorList result: {:s}'.format(grpc_message_to_json_string(response)))
def SelectKpiDescriptor(self, request : KpiDescriptorFilter) -> KpiDescriptorList:
LOGGER.debug('SelectKpiDescriptor: {:s}'.format(grpc_message_to_json_string(request)))
response = self.stub.SelectKpiDescriptor(request)
LOGGER.debug('SelectKpiDescriptor result: {:s}'.format(grpc_message_to_json_string(response)))
return response
\ No newline at end of file
......@@ -16,7 +16,7 @@ import logging, grpc
from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method
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, KpiDescriptorList
from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor, KpiDescriptorFilter, KpiDescriptorList
from monitoring.service.NameMapping import NameMapping
from monitoring.service import ManagementDBTools
......@@ -34,7 +34,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
LOGGER.info('MetricsDB initialized --- KPI Manager Service')
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def SetKpi(
def SetKpiDescriptor(
self, request: KpiDescriptor, grpc_context: grpc.ServicerContext
) -> KpiId:
response = KpiId()
......@@ -57,7 +57,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
return response
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def DeleteKpi(self, request: KpiId, grpc_context: grpc.ServicerContext) -> Empty:
def DeleteKpiDescriptor(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:
......@@ -85,7 +85,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
return kpiDescriptor
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def GetKpiDescriptorList(self, request: Empty, grpc_context: grpc.ServicerContext) -> KpiDescriptorList:
def SelectKpiDescriptor(self, request: KpiDescriptorFilter, grpc_context: grpc.ServicerContext) -> KpiDescriptorList:
kpi_descriptor_list = KpiDescriptorList()
data = self.management_db.get_KPIS()
LOGGER.debug(f"data: {data}")
......
......@@ -24,46 +24,62 @@ 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.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)
_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.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 = 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 = '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 = 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 = 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
\ No newline at end of file
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
......@@ -33,7 +33,7 @@ from common.tools.object_factory.Context import json_context, json_context_id
from common.tools.object_factory.Topology import json_topology, json_topology_id
# from common.proto.monitoring_pb2 import KpiId, KpiDescriptor, SubsDescriptor, SubsList, AlarmID, \
# AlarmDescriptor, AlarmList, KpiDescriptorList, SubsResponse, AlarmResponse, RawKpiTable #, Kpi, KpiList
from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor, KpiDescriptorList
from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor, KpiDescriptorFilter, KpiDescriptorList
from common.tools.service.GenericGrpcService import GenericGrpcService
from context.client.ContextClient import ContextClient
......@@ -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_manager.tests.test_messages import create_kpi_request, create_kpi_request_b, create_kpi_request_c, create_kpi_request_d
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 monitoring.service.MonitoringService import MonitoringService
from kpi_manager.service.KpiManagerService import KpiManagerService
# from monitoring.client.MonitoringClient import MonitoringClient
......@@ -256,7 +256,7 @@ 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.SetKpi(create_kpi_request(str(i+1)))
response = kpi_manager_client.SetKpiDescriptor(create_kpi_request(str(i+1)))
LOGGER.debug(str(response))
assert isinstance(response, KpiId)
......@@ -264,14 +264,14 @@ def test_set_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
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.SetKpi(create_kpi_request('4'))
response = kpi_manager_client.DeleteKpi(response)
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_get_kpi_descriptor_list(kpi_manager_client): # pylint: disable=redefined-outer-name
LOGGER.warning('test_getkpidescritor_kpi begin')
response = kpi_manager_client.GetKpiDescriptorList(Empty())
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)