Loading src/monitoring/service/EventTools.py +3 −6 Original line number Diff line number Diff line Loading @@ -19,16 +19,13 @@ import grpc from common.rpc_method_wrapper.ServiceExceptions import ServiceException from context.client.ContextClient import ContextClient #from common.proto import kpi_sample_types_pb2 from common.proto.context_pb2 import Empty, EventTypeEnum from common.logger import getJSONLogger from monitoring.client.MonitoringClient import MonitoringClient from monitoring.service.MonitoringServiceServicerImpl import LOGGER from common.proto import monitoring_pb2 LOGGER = getJSONLogger('monitoringservice-server') LOGGER.setLevel('DEBUG') class EventsDeviceCollector: def __init__(self) -> None: # pylint: disable=redefined-outer-name self._events_queue = Queue() Loading Loading @@ -74,7 +71,7 @@ class EventsDeviceCollector: kpi_id_list = [] while not self._events_queue.empty(): LOGGER.info('getting Kpi by KpiID') # LOGGER.info('getting Kpi by KpiID') event = self.get_event(block=True) if event.event.event_type == EventTypeEnum.EVENTTYPE_CREATE: device = self._context_client.GetDevice(event.device_id) Loading src/monitoring/service/MonitoringServiceServicerImpl.py +7 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ from typing import Iterator from common.Constants import ServiceNameEnum from common.Settings import get_setting, get_service_port_grpc, get_service_host from common.logger import getJSONLogger from common.proto.context_pb2 import Empty from common.proto.device_pb2 import MonitoringSettings from common.proto.kpi_sample_types_pb2 import KpiSampleType Loading @@ -26,14 +27,14 @@ from common.proto.monitoring_pb2 import AlarmResponse, AlarmDescriptor, AlarmIDL KpiDescriptor, KpiList, KpiQuery, SubsDescriptor, SubscriptionID, AlarmID, KpiDescriptorList, \ MonitorKpiRequest, Kpi, AlarmSubscription from common.rpc_method_wrapper.ServiceExceptions import ServiceException from common.tools.timestamp.Converters import timestamp_float_to_string from monitoring.service import SqliteTools, MetricsDBTools from device.client.DeviceClient import DeviceClient from prometheus_client import Counter, Summary LOGGER = logging.getLogger(__name__) LOGGER = getJSONLogger('monitoringservice-server') LOGGER.setLevel('DEBUG') MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary( 'monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request') Loading @@ -57,7 +58,6 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): self.sql_db = SqliteTools.SQLite('monitoring.db') self.deviceClient = DeviceClient(host=DEVICESERVICE_SERVICE_HOST, port=DEVICESERVICE_SERVICE_PORT_GRPC) # instantiate the client # Set metrics_db client self.metrics_db = MetricsDBTools.MetricsDB(METRICSDB_HOSTNAME,METRICSDB_ILP_PORT,METRICSDB_REST_PORT,METRICSDB_TABLE) LOGGER.info('MetricsDB initialized') Loading @@ -81,7 +81,6 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id) kpi_id.kpi_id.uuid = str(data) # CREATEKPI_COUNTER_COMPLETED.inc() return kpi_id except ServiceException as e: Loading Loading @@ -162,7 +161,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): deviceId = kpiDescriptor.device_id.device_uuid.uuid endpointId = kpiDescriptor.endpoint_id.endpoint_uuid.uuid serviceId = kpiDescriptor.service_id.service_uuid.uuid time_stamp = timestamp_float_to_string(request.timestamp.timestamp) time_stamp = request.timestamp.timestamp kpi_value = getattr(request.kpi_value, request.kpi_value.WhichOneof('value')) # Build the structure to be included as point in the MetricsDB Loading src/monitoring/tests/Messages.py +6 −10 Original line number Diff line number Diff line Loading @@ -11,17 +11,13 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import datetime from common.proto import monitoring_pb2 from common.proto.kpi_sample_types_pb2 import KpiSampleType from common.tools.timestamp.Converters import timestamp_string_to_float from common.tools.timestamp.Converters import timestamp_string_to_float, timestamp_utcnow_to_float def kpi(): _kpi = monitoring_pb2.Kpi() _kpi.kpi_id.kpi_id.uuid = 'KPIID0000' # pylint: disable=maybe-no-member return _kpi def kpi_id(): _kpi_id = monitoring_pb2.KpiId() _kpi_id.kpi_id.uuid = str(1) # pylint: disable=maybe-no-member Loading @@ -43,9 +39,9 @@ def monitor_kpi_request(kpi_uuid, monitoring_window_s, sampling_rate_s): _monitor_kpi_request.sampling_rate_s = sampling_rate_s return _monitor_kpi_request def include_kpi_request(): def include_kpi_request(kpi_id): _include_kpi_request = monitoring_pb2.Kpi() _include_kpi_request.kpi_id.kpi_id.uuid = str(1) # pylint: disable=maybe-no-member _include_kpi_request.timestamp.timestamp = timestamp_string_to_float("2021-10-12T13:14:42Z") _include_kpi_request.kpi_id.kpi_id.uuid = kpi_id.kpi_id.uuid _include_kpi_request.timestamp.timestamp = timestamp_utcnow_to_float() _include_kpi_request.kpi_value.int32Val = 500 # pylint: disable=maybe-no-member return _include_kpi_request src/monitoring/tests/test_unitary.py +13 −10 Original line number Diff line number Diff line Loading @@ -12,16 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. import copy, logging, os, pytest import copy, os, pytest from time import sleep from typing import Tuple from common.Constants import ServiceNameEnum from common.Settings import ( ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_service_port_grpc) from common.logger import getJSONLogger from common.orm.Database import Database from common.orm.Factory import get_database_backend, BackendEnum as DatabaseBackendEnum from common.message_broker.Factory import get_messagebroker_backend, BackendEnum as MessageBrokerBackendEnum from common.message_broker.MessageBroker import MessageBroker from common.proto import monitoring_pb2 from common.proto.monitoring_pb2 import KpiId, KpiDescriptor from context.client.ContextClient import ContextClient Loading @@ -35,17 +37,17 @@ from device.service.driver_api.DriverInstanceCache import DriverInstanceCache from device.service.drivers import DRIVERS from monitoring.client.MonitoringClient import MonitoringClient from common.proto import context_pb2, monitoring_pb2 from common.proto.kpi_sample_types_pb2 import KpiSampleType from monitoring.service import SqliteTools, MetricsDBTools from monitoring.service.MonitoringService import MonitoringService from monitoring.service.EventTools import EventsDeviceCollector from monitoring.tests.Messages import create_kpi_request, include_kpi_request, kpi, kpi_id, monitor_kpi_request from monitoring.tests.Messages import create_kpi_request, include_kpi_request, monitor_kpi_request from monitoring.tests.Objects import DEVICE_DEV1, DEVICE_DEV1_CONNECT_RULES, DEVICE_DEV1_UUID from monitoring.service.MonitoringServiceServicerImpl import LOGGER LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) # LOGGER = getJSONLogger('monitoringservice-server') # LOGGER.setLevel('DEBUG') ########################### # Tests Setup Loading Loading @@ -177,7 +179,7 @@ def test_monitor_kpi( monitoring_client : MonitoringClient, # pylint: disable=redefined-outer-name context_db_mb : Tuple[Database, MessageBroker] # pylint: disable=redefined-outer-name ): LOGGER.warning('test_monitor_kpi begin') LOGGER.info('test_monitor_kpi begin') context_database = context_db_mb[0] Loading Loading @@ -210,14 +212,14 @@ def test_monitor_kpi( def test_include_kpi(monitoring_client): # pylint: disable=redefined-outer-name # make call to server LOGGER.warning('test_include_kpi requesting') response = monitoring_client.IncludeKpi(include_kpi_request()) LOGGER.debug(str(response)) kpi_id = monitoring_client.SetKpi(create_kpi_request()) response = monitoring_client.IncludeKpi(include_kpi_request(kpi_id)) assert isinstance(response, Empty) # Test case that makes use of client fixture to test server's GetStreamKpi method def test_get_stream_kpi(monitoring_client): # pylint: disable=redefined-outer-name LOGGER.warning('test_getstream_kpi begin') response = monitoring_client.GetStreamKpi(kpi()) response = monitoring_client.GetStreamKpi(monitoring_pb2.Kpi()) LOGGER.debug(str(response)) #assert isinstance(response, Kpi) Loading @@ -232,8 +234,9 @@ def test_get_stream_kpi(monitoring_client): # pylint: disable=redefined-outer-na def test_get_kpidescritor_kpi(monitoring_client): # pylint: disable=redefined-outer-name LOGGER.warning('test_getkpidescritor_kpi begin') response = monitoring_client.SetKpi(create_kpi_request()) # LOGGER.debug(str(response)) response = monitoring_client.GetKpiDescriptor(response) LOGGER.debug(str(response)) # LOGGER.debug(str(response)) assert isinstance(response, KpiDescriptor) def test_sqlitedb_tools_insert_kpi(sql_db): # pylint: disable=redefined-outer-name Loading Loading
src/monitoring/service/EventTools.py +3 −6 Original line number Diff line number Diff line Loading @@ -19,16 +19,13 @@ import grpc from common.rpc_method_wrapper.ServiceExceptions import ServiceException from context.client.ContextClient import ContextClient #from common.proto import kpi_sample_types_pb2 from common.proto.context_pb2 import Empty, EventTypeEnum from common.logger import getJSONLogger from monitoring.client.MonitoringClient import MonitoringClient from monitoring.service.MonitoringServiceServicerImpl import LOGGER from common.proto import monitoring_pb2 LOGGER = getJSONLogger('monitoringservice-server') LOGGER.setLevel('DEBUG') class EventsDeviceCollector: def __init__(self) -> None: # pylint: disable=redefined-outer-name self._events_queue = Queue() Loading Loading @@ -74,7 +71,7 @@ class EventsDeviceCollector: kpi_id_list = [] while not self._events_queue.empty(): LOGGER.info('getting Kpi by KpiID') # LOGGER.info('getting Kpi by KpiID') event = self.get_event(block=True) if event.event.event_type == EventTypeEnum.EVENTTYPE_CREATE: device = self._context_client.GetDevice(event.device_id) Loading
src/monitoring/service/MonitoringServiceServicerImpl.py +7 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ from typing import Iterator from common.Constants import ServiceNameEnum from common.Settings import get_setting, get_service_port_grpc, get_service_host from common.logger import getJSONLogger from common.proto.context_pb2 import Empty from common.proto.device_pb2 import MonitoringSettings from common.proto.kpi_sample_types_pb2 import KpiSampleType Loading @@ -26,14 +27,14 @@ from common.proto.monitoring_pb2 import AlarmResponse, AlarmDescriptor, AlarmIDL KpiDescriptor, KpiList, KpiQuery, SubsDescriptor, SubscriptionID, AlarmID, KpiDescriptorList, \ MonitorKpiRequest, Kpi, AlarmSubscription from common.rpc_method_wrapper.ServiceExceptions import ServiceException from common.tools.timestamp.Converters import timestamp_float_to_string from monitoring.service import SqliteTools, MetricsDBTools from device.client.DeviceClient import DeviceClient from prometheus_client import Counter, Summary LOGGER = logging.getLogger(__name__) LOGGER = getJSONLogger('monitoringservice-server') LOGGER.setLevel('DEBUG') MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary( 'monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request') Loading @@ -57,7 +58,6 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): self.sql_db = SqliteTools.SQLite('monitoring.db') self.deviceClient = DeviceClient(host=DEVICESERVICE_SERVICE_HOST, port=DEVICESERVICE_SERVICE_PORT_GRPC) # instantiate the client # Set metrics_db client self.metrics_db = MetricsDBTools.MetricsDB(METRICSDB_HOSTNAME,METRICSDB_ILP_PORT,METRICSDB_REST_PORT,METRICSDB_TABLE) LOGGER.info('MetricsDB initialized') Loading @@ -81,7 +81,6 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id) kpi_id.kpi_id.uuid = str(data) # CREATEKPI_COUNTER_COMPLETED.inc() return kpi_id except ServiceException as e: Loading Loading @@ -162,7 +161,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): deviceId = kpiDescriptor.device_id.device_uuid.uuid endpointId = kpiDescriptor.endpoint_id.endpoint_uuid.uuid serviceId = kpiDescriptor.service_id.service_uuid.uuid time_stamp = timestamp_float_to_string(request.timestamp.timestamp) time_stamp = request.timestamp.timestamp kpi_value = getattr(request.kpi_value, request.kpi_value.WhichOneof('value')) # Build the structure to be included as point in the MetricsDB Loading
src/monitoring/tests/Messages.py +6 −10 Original line number Diff line number Diff line Loading @@ -11,17 +11,13 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import datetime from common.proto import monitoring_pb2 from common.proto.kpi_sample_types_pb2 import KpiSampleType from common.tools.timestamp.Converters import timestamp_string_to_float from common.tools.timestamp.Converters import timestamp_string_to_float, timestamp_utcnow_to_float def kpi(): _kpi = monitoring_pb2.Kpi() _kpi.kpi_id.kpi_id.uuid = 'KPIID0000' # pylint: disable=maybe-no-member return _kpi def kpi_id(): _kpi_id = monitoring_pb2.KpiId() _kpi_id.kpi_id.uuid = str(1) # pylint: disable=maybe-no-member Loading @@ -43,9 +39,9 @@ def monitor_kpi_request(kpi_uuid, monitoring_window_s, sampling_rate_s): _monitor_kpi_request.sampling_rate_s = sampling_rate_s return _monitor_kpi_request def include_kpi_request(): def include_kpi_request(kpi_id): _include_kpi_request = monitoring_pb2.Kpi() _include_kpi_request.kpi_id.kpi_id.uuid = str(1) # pylint: disable=maybe-no-member _include_kpi_request.timestamp.timestamp = timestamp_string_to_float("2021-10-12T13:14:42Z") _include_kpi_request.kpi_id.kpi_id.uuid = kpi_id.kpi_id.uuid _include_kpi_request.timestamp.timestamp = timestamp_utcnow_to_float() _include_kpi_request.kpi_value.int32Val = 500 # pylint: disable=maybe-no-member return _include_kpi_request
src/monitoring/tests/test_unitary.py +13 −10 Original line number Diff line number Diff line Loading @@ -12,16 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. import copy, logging, os, pytest import copy, os, pytest from time import sleep from typing import Tuple from common.Constants import ServiceNameEnum from common.Settings import ( ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_service_port_grpc) from common.logger import getJSONLogger from common.orm.Database import Database from common.orm.Factory import get_database_backend, BackendEnum as DatabaseBackendEnum from common.message_broker.Factory import get_messagebroker_backend, BackendEnum as MessageBrokerBackendEnum from common.message_broker.MessageBroker import MessageBroker from common.proto import monitoring_pb2 from common.proto.monitoring_pb2 import KpiId, KpiDescriptor from context.client.ContextClient import ContextClient Loading @@ -35,17 +37,17 @@ from device.service.driver_api.DriverInstanceCache import DriverInstanceCache from device.service.drivers import DRIVERS from monitoring.client.MonitoringClient import MonitoringClient from common.proto import context_pb2, monitoring_pb2 from common.proto.kpi_sample_types_pb2 import KpiSampleType from monitoring.service import SqliteTools, MetricsDBTools from monitoring.service.MonitoringService import MonitoringService from monitoring.service.EventTools import EventsDeviceCollector from monitoring.tests.Messages import create_kpi_request, include_kpi_request, kpi, kpi_id, monitor_kpi_request from monitoring.tests.Messages import create_kpi_request, include_kpi_request, monitor_kpi_request from monitoring.tests.Objects import DEVICE_DEV1, DEVICE_DEV1_CONNECT_RULES, DEVICE_DEV1_UUID from monitoring.service.MonitoringServiceServicerImpl import LOGGER LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) # LOGGER = getJSONLogger('monitoringservice-server') # LOGGER.setLevel('DEBUG') ########################### # Tests Setup Loading Loading @@ -177,7 +179,7 @@ def test_monitor_kpi( monitoring_client : MonitoringClient, # pylint: disable=redefined-outer-name context_db_mb : Tuple[Database, MessageBroker] # pylint: disable=redefined-outer-name ): LOGGER.warning('test_monitor_kpi begin') LOGGER.info('test_monitor_kpi begin') context_database = context_db_mb[0] Loading Loading @@ -210,14 +212,14 @@ def test_monitor_kpi( def test_include_kpi(monitoring_client): # pylint: disable=redefined-outer-name # make call to server LOGGER.warning('test_include_kpi requesting') response = monitoring_client.IncludeKpi(include_kpi_request()) LOGGER.debug(str(response)) kpi_id = monitoring_client.SetKpi(create_kpi_request()) response = monitoring_client.IncludeKpi(include_kpi_request(kpi_id)) assert isinstance(response, Empty) # Test case that makes use of client fixture to test server's GetStreamKpi method def test_get_stream_kpi(monitoring_client): # pylint: disable=redefined-outer-name LOGGER.warning('test_getstream_kpi begin') response = monitoring_client.GetStreamKpi(kpi()) response = monitoring_client.GetStreamKpi(monitoring_pb2.Kpi()) LOGGER.debug(str(response)) #assert isinstance(response, Kpi) Loading @@ -232,8 +234,9 @@ def test_get_stream_kpi(monitoring_client): # pylint: disable=redefined-outer-na def test_get_kpidescritor_kpi(monitoring_client): # pylint: disable=redefined-outer-name LOGGER.warning('test_getkpidescritor_kpi begin') response = monitoring_client.SetKpi(create_kpi_request()) # LOGGER.debug(str(response)) response = monitoring_client.GetKpiDescriptor(response) LOGGER.debug(str(response)) # LOGGER.debug(str(response)) assert isinstance(response, KpiDescriptor) def test_sqlitedb_tools_insert_kpi(sql_db): # pylint: disable=redefined-outer-name Loading