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

KpiManagerService file re-structred into generic KpiManagerSevice file.

parent d1d7b89a
No related branches found
No related tags found
2 merge requests!294Release TeraFlowSDN 4.0,!207Resolve "(CTTC) Separation of Monitoring"
...@@ -12,106 +12,20 @@ ...@@ -12,106 +12,20 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import logging, os, grpc
from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method
from common.proto.context_pb2 import Empty
from common.Constants import ServiceNameEnum from common.Constants import ServiceNameEnum
from common.Settings import get_service_port_grpc from common.Settings import get_service_port_grpc
# from common.proto.monitoring_pb2_grpc import add_MonitoringServiceServicer_to_server
from common.proto.kpi_manager_pb2_grpc import add_KpiManagerServiceServicer_to_server from common.proto.kpi_manager_pb2_grpc import add_KpiManagerServiceServicer_to_server
from common.proto.kpi_manager_pb2_grpc import KpiManagerServiceServicer
from monitoring.service.NameMapping import NameMapping
from common.proto.kpi_manager_pb2 import kpiDescriptor, KpiId, KpiDescriptorList
from monitoring.service import ManagementDBTools
from common.tools.service.GenericGrpcService import GenericGrpcService from common.tools.service.GenericGrpcService import GenericGrpcService
from kpi_manager.service.KpiManagerServiceServicerImpl import KpiManagerServiceServicerImpl
# from monitoring.service.MonitoringServiceServicerImpl import MonitoringServiceServicerImpl
from monitoring.service.NameMapping import NameMapping
LOGGER = logging.getLogger(__name__) class KpiManagerService(GenericGrpcService):
def __init__(self, name_mapping : NameMapping, cls_name: str = __name__) -> None:
METRICS_POOL = MetricsPool('Monitoring', 'RPC') port = get_service_port_grpc(ServiceNameEnum.KPIMANAGER)
super().__init__(port, cls_name=cls_name)
class KpiManagerServer(KpiManagerServiceServicer): self.kpiManagerService_servicer = KpiManagerServiceServicerImpl(name_mapping)
def __init__(self, cls_name: str = __name__):
LOGGER.info('Init KpiManagerService')
port = get_service_port_grpc(ServiceNameEnum.KPIMANAGER) # port updated
GenericGrpcService(port, cls_name = cls_name) # class inheretence was removed
# Init sqlite monitoring db
self.management_db = ManagementDBTools.ManagementDB('monitoring.db') # why monitoring.db here???
LOGGER.info('MetricsDB initialized --- KPI Manager Service')
def install_servicers(self): def install_servicers(self):
# There is no need to create the "MonitoringServiceServicerImpl" instance because actual class add_KpiManagerServiceServicer_to_server(self.kpiManagerService_servicer, self.server)
# implementation exists in the same class.
add_KpiManagerServiceServicer_to_server(KpiManagerServer(), self.server)
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def SetKpi(
self, request: KpiDescriptor, grpc_context: grpc.ServicerContext
) -> KpiId:
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 != "":
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)
return response
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def DeleteKpi(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:
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:
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 GetKpiDescriptorList(self, request: Empty, grpc_context: grpc.ServicerContext) -> KpiDescriptorList:
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
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