From 36af41138fcf3d8ef56e26fe7278afd76bcc40b9 Mon Sep 17 00:00:00 2001
From: "francisco.moreno.external@atos.net" <c78Fsg0mLSPOc$a>
Date: Fri, 17 Jun 2022 11:39:23 +0200
Subject: [PATCH] Modifications in the monitoring information model and
 skeleton of the methods in the server and client

---
 proto/monitoring.proto                        | 171 ++--
 src/monitoring/client/monitoring_client.py    | 103 +-
 src/monitoring/genproto_win.sh                |  13 +
 src/monitoring/proto/context_pb2.py           |   2 +-
 src/monitoring/proto/monitoring_pb2.py        | 879 ++++++++++++++----
 src/monitoring/proto/monitoring_pb2_grpc.py   | 365 ++++++--
 .../service/MonitoringServiceServicerImpl.py  | 178 +++-
 7 files changed, 1324 insertions(+), 387 deletions(-)
 create mode 100644 src/monitoring/genproto_win.sh

diff --git a/proto/monitoring.proto b/proto/monitoring.proto
index ef3594e2a..1f0c7ad85 100644
--- a/proto/monitoring.proto
+++ b/proto/monitoring.proto
@@ -19,86 +19,95 @@ import "context.proto";
 import "kpi_sample_types.proto";
 
 service MonitoringService {
-  rpc CreateKpi               (KpiDescriptor        ) returns (KpiId            ) {}
-  rpc GetKpiDescriptor        (KpiId                ) returns (KpiDescriptor    ) {}
-  rpc IncludeKpi              (Kpi                  ) returns (context.Empty    ) {}
-  rpc MonitorKpi              (MonitorKpiRequest    ) returns (context.Empty    ) {}
-  rpc GetStreamKpi            (KpiId                ) returns (stream Kpi       ) {}
-  rpc GetInstantKpi           (KpiId                ) returns (Kpi              ) {}
-  rpc CreateMetrics           (MetricsDescriptor    ) returns (MetricsId        ) {}
-  rpc GetMetricsDescriptor    (MetricsId            ) returns (MetricsDescriptor) {}
-  rpc IncludeMetrics          (Metrics              ) returns (context.Empty    ) {}
-  rpc MonitorMetrics          (MonitorMetricsRequest) returns (context.Empty    ) {}
-  rpc GetStreamMetrics        (MetricsId            ) returns (stream Metrics   ) {}
-  rpc GetInstantMetrics       (MetricsId            ) returns (Metrics          ) {}
-
+  rpc CreateKpi               (KpiDescriptor        )     returns (KpiId            ) {}
+  rpc EditKpiDescriptor       (EditedKpiDescriptor  )     returns (context.Empty    ) {}
+  rpc DeleteKpi               (KpiId                )     returns (context.Empty    ) {}
+  rpc GetKpiDescriptorList    (context.Empty        )     returns (KpiDescriptorList) {}
+  rpc CreateBundleKpi         (BundleKpiDescriptor  )     returns (KpiId            ) {}
+  rpc GetKpiDescriptor        (KpiId                )     returns (KpiDescriptor    ) {}
+  rpc IncludeKpi              (Kpi                  )     returns (context.Empty    ) {}
+  rpc MonitorKpi              (MonitorKpiRequest    )     returns (context.Empty    ) {}
+  rpc QueryKpiData            (KpiQuery             )     returns (KpiList          ) {}
+  rpc SubscribeKpi            (SubsDescriptor       )     returns (stream KpiList   ) {}
+  rpc GetSubsDescriptor       (SubscriptionID       )     returns (SubsDescriptor   ) {}
+  rpc GetSubscriptions        (context.Empty        )     returns (SubsIDList       ) {}
+  rpc EditKpiSubscription     (SubsDescriptor       )     returns (context.Empty    ) {}
+  rpc CreateKpiAlarm          (AlarmDescriptor      )     returns (AlarmResponse    ) {}
+  rpc EditKpiAlarm            (AlarmDescriptor      )     returns (context.Empty    ) {}
+  rpc GetAlarms               (context.Empty        )     returns (AlarmIDList      ) {}
+  rpc GetAlarmDescriptor      (AlarmID              )     returns (AlarmDescriptor  ) {}
+  //  rpc GetStreamKpi            (KpiId                )     returns (stream Kpi       ) {}
+  //  rpc GetInstantKpi           (KpiId                )     returns (KpiList          ) {}
 }
 
 message KpiDescriptor {
-  string kpi_description = 1;
-  kpi_sample_types.KpiSampleType kpi_sample_type = 2;
-  context.DeviceId device_id = 3;
-  context.EndPointId endpoint_id = 4;
-  context.ServiceId  service_id  = 5;
-//  context.SliceId    slice_id    = 6;
+  string kpi_description                          = 1;
+  kpi_sample_types.KpiSampleType kpi_sample_type  = 2;
+  context.DeviceId device_id                      = 3;
+  context.EndPointId endpoint_id                  = 4;
+  context.ServiceId  service_id                   = 5;
+  context.SliceId    slice_id                     = 6;
 }
 
-message MetricsDescriptor {
-  string metrics_description = 1;
-  kpi_sample_types.KpiSampleType kpi_sample_type = 2;
-  context.DeviceId device_id = 3;
-  context.EndPointId endpoint_id = 4;
-  context.ServiceId  service_id  = 5;
-//  context.SliceId    slice_id    = 6;
+message BundleKpiDescriptor {
+  string kpi_description                          = 1;
+  repeated KpiId kpi_id_list                      = 2;
+  kpi_sample_types.KpiSampleType kpi_sample_type  = 3;
+  context.DeviceId device_id                      = 4;
+  context.EndPointId endpoint_id                  = 5;
+  context.ServiceId  service_id                   = 6;
+  context.SliceId    slice_id                     = 7;
 }
 
-message MonitorKpiRequest{
-  KpiId kpi_id = 1;
-  float sampling_duration_s = 2;
-  float sampling_interval_s = 3;
+message EditedKpiDescriptor {
+  KpiId kpi_id                                    = 1;
+  string kpi_description                          = 2;
+  repeated KpiId kpi_id_list                      = 3;
+  kpi_sample_types.KpiSampleType kpi_sample_type  = 4;
+  context.DeviceId device_id                      = 5;
+  context.EndPointId endpoint_id                  = 6;
+  context.ServiceId  service_id                   = 7;
+  context.SliceId    slice_id                     = 8;
 }
 
-message MonitorMetricsRequest{
-  MetricsId metrics_id = 1;
-  float sampling_duration_s = 2;
-  float sampling_interval_s = 3;
+message MonitorKpiRequest {
+  KpiId kpi_id              = 1;
+  float monitoring_window_s = 2;
+  float sampling_rate_s     = 3;
+  // Pending add field to reflect Available Device Protocols
 }
 
-message KpiId {
-  context.Uuid kpi_id = 1;
+message KpiQuery {
+  repeated KpiId kpi_id     = 1;
+  float monitoring_window_s = 2;
+  float sampling_rate_s     = 3;
+  uint32 last_n_samples     = 4;  // used when you want something like "get the last N many samples
+  string start_date         = 5;  // used when you want something like "get the samples since X date/time"
+  string end_date           = 6;  // used when you want something like "get the samples until X date/time"
+  // Pending add field to reflect Available Device Protocols
 }
 
-message MetricsId {
+message KpiId {
   context.Uuid kpi_id = 1;
 }
 
 message Kpi {
-  KpiId kpi_id = 1;
-  string timestamp = 2;
-  KpiValue kpi_value = 4;
+  KpiId kpi_id        = 1;
+  string timestamp    = 2;
+  KpiValue kpi_value  = 3;
 }
 
-message Metrics {
-  MetricsId metrics_id = 1;
-  string timestamp = 2;
-  MetricsValue metrics_value = 4;
+message KpiValueRange {
+  KpiValue kpiMinValue = 1;
+  KpiValue kpiMaxValue = 2;
 }
 
 message KpiValue {
   oneof value {
-    uint32 intVal = 1;
-    float floatVal = 2;
-    string stringVal = 3;
-    bool boolVal = 4;
-  }
-}
-
-message MetricsValue {
-  oneof value {
-    uint32 intVal = 1;
-    float floatVal = 2;
-    string stringVal = 3;
-    bool boolVal = 4;
+    uint32 intVal     = 1;
+    float floatVal    = 2;
+    string stringVal  = 3;
+    bool boolVal      = 4;
   }
 }
 
@@ -106,6 +115,50 @@ message KpiList {
     repeated Kpi kpi_list = 1;
 }
 
-message MetricsList {
-    repeated Metrics metrics_list = 1;
+message KpiDescriptorList {
+    repeated KpiDescriptor kpi_descriptor_list = 1;
+}
+
+message SubsDescriptor{
+  KpiId kpi_id              = 1;
+  float sampling_duration_s = 2;
+  float sampling_interval_s = 3;
+  string start_date         = 4;  // used when you want something like "get the samples since X date/time"
+  string end_date           = 5;  // used when you want something like "get the samples until X date/time"
+  // Pending add field to reflect Available Device Protocols
+}
+
+message SubscriptionID {
+  context.Uuid subs_id = 1;
+}
+
+message SubsResponse {
+  SubscriptionID subs_id    = 1;
+  repeated KpiList kpi_list = 2;
+}
+
+message SubsIDList {
+    repeated SubscriptionID subs_list = 1;
+}
+
+message AlarmDescriptor {
+  string alarm_description      = 1;
+  string name                   = 2;
+  KpiId kpi_id                  = 3;
+  KpiValueRange kpi_value_range = 4;
+  string timestamp              = 5;
+}
+
+message AlarmID{
+  context.Uuid alarm_id = 1;
+}
+
+message AlarmResponse {
+  AlarmID alarm_id    = 1;
+  string text         = 2;
+  KpiValue kpi_value  = 3;
+}
+
+message AlarmIDList {
+    repeated AlarmID alarm_list = 1;
 }
\ No newline at end of file
diff --git a/src/monitoring/client/monitoring_client.py b/src/monitoring/client/monitoring_client.py
index 62bfb519e..fe7ac285d 100644
--- a/src/monitoring/client/monitoring_client.py
+++ b/src/monitoring/client/monitoring_client.py
@@ -37,6 +37,36 @@ class MonitoringClient:
         LOGGER.info('CreateKpi result: {}'.format(response))
         return response
 
+    def EditKpiDescriptor(self, request):
+        LOGGER.info('EditKpiDescriptor: {}'.format(request))
+        response = self.server.EditKpiDescriptor(request)
+        LOGGER.info('EditKpiDescriptor result: {}'.format(response))
+        return response
+
+    def DeleteKpi(self, request):
+        LOGGER.info('DeleteKpi: {}'.format(request))
+        response = self.server.DeleteKpi(request)
+        LOGGER.info('DeleteKpi result: {}'.format(response))
+        return response
+
+    def GetKpiDescriptorList(self, request):
+        LOGGER.info('GetKpiDescriptorList: {}'.format(request))
+        response = self.server.GetKpiDescriptorList(request)
+        LOGGER.info('GetKpiDescriptorList result: {}'.format(response))
+        return response
+
+    def CreateBundleKpi(self, request):
+        LOGGER.info('CreateBundleKpi: {}'.format(request))
+        response = self.server.CreateBundleKpi(request)
+        LOGGER.info('CreateBundleKpi result: {}'.format(response))
+        return response
+
+    def GetKpiDescriptor(self, request):
+        LOGGER.info('GetKpiDescriptor: {}'.format(request))
+        response = self.server.GetKpiDescriptor(request)
+        LOGGER.info('GetKpiDescriptor result: {}'.format(response))
+        return response
+
     def MonitorKpi(self, request):
         LOGGER.info('MonitorKpi: {}'.format(request))
         response = self.server.MonitorKpi(request)
@@ -49,24 +79,69 @@ class MonitoringClient:
         LOGGER.info('IncludeKpi result: {}'.format(response))
         return response
 
-    def GetStreamKpi(self, request):
-        LOGGER.info('GetStreamKpi: {}'.format(request))
-        response = self.server.GetStreamKpi(request)
-        LOGGER.info('GetStreamKpi result: {}'.format(response))
-        yield monitoring_pb2.Kpi()
+    def QueryKpiData(self, request):
+        LOGGER.info('QueryKpiData: {}'.format(request))
+        response = self.server.QueryKpiData(request)
+        LOGGER.info('QueryKpiData result: {}'.format(response))
+        return response
 
-    def GetInstantKpi(self, request):
-        LOGGER.info('GetInstantKpi: {}'.format(request))
-        response = self.server.GetInstantKpi(request)
-        LOGGER.info('GetInstantKpi result: {}'.format(response))
-        return monitoring_pb2.Kpi()
+    def SubscribeKpi(self, request):
+        LOGGER.info('SubscribeKpi: {}'.format(request))
+        response = self.server.SubscribeKpi(request)
+        LOGGER.info('SubscribeKpi result: {}'.format(response))
+        return response
 
-    def GetKpiDescriptor(self, request):
-        LOGGER.info('GetKpiDescriptor: {}'.format(request))
-        response = self.server.GetKpiDescriptor(request)
-        LOGGER.info('GetKpiDescriptor result: {}'.format(response))
+    def GetSubsDescriptor(self, request):
+        LOGGER.info('GetSubsDescriptor: {}'.format(request))
+        response = self.server.GetSubsDescriptor(request)
+        LOGGER.info('GetSubsDescriptor result: {}'.format(response))
+        return response
+
+    def EditKpiSubscription(self, request):
+        LOGGER.info('EditKpiSubscription: {}'.format(request))
+        response = self.server.EditKpiSubscription(request)
+        LOGGER.info('EditKpiSubscription result: {}'.format(response))
+        return response
+
+    def CreateKpiAlarm(self, request):
+        LOGGER.info('CreateKpiAlarm: {}'.format(request))
+        response = self.server.CreateKpiAlarm(request)
+        LOGGER.info('CreateKpiAlarm result: {}'.format(response))
+        return response
+
+    def EditKpiAlarm(self, request):
+        LOGGER.info('EditKpiAlarm: {}'.format(request))
+        response = self.server.EditKpiAlarm(request)
+        LOGGER.info('EditKpiAlarm result: {}'.format(response))
         return response
 
+    def GetAlarms(self, request):
+        LOGGER.info('GetAlarms: {}'.format(request))
+        response = self.server.GetAlarms(request)
+        LOGGER.info('GetAlarms result: {}'.format(response))
+        return response
+
+    def GetAlarmDescriptor(self, request):
+        LOGGER.info('GetAlarmDescriptor: {}'.format(request))
+        response = self.server.GetAlarmDescriptor(request)
+        LOGGER.info('GetAlarmDescriptor result: {}'.format(response))
+        return response
+
+
+    # def GetStreamKpi(self, request):
+    #     LOGGER.info('GetStreamKpi: {}'.format(request))
+    #     response = self.server.GetStreamKpi(request)
+    #     LOGGER.info('GetStreamKpi result: {}'.format(response))
+    #     yield monitoring_pb2.Kpi()
+    #
+    # def GetInstantKpi(self, request):
+    #     LOGGER.info('GetInstantKpi: {}'.format(request))
+    #     response = self.server.GetInstantKpi(request)
+    #     LOGGER.info('GetInstantKpi result: {}'.format(response))
+    #     return monitoring_pb2.Kpi()
+
+
+
 if __name__ == '__main__':
     # get port
     port = sys.argv[1] if len(sys.argv) > 1 else '7070'
diff --git a/src/monitoring/genproto_win.sh b/src/monitoring/genproto_win.sh
new file mode 100644
index 000000000..723e7f74c
--- /dev/null
+++ b/src/monitoring/genproto_win.sh
@@ -0,0 +1,13 @@
+#!/bin/bash -eu
+
+py -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto monitoring.proto
+py -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto context.proto
+py -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto kpi_sample_types.proto
+
+rm proto/context_pb2_grpc.py
+rm proto/kpi_sample_types_pb2_grpc.py
+
+sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/monitoring_pb2.py
+sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/monitoring_pb2_grpc.py
+sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/context_pb2.py
+
diff --git a/src/monitoring/proto/context_pb2.py b/src/monitoring/proto/context_pb2.py
index 643508f6b..50d501d3a 100644
--- a/src/monitoring/proto/context_pb2.py
+++ b/src/monitoring/proto/context_pb2.py
@@ -12,7 +12,7 @@ from google.protobuf import symbol_database as _symbol_database
 _sym_db = _symbol_database.Default()
 
 
-import kpi_sample_types_pb2 as kpi__sample__types__pb2
+from . import kpi_sample_types_pb2 as kpi__sample__types__pb2
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
diff --git a/src/monitoring/proto/monitoring_pb2.py b/src/monitoring/proto/monitoring_pb2.py
index 5eb1b503d..4f9ea9872 100644
--- a/src/monitoring/proto/monitoring_pb2.py
+++ b/src/monitoring/proto/monitoring_pb2.py
@@ -11,8 +11,8 @@ from google.protobuf import symbol_database as _symbol_database
 _sym_db = _symbol_database.Default()
 
 
-import context_pb2 as context__pb2
-import kpi_sample_types_pb2 as kpi__sample__types__pb2
+from . import context_pb2 as context__pb2
+from . import kpi_sample_types_pb2 as kpi__sample__types__pb2
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
@@ -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\"\xe2\x01\n\x11MetricsDescriptor\x12\x1b\n\x13metrics_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\x15MonitorMetricsRequest\x12)\n\nmetrics_id\x18\x01 \x01(\x0b\x32\x15.monitoring.MetricsId\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\"*\n\tMetricsId\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\"x\n\x07Metrics\x12)\n\nmetrics_id\x18\x01 \x01(\x0b\x32\x15.monitoring.MetricsId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12/\n\rmetrics_value\x18\x04 \x01(\x0b\x32\x18.monitoring.MetricsValue\"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\"e\n\x0cMetricsValue\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\"8\n\x0bMetricsList\x12)\n\x0cmetrics_list\x18\x01 \x03(\x0b\x32\x13.monitoring.Metrics2\x93\x06\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\x12G\n\rCreateMetrics\x12\x1d.monitoring.MetricsDescriptor\x1a\x15.monitoring.MetricsId\"\x00\x12N\n\x14GetMetricsDescriptor\x12\x15.monitoring.MetricsId\x1a\x1d.monitoring.MetricsDescriptor\"\x00\x12\x37\n\x0eIncludeMetrics\x12\x13.monitoring.Metrics\x1a\x0e.context.Empty\"\x00\x12\x45\n\x0eMonitorMetrics\x12!.monitoring.MonitorMetricsRequest\x1a\x0e.context.Empty\"\x00\x12\x42\n\x10GetStreamMetrics\x12\x15.monitoring.MetricsId\x1a\x13.monitoring.Metrics\"\x00\x30\x01\x12\x41\n\x11GetInstantMetrics\x12\x15.monitoring.MetricsId\x1a\x13.monitoring.Metrics\"\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,13 @@ _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=[
   ],
@@ -84,53 +91,67 @@ _KPIDESCRIPTOR = _descriptor.Descriptor(
   oneofs=[
   ],
   serialized_start=72,
-  serialized_end=290,
+  serialized_end=326,
 )
 
 
-_METRICSDESCRIPTOR = _descriptor.Descriptor(
-  name='MetricsDescriptor',
-  full_name='monitoring.MetricsDescriptor',
+_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='metrics_description', full_name='monitoring.MetricsDescriptor.metrics_description', index=0,
+      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_sample_type', full_name='monitoring.MetricsDescriptor.kpi_sample_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
+      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='device_id', full_name='monitoring.MetricsDescriptor.device_id', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
+      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='endpoint_id', full_name='monitoring.MetricsDescriptor.endpoint_id', index=3,
+      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='service_id', full_name='monitoring.MetricsDescriptor.service_id', index=4,
+      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=[
   ],
@@ -143,37 +164,72 @@ _METRICSDESCRIPTOR = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=293,
-  serialized_end=519,
+  serialized_start=329,
+  serialized_end=629,
 )
 
 
-_MONITORKPIREQUEST = _descriptor.Descriptor(
-  name='MonitorKpiRequest',
-  full_name='monitoring.MonitorKpiRequest',
+_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.MonitorKpiRequest.kpi_id', index=0,
+      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='sampling_duration_s', full_name='monitoring.MonitorKpiRequest.sampling_duration_s', index=1,
-      number=2, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
+      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='sampling_interval_s', full_name='monitoring.MonitorKpiRequest.sampling_interval_s', index=2,
-      number=3, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
+      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),
@@ -189,35 +245,35 @@ _MONITORKPIREQUEST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=521,
-  serialized_end=633,
+  serialized_start=632,
+  serialized_end=967,
 )
 
 
-_MONITORMETRICSREQUEST = _descriptor.Descriptor(
-  name='MonitorMetricsRequest',
-  full_name='monitoring.MonitorMetricsRequest',
+_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='metrics_id', full_name='monitoring.MonitorMetricsRequest.metrics_id', index=0,
+      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='sampling_duration_s', full_name='monitoring.MonitorMetricsRequest.sampling_duration_s', index=1,
+      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_interval_s', full_name='monitoring.MonitorMetricsRequest.sampling_interval_s', index=2,
+      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,
@@ -235,23 +291,58 @@ _MONITORMETRICSREQUEST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=635,
-  serialized_end=759,
+  serialized_start=969,
+  serialized_end=1077,
 )
 
 
-_KPIID = _descriptor.Descriptor(
-  name='KpiId',
-  full_name='monitoring.KpiId',
+_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.KpiId.kpi_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
+      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),
@@ -267,21 +358,21 @@ _KPIID = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=761,
-  serialized_end=799,
+  serialized_start=1080,
+  serialized_end=1241,
 )
 
 
-_METRICSID = _descriptor.Descriptor(
-  name='MetricsId',
-  full_name='monitoring.MetricsId',
+_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.MetricsId.kpi_id', index=0,
+      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,
@@ -299,8 +390,8 @@ _METRICSID = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=801,
-  serialized_end=843,
+  serialized_start=1243,
+  serialized_end=1281,
 )
 
 
@@ -328,7 +419,7 @@ _KPI = _descriptor.Descriptor(
       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=4, type=11, cpp_type=10, label=1,
+      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,
@@ -345,36 +436,29 @@ _KPI = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=845,
-  serialized_end=945,
+  serialized_start=1283,
+  serialized_end=1383,
 )
 
 
-_METRICS = _descriptor.Descriptor(
-  name='Metrics',
-  full_name='monitoring.Metrics',
+_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='metrics_id', full_name='monitoring.Metrics.metrics_id', index=0,
+      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='timestamp', full_name='monitoring.Metrics.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='metrics_value', full_name='monitoring.Metrics.metrics_value', index=2,
-      number=4, type=11, cpp_type=10, label=1,
+      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,
@@ -391,8 +475,8 @@ _METRICS = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=947,
-  serialized_end=1067,
+  serialized_start=1385,
+  serialized_end=1486,
 )
 
 
@@ -449,44 +533,115 @@ _KPIVALUE = _descriptor.Descriptor(
       create_key=_descriptor._internal_create_key,
     fields=[]),
   ],
-  serialized_start=1069,
-  serialized_end=1166,
+  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,
 )
 
 
-_METRICSVALUE = _descriptor.Descriptor(
-  name='MetricsValue',
-  full_name='monitoring.MetricsValue',
+_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='intVal', full_name='monitoring.MetricsValue.intVal', index=0,
-      number=1, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
+      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=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1633,
+  serialized_end=1708,
+)
+
+
+_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='floatVal', full_name='monitoring.MetricsValue.floatVal', index=1,
+      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.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='stringVal', full_name='monitoring.MetricsValue.stringVal', index=2,
-      number=3, type=9, cpp_type=9, label=1,
+      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='boolVal', full_name='monitoring.MetricsValue.boolVal', index=3,
-      number=4, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
+      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),
@@ -501,27 +656,93 @@ _METRICSVALUE = _descriptor.Descriptor(
   syntax='proto3',
   extension_ranges=[],
   oneofs=[
-    _descriptor.OneofDescriptor(
-      name='value', full_name='monitoring.MetricsValue.value',
-      index=0, containing_type=None,
-      create_key=_descriptor._internal_create_key,
-    fields=[]),
   ],
-  serialized_start=1168,
-  serialized_end=1269,
+  serialized_start=1711,
+  serialized_end=1858,
 )
 
 
-_KPILIST = _descriptor.Descriptor(
-  name='KpiList',
-  full_name='monitoring.KpiList',
+_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_list', full_name='monitoring.KpiList.kpi_list', 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,
+      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=1860,
+  serialized_end=1908,
+)
+
+
+_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='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='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,
@@ -539,21 +760,159 @@ _KPILIST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1271,
-  serialized_end=1315,
+  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_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=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=2072,
+  serialized_end=2236,
+)
+
+
+_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='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='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='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='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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=2282,
+  serialized_end=2391,
 )
 
 
-_METRICSLIST = _descriptor.Descriptor(
-  name='MetricsList',
-  full_name='monitoring.MetricsList',
+_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='metrics_list', full_name='monitoring.MetricsList.metrics_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,
@@ -571,26 +930,35 @@ _METRICSLIST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1317,
-  serialized_end=1373,
+  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
-_METRICSDESCRIPTOR.fields_by_name['kpi_sample_type'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
-_METRICSDESCRIPTOR.fields_by_name['device_id'].message_type = context__pb2._DEVICEID
-_METRICSDESCRIPTOR.fields_by_name['endpoint_id'].message_type = context__pb2._ENDPOINTID
-_METRICSDESCRIPTOR.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
-_MONITORMETRICSREQUEST.fields_by_name['metrics_id'].message_type = _METRICSID
+_KPIQUERY.fields_by_name['kpi_id'].message_type = _KPIID
 _KPIID.fields_by_name['kpi_id'].message_type = context__pb2._UUID
-_METRICSID.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
-_METRICS.fields_by_name['metrics_id'].message_type = _METRICSID
-_METRICS.fields_by_name['metrics_value'].message_type = _METRICSVALUE
+_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']
@@ -603,32 +971,38 @@ _KPIVALUE.fields_by_name['stringVal'].containing_oneof = _KPIVALUE.oneofs_by_nam
 _KPIVALUE.oneofs_by_name['value'].fields.append(
   _KPIVALUE.fields_by_name['boolVal'])
 _KPIVALUE.fields_by_name['boolVal'].containing_oneof = _KPIVALUE.oneofs_by_name['value']
-_METRICSVALUE.oneofs_by_name['value'].fields.append(
-  _METRICSVALUE.fields_by_name['intVal'])
-_METRICSVALUE.fields_by_name['intVal'].containing_oneof = _METRICSVALUE.oneofs_by_name['value']
-_METRICSVALUE.oneofs_by_name['value'].fields.append(
-  _METRICSVALUE.fields_by_name['floatVal'])
-_METRICSVALUE.fields_by_name['floatVal'].containing_oneof = _METRICSVALUE.oneofs_by_name['value']
-_METRICSVALUE.oneofs_by_name['value'].fields.append(
-  _METRICSVALUE.fields_by_name['stringVal'])
-_METRICSVALUE.fields_by_name['stringVal'].containing_oneof = _METRICSVALUE.oneofs_by_name['value']
-_METRICSVALUE.oneofs_by_name['value'].fields.append(
-  _METRICSVALUE.fields_by_name['boolVal'])
-_METRICSVALUE.fields_by_name['boolVal'].containing_oneof = _METRICSVALUE.oneofs_by_name['value']
 _KPILIST.fields_by_name['kpi_list'].message_type = _KPI
-_METRICSLIST.fields_by_name['metrics_list'].message_type = _METRICS
+_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['MetricsDescriptor'] = _METRICSDESCRIPTOR
+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['MonitorMetricsRequest'] = _MONITORMETRICSREQUEST
+DESCRIPTOR.message_types_by_name['KpiQuery'] = _KPIQUERY
 DESCRIPTOR.message_types_by_name['KpiId'] = _KPIID
-DESCRIPTOR.message_types_by_name['MetricsId'] = _METRICSID
 DESCRIPTOR.message_types_by_name['Kpi'] = _KPI
-DESCRIPTOR.message_types_by_name['Metrics'] = _METRICS
+DESCRIPTOR.message_types_by_name['KpiValueRange'] = _KPIVALUERANGE
 DESCRIPTOR.message_types_by_name['KpiValue'] = _KPIVALUE
-DESCRIPTOR.message_types_by_name['MetricsValue'] = _METRICSVALUE
 DESCRIPTOR.message_types_by_name['KpiList'] = _KPILIST
-DESCRIPTOR.message_types_by_name['MetricsList'] = _METRICSLIST
+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,), {
@@ -638,12 +1012,19 @@ KpiDescriptor = _reflection.GeneratedProtocolMessageType('KpiDescriptor', (_mess
   })
 _sym_db.RegisterMessage(KpiDescriptor)
 
-MetricsDescriptor = _reflection.GeneratedProtocolMessageType('MetricsDescriptor', (_message.Message,), {
-  'DESCRIPTOR' : _METRICSDESCRIPTOR,
+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.MetricsDescriptor)
+  # @@protoc_insertion_point(class_scope:monitoring.EditedKpiDescriptor)
   })
-_sym_db.RegisterMessage(MetricsDescriptor)
+_sym_db.RegisterMessage(EditedKpiDescriptor)
 
 MonitorKpiRequest = _reflection.GeneratedProtocolMessageType('MonitorKpiRequest', (_message.Message,), {
   'DESCRIPTOR' : _MONITORKPIREQUEST,
@@ -652,12 +1033,12 @@ MonitorKpiRequest = _reflection.GeneratedProtocolMessageType('MonitorKpiRequest'
   })
 _sym_db.RegisterMessage(MonitorKpiRequest)
 
-MonitorMetricsRequest = _reflection.GeneratedProtocolMessageType('MonitorMetricsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _MONITORMETRICSREQUEST,
+KpiQuery = _reflection.GeneratedProtocolMessageType('KpiQuery', (_message.Message,), {
+  'DESCRIPTOR' : _KPIQUERY,
   '__module__' : 'monitoring_pb2'
-  # @@protoc_insertion_point(class_scope:monitoring.MonitorMetricsRequest)
+  # @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
   })
-_sym_db.RegisterMessage(MonitorMetricsRequest)
+_sym_db.RegisterMessage(KpiQuery)
 
 KpiId = _reflection.GeneratedProtocolMessageType('KpiId', (_message.Message,), {
   'DESCRIPTOR' : _KPIID,
@@ -666,13 +1047,6 @@ KpiId = _reflection.GeneratedProtocolMessageType('KpiId', (_message.Message,), {
   })
 _sym_db.RegisterMessage(KpiId)
 
-MetricsId = _reflection.GeneratedProtocolMessageType('MetricsId', (_message.Message,), {
-  'DESCRIPTOR' : _METRICSID,
-  '__module__' : 'monitoring_pb2'
-  # @@protoc_insertion_point(class_scope:monitoring.MetricsId)
-  })
-_sym_db.RegisterMessage(MetricsId)
-
 Kpi = _reflection.GeneratedProtocolMessageType('Kpi', (_message.Message,), {
   'DESCRIPTOR' : _KPI,
   '__module__' : 'monitoring_pb2'
@@ -680,12 +1054,12 @@ Kpi = _reflection.GeneratedProtocolMessageType('Kpi', (_message.Message,), {
   })
 _sym_db.RegisterMessage(Kpi)
 
-Metrics = _reflection.GeneratedProtocolMessageType('Metrics', (_message.Message,), {
-  'DESCRIPTOR' : _METRICS,
+KpiValueRange = _reflection.GeneratedProtocolMessageType('KpiValueRange', (_message.Message,), {
+  'DESCRIPTOR' : _KPIVALUERANGE,
   '__module__' : 'monitoring_pb2'
-  # @@protoc_insertion_point(class_scope:monitoring.Metrics)
+  # @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
   })
-_sym_db.RegisterMessage(Metrics)
+_sym_db.RegisterMessage(KpiValueRange)
 
 KpiValue = _reflection.GeneratedProtocolMessageType('KpiValue', (_message.Message,), {
   'DESCRIPTOR' : _KPIVALUE,
@@ -694,13 +1068,6 @@ KpiValue = _reflection.GeneratedProtocolMessageType('KpiValue', (_message.Messag
   })
 _sym_db.RegisterMessage(KpiValue)
 
-MetricsValue = _reflection.GeneratedProtocolMessageType('MetricsValue', (_message.Message,), {
-  'DESCRIPTOR' : _METRICSVALUE,
-  '__module__' : 'monitoring_pb2'
-  # @@protoc_insertion_point(class_scope:monitoring.MetricsValue)
-  })
-_sym_db.RegisterMessage(MetricsValue)
-
 KpiList = _reflection.GeneratedProtocolMessageType('KpiList', (_message.Message,), {
   'DESCRIPTOR' : _KPILIST,
   '__module__' : 'monitoring_pb2'
@@ -708,12 +1075,68 @@ KpiList = _reflection.GeneratedProtocolMessageType('KpiList', (_message.Message,
   })
 _sym_db.RegisterMessage(KpiList)
 
-MetricsList = _reflection.GeneratedProtocolMessageType('MetricsList', (_message.Message,), {
-  'DESCRIPTOR' : _METRICSLIST,
+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.MetricsList)
+  # @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
   })
-_sym_db.RegisterMessage(MetricsList)
+_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)
 
 
 
@@ -724,8 +1147,8 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=1376,
-  serialized_end=2163,
+  serialized_start=2450,
+  serialized_end=3587,
   methods=[
   _descriptor.MethodDescriptor(
     name='CreateKpi',
@@ -737,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,
@@ -750,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,
@@ -760,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,
@@ -768,82 +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='CreateMetrics',
-    full_name='monitoring.MonitoringService.CreateMetrics',
-    index=6,
+    name='GetSubsDescriptor',
+    full_name='monitoring.MonitoringService.GetSubsDescriptor',
+    index=10,
     containing_service=None,
-    input_type=_METRICSDESCRIPTOR,
-    output_type=_METRICSID,
+    input_type=_SUBSCRIPTIONID,
+    output_type=_SUBSDESCRIPTOR,
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='GetMetricsDescriptor',
-    full_name='monitoring.MonitoringService.GetMetricsDescriptor',
-    index=7,
+    name='GetSubscriptions',
+    full_name='monitoring.MonitoringService.GetSubscriptions',
+    index=11,
     containing_service=None,
-    input_type=_METRICSID,
-    output_type=_METRICSDESCRIPTOR,
+    input_type=context__pb2._EMPTY,
+    output_type=_SUBSIDLIST,
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='IncludeMetrics',
-    full_name='monitoring.MonitoringService.IncludeMetrics',
-    index=8,
+    name='EditKpiSubscription',
+    full_name='monitoring.MonitoringService.EditKpiSubscription',
+    index=12,
     containing_service=None,
-    input_type=_METRICS,
+    input_type=_SUBSDESCRIPTOR,
     output_type=context__pb2._EMPTY,
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='MonitorMetrics',
-    full_name='monitoring.MonitoringService.MonitorMetrics',
-    index=9,
+    name='CreateKpiAlarm',
+    full_name='monitoring.MonitoringService.CreateKpiAlarm',
+    index=13,
     containing_service=None,
-    input_type=_MONITORMETRICSREQUEST,
+    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='GetStreamMetrics',
-    full_name='monitoring.MonitoringService.GetStreamMetrics',
-    index=10,
+    name='GetAlarms',
+    full_name='monitoring.MonitoringService.GetAlarms',
+    index=15,
     containing_service=None,
-    input_type=_METRICSID,
-    output_type=_METRICS,
+    input_type=context__pb2._EMPTY,
+    output_type=_ALARMIDLIST,
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='GetInstantMetrics',
-    full_name='monitoring.MonitoringService.GetInstantMetrics',
-    index=11,
+    name='GetAlarmDescriptor',
+    full_name='monitoring.MonitoringService.GetAlarmDescriptor',
+    index=16,
     containing_service=None,
-    input_type=_METRICSID,
-    output_type=_METRICS,
+    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 9e4e523a1..19d3be8d7 100644
--- a/src/monitoring/proto/monitoring_pb2_grpc.py
+++ b/src/monitoring/proto/monitoring_pb2_grpc.py
@@ -2,8 +2,8 @@
 """Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
-import context_pb2 as context__pb2
-import monitoring_pb2 as monitoring__pb2
+from . import context_pb2 as context__pb2
+from . import monitoring_pb2 as monitoring__pb2
 
 
 class MonitoringServiceStub(object):
@@ -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,45 +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.CreateMetrics = channel.unary_unary(
-                '/monitoring.MonitoringService/CreateMetrics',
-                request_serializer=monitoring__pb2.MetricsDescriptor.SerializeToString,
-                response_deserializer=monitoring__pb2.MetricsId.FromString,
+        self.GetSubsDescriptor = channel.unary_unary(
+                '/monitoring.MonitoringService/GetSubsDescriptor',
+                request_serializer=monitoring__pb2.SubscriptionID.SerializeToString,
+                response_deserializer=monitoring__pb2.SubsDescriptor.FromString,
                 )
-        self.GetMetricsDescriptor = channel.unary_unary(
-                '/monitoring.MonitoringService/GetMetricsDescriptor',
-                request_serializer=monitoring__pb2.MetricsId.SerializeToString,
-                response_deserializer=monitoring__pb2.MetricsDescriptor.FromString,
+        self.GetSubscriptions = channel.unary_unary(
+                '/monitoring.MonitoringService/GetSubscriptions',
+                request_serializer=context__pb2.Empty.SerializeToString,
+                response_deserializer=monitoring__pb2.SubsIDList.FromString,
                 )
-        self.IncludeMetrics = channel.unary_unary(
-                '/monitoring.MonitoringService/IncludeMetrics',
-                request_serializer=monitoring__pb2.Metrics.SerializeToString,
+        self.EditKpiSubscription = channel.unary_unary(
+                '/monitoring.MonitoringService/EditKpiSubscription',
+                request_serializer=monitoring__pb2.SubsDescriptor.SerializeToString,
                 response_deserializer=context__pb2.Empty.FromString,
                 )
-        self.MonitorMetrics = channel.unary_unary(
-                '/monitoring.MonitoringService/MonitorMetrics',
-                request_serializer=monitoring__pb2.MonitorMetricsRequest.SerializeToString,
+        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.GetStreamMetrics = channel.unary_stream(
-                '/monitoring.MonitoringService/GetStreamMetrics',
-                request_serializer=monitoring__pb2.MetricsId.SerializeToString,
-                response_deserializer=monitoring__pb2.Metrics.FromString,
+        self.GetAlarms = channel.unary_unary(
+                '/monitoring.MonitoringService/GetAlarms',
+                request_serializer=context__pb2.Empty.SerializeToString,
+                response_deserializer=monitoring__pb2.AlarmIDList.FromString,
                 )
-        self.GetInstantMetrics = channel.unary_unary(
-                '/monitoring.MonitoringService/GetInstantMetrics',
-                request_serializer=monitoring__pb2.MetricsId.SerializeToString,
-                response_deserializer=monitoring__pb2.Metrics.FromString,
+        self.GetAlarmDescriptor = channel.unary_unary(
+                '/monitoring.MonitoringService/GetAlarmDescriptor',
+                request_serializer=monitoring__pb2.AlarmID.SerializeToString,
+                response_deserializer=monitoring__pb2.AlarmDescriptor.FromString,
                 )
 
 
@@ -86,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)
@@ -104,49 +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 GetInstantKpi(self, request, context):
+    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 CreateMetrics(self, request, context):
+    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 GetMetricsDescriptor(self, request, context):
+    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 IncludeMetrics(self, request, context):
+    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 MonitorMetrics(self, request, context):
+    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 GetStreamMetrics(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 GetInstantMetrics(self, request, context):
+    def GetAlarmDescriptor(self, request, context):
         """Missing associated documentation comment in .proto file."""
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
@@ -160,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,
@@ -175,45 +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,
             ),
-            'CreateMetrics': grpc.unary_unary_rpc_method_handler(
-                    servicer.CreateMetrics,
-                    request_deserializer=monitoring__pb2.MetricsDescriptor.FromString,
-                    response_serializer=monitoring__pb2.MetricsId.SerializeToString,
+            'GetSubsDescriptor': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetSubsDescriptor,
+                    request_deserializer=monitoring__pb2.SubscriptionID.FromString,
+                    response_serializer=monitoring__pb2.SubsDescriptor.SerializeToString,
             ),
-            'GetMetricsDescriptor': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetMetricsDescriptor,
-                    request_deserializer=monitoring__pb2.MetricsId.FromString,
-                    response_serializer=monitoring__pb2.MetricsDescriptor.SerializeToString,
+            'GetSubscriptions': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetSubscriptions,
+                    request_deserializer=context__pb2.Empty.FromString,
+                    response_serializer=monitoring__pb2.SubsIDList.SerializeToString,
             ),
-            'IncludeMetrics': grpc.unary_unary_rpc_method_handler(
-                    servicer.IncludeMetrics,
-                    request_deserializer=monitoring__pb2.Metrics.FromString,
+            'EditKpiSubscription': grpc.unary_unary_rpc_method_handler(
+                    servicer.EditKpiSubscription,
+                    request_deserializer=monitoring__pb2.SubsDescriptor.FromString,
                     response_serializer=context__pb2.Empty.SerializeToString,
             ),
-            'MonitorMetrics': grpc.unary_unary_rpc_method_handler(
-                    servicer.MonitorMetrics,
-                    request_deserializer=monitoring__pb2.MonitorMetricsRequest.FromString,
+            '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,
             ),
-            'GetStreamMetrics': grpc.unary_stream_rpc_method_handler(
-                    servicer.GetStreamMetrics,
-                    request_deserializer=monitoring__pb2.MetricsId.FromString,
-                    response_serializer=monitoring__pb2.Metrics.SerializeToString,
+            'GetAlarms': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetAlarms,
+                    request_deserializer=context__pb2.Empty.FromString,
+                    response_serializer=monitoring__pb2.AlarmIDList.SerializeToString,
             ),
-            'GetInstantMetrics': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetInstantMetrics,
-                    request_deserializer=monitoring__pb2.MetricsId.FromString,
-                    response_serializer=monitoring__pb2.Metrics.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(
@@ -242,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,
@@ -294,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,
@@ -304,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,
@@ -321,14 +469,14 @@ 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 CreateMetrics(request,
+    def GetSubsDescriptor(request,
             target,
             options=(),
             channel_credentials=None,
@@ -338,14 +486,14 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/CreateMetrics',
-            monitoring__pb2.MetricsDescriptor.SerializeToString,
-            monitoring__pb2.MetricsId.FromString,
+        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 GetMetricsDescriptor(request,
+    def GetSubscriptions(request,
             target,
             options=(),
             channel_credentials=None,
@@ -355,14 +503,14 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetMetricsDescriptor',
-            monitoring__pb2.MetricsId.SerializeToString,
-            monitoring__pb2.MetricsDescriptor.FromString,
+        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 IncludeMetrics(request,
+    def EditKpiSubscription(request,
             target,
             options=(),
             channel_credentials=None,
@@ -372,14 +520,31 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/IncludeMetrics',
-            monitoring__pb2.Metrics.SerializeToString,
+        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 MonitorMetrics(request,
+    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,
@@ -389,14 +554,14 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/MonitorMetrics',
-            monitoring__pb2.MonitorMetricsRequest.SerializeToString,
+        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 GetStreamMetrics(request,
+    def GetAlarms(request,
             target,
             options=(),
             channel_credentials=None,
@@ -406,14 +571,14 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_stream(request, target, '/monitoring.MonitoringService/GetStreamMetrics',
-            monitoring__pb2.MetricsId.SerializeToString,
-            monitoring__pb2.Metrics.FromString,
+        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 GetInstantMetrics(request,
+    def GetAlarmDescriptor(request,
             target,
             options=(),
             channel_credentials=None,
@@ -423,8 +588,8 @@ class MonitoringService(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetInstantMetrics',
-            monitoring__pb2.MetricsId.SerializeToString,
-            monitoring__pb2.Metrics.FromString,
+        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 88cd2d3a8..21c008a06 100644
--- a/src/monitoring/service/MonitoringServiceServicerImpl.py
+++ b/src/monitoring/service/MonitoringServiceServicerImpl.py
@@ -86,6 +86,55 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             # CREATEKPI_COUNTER_FAILED.inc()
             grpc_context.abort(grpc.StatusCode.INTERNAL, str(e))
 
+    def EditKpiDescriptor ( self, request : monitoring_pb2.EditedKpiDescriptor, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
+
+        LOGGER.info('EditKpiDescriptor')
+        try:
+             # TBC
+            return context_pb2.Empty()
+        except ServiceException as e:
+            LOGGER.exception('EditKpiDescriptor exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('EditKpiDescriptor exception')
+
+    def DeleteKpi ( self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
+
+        LOGGER.info('DeleteKpi')
+        try:
+             # TBC
+            return context_pb2.Empty()
+        except ServiceException as e:
+            LOGGER.exception('DeleteKpi exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('DeleteKpi exception')
+
+    def GetKpiDescriptorList ( self, request : context_pb2.Empty, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiDescriptorList:
+
+        LOGGER.info('GetKpiDescriptorList')
+        try:
+             # TBC
+            return monitoring_pb2.KpiDescriptorList()
+        except ServiceException as e:
+            LOGGER.exception('GetKpiDescriptorList exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetKpiDescriptorList exception')
+
+    def CreateBundleKpi ( self, request : monitoring_pb2.BundleKpiDescriptor, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiId:
+
+        LOGGER.info('CreateBundleKpi')
+        try:
+             # TBC
+            return monitoring_pb2.KpiId()
+        except ServiceException as e:
+            LOGGER.exception('CreateBundleKpi exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('CreateBundleKpi exception')
+
+
     # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {}
     def MonitorKpi ( self, request : monitoring_pb2.MonitorKpiRequest, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
 
@@ -150,16 +199,16 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             # CREATEKPI_COUNTER_FAILED.inc()
         return context_pb2.Empty()
 
-    def GetStreamKpi ( self, request, grpc_context : grpc.ServicerContext):
-        # receives monitoring.KpiId returns stream monitoring.Kpi
-        LOGGER.info('GetStreamKpi')
-        yield monitoring_pb2.Kpi()
-
-    @MONITORING_GETINSTANTKPI_REQUEST_TIME.time()
-    def GetInstantKpi ( self, request, grpc_context : grpc.ServicerContext):
-        # receives monitoring.KpiId returns monitoring.Kpi
-        LOGGER.info('GetInstantKpi')
-        return monitoring_pb2.Kpi()
+    # def GetStreamKpi ( self, request, grpc_context : grpc.ServicerContext):
+    #
+    #     LOGGER.info('GetStreamKpi')
+    #     yield monitoring_pb2.Kpi()
+    #
+    # @MONITORING_GETINSTANTKPI_REQUEST_TIME.time()
+    # def GetInstantKpi ( self, request, grpc_context : grpc.ServicerContext):
+    #
+    #     LOGGER.info('GetInstantKpi')
+    #     return monitoring_pb2.Kpi()
 
 
     def GetKpiDescriptor(self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiDescriptor:
@@ -185,3 +234,112 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
 
         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:
+
+        LOGGER.info('QueryKpiData')
+        try:
+             # TBC
+            return monitoring_pb2.KpiQuery()
+        except ServiceException as e:
+            LOGGER.exception('QueryKpiData exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('QueryKpiData exception')
+
+    def SubscribeKpi ( self, request : monitoring_pb2.SubsDescriptor, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiList:
+
+        LOGGER.info('SubscribeKpi')
+        try:
+             # TBC
+            yield monitoring_pb2.KpiList()
+        except ServiceException as e:
+            LOGGER.exception('SubscribeKpi exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('SubscribeKpi exception')
+
+
+    def GetSubsDescriptor ( self, request : monitoring_pb2.SubscriptionID, grpc_context : grpc.ServicerContext) -> monitoring_pb2.SubsDescriptor:
+
+        LOGGER.info('GetSubsDescriptor')
+        try:
+             # TBC
+            return monitoring_pb2.SubsDescriptor()
+        except ServiceException as e:
+            LOGGER.exception('GetSubsDescriptor exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetSubsDescriptor exception')
+
+    def GetSubscriptions ( self, request : context_pb2.Empty, grpc_context : grpc.ServicerContext) -> monitoring_pb2.SubsIDList:
+
+        LOGGER.info('GetSubscriptions')
+        try:
+             # TBC
+            return monitoring_pb2.SubsIDList()
+        except ServiceException as e:
+            LOGGER.exception('GetSubscriptions exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetSubscriptions exception')
+
+    def EditKpiSubscription ( self, request : monitoring_pb2.SubsDescriptor, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
+
+        LOGGER.info('EditKpiSubscription')
+        try:
+             # TBC
+            return context_pb2.Empty()
+        except ServiceException as e:
+            LOGGER.exception('EditKpiSubscription exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('EditKpiSubscription exception')
+
+    def CreateKpiAlarm ( self, request : monitoring_pb2.AlarmDescriptor, grpc_context : grpc.ServicerContext) -> monitoring_pb2.AlarmResponse:
+
+        LOGGER.info('CreateKpiAlarm')
+        try:
+             # TBC
+            return monitoring_pb2.AlarmResponse()
+        except ServiceException as e:
+            LOGGER.exception('CreateKpiAlarm exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('CreateKpiAlarm exception')
+
+    def EditKpiAlarm ( self, request : monitoring_pb2.AlarmDescriptor, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
+
+        LOGGER.info('EditKpiAlarm')
+        try:
+             # TBC
+            return context_pb2.Empty()
+        except ServiceException as e:
+            LOGGER.exception('EditKpiAlarm exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('EditKpiAlarm exception')
+
+    def GetAlarms ( self, request : context_pb2.Empty, grpc_context : grpc.ServicerContext) -> monitoring_pb2.AlarmIDList:
+
+        LOGGER.info('GetAlarms')
+        try:
+             # TBC
+            return monitoring_pb2.AlarmIDList()
+        except ServiceException as e:
+            LOGGER.exception('GetAlarms exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetAlarms exception')
+
+    def GetAlarmDescriptor ( self, request : monitoring_pb2.AlarmID, grpc_context : grpc.ServicerContext) -> monitoring_pb2.AlarmDescriptor:
+
+        LOGGER.info('GetAlarmDescriptor')
+        try:
+             # TBC
+            return monitoring_pb2.AlarmDescriptor()
+        except ServiceException as e:
+            LOGGER.exception('GetAlarmDescriptor exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetAlarmDescriptor exception')
\ No newline at end of file
-- 
GitLab