diff --git a/proto/monitoring.proto b/proto/monitoring.proto index 1b1f1fbb73e64e6ccdc895c206f662d1499348a0..42c70bd1f0be8aaedab9057bfd289d4379c3e111 100644 --- a/proto/monitoring.proto +++ b/proto/monitoring.proto @@ -5,15 +5,15 @@ package monitoring; import "context.proto"; service MonitoringService { - rpc CreateKpi (KpiRequest) returns (KpiId) {} + rpc CreateKpi (CreateKpiRequest) returns (KpiId) {} rpc IncludeKpi (IncludeKpiRequest) returns (context.Empty) {} rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {} - rpc MonitoriDeviceKpi (MonitorKpiRequest) returns (context.Empty) {} + rpc MonitorDeviceKpi (MonitorDeviceKpiRequest) returns (context.Empty) {} rpc GetStreamKpi ( KpiId ) returns (stream Kpi) {} rpc GetInstantKpi ( KpiId ) returns (Kpi) {} } -message KpiRequest{ +message CreateKpiRequest{ string kpiDescription = 1; context.DeviceId device_id = 2; KpiSampleType kpi_sample_type = 3; @@ -24,7 +24,13 @@ message KpiRequest{ message MonitorKpiRequest{ KpiId kpi_id = 1; - uint32 Connexion_time_s = 2; + uint32 connexion_time_s = 2; + uint32 sample_rate_ms = 3; +} + +message MonitorDeviceKpiRequest{ + Kpi kpi = 1; + uint32 connexion_time_s = 2; uint32 sample_rate_ms = 3; } diff --git a/src/monitoring/client/monitoring_client.py b/src/monitoring/client/monitoring_client.py index f9a974d22bd9ad824abff9fe1a9125db59406cb0..50086a05de82259f2b84ba7288cde9f04dfad152 100644 --- a/src/monitoring/client/monitoring_client.py +++ b/src/monitoring/client/monitoring_client.py @@ -17,17 +17,29 @@ class MonitoringClient: self.channel = grpc.insecure_channel(endpoint) self.server = monitoring_pb2_grpc.MonitoringServiceStub(self.channel) - def IncludeKpi(self, request): - LOGGER.info('IncludeKpi: {}'.format(request)) - response = self.server.IncludeKpi(request) - LOGGER.info('IncludeKpi result: {}'.format(response)) + def CreateKpi(self, request): + LOGGER.info('CreateKpi: {}'.format(request)) + response = self.server.CreateKpi(request) + LOGGER.info('CreateKpi result: {}'.format(response)) return monitoring_pb2.KpiId() def MonitorKpi(self, request): LOGGER.info('MonitorKpi: {}'.format(request)) response = self.server.MonitorKpi(request) LOGGER.info('MonitorKpi result: {}'.format(response)) - return monitoring_pb2.Kpi() + return context_pb2.Empty() + + def MonitorDeviceKpi(self, request): + LOGGER.info('MonitorDeviceKpi: {}'.format(request)) + response = self.server.MonitorDeviceKpi(request) + LOGGER.info('MonitorDeviceKpi result: {}'.format(response)) + return context_pb2.Empty() + + def IncludeKpi(self, request): + LOGGER.info('IncludeKpi: {}'.format(request)) + response = self.server.IncludeKpi(request) + LOGGER.info('IncludeKpi result: {}'.format(response)) + return context_pb2.Empty() def GetStreamKpi(self, request): LOGGER.info('GetStreamKpi: {}'.format(request)) diff --git a/src/monitoring/proto/monitoring_pb2.py b/src/monitoring/proto/monitoring_pb2.py index b586f3e9496a96d16190c49e7734e78ee8d333d4..00ac0ea0b01d71e3a661ee601012784cadeabd60 100644 --- a/src/monitoring/proto/monitoring_pb2.py +++ b/src/monitoring/proto/monitoring_pb2.py @@ -21,7 +21,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( package='monitoring', syntax='proto3', serialized_options=None, - serialized_pb=_b('\n\x10monitoring.proto\x12\nmonitoring\x1a\rcontext.proto\"~\n\nKpiRequest\x12\x16\n\x0ekpiDescription\x18\x01 \x01(\t\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\x12\x32\n\x0fkpi_sample_type\x18\x03 \x01(\x0e\x32\x19.monitoring.KpiSampleType\"h\n\x11MonitorKpiRequest\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x18\n\x10\x43onnexion_time_s\x18\x02 \x01(\r\x12\x16\n\x0esample_rate_ms\x18\x03 \x01(\r\"s\n\x11IncludeKpiRequest\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x12\n\ntime_stamp\x18\x02 \x01(\t\x12\'\n\tkpi_value\x18\x03 \x01(\x0b\x32\x14.monitoring.KpiValue\"\xd6\x01\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x16\n\x0ekpiDescription\x18\x03 \x01(\t\x12\'\n\tkpi_value\x18\x04 \x01(\x0b\x32\x14.monitoring.KpiValue\x12\x32\n\x0fkpi_sample_type\x18\x05 \x01(\x0e\x32\x19.monitoring.KpiSampleType\x12$\n\tdevice_id\x18\x06 \x01(\x0b\x32\x11.context.DeviceId\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"T\n\tKpiDevice\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"+\n\x07KpiList\x12 \n\x07kpiList\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi\"M\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x13\n\tstringVal\x18\x02 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value*x\n\rKpiSampleType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x17\n\x13PACKETS_TRANSMITTED\x10\x65\x12\x14\n\x10PACKETS_RECEIVED\x10\x66\x12\x16\n\x11\x42YTES_TRANSMITTED\x10\xc9\x01\x12\x13\n\x0e\x42YTES_RECEIVED\x10\xca\x01\x32\x80\x03\n\x11MonitoringService\x12\x38\n\tCreateKpi\x12\x16.monitoring.KpiRequest\x1a\x11.monitoring.KpiId\"\x00\x12=\n\nIncludeKpi\x12\x1d.monitoring.IncludeKpiRequest\x1a\x0e.context.Empty\"\x00\x12=\n\nMonitorKpi\x12\x1d.monitoring.MonitorKpiRequest\x1a\x0e.context.Empty\"\x00\x12\x44\n\x11MonitoriDeviceKpi\x12\x1d.monitoring.MonitorKpiRequest\x1a\x0e.context.Empty\"\x00\x12\x36\n\x0cGetStreamKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x30\x01\x12\x35\n\rGetInstantKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x62\x06proto3') + serialized_pb=_b('\n\x10monitoring.proto\x12\nmonitoring\x1a\rcontext.proto\"\x84\x01\n\x10\x43reateKpiRequest\x12\x16\n\x0ekpiDescription\x18\x01 \x01(\t\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\x12\x32\n\x0fkpi_sample_type\x18\x03 \x01(\x0e\x32\x19.monitoring.KpiSampleType\"h\n\x11MonitorKpiRequest\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x18\n\x10\x63onnexion_time_s\x18\x02 \x01(\r\x12\x16\n\x0esample_rate_ms\x18\x03 \x01(\r\"i\n\x17MonitorDeviceKpiRequest\x12\x1c\n\x03kpi\x18\x01 \x01(\x0b\x32\x0f.monitoring.Kpi\x12\x18\n\x10\x63onnexion_time_s\x18\x02 \x01(\r\x12\x16\n\x0esample_rate_ms\x18\x03 \x01(\r\"s\n\x11IncludeKpiRequest\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x12\n\ntime_stamp\x18\x02 \x01(\t\x12\'\n\tkpi_value\x18\x03 \x01(\x0b\x32\x14.monitoring.KpiValue\"\xd6\x01\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x16\n\x0ekpiDescription\x18\x03 \x01(\t\x12\'\n\tkpi_value\x18\x04 \x01(\x0b\x32\x14.monitoring.KpiValue\x12\x32\n\x0fkpi_sample_type\x18\x05 \x01(\x0e\x32\x19.monitoring.KpiSampleType\x12$\n\tdevice_id\x18\x06 \x01(\x0b\x32\x11.context.DeviceId\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"T\n\tKpiDevice\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"+\n\x07KpiList\x12 \n\x07kpiList\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi\"M\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x13\n\tstringVal\x18\x02 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value*x\n\rKpiSampleType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x17\n\x13PACKETS_TRANSMITTED\x10\x65\x12\x14\n\x10PACKETS_RECEIVED\x10\x66\x12\x16\n\x11\x42YTES_TRANSMITTED\x10\xc9\x01\x12\x13\n\x0e\x42YTES_RECEIVED\x10\xca\x01\x32\x8b\x03\n\x11MonitoringService\x12>\n\tCreateKpi\x12\x1c.monitoring.CreateKpiRequest\x1a\x11.monitoring.KpiId\"\x00\x12=\n\nIncludeKpi\x12\x1d.monitoring.IncludeKpiRequest\x1a\x0e.context.Empty\"\x00\x12=\n\nMonitorKpi\x12\x1d.monitoring.MonitorKpiRequest\x1a\x0e.context.Empty\"\x00\x12I\n\x10MonitorDeviceKpi\x12#.monitoring.MonitorDeviceKpiRequest\x1a\x0e.context.Empty\"\x00\x12\x36\n\x0cGetStreamKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x30\x01\x12\x35\n\rGetInstantKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x62\x06proto3') , dependencies=[context__pb2.DESCRIPTOR,]) @@ -54,8 +54,8 @@ _KPISAMPLETYPE = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=865, - serialized_end=985, + serialized_start=979, + serialized_end=1099, ) _sym_db.RegisterEnumDescriptor(_KPISAMPLETYPE) @@ -68,29 +68,29 @@ BYTES_RECEIVED = 202 -_KPIREQUEST = _descriptor.Descriptor( - name='KpiRequest', - full_name='monitoring.KpiRequest', +_CREATEKPIREQUEST = _descriptor.Descriptor( + name='CreateKpiRequest', + full_name='monitoring.CreateKpiRequest', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( - name='kpiDescription', full_name='monitoring.KpiRequest.kpiDescription', index=0, + name='kpiDescription', full_name='monitoring.CreateKpiRequest.kpiDescription', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='device_id', full_name='monitoring.KpiRequest.device_id', index=1, + name='device_id', full_name='monitoring.CreateKpiRequest.device_id', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='kpi_sample_type', full_name='monitoring.KpiRequest.kpi_sample_type', index=2, + name='kpi_sample_type', full_name='monitoring.CreateKpiRequest.kpi_sample_type', index=2, number=3, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, @@ -108,8 +108,8 @@ _KPIREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=47, - serialized_end=173, + serialized_start=48, + serialized_end=180, ) @@ -128,7 +128,7 @@ _MONITORKPIREQUEST = _descriptor.Descriptor( is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='Connexion_time_s', full_name='monitoring.MonitorKpiRequest.Connexion_time_s', index=1, + name='connexion_time_s', full_name='monitoring.MonitorKpiRequest.connexion_time_s', index=1, number=2, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, @@ -153,8 +153,53 @@ _MONITORKPIREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=175, - serialized_end=279, + serialized_start=182, + serialized_end=286, +) + + +_MONITORDEVICEKPIREQUEST = _descriptor.Descriptor( + name='MonitorDeviceKpiRequest', + full_name='monitoring.MonitorDeviceKpiRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='kpi', full_name='monitoring.MonitorDeviceKpiRequest.kpi', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='connexion_time_s', full_name='monitoring.MonitorDeviceKpiRequest.connexion_time_s', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='sample_rate_ms', full_name='monitoring.MonitorDeviceKpiRequest.sample_rate_ms', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=288, + serialized_end=393, ) @@ -198,8 +243,8 @@ _INCLUDEKPIREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=281, - serialized_end=396, + serialized_start=395, + serialized_end=510, ) @@ -264,8 +309,8 @@ _KPI = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=399, - serialized_end=613, + serialized_start=513, + serialized_end=727, ) @@ -295,8 +340,8 @@ _KPIID = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=615, - serialized_end=653, + serialized_start=729, + serialized_end=767, ) @@ -333,8 +378,8 @@ _KPIDEVICE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=655, - serialized_end=739, + serialized_start=769, + serialized_end=853, ) @@ -364,8 +409,8 @@ _KPILIST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=741, - serialized_end=784, + serialized_start=855, + serialized_end=898, ) @@ -412,13 +457,14 @@ _KPIVALUE = _descriptor.Descriptor( name='value', full_name='monitoring.KpiValue.value', index=0, containing_type=None, fields=[]), ], - serialized_start=786, - serialized_end=863, + serialized_start=900, + serialized_end=977, ) -_KPIREQUEST.fields_by_name['device_id'].message_type = context__pb2._DEVICEID -_KPIREQUEST.fields_by_name['kpi_sample_type'].enum_type = _KPISAMPLETYPE +_CREATEKPIREQUEST.fields_by_name['device_id'].message_type = context__pb2._DEVICEID +_CREATEKPIREQUEST.fields_by_name['kpi_sample_type'].enum_type = _KPISAMPLETYPE _MONITORKPIREQUEST.fields_by_name['kpi_id'].message_type = _KPIID +_MONITORDEVICEKPIREQUEST.fields_by_name['kpi'].message_type = _KPI _INCLUDEKPIREQUEST.fields_by_name['kpi_id'].message_type = _KPIID _INCLUDEKPIREQUEST.fields_by_name['kpi_value'].message_type = _KPIVALUE _KPI.fields_by_name['kpi_id'].message_type = _KPIID @@ -438,8 +484,9 @@ _KPIVALUE.fields_by_name['stringVal'].containing_oneof = _KPIVALUE.oneofs_by_nam _KPIVALUE.oneofs_by_name['value'].fields.append( _KPIVALUE.fields_by_name['boolVal']) _KPIVALUE.fields_by_name['boolVal'].containing_oneof = _KPIVALUE.oneofs_by_name['value'] -DESCRIPTOR.message_types_by_name['KpiRequest'] = _KPIREQUEST +DESCRIPTOR.message_types_by_name['CreateKpiRequest'] = _CREATEKPIREQUEST DESCRIPTOR.message_types_by_name['MonitorKpiRequest'] = _MONITORKPIREQUEST +DESCRIPTOR.message_types_by_name['MonitorDeviceKpiRequest'] = _MONITORDEVICEKPIREQUEST DESCRIPTOR.message_types_by_name['IncludeKpiRequest'] = _INCLUDEKPIREQUEST DESCRIPTOR.message_types_by_name['Kpi'] = _KPI DESCRIPTOR.message_types_by_name['KpiId'] = _KPIID @@ -449,12 +496,12 @@ DESCRIPTOR.message_types_by_name['KpiValue'] = _KPIVALUE DESCRIPTOR.enum_types_by_name['KpiSampleType'] = _KPISAMPLETYPE _sym_db.RegisterFileDescriptor(DESCRIPTOR) -KpiRequest = _reflection.GeneratedProtocolMessageType('KpiRequest', (_message.Message,), dict( - DESCRIPTOR = _KPIREQUEST, +CreateKpiRequest = _reflection.GeneratedProtocolMessageType('CreateKpiRequest', (_message.Message,), dict( + DESCRIPTOR = _CREATEKPIREQUEST, __module__ = 'monitoring_pb2' - # @@protoc_insertion_point(class_scope:monitoring.KpiRequest) + # @@protoc_insertion_point(class_scope:monitoring.CreateKpiRequest) )) -_sym_db.RegisterMessage(KpiRequest) +_sym_db.RegisterMessage(CreateKpiRequest) MonitorKpiRequest = _reflection.GeneratedProtocolMessageType('MonitorKpiRequest', (_message.Message,), dict( DESCRIPTOR = _MONITORKPIREQUEST, @@ -463,6 +510,13 @@ MonitorKpiRequest = _reflection.GeneratedProtocolMessageType('MonitorKpiRequest' )) _sym_db.RegisterMessage(MonitorKpiRequest) +MonitorDeviceKpiRequest = _reflection.GeneratedProtocolMessageType('MonitorDeviceKpiRequest', (_message.Message,), dict( + DESCRIPTOR = _MONITORDEVICEKPIREQUEST, + __module__ = 'monitoring_pb2' + # @@protoc_insertion_point(class_scope:monitoring.MonitorDeviceKpiRequest) + )) +_sym_db.RegisterMessage(MonitorDeviceKpiRequest) + IncludeKpiRequest = _reflection.GeneratedProtocolMessageType('IncludeKpiRequest', (_message.Message,), dict( DESCRIPTOR = _INCLUDEKPIREQUEST, __module__ = 'monitoring_pb2' @@ -513,15 +567,15 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor( file=DESCRIPTOR, index=0, serialized_options=None, - serialized_start=988, - serialized_end=1372, + serialized_start=1102, + serialized_end=1497, methods=[ _descriptor.MethodDescriptor( name='CreateKpi', full_name='monitoring.MonitoringService.CreateKpi', index=0, containing_service=None, - input_type=_KPIREQUEST, + input_type=_CREATEKPIREQUEST, output_type=_KPIID, serialized_options=None, ), @@ -544,11 +598,11 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor( serialized_options=None, ), _descriptor.MethodDescriptor( - name='MonitoriDeviceKpi', - full_name='monitoring.MonitoringService.MonitoriDeviceKpi', + name='MonitorDeviceKpi', + full_name='monitoring.MonitoringService.MonitorDeviceKpi', index=3, containing_service=None, - input_type=_MONITORKPIREQUEST, + input_type=_MONITORDEVICEKPIREQUEST, output_type=context__pb2._EMPTY, serialized_options=None, ), diff --git a/src/monitoring/proto/monitoring_pb2_grpc.py b/src/monitoring/proto/monitoring_pb2_grpc.py index 13fadc3eb3d7a257f7bb685a848b27720dba1aa3..f55d82c3dc64cb31029a417484ec989dd9000bab 100644 --- a/src/monitoring/proto/monitoring_pb2_grpc.py +++ b/src/monitoring/proto/monitoring_pb2_grpc.py @@ -17,7 +17,7 @@ class MonitoringServiceStub(object): """ self.CreateKpi = channel.unary_unary( '/monitoring.MonitoringService/CreateKpi', - request_serializer=monitoring__pb2.KpiRequest.SerializeToString, + request_serializer=monitoring__pb2.CreateKpiRequest.SerializeToString, response_deserializer=monitoring__pb2.KpiId.FromString, ) self.IncludeKpi = channel.unary_unary( @@ -30,9 +30,9 @@ class MonitoringServiceStub(object): request_serializer=monitoring__pb2.MonitorKpiRequest.SerializeToString, response_deserializer=context__pb2.Empty.FromString, ) - self.MonitoriDeviceKpi = channel.unary_unary( - '/monitoring.MonitoringService/MonitoriDeviceKpi', - request_serializer=monitoring__pb2.MonitorKpiRequest.SerializeToString, + self.MonitorDeviceKpi = channel.unary_unary( + '/monitoring.MonitoringService/MonitorDeviceKpi', + request_serializer=monitoring__pb2.MonitorDeviceKpiRequest.SerializeToString, response_deserializer=context__pb2.Empty.FromString, ) self.GetStreamKpi = channel.unary_stream( @@ -72,7 +72,7 @@ class MonitoringServiceServicer(object): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def MonitoriDeviceKpi(self, request, context): + def MonitorDeviceKpi(self, request, context): # missing associated documentation comment in .proto file pass context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -98,7 +98,7 @@ def add_MonitoringServiceServicer_to_server(servicer, server): rpc_method_handlers = { 'CreateKpi': grpc.unary_unary_rpc_method_handler( servicer.CreateKpi, - request_deserializer=monitoring__pb2.KpiRequest.FromString, + request_deserializer=monitoring__pb2.CreateKpiRequest.FromString, response_serializer=monitoring__pb2.KpiId.SerializeToString, ), 'IncludeKpi': grpc.unary_unary_rpc_method_handler( @@ -111,9 +111,9 @@ def add_MonitoringServiceServicer_to_server(servicer, server): request_deserializer=monitoring__pb2.MonitorKpiRequest.FromString, response_serializer=context__pb2.Empty.SerializeToString, ), - 'MonitoriDeviceKpi': grpc.unary_unary_rpc_method_handler( - servicer.MonitoriDeviceKpi, - request_deserializer=monitoring__pb2.MonitorKpiRequest.FromString, + 'MonitorDeviceKpi': grpc.unary_unary_rpc_method_handler( + servicer.MonitorDeviceKpi, + request_deserializer=monitoring__pb2.MonitorDeviceKpiRequest.FromString, response_serializer=context__pb2.Empty.SerializeToString, ), 'GetStreamKpi': grpc.unary_stream_rpc_method_handler( diff --git a/src/monitoring/service/monitoring_server.py b/src/monitoring/service/monitoring_server.py index 1c6375cd2a8cfae40beefae40e28228c97749c65..c787277eb0356dcfdf6b4278e3cb343ebbe9855c 100644 --- a/src/monitoring/service/monitoring_server.py +++ b/src/monitoring/service/monitoring_server.py @@ -2,6 +2,9 @@ import os from concurrent import futures + +from src.monitoring.client import monitoring_client +from src.monitoring.client.monitoring_client import MonitoringClient from src.monitoring.proto import context_pb2 import grpc @@ -25,6 +28,7 @@ import threading from prometheus_client import start_http_server, Summary from prometheus_client import Counter, Gauge +SERVER_ADDRESS = SERVER_ADDRESS = '127.0.0.1' PORT = 7070 MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary('monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request') @@ -35,16 +39,56 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService def __init__(self): LOGGER.info('Init monitoringService') - def IncludeKpi(self, request, context): - # receives monitoring.KpiRequest returns monitoring.KpiId - LOGGER.info('IncludeKpi') - MONITORING_INCLUDEKPI_COUNTER.inc() - return monitoring_pb2.KpiId() + # CreateKpi (CreateKpiRequest) returns (KpiId) {} + def CreateKpi(self, request : monitoring_pb2.CreateKpiRequest, context) -> monitoring_pb2.KpiId : + LOGGER.info('CreateKpi') + # Here the code to create a sqlite query to crete a KPI and return a KpiID + + # Change these lines by the KpiID assigned by the DB + kpi_id = monitoring_pb2.KpiId() + kpi_id.kpi_id.uuid = 'KPIID0000' + + # Create KPI object with the request info and the KpiID + kpi = monitoring_pb2.Kpi() + kpi.device_id.device_id.uuid = request.device_id.device_id.uuid + kpi.kpi_sample_type = request.kpi_sample_type + kpi.kpi_id.kpi_id.uuid = kpi_id.kpi_id.uuid + + return kpi_id + + # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {} + def MonitorKpi ( self, request : monitoring_pb2.MonitorKpiRequest, context) -> context_pb2.Empty: - def MonitorKpi ( self, request, context): - # receives monitoring.KpiId returns monitoring.Kpi LOGGER.info('MonitorKpi') - return monitoring_pb2.Kpi() + + # Creates the request to send to the device service + monitor_device_request = monitoring_pb2.MonitorDeviceKpiRequest() + kpi = get_Kpi(request.kpi_id) + + monitor_device_request.kpi.kpi_id.kpi_id.uuid = kpi.kpi_id.kpi_id.uuid + + monitor_device_request.connexion_time_s = request.connexion_time_s + monitor_device_request.sample_rate_ms = request.sample_rate_ms + + client = MonitoringClient(server=SERVER_ADDRESS, port=PORT) + client.MonitorDeviceKpi(monitor_device_request) + + return context_pb2.Empty() + + # rpc MonitorDeviceKpi(MonitorDeviceKpiRequest) returns(context.Empty) {} + def MonitorDeviceKpi ( self, request : monitoring_pb2.MonitorDeviceKpiRequest, context) -> context_pb2.Empty: + + # Some code device to perform its actions + + LOGGER.info('MonitorDeviceKpi') + return context_pb2.Empty() + + # rpc IncludeKpi(IncludeKpiRequest) returns(context.Empty) {} + def IncludeKpi(self, request : monitoring_pb2.IncludeKpiRequest, context) -> context_pb2.Empty: + + LOGGER.info('IncludeKpi') + return context_pb2.Empty() + def GetStreamKpi ( self, request, context): # receives monitoring.KpiId returns stream monitoring.Kpi @@ -81,6 +125,13 @@ def start_server(address='[::]', port=PORT, max_workers=10): def stop_server(serverGRPC, grace_period=0): serverGRPC.stop(grace_period) +def get_Kpi(kpiId): + LOGGER.info('getting Kpi by KpyID') + # Change these lines with the correct ones after DB query + kpi = monitoring_pb2.Kpi() + kpi.kpi_id.kpi_id.uuid = kpiId.kpi_id.uuid + return kpi + if __name__ == '__main__': LOGGER.info('initializing monitoringService') port = os.environ.get('PORT', str(PORT)) diff --git a/src/monitoring/tests/test_monitoring.py b/src/monitoring/tests/test_monitoring.py index c45a007fea9dded9b17bd28fe89dbfdafc864a3d..9308697f343c59caa1d6c8df6e2832f03fcd4ebd 100644 --- a/src/monitoring/tests/test_monitoring.py +++ b/src/monitoring/tests/test_monitoring.py @@ -33,7 +33,6 @@ def monitoring_service(): LOGGER.info('Terminating MonitoringService...') stop_server(server) - # This fixture will be requested by test cases and last during testing session. # The client requires the server, so client fixture has the server as dependency. @pytest.fixture(scope='session') @@ -64,37 +63,71 @@ def kpi_id(): return kpi_id @pytest.fixture(scope='session') -def kpi_request(): +def create_kpi_request(): LOGGER.warning('test_include_kpi begin') - kpi_request = monitoring_pb2.KpiRequest() - kpi_request.device_id.device_id.uuid = 'DEV1' # pylint: disable=maybe-no-member - kpi_request.kpiDescription = 'KPI Description' - kpi_request.kpi_sample_type = monitoring_pb2.KpiSampleType.PACKETS_TRANSMITTED + create_kpi_request = monitoring_pb2.CreateKpiRequest() + create_kpi_request.device_id.device_id.uuid = 'DEV1' # pylint: disable=maybe-no-member + create_kpi_request.kpiDescription = 'KPI Description' + create_kpi_request.kpi_sample_type = monitoring_pb2.KpiSampleType.PACKETS_TRANSMITTED + + return create_kpi_request + +@pytest.fixture(scope='session') +def monitor_kpi_request(): + LOGGER.warning('test_monitor_kpi begin') + + monitor_kpi_request = monitoring_pb2.MonitorKpiRequest() + monitor_kpi_request.kpi_id.kpi_id.uuid = 'KPIID0000' + monitor_kpi_request.connexion_time_s = 120 + monitor_kpi_request.sample_rate_ms = 5 + + return monitor_kpi_request - return kpi_request +@pytest.fixture(scope='session') +def monitor_device_kpi_request(): + LOGGER.warning('test_monitor_kpi begin') + + monitor_device_kpi_request = monitoring_pb2.MonitorDeviceKpiRequest() + monitor_device_kpi_request.connexion_time_s = 120 + monitor_device_kpi_request.sample_rate_ms = 5 + + return monitor_device_kpi_request ########################### # Tests Implementation ########################### -# Test case that makes use of client fixture to test server's IncludeKpi method -def test_include_kpi(monitoring_client,kpi_request): +# Test case that makes use of client fixture to test server's CreateKpi method +def test_create_kpi(monitoring_client,create_kpi_request): # make call to server - LOGGER.warning('test_include_kpi requesting') - response = monitoring_client.IncludeKpi(kpi_request) + LOGGER.warning('test_create_kpi requesting') + response = monitoring_client.CreateKpi(create_kpi_request) LOGGER.debug(str(response)) assert isinstance(response, monitoring_pb2.KpiId) -# You can add as many tests as you want. Just copy the "def test_include_kpi(monitoring_client):" and implement -# appropriate tests. monitoring_client and monitoring_service fixtures and their connection are reused along tests. - # Test case that makes use of client fixture to test server's MonitorKpi method -def test_monitor_kpi(monitoring_client,kpi_id): +def test_monitor_kpi(monitoring_client,monitor_kpi_request): LOGGER.warning('test_monitor_kpi begin') - response = monitoring_client.MonitorKpi(kpi_id) + response = monitoring_client.MonitorKpi(monitor_kpi_request) LOGGER.debug(str(response)) - assert isinstance(response, monitoring_pb2.Kpi) + assert isinstance(response, context_pb2.Empty) + +# Test case that makes use of client fixture to test server's MonitorDeviceKpi method +def test_monitor_device_kpi(monitoring_client,monitor_device_kpi_request): + LOGGER.warning('test_monitor_device_kpi begin') + response = monitoring_client.MonitorDeviceKpi(monitor_device_kpi_request) + LOGGER.debug(str(response)) + assert isinstance(response, context_pb2.Empty) + +# Test case that makes use of client fixture to test server's IncludeKpi method +def test_include_kpi(monitoring_client,kpi_request): + # make call to server + LOGGER.warning('test_include_kpi requesting') + response = monitoring_client.IncludeKpi(kpi_request) + LOGGER.debug(str(response)) + assert isinstance(response, context_pb2.Empty) + # Test case that makes use of client fixture to test server's GetStreamKpi method def test_getstream_kpi(monitoring_client,kpi):