Loading src/monitoring/client/monitoring_client.py +5 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ class MonitoringClient: LOGGER.info('GetInstantKpi result: {}'.format(response)) return monitoring_pb2.Kpi() def GetKpiDescriptor(self, request): LOGGER.info('GetKpiDescriptor: {}'.format(request)) response = self.server.GetKpiDescriptor(request) LOGGER.info('GetKpiDescriptor result: {}'.format(response)) return monitoring_pb2.KpiDescriptor() if __name__ == '__main__': # get port Loading src/monitoring/service/MonitoringService.py +0 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ from concurrent import futures import grpc from monitoring.proto import monitoring_pb2_grpc from monitoring.service.MonitoringServiceServicerImpl import MonitoringServiceServicerImpl from monitoring.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD Loading src/monitoring/service/MonitoringServiceServicerImpl.py +58 −15 Original line number Diff line number Diff line import os import grpc import os,grpc,threading from common.rpc_method_wrapper.ServiceExceptions import ServiceException from common.logger import getJSONLogger from context.client.ContextClient import ContextClient from monitoring.proto.context_pb2 import Empty from device.Config import GRPC_SERVICE_PORT from device.client.DeviceClient import DeviceClient from device.proto import device_pb2 from monitoring.proto import context_pb2 from monitoring.service import sqlite_tools, influx_tools from monitoring.proto import monitoring_pb2 from monitoring.proto import monitoring_pb2_grpc from common.logger import getJSONLogger from queue import Queue LOGGER = getJSONLogger('monitoringservice-server') LOGGER.setLevel('DEBUG') Loading Loading @@ -100,7 +105,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService # Creates the request to send to the device service monitor_device_request = device_pb2.MonitoringSettings() kpiDescriptor = self.get_KpiDescriptor(request.kpi_id) kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context) monitor_device_request.kpi_id.kpi_id.uuid = request.kpi_id.kpi_id.uuid monitor_device_request.kpi_descriptor.kpi_description = kpiDescriptor.kpi_description Loading Loading @@ -130,7 +135,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService LOGGER.info('IncludeKpi') try: kpiDescriptor = self.get_KpiDescriptor(request.kpi_id) kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context) kpiSampleType = kpiDescriptor.kpi_sample_type kpiId = request.kpi_id.kpi_id.uuid Loading Loading @@ -165,10 +170,13 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService LOGGER.info('GetInstantKpi') return monitoring_pb2.Kpi() def get_KpiDescriptor(self, kpiId): def GetKpiDescriptor(self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiDescriptor: LOGGER.info('getting Kpi by KpiID') kpi_db = self.sql_db.get_KPI(int(kpiId.kpi_id.uuid)) try: kpi_db = self.sql_db.get_KPI(int(request.kpi_id.uuid)) print(kpi_db) kpiDescriptor = monitoring_pb2.KpiDescriptor() Loading @@ -179,3 +187,38 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService kpiDescriptor.service_id.service_uuid.uuid = str(kpi_db[5]) return kpiDescriptor except ServiceException as e: LOGGER.exception('GetKpiDescriptor exception') grpc_context.abort(e.code, e.details) except Exception as e: # pragma: no cover LOGGER.exception('GetKpiDescriptor exception') class EventsCollector: def __init__(self, context_client_grpc : ContextClient) -> None: # pylint: disable=redefined-outer-name self._events_queue = Queue() self._device_stream = context_client_grpc.GetDeviceEvents(Empty()) self._device_thread = threading.Thread(target=self._collect, args=(self._device_stream ,), daemon=False) def _collect(self, events_stream) -> None: try: for event in events_stream: self._events_queue.put_nowait(event) except grpc.RpcError as e: if e.code() != grpc.StatusCode.CANCELLED: # pylint: disable=no-member raise # pragma: no cover def start(self): self._device_thread.start() def get_event(self, block : bool = True, timeout : float = 0.1): return self._events_queue.get(block=block, timeout=timeout) def stop(self): self._device_stream.cancel() self._device_thread.join() src/monitoring/tests/test_monitoring.py +8 −1 Original line number Diff line number Diff line Loading @@ -63,7 +63,7 @@ def kpi_id(): # form request kpi_id = monitoring_pb2.KpiId() kpi_id.kpi_id.uuid = 'KPIID0000' kpi_id.kpi_id.uuid = str(1) return kpi_id Loading Loading @@ -144,3 +144,10 @@ def test_getinstant_kpi(monitoring_client,kpi_id): response = monitoring_client.GetInstantKpi(kpi_id) LOGGER.debug(str(response)) assert isinstance(response, monitoring_pb2.Kpi) # Test case that makes use of client fixture to test server's GetInstantKpi method def test_getkpidescritor_kpi(monitoring_client,kpi_id): LOGGER.warning('test_getkpidescritor_kpi begin') response = monitoring_client.GetKpiDescriptor(kpi_id) LOGGER.debug(str(response)) assert isinstance(response, monitoring_pb2.KpiDescriptor) No newline at end of file Loading
src/monitoring/client/monitoring_client.py +5 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ class MonitoringClient: LOGGER.info('GetInstantKpi result: {}'.format(response)) return monitoring_pb2.Kpi() def GetKpiDescriptor(self, request): LOGGER.info('GetKpiDescriptor: {}'.format(request)) response = self.server.GetKpiDescriptor(request) LOGGER.info('GetKpiDescriptor result: {}'.format(response)) return monitoring_pb2.KpiDescriptor() if __name__ == '__main__': # get port Loading
src/monitoring/service/MonitoringService.py +0 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ from concurrent import futures import grpc from monitoring.proto import monitoring_pb2_grpc from monitoring.service.MonitoringServiceServicerImpl import MonitoringServiceServicerImpl from monitoring.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD Loading
src/monitoring/service/MonitoringServiceServicerImpl.py +58 −15 Original line number Diff line number Diff line import os import grpc import os,grpc,threading from common.rpc_method_wrapper.ServiceExceptions import ServiceException from common.logger import getJSONLogger from context.client.ContextClient import ContextClient from monitoring.proto.context_pb2 import Empty from device.Config import GRPC_SERVICE_PORT from device.client.DeviceClient import DeviceClient from device.proto import device_pb2 from monitoring.proto import context_pb2 from monitoring.service import sqlite_tools, influx_tools from monitoring.proto import monitoring_pb2 from monitoring.proto import monitoring_pb2_grpc from common.logger import getJSONLogger from queue import Queue LOGGER = getJSONLogger('monitoringservice-server') LOGGER.setLevel('DEBUG') Loading Loading @@ -100,7 +105,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService # Creates the request to send to the device service monitor_device_request = device_pb2.MonitoringSettings() kpiDescriptor = self.get_KpiDescriptor(request.kpi_id) kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context) monitor_device_request.kpi_id.kpi_id.uuid = request.kpi_id.kpi_id.uuid monitor_device_request.kpi_descriptor.kpi_description = kpiDescriptor.kpi_description Loading Loading @@ -130,7 +135,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService LOGGER.info('IncludeKpi') try: kpiDescriptor = self.get_KpiDescriptor(request.kpi_id) kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context) kpiSampleType = kpiDescriptor.kpi_sample_type kpiId = request.kpi_id.kpi_id.uuid Loading Loading @@ -165,10 +170,13 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService LOGGER.info('GetInstantKpi') return monitoring_pb2.Kpi() def get_KpiDescriptor(self, kpiId): def GetKpiDescriptor(self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiDescriptor: LOGGER.info('getting Kpi by KpiID') kpi_db = self.sql_db.get_KPI(int(kpiId.kpi_id.uuid)) try: kpi_db = self.sql_db.get_KPI(int(request.kpi_id.uuid)) print(kpi_db) kpiDescriptor = monitoring_pb2.KpiDescriptor() Loading @@ -179,3 +187,38 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService kpiDescriptor.service_id.service_uuid.uuid = str(kpi_db[5]) return kpiDescriptor except ServiceException as e: LOGGER.exception('GetKpiDescriptor exception') grpc_context.abort(e.code, e.details) except Exception as e: # pragma: no cover LOGGER.exception('GetKpiDescriptor exception') class EventsCollector: def __init__(self, context_client_grpc : ContextClient) -> None: # pylint: disable=redefined-outer-name self._events_queue = Queue() self._device_stream = context_client_grpc.GetDeviceEvents(Empty()) self._device_thread = threading.Thread(target=self._collect, args=(self._device_stream ,), daemon=False) def _collect(self, events_stream) -> None: try: for event in events_stream: self._events_queue.put_nowait(event) except grpc.RpcError as e: if e.code() != grpc.StatusCode.CANCELLED: # pylint: disable=no-member raise # pragma: no cover def start(self): self._device_thread.start() def get_event(self, block : bool = True, timeout : float = 0.1): return self._events_queue.get(block=block, timeout=timeout) def stop(self): self._device_stream.cancel() self._device_thread.join()
src/monitoring/tests/test_monitoring.py +8 −1 Original line number Diff line number Diff line Loading @@ -63,7 +63,7 @@ def kpi_id(): # form request kpi_id = monitoring_pb2.KpiId() kpi_id.kpi_id.uuid = 'KPIID0000' kpi_id.kpi_id.uuid = str(1) return kpi_id Loading Loading @@ -144,3 +144,10 @@ def test_getinstant_kpi(monitoring_client,kpi_id): response = monitoring_client.GetInstantKpi(kpi_id) LOGGER.debug(str(response)) assert isinstance(response, monitoring_pb2.Kpi) # Test case that makes use of client fixture to test server's GetInstantKpi method def test_getkpidescritor_kpi(monitoring_client,kpi_id): LOGGER.warning('test_getkpidescritor_kpi begin') response = monitoring_client.GetKpiDescriptor(kpi_id) LOGGER.debug(str(response)) assert isinstance(response, monitoring_pb2.KpiDescriptor) No newline at end of file