diff --git a/proto/monitoring.proto b/proto/monitoring.proto index 6e6dedc95c8279c923c073b8ab5b7239b9a5eadd..8b83afa47b49c130d37dcbcc1024f079ebc2a2fe 100644 --- a/proto/monitoring.proto +++ b/proto/monitoring.proto @@ -19,22 +19,18 @@ import "context.proto"; import "kpi_sample_types.proto"; service MonitoringService { - rpc CreateKpi (KpiDescriptor ) returns (KpiId ) {} - rpc EditKpiDescriptor (EditedKpiDescriptor) returns (context.Empty ) {} + rpc SetKpi (KpiDescriptor ) returns (KpiId ) {} rpc DeleteKpi (KpiId ) returns (context.Empty ) {} rpc GetKpiDescriptor (KpiId ) returns (KpiDescriptor ) {} rpc GetKpiDescriptorList (context.Empty ) returns (KpiDescriptorList ) {} - rpc CreateBundleKpi (BundleKpiDescriptor) returns (KpiId ) {} rpc IncludeKpi (Kpi ) returns (context.Empty ) {} rpc MonitorKpi (MonitorKpiRequest ) returns (context.Empty ) {} rpc QueryKpiData (KpiQuery ) returns (KpiList ) {} - rpc SubscribeKpi (SubsDescriptor ) returns (stream KpiList ) {} + rpc SetKpiSubscription (SubsDescriptor ) returns (stream KpiList ) {} rpc GetSubsDescriptor (SubscriptionID ) returns (SubsDescriptor ) {} rpc GetSubscriptions (context.Empty ) returns (SubsIDList ) {} rpc DeleteSubscription (SubscriptionID ) returns (context.Empty ) {} - rpc EditKpiSubscription (SubsDescriptor ) returns (context.Empty ) {} - rpc CreateKpiAlarm (AlarmDescriptor ) returns (AlarmID ) {} - rpc EditKpiAlarm (AlarmDescriptor ) returns (context.Empty ) {} + rpc SetKpiAlarm (AlarmDescriptor ) returns (AlarmID ) {} rpc GetAlarms (context.Empty ) returns (AlarmIDList ) {} rpc GetAlarmDescriptor (AlarmID ) returns (AlarmDescriptor ) {} rpc GetAlarmResponseStream(AlarmSubscription ) returns (stream AlarmResponse) {} @@ -44,25 +40,6 @@ service MonitoringService { } message KpiDescriptor { - string kpi_description = 1; - kpi_sample_types.KpiSampleType kpi_sample_type = 2; - context.DeviceId device_id = 3; - context.EndPointId endpoint_id = 4; - context.ServiceId service_id = 5; - context.SliceId slice_id = 6; -} - -message BundleKpiDescriptor { - string kpi_description = 1; - repeated KpiId kpi_id_list = 2; - 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; -} - -message EditedKpiDescriptor { KpiId kpi_id = 1; string kpi_description = 2; repeated KpiId kpi_id_list = 3; @@ -101,9 +78,11 @@ message Kpi { } message KpiValueRange { - KpiValue kpiMinValue = 1; - KpiValue kpiMaxValue = 2; - bool inRange = 3; // by default False + KpiValue kpiMinValue = 1; + KpiValue kpiMaxValue = 2; + bool inRange = 3; // by default True + bool includeMinValue = 4; // False is outside the interval + bool includeMaxValue = 5; // False is outside the interval } message KpiValue { @@ -118,6 +97,7 @@ message KpiValue { } } + message KpiList { repeated Kpi kpi_list = 1; } @@ -127,11 +107,12 @@ message KpiDescriptorList { } message SubsDescriptor{ - KpiId kpi_id = 1; - float sampling_duration_s = 2; - float sampling_interval_s = 3; - context.Timestamp start_timestamp = 4; // used when you want something like "get the samples since X date/time" - context.Timestamp end_timestamp = 5; // used when you want something like "get the samples until X date/time" + SubscriptionID subs_id = 1; + KpiId kpi_id = 2; + float sampling_duration_s = 3; + float sampling_interval_s = 4; + context.Timestamp start_timestamp = 5; // used when you want something like "get the samples since X date/time" + context.Timestamp end_timestamp = 6; // used when you want something like "get the samples until X date/time" // Pending add field to reflect Available Device Protocols } @@ -149,11 +130,12 @@ message SubsIDList { } message AlarmDescriptor { - string alarm_description = 1; - string name = 2; - KpiId kpi_id = 3; - KpiValueRange kpi_value_range = 4; - context.Timestamp timestamp = 5; + AlarmID alarm_id = 1; + string alarm_description = 2; + string name = 3; + repeated KpiId kpi_id = 4; + repeated KpiValueRange kpi_value_range = 5; + context.Timestamp timestamp = 6; } message AlarmID{ diff --git a/src/monitoring/client/MonitoringClient.py b/src/monitoring/client/MonitoringClient.py index 3e7c8372165865acf84f990d58356d5b81b9ddc1..f65072f19013b820312aa56b7f0062f9c95f712c 100644 --- a/src/monitoring/client/MonitoringClient.py +++ b/src/monitoring/client/MonitoringClient.py @@ -20,8 +20,8 @@ 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.monitoring_pb2 import Kpi, KpiDescriptor, KpiId, MonitorKpiRequest, EditedKpiDescriptor, \ - KpiDescriptorList, BundleKpiDescriptor, KpiQuery, KpiList, SubsDescriptor, SubscriptionID, SubsIDList, \ +from common.proto.monitoring_pb2 import Kpi, KpiDescriptor, KpiId, MonitorKpiRequest, \ + KpiDescriptorList, KpiQuery, KpiList, SubsDescriptor, SubscriptionID, SubsIDList, \ AlarmDescriptor, AlarmID, AlarmIDList, AlarmResponse, AlarmSubscription from common.proto.monitoring_pb2_grpc import MonitoringServiceStub @@ -51,17 +51,10 @@ class MonitoringClient: self.stub = None @RETRY_DECORATOR - def CreateKpi(self, request : KpiDescriptor) -> KpiId: - LOGGER.debug('CreateKpi: {:s}'.format(grpc_message_to_json_string(request))) - response = self.stub.CreateKpi(request) - LOGGER.debug('CreateKpi result: {:s}'.format(grpc_message_to_json_string(response))) - return response - - @RETRY_DECORATOR - def EditKpiDescriptor(self, request : EditedKpiDescriptor) -> Empty: - LOGGER.debug('EditKpiDescriptor: {:s}'.format(grpc_message_to_json_string(request))) - response = self.stub.EditKpiDescriptor(request) - LOGGER.info('EditKpiDescriptor result: {:s}'.format(grpc_message_to_json_string(response))) + 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))) return response @RETRY_DECORATOR @@ -85,13 +78,6 @@ class MonitoringClient: LOGGER.debug('GetKpiDescriptorList result: {:s}'.format(grpc_message_to_json_string(response))) return response - @RETRY_DECORATOR - def CreateBundleKpi(self, request : BundleKpiDescriptor) -> KpiId: - LOGGER.debug('CreateBundleKpi: {:s}'.format(grpc_message_to_json_string(request))) - response = self.stub.CreateBundleKpi(request) - LOGGER.debug('CreateBundleKpi result: {:s}'.format(grpc_message_to_json_string(response))) - return response - @RETRY_DECORATOR def IncludeKpi(self, request : Kpi) -> Empty: LOGGER.debug('IncludeKpi: {:s}'.format(grpc_message_to_json_string(request))) @@ -142,24 +128,10 @@ class MonitoringClient: return response @RETRY_DECORATOR - def EditKpiSubscription(self, request : SubsDescriptor) -> Empty: - LOGGER.debug('EditKpiSubscription: {:s}'.format(grpc_message_to_json_string(request))) - response = self.stub.GetSubscriptions(request) - LOGGER.debug('EditKpiSubscription result: {:s}'.format(grpc_message_to_json_string(response))) - return response - - @RETRY_DECORATOR - def CreateKpiAlarm(self, request : AlarmDescriptor) -> AlarmID: - LOGGER.debug('CreateKpiAlarm: {:s}'.format(grpc_message_to_json_string(request))) - response = self.stub.CreateKpiAlarm(request) - LOGGER.debug('CreateKpiAlarm result: {:s}'.format(grpc_message_to_json_string(response))) - return response - - @RETRY_DECORATOR - def EditKpiAlarm(self, request : AlarmDescriptor) -> Empty: - LOGGER.debug('EditKpiAlarm: {:s}'.format(grpc_message_to_json_string(request))) - response = self.stub.EditKpiAlarm(request) - LOGGER.debug('EditKpiAlarm result: {:s}'.format(grpc_message_to_json_string(response))) + def SetKpiAlarm(self, request : AlarmDescriptor) -> AlarmID: + LOGGER.debug('SetKpiAlarm: {:s}'.format(grpc_message_to_json_string(request))) + response = self.stub.SetKpiAlarm(request) + LOGGER.debug('SetKpiAlarm result: {:s}'.format(grpc_message_to_json_string(response))) return response @RETRY_DECORATOR diff --git a/src/monitoring/service/MonitoringServiceServicerImpl.py b/src/monitoring/service/MonitoringServiceServicerImpl.py index 051e8be4dfe9169dcbd0ec7fc0845eca55c613eb..d9f8b1e100bada795f8d6c91a796f458da8d212f 100644 --- a/src/monitoring/service/MonitoringServiceServicerImpl.py +++ b/src/monitoring/service/MonitoringServiceServicerImpl.py @@ -23,8 +23,8 @@ from common.proto.device_pb2 import MonitoringSettings from common.proto.kpi_sample_types_pb2 import KpiSampleType from common.proto.monitoring_pb2_grpc import MonitoringServiceServicer from common.proto.monitoring_pb2 import AlarmResponse, AlarmDescriptor, AlarmIDList, SubsIDList, KpiId, \ - KpiDescriptor, KpiList, KpiQuery, SubsDescriptor, SubscriptionID, AlarmID, EditedKpiDescriptor, KpiDescriptorList, \ - BundleKpiDescriptor, MonitorKpiRequest, Kpi, AlarmSubscription + 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 @@ -57,15 +57,15 @@ 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 - # Create metrics_db client + # Set metrics_db client self.metrics_db = MetricsDBTools.MetricsDB(METRICSDB_HOSTNAME,METRICSDB_ILP_PORT,METRICSDB_REST_PORT,METRICSDB_TABLE) - # CreateKpi (CreateKpiRequest) returns (KpiId) {} - def CreateKpi( + # SetKpi (SetKpiRequest) returns (KpiId) {} + def SetKpi( self, request : KpiDescriptor, grpc_context : grpc.ServicerContext ) -> KpiId: # CREATEKPI_COUNTER_STARTED.inc() - LOGGER.info('CreateKpi') + LOGGER.info('SetKpi') try: # Here the code to create a sqlite query to crete a KPI and return a KpiID kpi_id = KpiId() @@ -84,26 +84,14 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): # CREATEKPI_COUNTER_COMPLETED.inc() return kpi_id except ServiceException as e: - LOGGER.exception('CreateKpi exception') + LOGGER.exception('SetKpi exception') # CREATEKPI_COUNTER_FAILED.inc() grpc_context.abort(e.code, e.details) except Exception as e: # pragma: no cover - LOGGER.exception('CreateKpi exception') + LOGGER.exception('SetKpi exception') # CREATEKPI_COUNTER_FAILED.inc() grpc_context.abort(grpc.StatusCode.INTERNAL, str(e)) - def EditKpiDescriptor ( self, request : EditedKpiDescriptor, grpc_context : grpc.ServicerContext) -> Empty: - - LOGGER.info('EditKpiDescriptor') - try: - # TBC - return Empty() - except ServiceException as e: - LOGGER.exception('EditKpiDescriptor exception') - grpc_context.abort(e.code, e.details) - except Exception as e: # pragma: no cover - LOGGER.exception('EditKpiDescriptor exception') - def DeleteKpi ( self, request : KpiId, grpc_context : grpc.ServicerContext) -> Empty: LOGGER.info('DeleteKpi') @@ -128,25 +116,12 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): except Exception as e: # pragma: no cover LOGGER.exception('GetKpiDescriptorList exception') - def CreateBundleKpi ( self, request : BundleKpiDescriptor, grpc_context : grpc.ServicerContext) -> KpiId: - - LOGGER.info('CreateBundleKpi') - try: - # TBC - return KpiId() - except ServiceException as e: - LOGGER.exception('CreateBundleKpi exception') - grpc_context.abort(e.code, e.details) - except Exception as e: # pragma: no cover - LOGGER.exception('CreateBundleKpi exception') - - # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {} def MonitorKpi ( self, request : MonitorKpiRequest, grpc_context : grpc.ServicerContext) -> Empty: LOGGER.info('MonitorKpi') try: - # Creates the request to send to the device service + # Sets the request to send to the device service monitor_device_request = MonitoringSettings() kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context) @@ -300,41 +275,18 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): except Exception as e: # pragma: no cover LOGGER.exception('DeleteSubscription exception') - def EditKpiSubscription ( self, request : SubsDescriptor, grpc_context : grpc.ServicerContext) -> Empty: + def SetKpiAlarm ( self, request : AlarmDescriptor, grpc_context : grpc.ServicerContext) -> AlarmResponse: - LOGGER.info('EditKpiSubscription') - try: - # TBC - return Empty() - except ServiceException as e: - LOGGER.exception('EditKpiSubscription exception') - grpc_context.abort(e.code, e.details) - except Exception as e: # pragma: no cover - LOGGER.exception('EditKpiSubscription exception') - - def CreateKpiAlarm ( self, request : AlarmDescriptor, grpc_context : grpc.ServicerContext) -> AlarmResponse: - - LOGGER.info('CreateKpiAlarm') + LOGGER.info('SetKpiAlarm') try: # TBC return AlarmResponse() except ServiceException as e: - LOGGER.exception('CreateKpiAlarm exception') + LOGGER.exception('SetKpiAlarm exception') grpc_context.abort(e.code, e.details) except Exception as e: # pragma: no cover - LOGGER.exception('CreateKpiAlarm exception') + LOGGER.exception('SetKpiAlarm exception') - def EditKpiAlarm ( self, request : AlarmDescriptor, grpc_context : grpc.ServicerContext) -> Empty: - - LOGGER.info('EditKpiAlarm') - try: - # TBC - return Empty() - except ServiceException as e: - LOGGER.exception('EditKpiAlarm exception') - grpc_context.abort(e.code, e.details) - except Exception as e: # pragma: no cover - LOGGER.exception('EditKpiAlarm exception') def GetAlarms ( self, request : Empty, grpc_context : grpc.ServicerContext) -> AlarmIDList: