diff --git a/proto/te.proto b/proto/te.proto
index f85f94f48322d85e2c6bd7e667f7dfc9cb2febda..e646da10b3cc425f73107ea34b8f03ebc9afcdae 100644
--- a/proto/te.proto
+++ b/proto/te.proto
@@ -18,7 +18,7 @@ package te;
 import "context.proto";
 
 service TEService {
-  rpc RequestLSP (context.Service) returns (context.ServiceStatus) {}
+  rpc RequestLSP(context.Service  ) returns (context.ServiceStatus) {}
   rpc UpdateLSP (context.ServiceId) returns (context.ServiceStatus) {}
-  rpc DeleteLSP (context.ServiceId) returns (context.Empty) {}
+  rpc DeleteLSP (context.ServiceId) returns (context.Empty       ) {}
 }
diff --git a/src/common/tools/service/__init__.py b/src/common/tools/service/__init__.py
deleted file mode 100644
index 70a33251242c51f49140e596b8208a19dd5245f7..0000000000000000000000000000000000000000
--- a/src/common/tools/service/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# 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.
-
diff --git a/src/monitoring/proto/monitoring_pb2.py b/src/monitoring/proto/monitoring_pb2.py
index b313ebb68f0da37a540898e8c362fd204a799076..4f9ea9872027a7a10e9b82f87fbd80276a65613b 100644
--- a/src/monitoring/proto/monitoring_pb2.py
+++ b/src/monitoring/proto/monitoring_pb2.py
@@ -21,7 +21,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   syntax='proto3',
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x10monitoring.proto\x12\nmonitoring\x1a\rcontext.proto\x1a\x16kpi_sample_types.proto\"\xda\x01\n\rKpiDescriptor\x12\x17\n\x0fkpi_description\x18\x01 \x01(\t\x12\x38\n\x0fkpi_sample_type\x18\x02 \x01(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\x12$\n\tdevice_id\x18\x03 \x01(\x0b\x32\x11.context.DeviceId\x12(\n\x0b\x65ndpoint_id\x18\x04 \x01(\x0b\x32\x13.context.EndPointId\x12&\n\nservice_id\x18\x05 \x01(\x0b\x32\x12.context.ServiceId\"p\n\x11MonitorKpiRequest\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x1b\n\x13sampling_duration_s\x18\x02 \x01(\x02\x12\x1b\n\x13sampling_interval_s\x18\x03 \x01(\x02\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"d\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\'\n\tkpi_value\x18\x04 \x01(\x0b\x32\x14.monitoring.KpiValue\"a\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x12\n\x08\x66loatVal\x18\x02 \x01(\x02H\x00\x12\x13\n\tstringVal\x18\x03 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x04 \x01(\x08H\x00\x42\x07\n\x05value\",\n\x07KpiList\x12!\n\x08kpi_list\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi2\xf3\x02\n\x11MonitoringService\x12;\n\tCreateKpi\x12\x19.monitoring.KpiDescriptor\x1a\x11.monitoring.KpiId\"\x00\x12\x42\n\x10GetKpiDescriptor\x12\x11.monitoring.KpiId\x1a\x19.monitoring.KpiDescriptor\"\x00\x12/\n\nIncludeKpi\x12\x0f.monitoring.Kpi\x1a\x0e.context.Empty\"\x00\x12=\n\nMonitorKpi\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\x1a\x16kpi_sample_types.proto\"\xfe\x01\n\rKpiDescriptor\x12\x17\n\x0fkpi_description\x18\x01 \x01(\t\x12\x38\n\x0fkpi_sample_type\x18\x02 \x01(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\x12$\n\tdevice_id\x18\x03 \x01(\x0b\x32\x11.context.DeviceId\x12(\n\x0b\x65ndpoint_id\x18\x04 \x01(\x0b\x32\x13.context.EndPointId\x12&\n\nservice_id\x18\x05 \x01(\x0b\x32\x12.context.ServiceId\x12\"\n\x08slice_id\x18\x06 \x01(\x0b\x32\x10.context.SliceId\"\xac\x02\n\x13\x42undleKpiDescriptor\x12\x17\n\x0fkpi_description\x18\x01 \x01(\t\x12&\n\x0bkpi_id_list\x18\x02 \x03(\x0b\x32\x11.monitoring.KpiId\x12\x38\n\x0fkpi_sample_type\x18\x03 \x01(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\x12$\n\tdevice_id\x18\x04 \x01(\x0b\x32\x11.context.DeviceId\x12(\n\x0b\x65ndpoint_id\x18\x05 \x01(\x0b\x32\x13.context.EndPointId\x12&\n\nservice_id\x18\x06 \x01(\x0b\x32\x12.context.ServiceId\x12\"\n\x08slice_id\x18\x07 \x01(\x0b\x32\x10.context.SliceId\"\xcf\x02\n\x13\x45\x64itedKpiDescriptor\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x17\n\x0fkpi_description\x18\x02 \x01(\t\x12&\n\x0bkpi_id_list\x18\x03 \x03(\x0b\x32\x11.monitoring.KpiId\x12\x38\n\x0fkpi_sample_type\x18\x04 \x01(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\x12$\n\tdevice_id\x18\x05 \x01(\x0b\x32\x11.context.DeviceId\x12(\n\x0b\x65ndpoint_id\x18\x06 \x01(\x0b\x32\x13.context.EndPointId\x12&\n\nservice_id\x18\x07 \x01(\x0b\x32\x12.context.ServiceId\x12\"\n\x08slice_id\x18\x08 \x01(\x0b\x32\x10.context.SliceId\"l\n\x11MonitorKpiRequest\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x1b\n\x13monitoring_window_s\x18\x02 \x01(\x02\x12\x17\n\x0fsampling_rate_s\x18\x03 \x01(\x02\"\xa1\x01\n\x08KpiQuery\x12!\n\x06kpi_id\x18\x01 \x03(\x0b\x32\x11.monitoring.KpiId\x12\x1b\n\x13monitoring_window_s\x18\x02 \x01(\x02\x12\x17\n\x0fsampling_rate_s\x18\x03 \x01(\x02\x12\x16\n\x0elast_n_samples\x18\x04 \x01(\r\x12\x12\n\nstart_date\x18\x05 \x01(\t\x12\x10\n\x08\x65nd_date\x18\x06 \x01(\t\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"d\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\'\n\tkpi_value\x18\x03 \x01(\x0b\x32\x14.monitoring.KpiValue\"e\n\rKpiValueRange\x12)\n\x0bkpiMinValue\x18\x01 \x01(\x0b\x32\x14.monitoring.KpiValue\x12)\n\x0bkpiMaxValue\x18\x02 \x01(\x0b\x32\x14.monitoring.KpiValue\"a\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x12\n\x08\x66loatVal\x18\x02 \x01(\x02H\x00\x12\x13\n\tstringVal\x18\x03 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x04 \x01(\x08H\x00\x42\x07\n\x05value\",\n\x07KpiList\x12!\n\x08kpi_list\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi\"K\n\x11KpiDescriptorList\x12\x36\n\x13kpi_descriptor_list\x18\x01 \x03(\x0b\x32\x19.monitoring.KpiDescriptor\"\x93\x01\n\x0eSubsDescriptor\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x1b\n\x13sampling_duration_s\x18\x02 \x01(\x02\x12\x1b\n\x13sampling_interval_s\x18\x03 \x01(\x02\x12\x12\n\nstart_date\x18\x04 \x01(\t\x12\x10\n\x08\x65nd_date\x18\x05 \x01(\t\"0\n\x0eSubscriptionID\x12\x1e\n\x07subs_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"b\n\x0cSubsResponse\x12+\n\x07subs_id\x18\x01 \x01(\x0b\x32\x1a.monitoring.SubscriptionID\x12%\n\x08kpi_list\x18\x02 \x03(\x0b\x32\x13.monitoring.KpiList\";\n\nSubsIDList\x12-\n\tsubs_list\x18\x01 \x03(\x0b\x32\x1a.monitoring.SubscriptionID\"\xa4\x01\n\x0f\x41larmDescriptor\x12\x19\n\x11\x61larm_description\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x06kpi_id\x18\x03 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x32\n\x0fkpi_value_range\x18\x04 \x01(\x0b\x32\x19.monitoring.KpiValueRange\x12\x11\n\ttimestamp\x18\x05 \x01(\t\"*\n\x07\x41larmID\x12\x1f\n\x08\x61larm_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"m\n\rAlarmResponse\x12%\n\x08\x61larm_id\x18\x01 \x01(\x0b\x32\x13.monitoring.AlarmID\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\'\n\tkpi_value\x18\x03 \x01(\x0b\x32\x14.monitoring.KpiValue\"6\n\x0b\x41larmIDList\x12\'\n\nalarm_list\x18\x01 \x03(\x0b\x32\x13.monitoring.AlarmID2\xf1\x08\n\x11MonitoringService\x12;\n\tCreateKpi\x12\x19.monitoring.KpiDescriptor\x1a\x11.monitoring.KpiId\"\x00\x12\x46\n\x11\x45\x64itKpiDescriptor\x12\x1f.monitoring.EditedKpiDescriptor\x1a\x0e.context.Empty\"\x00\x12\x30\n\tDeleteKpi\x12\x11.monitoring.KpiId\x1a\x0e.context.Empty\"\x00\x12G\n\x14GetKpiDescriptorList\x12\x0e.context.Empty\x1a\x1d.monitoring.KpiDescriptorList\"\x00\x12G\n\x0f\x43reateBundleKpi\x12\x1f.monitoring.BundleKpiDescriptor\x1a\x11.monitoring.KpiId\"\x00\x12\x42\n\x10GetKpiDescriptor\x12\x11.monitoring.KpiId\x1a\x19.monitoring.KpiDescriptor\"\x00\x12/\n\nIncludeKpi\x12\x0f.monitoring.Kpi\x1a\x0e.context.Empty\"\x00\x12=\n\nMonitorKpi\x12\x1d.monitoring.MonitorKpiRequest\x1a\x0e.context.Empty\"\x00\x12;\n\x0cQueryKpiData\x12\x14.monitoring.KpiQuery\x1a\x13.monitoring.KpiList\"\x00\x12\x43\n\x0cSubscribeKpi\x12\x1a.monitoring.SubsDescriptor\x1a\x13.monitoring.KpiList\"\x00\x30\x01\x12M\n\x11GetSubsDescriptor\x12\x1a.monitoring.SubscriptionID\x1a\x1a.monitoring.SubsDescriptor\"\x00\x12<\n\x10GetSubscriptions\x12\x0e.context.Empty\x1a\x16.monitoring.SubsIDList\"\x00\x12\x43\n\x13\x45\x64itKpiSubscription\x12\x1a.monitoring.SubsDescriptor\x1a\x0e.context.Empty\"\x00\x12J\n\x0e\x43reateKpiAlarm\x12\x1b.monitoring.AlarmDescriptor\x1a\x19.monitoring.AlarmResponse\"\x00\x12=\n\x0c\x45\x64itKpiAlarm\x12\x1b.monitoring.AlarmDescriptor\x1a\x0e.context.Empty\"\x00\x12\x36\n\tGetAlarms\x12\x0e.context.Empty\x1a\x17.monitoring.AlarmIDList\"\x00\x12H\n\x12GetAlarmDescriptor\x12\x13.monitoring.AlarmID\x1a\x1b.monitoring.AlarmDescriptor\"\x00\x62\x06proto3'
   ,
   dependencies=[context__pb2.DESCRIPTOR,kpi__sample__types__pb2.DESCRIPTOR,])
 
@@ -71,6 +71,520 @@ _KPIDESCRIPTOR = _descriptor.Descriptor(
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='slice_id', full_name='monitoring.KpiDescriptor.slice_id', index=5,
+      number=6, 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=72,
+  serialized_end=326,
+)
+
+
+_BUNDLEKPIDESCRIPTOR = _descriptor.Descriptor(
+  name='BundleKpiDescriptor',
+  full_name='monitoring.BundleKpiDescriptor',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_description', full_name='monitoring.BundleKpiDescriptor.kpi_description', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpi_id_list', full_name='monitoring.BundleKpiDescriptor.kpi_id_list', index=1,
+      number=2, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpi_sample_type', full_name='monitoring.BundleKpiDescriptor.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,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='device_id', full_name='monitoring.BundleKpiDescriptor.device_id', index=3,
+      number=4, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='endpoint_id', full_name='monitoring.BundleKpiDescriptor.endpoint_id', index=4,
+      number=5, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='service_id', full_name='monitoring.BundleKpiDescriptor.service_id', index=5,
+      number=6, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='slice_id', full_name='monitoring.BundleKpiDescriptor.slice_id', index=6,
+      number=7, 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=329,
+  serialized_end=629,
+)
+
+
+_EDITEDKPIDESCRIPTOR = _descriptor.Descriptor(
+  name='EditedKpiDescriptor',
+  full_name='monitoring.EditedKpiDescriptor',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_id', full_name='monitoring.EditedKpiDescriptor.kpi_id', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpi_description', full_name='monitoring.EditedKpiDescriptor.kpi_description', index=1,
+      number=2, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpi_id_list', full_name='monitoring.EditedKpiDescriptor.kpi_id_list', index=2,
+      number=3, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpi_sample_type', full_name='monitoring.EditedKpiDescriptor.kpi_sample_type', index=3,
+      number=4, type=14, cpp_type=8, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='device_id', full_name='monitoring.EditedKpiDescriptor.device_id', index=4,
+      number=5, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='endpoint_id', full_name='monitoring.EditedKpiDescriptor.endpoint_id', index=5,
+      number=6, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='service_id', full_name='monitoring.EditedKpiDescriptor.service_id', index=6,
+      number=7, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='slice_id', full_name='monitoring.EditedKpiDescriptor.slice_id', index=7,
+      number=8, 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=632,
+  serialized_end=967,
+)
+
+
+_MONITORKPIREQUEST = _descriptor.Descriptor(
+  name='MonitorKpiRequest',
+  full_name='monitoring.MonitorKpiRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_id', full_name='monitoring.MonitorKpiRequest.kpi_id', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='monitoring_window_s', full_name='monitoring.MonitorKpiRequest.monitoring_window_s', index=1,
+      number=2, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='sampling_rate_s', full_name='monitoring.MonitorKpiRequest.sampling_rate_s', index=2,
+      number=3, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=969,
+  serialized_end=1077,
+)
+
+
+_KPIQUERY = _descriptor.Descriptor(
+  name='KpiQuery',
+  full_name='monitoring.KpiQuery',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_id', full_name='monitoring.KpiQuery.kpi_id', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='monitoring_window_s', full_name='monitoring.KpiQuery.monitoring_window_s', index=1,
+      number=2, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='sampling_rate_s', full_name='monitoring.KpiQuery.sampling_rate_s', index=2,
+      number=3, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='last_n_samples', full_name='monitoring.KpiQuery.last_n_samples', index=3,
+      number=4, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='start_date', full_name='monitoring.KpiQuery.start_date', index=4,
+      number=5, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='end_date', full_name='monitoring.KpiQuery.end_date', index=5,
+      number=6, 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1080,
+  serialized_end=1241,
+)
+
+
+_KPIID = _descriptor.Descriptor(
+  name='KpiId',
+  full_name='monitoring.KpiId',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_id', full_name='monitoring.KpiId.kpi_id', 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1243,
+  serialized_end=1281,
+)
+
+
+_KPI = _descriptor.Descriptor(
+  name='Kpi',
+  full_name='monitoring.Kpi',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_id', full_name='monitoring.Kpi.kpi_id', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='timestamp', full_name='monitoring.Kpi.timestamp', index=1,
+      number=2, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpi_value', full_name='monitoring.Kpi.kpi_value', index=2,
+      number=3, 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1283,
+  serialized_end=1383,
+)
+
+
+_KPIVALUERANGE = _descriptor.Descriptor(
+  name='KpiValueRange',
+  full_name='monitoring.KpiValueRange',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpiMinValue', full_name='monitoring.KpiValueRange.kpiMinValue', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpiMaxValue', full_name='monitoring.KpiValueRange.kpiMaxValue', 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1385,
+  serialized_end=1486,
+)
+
+
+_KPIVALUE = _descriptor.Descriptor(
+  name='KpiValue',
+  full_name='monitoring.KpiValue',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='intVal', full_name='monitoring.KpiValue.intVal', index=0,
+      number=1, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='floatVal', full_name='monitoring.KpiValue.floatVal', index=1,
+      number=2, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='stringVal', full_name='monitoring.KpiValue.stringVal', index=2,
+      number=3, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='boolVal', full_name='monitoring.KpiValue.boolVal', index=3,
+      number=4, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+    _descriptor.OneofDescriptor(
+      name='value', full_name='monitoring.KpiValue.value',
+      index=0, containing_type=None,
+      create_key=_descriptor._internal_create_key,
+    fields=[]),
+  ],
+  serialized_start=1488,
+  serialized_end=1585,
+)
+
+
+_KPILIST = _descriptor.Descriptor(
+  name='KpiList',
+  full_name='monitoring.KpiList',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_list', full_name='monitoring.KpiList.kpi_list', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1587,
+  serialized_end=1631,
+)
+
+
+_KPIDESCRIPTORLIST = _descriptor.Descriptor(
+  name='KpiDescriptorList',
+  full_name='monitoring.KpiDescriptorList',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='kpi_descriptor_list', full_name='monitoring.KpiDescriptorList.kpi_descriptor_list', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -83,40 +597,54 @@ _KPIDESCRIPTOR = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=72,
-  serialized_end=290,
+  serialized_start=1633,
+  serialized_end=1708,
 )
 
 
-_MONITORKPIREQUEST = _descriptor.Descriptor(
-  name='MonitorKpiRequest',
-  full_name='monitoring.MonitorKpiRequest',
+_SUBSDESCRIPTOR = _descriptor.Descriptor(
+  name='SubsDescriptor',
+  full_name='monitoring.SubsDescriptor',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
   create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
-      name='kpi_id', full_name='monitoring.MonitorKpiRequest.kpi_id', index=0,
+      name='kpi_id', full_name='monitoring.SubsDescriptor.kpi_id', 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,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='sampling_duration_s', full_name='monitoring.MonitorKpiRequest.sampling_duration_s', index=1,
+      name='sampling_duration_s', full_name='monitoring.SubsDescriptor.sampling_duration_s', index=1,
       number=2, type=2, cpp_type=6, label=1,
       has_default_value=False, default_value=float(0),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='sampling_interval_s', full_name='monitoring.MonitorKpiRequest.sampling_interval_s', index=2,
+      name='sampling_interval_s', full_name='monitoring.SubsDescriptor.sampling_interval_s', index=2,
       number=3, type=2, cpp_type=6, label=1,
       has_default_value=False, default_value=float(0),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='start_date', full_name='monitoring.SubsDescriptor.start_date', index=3,
+      number=4, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='end_date', full_name='monitoring.SubsDescriptor.end_date', index=4,
+      number=5, 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,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -129,21 +657,21 @@ _MONITORKPIREQUEST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=292,
-  serialized_end=404,
+  serialized_start=1711,
+  serialized_end=1858,
 )
 
 
-_KPIID = _descriptor.Descriptor(
-  name='KpiId',
-  full_name='monitoring.KpiId',
+_SUBSCRIPTIONID = _descriptor.Descriptor(
+  name='SubscriptionID',
+  full_name='monitoring.SubscriptionID',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
   create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
-      name='kpi_id', full_name='monitoring.KpiId.kpi_id', index=0,
+      name='subs_id', full_name='monitoring.SubscriptionID.subs_id', 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,
@@ -161,40 +689,125 @@ _KPIID = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=406,
-  serialized_end=444,
+  serialized_start=1860,
+  serialized_end=1908,
 )
 
 
-_KPI = _descriptor.Descriptor(
-  name='Kpi',
-  full_name='monitoring.Kpi',
+_SUBSRESPONSE = _descriptor.Descriptor(
+  name='SubsResponse',
+  full_name='monitoring.SubsResponse',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
   create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
-      name='kpi_id', full_name='monitoring.Kpi.kpi_id', index=0,
+      name='subs_id', full_name='monitoring.SubsResponse.subs_id', 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,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='timestamp', full_name='monitoring.Kpi.timestamp', index=1,
+      name='kpi_list', full_name='monitoring.SubsResponse.kpi_list', index=1,
+      number=2, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1910,
+  serialized_end=2008,
+)
+
+
+_SUBSIDLIST = _descriptor.Descriptor(
+  name='SubsIDList',
+  full_name='monitoring.SubsIDList',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='subs_list', full_name='monitoring.SubsIDList.subs_list', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=2010,
+  serialized_end=2069,
+)
+
+
+_ALARMDESCRIPTOR = _descriptor.Descriptor(
+  name='AlarmDescriptor',
+  full_name='monitoring.AlarmDescriptor',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='alarm_description', full_name='monitoring.AlarmDescriptor.alarm_description', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='name', full_name='monitoring.AlarmDescriptor.name', index=1,
       number=2, 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,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='kpi_value', full_name='monitoring.Kpi.kpi_value', index=2,
+      name='kpi_id', full_name='monitoring.AlarmDescriptor.kpi_id', index=2,
+      number=3, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='kpi_value_range', full_name='monitoring.AlarmDescriptor.kpi_value_range', index=3,
       number=4, 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='timestamp', full_name='monitoring.AlarmDescriptor.timestamp', index=4,
+      number=5, 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,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -207,44 +820,69 @@ _KPI = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=446,
-  serialized_end=546,
+  serialized_start=2072,
+  serialized_end=2236,
 )
 
 
-_KPIVALUE = _descriptor.Descriptor(
-  name='KpiValue',
-  full_name='monitoring.KpiValue',
+_ALARMID = _descriptor.Descriptor(
+  name='AlarmID',
+  full_name='monitoring.AlarmID',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
   create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
-      name='intVal', full_name='monitoring.KpiValue.intVal', index=0,
-      number=1, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
+      name='alarm_id', full_name='monitoring.AlarmID.alarm_id', 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=2238,
+  serialized_end=2280,
+)
+
+
+_ALARMRESPONSE = _descriptor.Descriptor(
+  name='AlarmResponse',
+  full_name='monitoring.AlarmResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
     _descriptor.FieldDescriptor(
-      name='floatVal', full_name='monitoring.KpiValue.floatVal', index=1,
-      number=2, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
+      name='alarm_id', full_name='monitoring.AlarmResponse.alarm_id', 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,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='stringVal', full_name='monitoring.KpiValue.stringVal', index=2,
-      number=3, type=9, cpp_type=9, label=1,
+      name='text', full_name='monitoring.AlarmResponse.text', index=1,
+      number=2, 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,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='boolVal', full_name='monitoring.KpiValue.boolVal', index=3,
-      number=4, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
+      name='kpi_value', full_name='monitoring.AlarmResponse.kpi_value', index=2,
+      number=3, 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,  create_key=_descriptor._internal_create_key),
@@ -259,27 +897,22 @@ _KPIVALUE = _descriptor.Descriptor(
   syntax='proto3',
   extension_ranges=[],
   oneofs=[
-    _descriptor.OneofDescriptor(
-      name='value', full_name='monitoring.KpiValue.value',
-      index=0, containing_type=None,
-      create_key=_descriptor._internal_create_key,
-    fields=[]),
   ],
-  serialized_start=548,
-  serialized_end=645,
+  serialized_start=2282,
+  serialized_end=2391,
 )
 
 
-_KPILIST = _descriptor.Descriptor(
-  name='KpiList',
-  full_name='monitoring.KpiList',
+_ALARMIDLIST = _descriptor.Descriptor(
+  name='AlarmIDList',
+  full_name='monitoring.AlarmIDList',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
   create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
-      name='kpi_list', full_name='monitoring.KpiList.kpi_list', index=0,
+      name='alarm_list', full_name='monitoring.AlarmIDList.alarm_list', index=0,
       number=1, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
@@ -297,18 +930,35 @@ _KPILIST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=647,
-  serialized_end=691,
+  serialized_start=2393,
+  serialized_end=2447,
 )
 
 _KPIDESCRIPTOR.fields_by_name['kpi_sample_type'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
 _KPIDESCRIPTOR.fields_by_name['device_id'].message_type = context__pb2._DEVICEID
 _KPIDESCRIPTOR.fields_by_name['endpoint_id'].message_type = context__pb2._ENDPOINTID
 _KPIDESCRIPTOR.fields_by_name['service_id'].message_type = context__pb2._SERVICEID
+_KPIDESCRIPTOR.fields_by_name['slice_id'].message_type = context__pb2._SLICEID
+_BUNDLEKPIDESCRIPTOR.fields_by_name['kpi_id_list'].message_type = _KPIID
+_BUNDLEKPIDESCRIPTOR.fields_by_name['kpi_sample_type'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
+_BUNDLEKPIDESCRIPTOR.fields_by_name['device_id'].message_type = context__pb2._DEVICEID
+_BUNDLEKPIDESCRIPTOR.fields_by_name['endpoint_id'].message_type = context__pb2._ENDPOINTID
+_BUNDLEKPIDESCRIPTOR.fields_by_name['service_id'].message_type = context__pb2._SERVICEID
+_BUNDLEKPIDESCRIPTOR.fields_by_name['slice_id'].message_type = context__pb2._SLICEID
+_EDITEDKPIDESCRIPTOR.fields_by_name['kpi_id'].message_type = _KPIID
+_EDITEDKPIDESCRIPTOR.fields_by_name['kpi_id_list'].message_type = _KPIID
+_EDITEDKPIDESCRIPTOR.fields_by_name['kpi_sample_type'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
+_EDITEDKPIDESCRIPTOR.fields_by_name['device_id'].message_type = context__pb2._DEVICEID
+_EDITEDKPIDESCRIPTOR.fields_by_name['endpoint_id'].message_type = context__pb2._ENDPOINTID
+_EDITEDKPIDESCRIPTOR.fields_by_name['service_id'].message_type = context__pb2._SERVICEID
+_EDITEDKPIDESCRIPTOR.fields_by_name['slice_id'].message_type = context__pb2._SLICEID
 _MONITORKPIREQUEST.fields_by_name['kpi_id'].message_type = _KPIID
+_KPIQUERY.fields_by_name['kpi_id'].message_type = _KPIID
 _KPIID.fields_by_name['kpi_id'].message_type = context__pb2._UUID
 _KPI.fields_by_name['kpi_id'].message_type = _KPIID
 _KPI.fields_by_name['kpi_value'].message_type = _KPIVALUE
+_KPIVALUERANGE.fields_by_name['kpiMinValue'].message_type = _KPIVALUE
+_KPIVALUERANGE.fields_by_name['kpiMaxValue'].message_type = _KPIVALUE
 _KPIVALUE.oneofs_by_name['value'].fields.append(
   _KPIVALUE.fields_by_name['intVal'])
 _KPIVALUE.fields_by_name['intVal'].containing_oneof = _KPIVALUE.oneofs_by_name['value']
@@ -322,12 +972,37 @@ _KPIVALUE.oneofs_by_name['value'].fields.append(
   _KPIVALUE.fields_by_name['boolVal'])
 _KPIVALUE.fields_by_name['boolVal'].containing_oneof = _KPIVALUE.oneofs_by_name['value']
 _KPILIST.fields_by_name['kpi_list'].message_type = _KPI
+_KPIDESCRIPTORLIST.fields_by_name['kpi_descriptor_list'].message_type = _KPIDESCRIPTOR
+_SUBSDESCRIPTOR.fields_by_name['kpi_id'].message_type = _KPIID
+_SUBSCRIPTIONID.fields_by_name['subs_id'].message_type = context__pb2._UUID
+_SUBSRESPONSE.fields_by_name['subs_id'].message_type = _SUBSCRIPTIONID
+_SUBSRESPONSE.fields_by_name['kpi_list'].message_type = _KPILIST
+_SUBSIDLIST.fields_by_name['subs_list'].message_type = _SUBSCRIPTIONID
+_ALARMDESCRIPTOR.fields_by_name['kpi_id'].message_type = _KPIID
+_ALARMDESCRIPTOR.fields_by_name['kpi_value_range'].message_type = _KPIVALUERANGE
+_ALARMID.fields_by_name['alarm_id'].message_type = context__pb2._UUID
+_ALARMRESPONSE.fields_by_name['alarm_id'].message_type = _ALARMID
+_ALARMRESPONSE.fields_by_name['kpi_value'].message_type = _KPIVALUE
+_ALARMIDLIST.fields_by_name['alarm_list'].message_type = _ALARMID
 DESCRIPTOR.message_types_by_name['KpiDescriptor'] = _KPIDESCRIPTOR
+DESCRIPTOR.message_types_by_name['BundleKpiDescriptor'] = _BUNDLEKPIDESCRIPTOR
+DESCRIPTOR.message_types_by_name['EditedKpiDescriptor'] = _EDITEDKPIDESCRIPTOR
 DESCRIPTOR.message_types_by_name['MonitorKpiRequest'] = _MONITORKPIREQUEST
+DESCRIPTOR.message_types_by_name['KpiQuery'] = _KPIQUERY
 DESCRIPTOR.message_types_by_name['KpiId'] = _KPIID
 DESCRIPTOR.message_types_by_name['Kpi'] = _KPI
+DESCRIPTOR.message_types_by_name['KpiValueRange'] = _KPIVALUERANGE
 DESCRIPTOR.message_types_by_name['KpiValue'] = _KPIVALUE
 DESCRIPTOR.message_types_by_name['KpiList'] = _KPILIST
+DESCRIPTOR.message_types_by_name['KpiDescriptorList'] = _KPIDESCRIPTORLIST
+DESCRIPTOR.message_types_by_name['SubsDescriptor'] = _SUBSDESCRIPTOR
+DESCRIPTOR.message_types_by_name['SubscriptionID'] = _SUBSCRIPTIONID
+DESCRIPTOR.message_types_by_name['SubsResponse'] = _SUBSRESPONSE
+DESCRIPTOR.message_types_by_name['SubsIDList'] = _SUBSIDLIST
+DESCRIPTOR.message_types_by_name['AlarmDescriptor'] = _ALARMDESCRIPTOR
+DESCRIPTOR.message_types_by_name['AlarmID'] = _ALARMID
+DESCRIPTOR.message_types_by_name['AlarmResponse'] = _ALARMRESPONSE
+DESCRIPTOR.message_types_by_name['AlarmIDList'] = _ALARMIDLIST
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
 KpiDescriptor = _reflection.GeneratedProtocolMessageType('KpiDescriptor', (_message.Message,), {
@@ -337,6 +1012,20 @@ KpiDescriptor = _reflection.GeneratedProtocolMessageType('KpiDescriptor', (_mess
   })
 _sym_db.RegisterMessage(KpiDescriptor)
 
+BundleKpiDescriptor = _reflection.GeneratedProtocolMessageType('BundleKpiDescriptor', (_message.Message,), {
+  'DESCRIPTOR' : _BUNDLEKPIDESCRIPTOR,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.BundleKpiDescriptor)
+  })
+_sym_db.RegisterMessage(BundleKpiDescriptor)
+
+EditedKpiDescriptor = _reflection.GeneratedProtocolMessageType('EditedKpiDescriptor', (_message.Message,), {
+  'DESCRIPTOR' : _EDITEDKPIDESCRIPTOR,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.EditedKpiDescriptor)
+  })
+_sym_db.RegisterMessage(EditedKpiDescriptor)
+
 MonitorKpiRequest = _reflection.GeneratedProtocolMessageType('MonitorKpiRequest', (_message.Message,), {
   'DESCRIPTOR' : _MONITORKPIREQUEST,
   '__module__' : 'monitoring_pb2'
@@ -344,6 +1033,13 @@ MonitorKpiRequest = _reflection.GeneratedProtocolMessageType('MonitorKpiRequest'
   })
 _sym_db.RegisterMessage(MonitorKpiRequest)
 
+KpiQuery = _reflection.GeneratedProtocolMessageType('KpiQuery', (_message.Message,), {
+  'DESCRIPTOR' : _KPIQUERY,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
+  })
+_sym_db.RegisterMessage(KpiQuery)
+
 KpiId = _reflection.GeneratedProtocolMessageType('KpiId', (_message.Message,), {
   'DESCRIPTOR' : _KPIID,
   '__module__' : 'monitoring_pb2'
@@ -358,6 +1054,13 @@ Kpi = _reflection.GeneratedProtocolMessageType('Kpi', (_message.Message,), {
   })
 _sym_db.RegisterMessage(Kpi)
 
+KpiValueRange = _reflection.GeneratedProtocolMessageType('KpiValueRange', (_message.Message,), {
+  'DESCRIPTOR' : _KPIVALUERANGE,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
+  })
+_sym_db.RegisterMessage(KpiValueRange)
+
 KpiValue = _reflection.GeneratedProtocolMessageType('KpiValue', (_message.Message,), {
   'DESCRIPTOR' : _KPIVALUE,
   '__module__' : 'monitoring_pb2'
@@ -372,6 +1075,69 @@ KpiList = _reflection.GeneratedProtocolMessageType('KpiList', (_message.Message,
   })
 _sym_db.RegisterMessage(KpiList)
 
+KpiDescriptorList = _reflection.GeneratedProtocolMessageType('KpiDescriptorList', (_message.Message,), {
+  'DESCRIPTOR' : _KPIDESCRIPTORLIST,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
+  })
+_sym_db.RegisterMessage(KpiDescriptorList)
+
+SubsDescriptor = _reflection.GeneratedProtocolMessageType('SubsDescriptor', (_message.Message,), {
+  'DESCRIPTOR' : _SUBSDESCRIPTOR,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
+  })
+_sym_db.RegisterMessage(SubsDescriptor)
+
+SubscriptionID = _reflection.GeneratedProtocolMessageType('SubscriptionID', (_message.Message,), {
+  'DESCRIPTOR' : _SUBSCRIPTIONID,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
+  })
+_sym_db.RegisterMessage(SubscriptionID)
+
+SubsResponse = _reflection.GeneratedProtocolMessageType('SubsResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SUBSRESPONSE,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
+  })
+_sym_db.RegisterMessage(SubsResponse)
+
+SubsIDList = _reflection.GeneratedProtocolMessageType('SubsIDList', (_message.Message,), {
+  'DESCRIPTOR' : _SUBSIDLIST,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
+  })
+_sym_db.RegisterMessage(SubsIDList)
+
+AlarmDescriptor = _reflection.GeneratedProtocolMessageType('AlarmDescriptor', (_message.Message,), {
+  'DESCRIPTOR' : _ALARMDESCRIPTOR,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
+  })
+_sym_db.RegisterMessage(AlarmDescriptor)
+
+AlarmID = _reflection.GeneratedProtocolMessageType('AlarmID', (_message.Message,), {
+  'DESCRIPTOR' : _ALARMID,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.AlarmID)
+  })
+_sym_db.RegisterMessage(AlarmID)
+
+AlarmResponse = _reflection.GeneratedProtocolMessageType('AlarmResponse', (_message.Message,), {
+  'DESCRIPTOR' : _ALARMRESPONSE,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.AlarmResponse)
+  })
+_sym_db.RegisterMessage(AlarmResponse)
+
+AlarmIDList = _reflection.GeneratedProtocolMessageType('AlarmIDList', (_message.Message,), {
+  'DESCRIPTOR' : _ALARMIDLIST,
+  '__module__' : 'monitoring_pb2'
+  # @@protoc_insertion_point(class_scope:monitoring.AlarmIDList)
+  })
+_sym_db.RegisterMessage(AlarmIDList)
+
 
 
 _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
@@ -381,8 +1147,8 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=694,
-  serialized_end=1065,
+  serialized_start=2450,
+  serialized_end=3587,
   methods=[
   _descriptor.MethodDescriptor(
     name='CreateKpi',
@@ -394,10 +1160,50 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
+  _descriptor.MethodDescriptor(
+    name='EditKpiDescriptor',
+    full_name='monitoring.MonitoringService.EditKpiDescriptor',
+    index=1,
+    containing_service=None,
+    input_type=_EDITEDKPIDESCRIPTOR,
+    output_type=context__pb2._EMPTY,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='DeleteKpi',
+    full_name='monitoring.MonitoringService.DeleteKpi',
+    index=2,
+    containing_service=None,
+    input_type=_KPIID,
+    output_type=context__pb2._EMPTY,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetKpiDescriptorList',
+    full_name='monitoring.MonitoringService.GetKpiDescriptorList',
+    index=3,
+    containing_service=None,
+    input_type=context__pb2._EMPTY,
+    output_type=_KPIDESCRIPTORLIST,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='CreateBundleKpi',
+    full_name='monitoring.MonitoringService.CreateBundleKpi',
+    index=4,
+    containing_service=None,
+    input_type=_BUNDLEKPIDESCRIPTOR,
+    output_type=_KPIID,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
   _descriptor.MethodDescriptor(
     name='GetKpiDescriptor',
     full_name='monitoring.MonitoringService.GetKpiDescriptor',
-    index=1,
+    index=5,
     containing_service=None,
     input_type=_KPIID,
     output_type=_KPIDESCRIPTOR,
@@ -407,7 +1213,7 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='IncludeKpi',
     full_name='monitoring.MonitoringService.IncludeKpi',
-    index=2,
+    index=6,
     containing_service=None,
     input_type=_KPI,
     output_type=context__pb2._EMPTY,
@@ -417,7 +1223,7 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='MonitorKpi',
     full_name='monitoring.MonitoringService.MonitorKpi',
-    index=3,
+    index=7,
     containing_service=None,
     input_type=_MONITORKPIREQUEST,
     output_type=context__pb2._EMPTY,
@@ -425,22 +1231,92 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='GetStreamKpi',
-    full_name='monitoring.MonitoringService.GetStreamKpi',
-    index=4,
+    name='QueryKpiData',
+    full_name='monitoring.MonitoringService.QueryKpiData',
+    index=8,
     containing_service=None,
-    input_type=_KPIID,
-    output_type=_KPI,
+    input_type=_KPIQUERY,
+    output_type=_KPILIST,
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='GetInstantKpi',
-    full_name='monitoring.MonitoringService.GetInstantKpi',
-    index=5,
+    name='SubscribeKpi',
+    full_name='monitoring.MonitoringService.SubscribeKpi',
+    index=9,
     containing_service=None,
-    input_type=_KPIID,
-    output_type=_KPI,
+    input_type=_SUBSDESCRIPTOR,
+    output_type=_KPILIST,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetSubsDescriptor',
+    full_name='monitoring.MonitoringService.GetSubsDescriptor',
+    index=10,
+    containing_service=None,
+    input_type=_SUBSCRIPTIONID,
+    output_type=_SUBSDESCRIPTOR,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetSubscriptions',
+    full_name='monitoring.MonitoringService.GetSubscriptions',
+    index=11,
+    containing_service=None,
+    input_type=context__pb2._EMPTY,
+    output_type=_SUBSIDLIST,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='EditKpiSubscription',
+    full_name='monitoring.MonitoringService.EditKpiSubscription',
+    index=12,
+    containing_service=None,
+    input_type=_SUBSDESCRIPTOR,
+    output_type=context__pb2._EMPTY,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='CreateKpiAlarm',
+    full_name='monitoring.MonitoringService.CreateKpiAlarm',
+    index=13,
+    containing_service=None,
+    input_type=_ALARMDESCRIPTOR,
+    output_type=_ALARMRESPONSE,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='EditKpiAlarm',
+    full_name='monitoring.MonitoringService.EditKpiAlarm',
+    index=14,
+    containing_service=None,
+    input_type=_ALARMDESCRIPTOR,
+    output_type=context__pb2._EMPTY,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetAlarms',
+    full_name='monitoring.MonitoringService.GetAlarms',
+    index=15,
+    containing_service=None,
+    input_type=context__pb2._EMPTY,
+    output_type=_ALARMIDLIST,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetAlarmDescriptor',
+    full_name='monitoring.MonitoringService.GetAlarmDescriptor',
+    index=16,
+    containing_service=None,
+    input_type=_ALARMID,
+    output_type=_ALARMDESCRIPTOR,
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
diff --git a/src/monitoring/proto/monitoring_pb2_grpc.py b/src/monitoring/proto/monitoring_pb2_grpc.py
index 36c6835938af46b34b37f673bb6d4a1374a57cf0..19d3be8d7d383c29c042eae6818f37daabd45ae3 100644
--- a/src/monitoring/proto/monitoring_pb2_grpc.py
+++ b/src/monitoring/proto/monitoring_pb2_grpc.py
@@ -20,6 +20,26 @@ class MonitoringServiceStub(object):
                 request_serializer=monitoring__pb2.KpiDescriptor.SerializeToString,
                 response_deserializer=monitoring__pb2.KpiId.FromString,
                 )
+        self.EditKpiDescriptor = channel.unary_unary(
+                '/monitoring.MonitoringService/EditKpiDescriptor',
+                request_serializer=monitoring__pb2.EditedKpiDescriptor.SerializeToString,
+                response_deserializer=context__pb2.Empty.FromString,
+                )
+        self.DeleteKpi = channel.unary_unary(
+                '/monitoring.MonitoringService/DeleteKpi',
+                request_serializer=monitoring__pb2.KpiId.SerializeToString,
+                response_deserializer=context__pb2.Empty.FromString,
+                )
+        self.GetKpiDescriptorList = channel.unary_unary(
+                '/monitoring.MonitoringService/GetKpiDescriptorList',
+                request_serializer=context__pb2.Empty.SerializeToString,
+                response_deserializer=monitoring__pb2.KpiDescriptorList.FromString,
+                )
+        self.CreateBundleKpi = channel.unary_unary(
+                '/monitoring.MonitoringService/CreateBundleKpi',
+                request_serializer=monitoring__pb2.BundleKpiDescriptor.SerializeToString,
+                response_deserializer=monitoring__pb2.KpiId.FromString,
+                )
         self.GetKpiDescriptor = channel.unary_unary(
                 '/monitoring.MonitoringService/GetKpiDescriptor',
                 request_serializer=monitoring__pb2.KpiId.SerializeToString,
@@ -35,15 +55,50 @@ class MonitoringServiceStub(object):
                 request_serializer=monitoring__pb2.MonitorKpiRequest.SerializeToString,
                 response_deserializer=context__pb2.Empty.FromString,
                 )
-        self.GetStreamKpi = channel.unary_stream(
-                '/monitoring.MonitoringService/GetStreamKpi',
-                request_serializer=monitoring__pb2.KpiId.SerializeToString,
-                response_deserializer=monitoring__pb2.Kpi.FromString,
+        self.QueryKpiData = channel.unary_unary(
+                '/monitoring.MonitoringService/QueryKpiData',
+                request_serializer=monitoring__pb2.KpiQuery.SerializeToString,
+                response_deserializer=monitoring__pb2.KpiList.FromString,
                 )
-        self.GetInstantKpi = channel.unary_unary(
-                '/monitoring.MonitoringService/GetInstantKpi',
-                request_serializer=monitoring__pb2.KpiId.SerializeToString,
-                response_deserializer=monitoring__pb2.Kpi.FromString,
+        self.SubscribeKpi = channel.unary_stream(
+                '/monitoring.MonitoringService/SubscribeKpi',
+                request_serializer=monitoring__pb2.SubsDescriptor.SerializeToString,
+                response_deserializer=monitoring__pb2.KpiList.FromString,
+                )
+        self.GetSubsDescriptor = channel.unary_unary(
+                '/monitoring.MonitoringService/GetSubsDescriptor',
+                request_serializer=monitoring__pb2.SubscriptionID.SerializeToString,
+                response_deserializer=monitoring__pb2.SubsDescriptor.FromString,
+                )
+        self.GetSubscriptions = channel.unary_unary(
+                '/monitoring.MonitoringService/GetSubscriptions',
+                request_serializer=context__pb2.Empty.SerializeToString,
+                response_deserializer=monitoring__pb2.SubsIDList.FromString,
+                )
+        self.EditKpiSubscription = channel.unary_unary(
+                '/monitoring.MonitoringService/EditKpiSubscription',
+                request_serializer=monitoring__pb2.SubsDescriptor.SerializeToString,
+                response_deserializer=context__pb2.Empty.FromString,
+                )
+        self.CreateKpiAlarm = channel.unary_unary(
+                '/monitoring.MonitoringService/CreateKpiAlarm',
+                request_serializer=monitoring__pb2.AlarmDescriptor.SerializeToString,
+                response_deserializer=monitoring__pb2.AlarmResponse.FromString,
+                )
+        self.EditKpiAlarm = channel.unary_unary(
+                '/monitoring.MonitoringService/EditKpiAlarm',
+                request_serializer=monitoring__pb2.AlarmDescriptor.SerializeToString,
+                response_deserializer=context__pb2.Empty.FromString,
+                )
+        self.GetAlarms = channel.unary_unary(
+                '/monitoring.MonitoringService/GetAlarms',
+                request_serializer=context__pb2.Empty.SerializeToString,
+                response_deserializer=monitoring__pb2.AlarmIDList.FromString,
+                )
+        self.GetAlarmDescriptor = channel.unary_unary(
+                '/monitoring.MonitoringService/GetAlarmDescriptor',
+                request_serializer=monitoring__pb2.AlarmID.SerializeToString,
+                response_deserializer=monitoring__pb2.AlarmDescriptor.FromString,
                 )
 
 
@@ -56,6 +111,30 @@ class MonitoringServiceServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def EditKpiDescriptor(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def DeleteKpi(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetKpiDescriptorList(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def CreateBundleKpi(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
     def GetKpiDescriptor(self, request, context):
         """Missing associated documentation comment in .proto file."""
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -74,13 +153,55 @@ class MonitoringServiceServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def GetStreamKpi(self, request, context):
+    def QueryKpiData(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def SubscribeKpi(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetSubsDescriptor(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetSubscriptions(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def EditKpiSubscription(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def CreateKpiAlarm(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def EditKpiAlarm(self, request, context):
         """Missing associated documentation comment in .proto file."""
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def GetInstantKpi(self, request, context):
+    def GetAlarms(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetAlarmDescriptor(self, request, context):
         """Missing associated documentation comment in .proto file."""
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
@@ -94,6 +215,26 @@ def add_MonitoringServiceServicer_to_server(servicer, server):
                     request_deserializer=monitoring__pb2.KpiDescriptor.FromString,
                     response_serializer=monitoring__pb2.KpiId.SerializeToString,
             ),
+            'EditKpiDescriptor': grpc.unary_unary_rpc_method_handler(
+                    servicer.EditKpiDescriptor,
+                    request_deserializer=monitoring__pb2.EditedKpiDescriptor.FromString,
+                    response_serializer=context__pb2.Empty.SerializeToString,
+            ),
+            'DeleteKpi': grpc.unary_unary_rpc_method_handler(
+                    servicer.DeleteKpi,
+                    request_deserializer=monitoring__pb2.KpiId.FromString,
+                    response_serializer=context__pb2.Empty.SerializeToString,
+            ),
+            'GetKpiDescriptorList': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetKpiDescriptorList,
+                    request_deserializer=context__pb2.Empty.FromString,
+                    response_serializer=monitoring__pb2.KpiDescriptorList.SerializeToString,
+            ),
+            'CreateBundleKpi': grpc.unary_unary_rpc_method_handler(
+                    servicer.CreateBundleKpi,
+                    request_deserializer=monitoring__pb2.BundleKpiDescriptor.FromString,
+                    response_serializer=monitoring__pb2.KpiId.SerializeToString,
+            ),
             'GetKpiDescriptor': grpc.unary_unary_rpc_method_handler(
                     servicer.GetKpiDescriptor,
                     request_deserializer=monitoring__pb2.KpiId.FromString,
@@ -109,15 +250,50 @@ def add_MonitoringServiceServicer_to_server(servicer, server):
                     request_deserializer=monitoring__pb2.MonitorKpiRequest.FromString,
                     response_serializer=context__pb2.Empty.SerializeToString,
             ),
-            'GetStreamKpi': grpc.unary_stream_rpc_method_handler(
-                    servicer.GetStreamKpi,
-                    request_deserializer=monitoring__pb2.KpiId.FromString,
-                    response_serializer=monitoring__pb2.Kpi.SerializeToString,
+            'QueryKpiData': grpc.unary_unary_rpc_method_handler(
+                    servicer.QueryKpiData,
+                    request_deserializer=monitoring__pb2.KpiQuery.FromString,
+                    response_serializer=monitoring__pb2.KpiList.SerializeToString,
             ),
-            'GetInstantKpi': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetInstantKpi,
-                    request_deserializer=monitoring__pb2.KpiId.FromString,
-                    response_serializer=monitoring__pb2.Kpi.SerializeToString,
+            'SubscribeKpi': grpc.unary_stream_rpc_method_handler(
+                    servicer.SubscribeKpi,
+                    request_deserializer=monitoring__pb2.SubsDescriptor.FromString,
+                    response_serializer=monitoring__pb2.KpiList.SerializeToString,
+            ),
+            'GetSubsDescriptor': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetSubsDescriptor,
+                    request_deserializer=monitoring__pb2.SubscriptionID.FromString,
+                    response_serializer=monitoring__pb2.SubsDescriptor.SerializeToString,
+            ),
+            'GetSubscriptions': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetSubscriptions,
+                    request_deserializer=context__pb2.Empty.FromString,
+                    response_serializer=monitoring__pb2.SubsIDList.SerializeToString,
+            ),
+            'EditKpiSubscription': grpc.unary_unary_rpc_method_handler(
+                    servicer.EditKpiSubscription,
+                    request_deserializer=monitoring__pb2.SubsDescriptor.FromString,
+                    response_serializer=context__pb2.Empty.SerializeToString,
+            ),
+            'CreateKpiAlarm': grpc.unary_unary_rpc_method_handler(
+                    servicer.CreateKpiAlarm,
+                    request_deserializer=monitoring__pb2.AlarmDescriptor.FromString,
+                    response_serializer=monitoring__pb2.AlarmResponse.SerializeToString,
+            ),
+            'EditKpiAlarm': grpc.unary_unary_rpc_method_handler(
+                    servicer.EditKpiAlarm,
+                    request_deserializer=monitoring__pb2.AlarmDescriptor.FromString,
+                    response_serializer=context__pb2.Empty.SerializeToString,
+            ),
+            'GetAlarms': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetAlarms,
+                    request_deserializer=context__pb2.Empty.FromString,
+                    response_serializer=monitoring__pb2.AlarmIDList.SerializeToString,
+            ),
+            'GetAlarmDescriptor': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetAlarmDescriptor,
+                    request_deserializer=monitoring__pb2.AlarmID.FromString,
+                    response_serializer=monitoring__pb2.AlarmDescriptor.SerializeToString,
             ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
@@ -146,6 +322,74 @@ class MonitoringService(object):
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
+    @staticmethod
+    def EditKpiDescriptor(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/EditKpiDescriptor',
+            monitoring__pb2.EditedKpiDescriptor.SerializeToString,
+            context__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def DeleteKpi(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/DeleteKpi',
+            monitoring__pb2.KpiId.SerializeToString,
+            context__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetKpiDescriptorList(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetKpiDescriptorList',
+            context__pb2.Empty.SerializeToString,
+            monitoring__pb2.KpiDescriptorList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def CreateBundleKpi(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/CreateBundleKpi',
+            monitoring__pb2.BundleKpiDescriptor.SerializeToString,
+            monitoring__pb2.KpiId.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
     @staticmethod
     def GetKpiDescriptor(request,
             target,
@@ -198,7 +442,7 @@ class MonitoringService(object):
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def GetStreamKpi(request,
+    def QueryKpiData(request,
             target,
             options=(),
             channel_credentials=None,
@@ -208,14 +452,14 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_stream(request, target, '/monitoring.MonitoringService/GetStreamKpi',
-            monitoring__pb2.KpiId.SerializeToString,
-            monitoring__pb2.Kpi.FromString,
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/QueryKpiData',
+            monitoring__pb2.KpiQuery.SerializeToString,
+            monitoring__pb2.KpiList.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def GetInstantKpi(request,
+    def SubscribeKpi(request,
             target,
             options=(),
             channel_credentials=None,
@@ -225,8 +469,127 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetInstantKpi',
-            monitoring__pb2.KpiId.SerializeToString,
-            monitoring__pb2.Kpi.FromString,
+        return grpc.experimental.unary_stream(request, target, '/monitoring.MonitoringService/SubscribeKpi',
+            monitoring__pb2.SubsDescriptor.SerializeToString,
+            monitoring__pb2.KpiList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetSubsDescriptor(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetSubsDescriptor',
+            monitoring__pb2.SubscriptionID.SerializeToString,
+            monitoring__pb2.SubsDescriptor.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetSubscriptions(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetSubscriptions',
+            context__pb2.Empty.SerializeToString,
+            monitoring__pb2.SubsIDList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def EditKpiSubscription(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/EditKpiSubscription',
+            monitoring__pb2.SubsDescriptor.SerializeToString,
+            context__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def CreateKpiAlarm(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/CreateKpiAlarm',
+            monitoring__pb2.AlarmDescriptor.SerializeToString,
+            monitoring__pb2.AlarmResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def EditKpiAlarm(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/EditKpiAlarm',
+            monitoring__pb2.AlarmDescriptor.SerializeToString,
+            context__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetAlarms(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetAlarms',
+            context__pb2.Empty.SerializeToString,
+            monitoring__pb2.AlarmIDList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetAlarmDescriptor(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetAlarmDescriptor',
+            monitoring__pb2.AlarmID.SerializeToString,
+            monitoring__pb2.AlarmDescriptor.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/monitoring/service/MonitoringServiceServicerImpl.py b/src/monitoring/service/MonitoringServiceServicerImpl.py
index e3d986fc3169f400b9e2d2d0b283e1b20071625c..21c008a06b6d53077b822a44677f28fe5d762970 100644
--- a/src/monitoring/service/MonitoringServiceServicerImpl.py
+++ b/src/monitoring/service/MonitoringServiceServicerImpl.py
@@ -12,21 +12,29 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import os, grpc, logging
-from prometheus_client import Counter, Summary
+import os,grpc, logging
+import socket
+
+from prometheus_client import Summary
+from prometheus_client import Counter
+from common.Settings import get_setting
+
+from monitoring.Config import DEVICE_GRPC_SERVICE_PORT, DEVICE_SERVICE_HOST
 from monitoring.proto.kpi_sample_types_pb2 import KpiSampleType
 from monitoring.service import SqliteTools, InfluxTools
 from monitoring.proto import monitoring_pb2
 from monitoring.proto import monitoring_pb2_grpc
+
 from common.rpc_method_wrapper.ServiceExceptions import ServiceException
+
 from context.proto import context_pb2
+
 from device.client.DeviceClient import DeviceClient
 from device.proto import device_pb2
 
 LOGGER = logging.getLogger(__name__)
 
-MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary(
-    'monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request')
+MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary('monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request')
 MONITORING_INCLUDEKPI_COUNTER = Counter('monitoring_includekpi_counter', 'Monitoring include kpi request counter')
 
 INFLUXDB_HOSTNAME = os.environ.get("INFLUXDB_HOSTNAME")
@@ -34,6 +42,9 @@ INFLUXDB_USER = os.environ.get("INFLUXDB_USER")
 INFLUXDB_PASSWORD = os.environ.get("INFLUXDB_PASSWORD")
 INFLUXDB_DATABASE = os.environ.get("INFLUXDB_DATABASE")
 
+DEVICE_SERVICE_HOST = get_setting('DEVICESERVICE_SERVICE_HOST',      default=DEVICE_SERVICE_HOST     )
+DEVICE_SERVICE_PORT = get_setting('DEVICESERVICE_SERVICE_PORT_GRPC', default=DEVICE_GRPC_SERVICE_PORT)
+
 
 class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceServicer):
     def __init__(self):
@@ -41,14 +52,13 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
 
         # Init sqlite monitoring db
         self.sql_db = SqliteTools.SQLite('monitoring.db')
+        self.deviceClient = DeviceClient(address=DEVICE_SERVICE_HOST, port=DEVICE_GRPC_SERVICE_PORT)  # instantiate the client
 
         # Create influx_db client
         self.influx_db = InfluxTools.Influx(INFLUXDB_HOSTNAME,"8086",INFLUXDB_USER,INFLUXDB_PASSWORD,INFLUXDB_DATABASE)
 
     # CreateKpi (CreateKpiRequest) returns (KpiId) {}
-    def CreateKpi(
-        self, request : monitoring_pb2.KpiDescriptor, grpc_context : grpc.ServicerContext
-    ) -> monitoring_pb2.KpiId:
+    def CreateKpi(self, request : monitoring_pb2.KpiDescriptor, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiId :
         # CREATEKPI_COUNTER_STARTED.inc()
         LOGGER.info('CreateKpi')
         try:
@@ -61,8 +71,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             kpi_endpoint_id = request.endpoint_id.endpoint_uuid.uuid
             kpi_service_id  = request.service_id.service_uuid.uuid
 
-            data = self.sql_db.insert_KPI(
-                kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
+            data = self.sql_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
 
             kpi_id.kpi_id.uuid = str(data)
 
@@ -127,9 +136,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
 
 
     # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {}
-    def MonitorKpi(
-        self, request : monitoring_pb2.MonitorKpiRequest, grpc_context : grpc.ServicerContext
-    ) -> context_pb2.Empty:
+    def MonitorKpi ( self, request : monitoring_pb2.MonitorKpiRequest, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
 
         LOGGER.info('MonitorKpi')
         try:
@@ -139,23 +146,25 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context)
 
             monitor_device_request.kpi_descriptor.CopyFrom(kpiDescriptor)
-            monitor_device_request.kpi_id.kpi_id.uuid  = request.kpi_id.kpi_id.uuid
-            monitor_device_request.sampling_duration_s = request.sampling_duration_s
-            monitor_device_request.sampling_interval_s = request.sampling_interval_s
+            monitor_device_request.kpi_id.kpi_id.uuid                               = request.kpi_id.kpi_id.uuid
+            monitor_device_request.sampling_duration_s                              = request.sampling_duration_s
+            monitor_device_request.sampling_interval_s                              = request.sampling_interval_s
 
-            device_client = DeviceClient()
-            device_client.MonitorDeviceKpi(monitor_device_request)
+            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            if s.connect_ex((DEVICE_SERVICE_HOST, DEVICE_GRPC_SERVICE_PORT)) == 0:
+                self.deviceClient.MonitorDeviceKpi(monitor_device_request)
+            else:
+                LOGGER.warning('Device service is not reachable')
 
+            return context_pb2.Empty()
         except ServiceException as e:
             LOGGER.exception('MonitorKpi exception')
             # CREATEKPI_COUNTER_FAILED.inc()
             grpc_context.abort(e.code, e.details)
         except Exception as e:  # pragma: no cover
             LOGGER.exception('MonitorKpi exception')
-            grpc_context.abort(grpc.StatusCode.INTERNAL, str(e))
             # CREATEKPI_COUNTER_FAILED.inc()
 
-        return context_pb2.Empty()
 
     # rpc IncludeKpi(IncludeKpiRequest)  returns(context.Empty)    {}
     def IncludeKpi(self, request : monitoring_pb2.Kpi, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
@@ -185,7 +194,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             LOGGER.exception('IncludeKpi exception')
             # CREATEKPI_COUNTER_FAILED.inc()
             grpc_context.abort(e.code, e.details)
-        except Exception:  # pragma: no cover
+        except Exception as e:  # pragma: no cover
             LOGGER.exception('IncludeKpi exception')
             # CREATEKPI_COUNTER_FAILED.inc()
         return context_pb2.Empty()
@@ -202,9 +211,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
     #     return monitoring_pb2.Kpi()
 
 
-    def GetKpiDescriptor(
-        self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext
-    ) -> monitoring_pb2.KpiDescriptor:
+    def GetKpiDescriptor(self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiDescriptor:
         LOGGER.info('getting Kpi by KpiID')
         try:
             kpi_db = self.sql_db.get_KPI(int(request.kpi_id.uuid))
@@ -225,7 +232,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             LOGGER.exception('GetKpiDescriptor exception')
             grpc_context.abort(e.code, e.details)
 
-        except Exception:  # pragma: no cover
+        except Exception as e:  # pragma: no cover
             LOGGER.exception('GetKpiDescriptor exception')
 
     def QueryKpiData ( self, request : monitoring_pb2.KpiQuery, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiList:
diff --git a/src/monitoring/tests/test_unitary.py b/src/monitoring/tests/test_unitary.py
index cd20e38de6bf9d451af0bac48945fdbe442540e7..4acda419c38420eb7175cd1a8f0ff98246d85753 100644
--- a/src/monitoring/tests/test_unitary.py
+++ b/src/monitoring/tests/test_unitary.py
@@ -230,20 +230,20 @@ def test_monitor_kpi(monitoring_client,create_kpi_request):
     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,include_kpi_request):
-    # make call to server
-    LOGGER.warning('test_include_kpi requesting')
-    response = monitoring_client.IncludeKpi(include_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_get_stream_kpi(monitoring_client,include_kpi_request):
-    LOGGER.warning('test_getstream_kpi begin')
-    response = monitoring_client.GetStreamKpi(kpi)
-    LOGGER.debug(str(response))
-    #assert isinstance(response, monitoring_pb2.Kpi)
+# # Test case that makes use of client fixture to test server's IncludeKpi method
+# def test_include_kpi(monitoring_client,include_kpi_request):
+#     # make call to server
+#     LOGGER.warning('test_include_kpi requesting')
+#     response = monitoring_client.IncludeKpi(include_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_get_stream_kpi(monitoring_client,include_kpi_request):
+#     LOGGER.warning('test_getstream_kpi begin')
+#     response = monitoring_client.GetStreamKpi(kpi)
+#     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_get_instant_kpi(monitoring_client,kpi_id):