diff --git a/.gitignore b/.gitignore
index 1973c0960842238c551c00700835e19380ab86e0..b0d99f8bb5fd4e09019732c5c99bbc5163bc617e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,7 +53,6 @@ coverage.xml
 .pytest_cache/
 .benchmarks/
 cover/
-*_report.xml
 
 # Translations
 *.mo
@@ -131,9 +130,6 @@ venv.bak/
 # VSCode project settings
 .vscode/
 
-# Visual Studio project settings
-/.vs
-
 # Rope project settings
 .ropeproject
 
@@ -165,3 +161,8 @@ tfs_runtime_env_vars.sh
 
 # Coverage report files
 *_report.xml
+delete_local_deployment.sh
+local_docker_deployment.sh
+local_k8s_deployment.sh
+/src/common/proto/.gitkeep
+/src/common/proto/__init__.py
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c95834e3bb76b17e3ddf073fe18c997b2d866fbe..9a998c644ccf1fec223d3d14ab6eb8bcfc1244d4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -41,4 +41,3 @@ include:
   #- local: '/src/l3_attackmitigator/.gitlab-ci.yml'
   #- local: '/src/slice/.gitlab-ci.yml'
   #- local: '/src/interdomain/.gitlab-ci.yml'
-  - local: '/src/pathcomp/.gitlab-ci.yml'
diff --git a/deploy.sh b/deploy.sh
index f80974573dfa83ef2c2139d6855a46a16e149746..172889c07acdc2347b2dee2ddee8bf3061fdc53a 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -86,76 +86,33 @@ for COMPONENT in $TFS_COMPONENTS; do
 
     if [ "$COMPONENT" == "automation" ] || [ "$COMPONENT" == "policy" ]; then
         docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/"$COMPONENT"/ > "$BUILD_LOG"
-    elif [ "$COMPONENT" == "pathcomp" ]; then
-        BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}-frontend.log"
-        docker build -t "$COMPONENT-frontend:$TFS_IMAGE_TAG" -f ./src/"$COMPONENT"/frontend/Dockerfile . >> "$BUILD_LOG"
-
-        BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}-backend.log"
-        docker build -t "$COMPONENT-backend:$TFS_IMAGE_TAG" -f ./src/"$COMPONENT"/backend/Dockerfile . >> "$BUILD_LOG"
-        # next command is redundant, but helpful to keep cache updated between rebuilds
-        docker build -t "$COMPONENT-backend:$TFS_IMAGE_TAG-builder" --target builder -f ./src/"$COMPONENT"/backend/Dockerfile . >> "$BUILD_LOG"
-    else
+    else 
         docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile . > "$BUILD_LOG"
     fi
 
     if [ -n "$TFS_REGISTRY_IMAGE" ]; then
         echo "  Pushing Docker image to '$TFS_REGISTRY_IMAGE'..."
 
-        if [ "$COMPONENT" == "pathcomp" ]; then
-            TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}-frontend.log"
-            docker tag "$COMPONENT-frontend:$TFS_IMAGE_TAG" "$IMAGE_URL-frontend" > "$TAG_LOG"
-
-            TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}-backend.log"
-            docker tag "$COMPONENT-backend:$TFS_IMAGE_TAG" "$IMAGE_URL-backend" > "$TAG_LOG"
-
-            PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}-frontend.log"
-            docker push "$IMAGE_URL-frontend" > "$PUSH_LOG"
-
-            PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}-backend.log"
-            docker push "$IMAGE_URL-backend" > "$PUSH_LOG"
-        else
-            TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}.log"
-            docker tag "$IMAGE_NAME" "$IMAGE_URL" > "$TAG_LOG"
+        TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}.log"
+        docker tag "$IMAGE_NAME" "$IMAGE_URL" > "$TAG_LOG"
 
-            PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
-            docker push "$IMAGE_URL" > "$PUSH_LOG"
-        fi
+        PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
+        docker push "$IMAGE_URL" > "$PUSH_LOG"
     fi
 
     echo "  Adapting '$COMPONENT' manifest file..."
     MANIFEST="$TMP_MANIFESTS_FOLDER/${COMPONENT}service.yaml"
     cp ./manifests/"${COMPONENT}"service.yaml "$MANIFEST"
+    VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}:" "$MANIFEST" | cut -d ":" -f3)
 
     if [ -n "$TFS_REGISTRY_IMAGE" ]; then
         # Registry is set
-        if [ "$COMPONENT" == "pathcomp" ]; then
-            VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}-frontend:" "$MANIFEST" | cut -d ":" -f3)
-            sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT-frontend:${VERSION}#image: $IMAGE_URL-frontend#g" "$MANIFEST"
-
-            VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}-backend:" "$MANIFEST" | cut -d ":" -f3)
-            sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT-backend:${VERSION}#image: $IMAGE_URL-backend#g" "$MANIFEST"
-
-            sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" "$MANIFEST"
-        else
-            VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}:" "$MANIFEST" | cut -d ":" -f3)
-            sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_URL#g" "$MANIFEST"
-            sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" "$MANIFEST"
-        fi
+        sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_URL#g" "$MANIFEST"
+        sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" "$MANIFEST"
     else
         # Registry is not set
-        if [ "$COMPONENT" == "pathcomp" ]; then
-            VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}-frontend:" "$MANIFEST" | cut -d ":" -f3)
-            sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT-frontend:${VERSION}#image: $IMAGE_NAME-frontend#g" "$MANIFEST"
-
-            VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}-backend:" "$MANIFEST" | cut -d ":" -f3)
-            sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT-backend:${VERSION}#image: $IMAGE_NAME-backend#g" "$MANIFEST"
-
-            sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" "$MANIFEST"
-        else
-            VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}:" "$MANIFEST" | cut -d ":" -f3)
-            sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_NAME#g" "$MANIFEST"
-            sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" "$MANIFEST"
-        fi
+        sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_NAME#g" "$MANIFEST"
+        sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" "$MANIFEST"        
     fi
 
     echo "  Deploying '$COMPONENT' component to Kubernetes..."
diff --git a/expose_ingress_grpc.sh b/expose_ingress_grpc.sh
index e2667247afdf72cc2f48317ace24275408eb11aa..8a4c837406d06ae8971a4d6ab2c5a8ae30cfc87f 100755
--- a/expose_ingress_grpc.sh
+++ b/expose_ingress_grpc.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 # If not already set, set the list of components you want to build images for, and deploy.
 export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device automation policy service compute monitoring dbscanserving opticalattackmitigator opticalcentralizedattackdetector webui"}
@@ -32,7 +32,6 @@ for COMPONENT in $TFS_COMPONENTS; do
     echo "Processing '$COMPONENT' component..."
 
     SERVICE_GRPC_PORT=$(kubectl get service ${COMPONENT}service --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.name=="grpc")].port}')
-    echo "    '$COMPONENT' service port: $SERVICE_GRPC_PORT"
     if [ -z "${SERVICE_GRPC_PORT}" ]; then
         printf "\n"
         continue;
diff --git a/manifests/monitoringservice.yaml b/manifests/monitoringservice.yaml
index 19ce31d11fbf4c4faf56ff76a54d36b1b300b0cf..f7ebdf7ac79e928b9b66dd24c679905edab9d8da 100644
--- a/manifests/monitoringservice.yaml
+++ b/manifests/monitoringservice.yaml
@@ -13,13 +13,14 @@
 # limitations under the License.
 
 apiVersion: apps/v1
-kind: Deployment
+kind: StatefulSet
 metadata:
-  name: monitoringservice
+  name: monitoringdb
 spec:
   selector:
     matchLabels:
       app: monitoringservice
+  serviceName: "monitoringservice"
   replicas: 1
   template:
     metadata:
@@ -32,35 +33,50 @@ spec:
       - name: metricsdb
         image: questdb/questdb
         ports:
-        - containerPort: 9000
-        - containerPort: 9009
-        - containerPort: 9003
+        - name: http
+          containerPort: 9000
+          protocol: TCP
+        - name: influxdb
+          containerPort: 9009
+          protocol: TCP
+        - name: postgre
+          containerPort: 8812
+          protocol: TCP
         env:
         - name: QDB_CAIRO_COMMIT_LAG
           value: "1000"
         - name: QDB_CAIRO_MAX_UNCOMMITTED_ROWS
           value: "100000"
-        # readinessProbe:
-        #   exec:
-        #     command: ["curl", "-XGET", "localhost:9000"]
-        # livenessProbe:
-        #   exec:
-        #     command: ["curl", "-XGET", "localhost:9003/metrics"]
-        resources:
-          requests:
-            cpu: 250m
-            memory: 512Mi
-          limits:
-            cpu: 700m
-            memory: 1024Mi
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: monitoringserver
+spec:
+  selector:
+    matchLabels:
+      app: monitoringservice
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: monitoringservice
+    spec:
+      terminationGracePeriodSeconds: 5
+      restartPolicy: Always
+      containers:
       - name: server
         image: registry.gitlab.com/teraflow-h2020/controller/monitoring:latest
         imagePullPolicy: Always
         ports:
-        - containerPort: 7070
+        - name: grpc
+          containerPort: 7070
+          protocol: TCP
         env:
+        - name: LOG_LEVEL
+          value: "INFO"
         - name: METRICSDB_HOSTNAME
-          value: "localhost"
+          value: "monitoringservice"
         - name: METRICSDB_ILP_PORT
           value: "9009"
         - name: METRICSDB_REST_PORT
@@ -68,19 +84,13 @@ spec:
         - name: METRICSDB_TABLE
           value: "monitoring"
         readinessProbe:
-          exec:
-            command: ["/bin/grpc_health_probe", "-addr=:7070"]
+          grpc:
+            port: 7070
+          initialDelaySeconds: 5
         livenessProbe:
-          exec:
-            command: ["/bin/grpc_health_probe", "-addr=:7070"]
-        resources:
-          requests:
-            cpu: 250m
-            memory: 512Mi
-          limits:
-            cpu: 700m
-            memory: 1024Mi
-
+          grpc:
+            port: 7070
+          initialDelaySeconds: 10
 ---
 apiVersion: v1
 kind: Service
@@ -95,7 +105,37 @@ spec:
     protocol: TCP
     port: 7070
     targetPort: 7070
-  - name: questdb
+  - name: http
     protocol: TCP
     port: 9000
-    targetPort: 9000
\ No newline at end of file
+    targetPort: 9000
+  - name: influxdb
+    protocol: TCP
+    port: 9009
+    targetPort: 9009
+  - name: postgre
+    protocol: TCP
+    port: 8812
+    targetPort: 8812
+
+---
+apiVersion: networking.k8s.io/v1
+kind: NetworkPolicy
+metadata:
+  name: access-monitoring
+spec:
+  podSelector:
+    matchLabels:
+      app: monitoringservice 
+  ingress:
+  - from: []
+    ports:
+    - port: 7070
+    - port: 8812
+  - from:
+    - podSelector:
+        matchLabels:
+          app: monitoringservice
+    ports:
+    - port: 9009
+    - port: 9000
diff --git a/manifests/pathcompservice.yaml b/manifests/pathcompservice.yaml
index d5939cb154443139be88d8e0ac23c281a3b18c4d..b5316e22f1eefd4177ae33f4fc89da256f65bff8 100644
--- a/manifests/pathcompservice.yaml
+++ b/manifests/pathcompservice.yaml
@@ -27,8 +27,8 @@ spec:
     spec:
       terminationGracePeriodSeconds: 5
       containers:
-      - name: frontend
-        image: registry.gitlab.com/teraflow-h2020/controller/pathcomp-frontend:latest
+      - name: server
+        image: registry.gitlab.com/teraflow-h2020/controller/pathcomp:latest
         imagePullPolicy: Always
         ports:
         - containerPort: 10020
@@ -48,28 +48,6 @@ spec:
           limits:
             cpu: 700m
             memory: 1024Mi
-      - name: backend
-        image: registry.gitlab.com/teraflow-h2020/controller/pathcomp-backend:latest
-        imagePullPolicy: Always
-        #readinessProbe:
-        #  httpGet:
-        #    path: /health
-        #    port: 8081
-        #  initialDelaySeconds: 5
-        #  timeoutSeconds: 5
-        #livenessProbe:
-        #  httpGet:
-        #    path: /health
-        #    port: 8081
-        #  initialDelaySeconds: 5
-        #  timeoutSeconds: 5
-        resources:
-          requests:
-            cpu: 250m
-            memory: 512Mi
-          limits:
-            cpu: 700m
-            memory: 1024Mi
 ---
 apiVersion: v1
 kind: Service
@@ -84,7 +62,3 @@ spec:
     protocol: TCP
     port: 10020
     targetPort: 10020
-  - name: http
-    protocol: TCP
-    port: 8081
-    targetPort: 8081
diff --git a/manifests/webuiservice.yaml b/manifests/webuiservice.yaml
index 0ebb811159641904271a2884739b65485abef356..52fc75a9868001d50f7380cfe238fa344de27f6e 100644
--- a/manifests/webuiservice.yaml
+++ b/manifests/webuiservice.yaml
@@ -40,7 +40,7 @@ spec:
         - name: LOG_LEVEL
           value: "DEBUG"
         - name: WEBUISERVICE_SERVICE_BASEURL_HTTP
-          value: "/"
+          value: "/webui"
         readinessProbe:
           httpGet:
             path: /healthz/ready
diff --git a/my_deploy.sh b/my_deploy.sh
index 9d8e6e9dbf6b4cc77c1edee9141383f2bed3155e..dd0bb41c34e8f33b38d36e8cfc731390b4a6d85b 100644
--- a/my_deploy.sh
+++ b/my_deploy.sh
@@ -1,5 +1,5 @@
 # Set the URL of your local Docker registry where the images will be uploaded to.
-export TFS_REGISTRY_IMAGE=""  # http://localhost:32000/tfs/
+export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by comas, you want to build images for, and deploy.
 # Supported components are:
@@ -16,7 +16,7 @@ export TFS_IMAGE_TAG="dev"
 export TFS_K8S_NAMESPACE="tfs"
 
 # Set additional manifest files to be applied after the deployment
-export TFS_EXTRA_MANIFESTS=""  # manifests/nginx_ingress_http.yaml
+export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml"
 
 # Set the neew Grafana admin password
 export TFS_GRAFANA_PASSWORD="admin123+"
diff --git a/open_dashboard.sh b/open_dashboard.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8291a22c75cd2c2b83bedcab2ac0167c56c966a6
--- /dev/null
+++ b/open_dashboard.sh
@@ -0,0 +1,29 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#/bin/bash
+
+# this script opens the dashboard
+
+K8S_NAMESPACE=${K8S_NAMESPACE:-'tf-dev'}
+
+GRAFANA_IP=$(kubectl get service/webuiservice -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}')
+GRAFANA_PORT=$(kubectl get service webuiservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
+URL=http://${GRAFANA_IP}:${GRAFANA_PORT}
+
+echo Opening Dashboard on URL ${URL}
+
+# curl -kL ${URL}
+
+python3 -m webbrowser ${URL}
diff --git a/open_webui.sh b/open_webui.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e4dfdb709ef5008091f3f73357087272dfd7c34e
--- /dev/null
+++ b/open_webui.sh
@@ -0,0 +1,37 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# this script opens the webui
+
+K8S_NAMESPACE=${K8S_NAMESPACE:-'tf-dev'}
+
+WEBUI_SERVICE_NAME="webuiservice-public"
+WEBUI_PROTO=`kubectl get service ${WEBUI_SERVICE_NAME} -n ${K8S_NAMESPACE} -o jsonpath='{.spec.ports[0].name}'`
+WEBUI_IP=`kubectl get service ${WEBUI_SERVICE_NAME} -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}'`
+# WEBUI_PORT=$(kubectl get service ${WEBUI_SERVICE_NAME} --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==8004)].nodePort}')
+WEBUI_PORT=8004
+# GRAFANA_PORT=$(kubectl get service ${WEBUI_SERVICE_NAME} --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
+GRAFANA_PORT=3000
+
+# Open WebUI
+URL=${WEBUI_PROTO}://${WEBUI_IP}:${WEBUI_PORT}
+echo Opening web UI on URL ${URL}
+# curl -kL ${URL}
+python3 -m webbrowser ${URL}
+
+# Open Dashboard
+URL=${WEBUI_PROTO}://${WEBUI_IP}:${GRAFANA_PORT}
+echo Opening Dashboard on URL ${URL}
+# curl -kL ${URL}
+python3 -m webbrowser ${URL}
diff --git a/proto/automation.proto b/proto/automation.proto
index 9297236766a28878a5f0c0de6a4aeae0487d330a..f41bef9e28588fbd2a0acf416d347eb530c48df0 100644
--- a/proto/automation.proto
+++ b/proto/automation.proto
@@ -21,7 +21,7 @@ service AutomationService {
   rpc ZtpGetDeviceRole(DeviceRoleId) returns (DeviceRole) {}
   rpc ZtpGetDeviceRolesByDeviceId(context.DeviceId) returns (DeviceRoleList) {}
   rpc ZtpAdd(DeviceRole) returns (DeviceRoleState) {}
-  rpc ZtpUpdate(DeviceRoleConfig) returns (DeviceRoleState) {}
+  rpc ZtpUpdate(DeviceRole) returns (DeviceRoleState) {}
   rpc ZtpDelete(DeviceRole) returns (DeviceRoleState) {}
   rpc ZtpDeleteAll(context.Empty) returns (DeviceDeletionResult) {}
 }
@@ -43,11 +43,6 @@ message DeviceRole {
   DeviceRoleType devRoleType = 2;
 }
 
-message DeviceRoleConfig {
-  DeviceRole devRole = 1;
-  context.DeviceConfig devConfig = 2;
-}
-
 message DeviceRoleList {
   repeated DeviceRole devRole = 1;
 }
diff --git a/proto/context.proto b/proto/context.proto
index f5dec30796a8426f512947d369b8db5f5889471a..97d6df666fd54f3b855c704fae3c792b37639382 100644
--- a/proto/context.proto
+++ b/proto/context.proto
@@ -51,7 +51,6 @@ service ContextService {
   rpc ListServices       (ContextId   ) returns (       ServiceList     ) {}
   rpc GetService         (ServiceId   ) returns (       Service         ) {}
   rpc SetService         (Service     ) returns (       ServiceId       ) {}
-  rpc UnsetService       (Service     ) returns (       ServiceId       ) {}
   rpc RemoveService      (ServiceId   ) returns (       Empty           ) {}
   rpc GetServiceEvents   (Empty       ) returns (stream ServiceEvent    ) {}
 
@@ -59,7 +58,6 @@ service ContextService {
   rpc ListSlices         (ContextId   ) returns (       SliceList       ) {}
   rpc GetSlice           (SliceId     ) returns (       Slice           ) {}
   rpc SetSlice           (Slice       ) returns (       SliceId         ) {}
-  rpc UnsetSlice         (Slice       ) returns (       SliceId         ) {}
   rpc RemoveSlice        (SliceId     ) returns (       Empty           ) {}
   rpc GetSliceEvents     (Empty       ) returns (stream SliceEvent      ) {}
 
diff --git a/proto/monitoring.proto b/proto/monitoring.proto
index 8b83afa47b49c130d37dcbcc1024f079ebc2a2fe..ea7f532bbb3aa6a9e9bcb2223f85619c5ae851f8 100644
--- a/proto/monitoring.proto
+++ b/proto/monitoring.proto
@@ -26,12 +26,12 @@ service MonitoringService {
   rpc IncludeKpi            (Kpi                ) returns (context.Empty       ) {}
   rpc MonitorKpi            (MonitorKpiRequest  ) returns (context.Empty       ) {}
   rpc QueryKpiData          (KpiQuery           ) returns (KpiList             ) {}
-  rpc SetKpiSubscription    (SubsDescriptor     ) returns (stream KpiList      ) {}
+  rpc SetKpiSubscription    (SubsDescriptor     ) returns (stream SubsResponse ) {}
   rpc GetSubsDescriptor     (SubscriptionID     ) returns (SubsDescriptor      ) {}
-  rpc GetSubscriptions      (context.Empty      ) returns (SubsIDList          ) {}
+  rpc GetSubscriptions      (context.Empty      ) returns (SubsList            ) {}
   rpc DeleteSubscription    (SubscriptionID     ) returns (context.Empty       ) {}
   rpc SetKpiAlarm           (AlarmDescriptor    ) returns (AlarmID             ) {}
-  rpc GetAlarms             (context.Empty      ) returns (AlarmIDList         ) {}
+  rpc GetAlarms             (context.Empty      ) returns (AlarmList           ) {}
   rpc GetAlarmDescriptor    (AlarmID            ) returns (AlarmDescriptor     ) {}
   rpc GetAlarmResponseStream(AlarmSubscription  ) returns (stream AlarmResponse) {}
   rpc DeleteAlarm           (AlarmID            ) returns (context.Empty       ) {}
@@ -122,11 +122,11 @@ message SubscriptionID {
 
 message SubsResponse {
   SubscriptionID   subs_id  = 1;
-  repeated KpiList kpi_list = 2;
+  KpiList kpi_list = 2;
 }
 
-message SubsIDList {
-  repeated SubscriptionID subs_list = 1;
+message SubsList {
+  repeated SubsDescriptor subs_list = 1;
 }
 
 message AlarmDescriptor {
@@ -155,6 +155,6 @@ message AlarmResponse {
   context.Timestamp timestamp = 4;
 }
 
-message AlarmIDList {
-    repeated AlarmID alarm_list = 1;
+message AlarmList {
+    repeated AlarmDescriptor alarm_list = 1;
 }
diff --git a/proto/pathcomp.proto b/proto/pathcomp.proto
index 08f33efe99b6a25c568c8be14f1355b3d4521909..9eb650fb9981b4b84f31b63796eec0c7a8e780b6 100644
--- a/proto/pathcomp.proto
+++ b/proto/pathcomp.proto
@@ -28,16 +28,11 @@ message Algorithm_KShortestPath {
   uint32 k_return     = 2;
 }
 
-message Algorithm_KDisjointPath {
-  uint32 num_disjoint = 1;
-}
-
 message PathCompRequest {
   repeated context.Service services = 1;
   oneof algorithm {
     Algorithm_ShortestPath  shortest_path   = 10;
     Algorithm_KShortestPath k_shortest_path = 11;
-    Algorithm_KDisjointPath k_disjoint_path = 12;
   }
 }
 
diff --git a/scripts/old/deploy_in_kubernetes.sh b/scripts/old/deploy_in_kubernetes.sh
index 89f45a5484f95f065f6656249f3fb04bf507a782..5e16120bb3b47e993e1d331ccdef3186380304ec 100755
--- a/scripts/old/deploy_in_kubernetes.sh
+++ b/scripts/old/deploy_in_kubernetes.sh
@@ -81,7 +81,7 @@ for COMPONENT in $COMPONENTS; do
     if [ "$COMPONENT" == "automation" ] || [ "$COMPONENT" == "policy" ]; then
         docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/"$COMPONENT"/ > "$BUILD_LOG"
     else 
-        docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile . > "$BUILD_LOG"
+        docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/ > "$BUILD_LOG"
     fi
 
     if [ -n "$REGISTRY_IMAGE" ]; then
diff --git a/scripts/run_tests_locally-pathcomp.sh b/scripts/run_tests_locally-pathcomp.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f56f47a8b592939243a2ec5d9fd95d89046582d1
--- /dev/null
+++ b/scripts/run_tests_locally-pathcomp.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+PROJECTDIR=`pwd`
+
+cd $PROJECTDIR/src
+RCFILE=$PROJECTDIR/coverage/.coveragerc
+
+# Run unitary tests and analyze coverage of code at same time
+
+# Useful flags for pytest:
+#-o log_cli=true -o log_file=service.log -o log_file_level=DEBUG
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    pathcomp/tests/test_unitary.py
diff --git a/scripts/show_logs_automation.sh b/scripts/show_logs_automation.sh
index 0c0615d9915db6e5b9958ec1205c7a99f096f019..8823f29c09960ce980f48d76463682d34e2ea09f 100755
--- a/scripts/show_logs_automation.sh
+++ b/scripts/show_logs_automation.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/scripts/show_logs_compute.sh b/scripts/show_logs_compute.sh
index 759918f11a366450b5c7058a9a2c46bbb701f2cd..5e061bb9eb49047b96027a39d3bc846a3e502b5c 100755
--- a/scripts/show_logs_compute.sh
+++ b/scripts/show_logs_compute.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/scripts/show_logs_context.sh b/scripts/show_logs_context.sh
index f4b6c620b89d566c8af6950d7240a8286152417d..ece545a7e32131880079c2ce65a950c64a16273e 100755
--- a/scripts/show_logs_context.sh
+++ b/scripts/show_logs_context.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/scripts/show_logs_device.sh b/scripts/show_logs_device.sh
index d3ef781c92274ecf6b9f2b9ef8eb44b2fde497d6..e1c2e4aa8a5fd39e525fcf61ffcf5572e3e6c8d0 100755
--- a/scripts/show_logs_device.sh
+++ b/scripts/show_logs_device.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/scripts/show_logs_monitoring.sh b/scripts/show_logs_monitoring.sh
index bd37d0d142f76d532219f1dcdcbd229914d3b0b5..5978035127735c20ddc6387666a5434cbac61ff8 100755
--- a/scripts/show_logs_monitoring.sh
+++ b/scripts/show_logs_monitoring.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/scripts/show_logs_service.sh b/scripts/show_logs_service.sh
index 6089d0ac6f3008bd5f35e2f813fd1cab2c4d4060..251add7e1641862f3c95dbf038920bc86b3c89ff 100755
--- a/scripts/show_logs_service.sh
+++ b/scripts/show_logs_service.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/scripts/show_logs_webui.sh b/scripts/show_logs_webui.sh
index 38cffd624b35ce8196c7bbde2838a0971a7d7024..c73f5f51a6aefe0caee2620cccca272f1abb8622 100755
--- a/scripts/show_logs_webui.sh
+++ b/scripts/show_logs_webui.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/show_deploy.sh b/show_deploy.sh
index 68a5659aab529be5644015d6e6fbdf9885f7a1ec..e894d44f3d7f79ac18ce4f3d5b2708a6402764e6 100755
--- a/show_deploy.sh
+++ b/show_deploy.sh
@@ -18,7 +18,7 @@
 ########################################################################################################################
 
 # If not already set, set the name of the Kubernetes namespace to deploy to.
-export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
 
 ########################################################################################################################
 # Automated steps start here
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
index 6d672fdea2c3e97f9f2a50c7efa8d77c05532357..c160387c3e3448f29d01a185afc31127b025c2b6 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
@@ -17,12 +17,9 @@
 package eu.teraflow.automation;
 
 import automation.Automation;
-import automation.Automation.DeviceRoleConfig;
-import automation.Automation.DeviceRoleState;
 import context.ContextOuterClass;
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.model.DeviceRoleId;
-import eu.teraflow.automation.model.DeviceState;
 import io.quarkus.grpc.GrpcService;
 import io.smallrye.mutiny.Uni;
 import javax.inject.Inject;
@@ -59,19 +56,17 @@ public class AutomationGatewayImpl implements AutomationGateway {
         return automationService
                 .addDevice(deviceId)
                 .onItem()
-                .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.CREATED));
+                .transform(device -> transformToDeviceRoleState(device, devRoleId));
     }
 
     @Override
-    public Uni<DeviceRoleState> ztpUpdate(DeviceRoleConfig request) {
-        final var devRoleId = request.getDevRole().getDevRoleId().getDevRoleId().getUuid();
-        final var deviceId = serializer.deserialize(request.getDevRole().getDevRoleId().getDevId());
-        final var deviceConfig = serializer.deserialize(request.getDevConfig());
-
-        return automationService
-                .updateDevice(deviceId, deviceConfig)
-                .onItem()
-                .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.UPDATED));
+    public Uni<Automation.DeviceRoleState> ztpUpdate(Automation.DeviceRole request) {
+        return Uni.createFrom()
+                .item(
+                        () ->
+                                Automation.DeviceRoleState.newBuilder()
+                                        .setDevRoleId(request.getDevRoleId())
+                                        .build());
     }
 
     @Override
@@ -89,15 +84,16 @@ public class AutomationGatewayImpl implements AutomationGateway {
         return Uni.createFrom().item(() -> Automation.DeviceDeletionResult.newBuilder().build());
     }
 
-    private Automation.DeviceRoleState transformToDeviceRoleState(
-            Device device, String devRoleId, DeviceState deviceState) {
+    // TODO When `DeviceRoleState` domain object will be created, move this method to Serializer class
+    // and create related tests
+    private Automation.DeviceRoleState transformToDeviceRoleState(Device device, String devRoleId) {
+
         final var deviceRoleId = new DeviceRoleId(devRoleId, device.getDeviceId());
         final var serializeDeviceRoleId = serializer.serialize(deviceRoleId);
-        final var serializedDeviceState = serializer.serialize(deviceState);
 
         return Automation.DeviceRoleState.newBuilder()
                 .setDevRoleId(serializeDeviceRoleId)
-                .setDevRoleState(serializedDeviceState)
+                .setDevRoleState(Automation.ZtpDeviceState.ZTP_DEV_STATE_CREATED)
                 .build();
     }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
index b9f34d8e4bd3e1703bff1cf48a18a0a2b84e61b1..5c8e95a442d7f6134b6817d144ff2ad646d2b5c3 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
@@ -17,14 +17,9 @@
 package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.model.Device;
-import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 
 public interface AutomationService {
 
     Uni<Device> addDevice(String deviceId);
-
-    Uni<Device> deleteDevice(String deviceId);
-
-    Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig);
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
index 773c99de6d94b5f8806a8a354b2371c0a6748f9f..13e56645384938b4eff42aa73ca9e8a5ff73a1bd 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
@@ -18,7 +18,6 @@ package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.ContextService;
 import eu.teraflow.automation.context.model.Device;
-import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.device.DeviceService;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
@@ -28,7 +27,6 @@ import org.jboss.logging.Logger;
 @ApplicationScoped
 public class AutomationServiceImpl implements AutomationService {
     private static final Logger LOGGER = Logger.getLogger(AutomationServiceImpl.class);
-    private static final String MESSAGE = "Retrieved %s";
 
     private final DeviceService deviceService;
     private final ContextService contextService;
@@ -45,13 +43,14 @@ public class AutomationServiceImpl implements AutomationService {
         final var deserializedDeviceUni = contextService.getDevice(deviceId);
 
         deserializedDeviceUni
+                // TODO fix subscribe
                 .subscribe()
                 .with(
                         device -> {
                             final var id = deviceId;
 
                             if (!device.isEnabled()) {
-                                LOGGER.infof(MESSAGE, device);
+                                LOGGER.infof("Retrieved %s", device);
 
                                 final var initialConfiguration =
                                         deviceService.getInitialConfiguration(device.getDeviceId());
@@ -81,52 +80,4 @@ public class AutomationServiceImpl implements AutomationService {
 
         return deserializedDeviceUni;
     }
-
-    @Override
-    public Uni<Device> deleteDevice(String deviceId) {
-        final var deserializedDeviceUni = contextService.getDevice(deviceId);
-
-        deserializedDeviceUni
-                .subscribe()
-                .with(
-                        device -> {
-                            final var id = deviceId;
-
-                            LOGGER.infof(MESSAGE, device);
-
-                            final var empty = deviceService.deleteDevice(device.getDeviceId());
-
-                            empty
-                                    .subscribe()
-                                    .with(emptyMessage -> LOGGER.infof("Device [%s] has been deleted.\n", id));
-                        });
-
-        return deserializedDeviceUni;
-    }
-
-    @Override
-    public Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig) {
-        final var deserializedDeviceUni = contextService.getDevice(deviceId);
-
-        deserializedDeviceUni
-                .subscribe()
-                .with(
-                        device -> {
-                            final var id = deviceId;
-
-                            LOGGER.infof(MESSAGE, device);
-                            device.setDeviceConfiguration(deviceConfig);
-                            final var updatedDeviceIdUni = deviceService.configureDevice(device);
-
-                            updatedDeviceIdUni
-                                    .subscribe()
-                                    .with(
-                                            configuredDeviceId ->
-                                                    LOGGER.infof(
-                                                            "Device [%s] has been updated successfully with %s.\n",
-                                                            id, deviceConfig));
-                        });
-
-        return deserializedDeviceUni;
-    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java b/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
index c4d636b6b4dca7241808ade421f32a77861e4d3f..df5f14081711a22c3896dfadbe14b659bcb426cf 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
@@ -73,14 +73,9 @@ public class ContextSubscriber {
                                     LOGGER.infof("Received %s for device [%s]", event, deviceId);
                                     automationService.addDevice(deviceEvent.getDeviceId());
                                     break;
-                                case REMOVE:
-                                    LOGGER.infof("Received %s for device [%s]", event, deviceId);
-                                    automationService.deleteDevice(deviceEvent.getDeviceId());
-                                    break;
+
                                 case UPDATE:
-                                    LOGGER.infof("Received %s for device [%s]", event, deviceId);
-                                    automationService.updateDevice(
-                                            deviceEvent.getDeviceId(), deviceEvent.getDeviceConfig().orElse(null));
+                                case REMOVE:
                                 case UNDEFINED:
                                     logWarningMessage(event, deviceId, eventType);
                                     break;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
index 816500a57d8431b36f54a95ee714b59b5f984c62..a281e221fb3098a76bae737b60e82d65c142d4e6 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
@@ -18,7 +18,6 @@ package eu.teraflow.automation;
 
 import acl.Acl;
 import automation.Automation;
-import automation.Automation.ZtpDeviceState;
 import context.ContextOuterClass;
 import context.ContextOuterClass.ConfigRule_ACL;
 import context.ContextOuterClass.ConfigRule_Custom;
@@ -45,7 +44,6 @@ import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.context.model.DeviceDriverEnum;
 import eu.teraflow.automation.context.model.DeviceEvent;
 import eu.teraflow.automation.context.model.DeviceOperationalStatus;
-import eu.teraflow.automation.context.model.Empty;
 import eu.teraflow.automation.context.model.EndPoint;
 import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
@@ -57,10 +55,8 @@ import eu.teraflow.automation.context.model.LocationTypeRegion;
 import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
-import eu.teraflow.automation.model.DeviceRoleConfig;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
-import eu.teraflow.automation.model.DeviceState;
 import java.util.stream.Collectors;
 import javax.inject.Singleton;
 import kpi_sample_types.KpiSampleTypes;
@@ -135,36 +131,6 @@ public class Serializer {
         }
     }
 
-    public Automation.ZtpDeviceState serialize(DeviceState deviceState) {
-        switch (deviceState) {
-            case CREATED:
-                return ZtpDeviceState.ZTP_DEV_STATE_CREATED;
-            case UPDATED:
-                return ZtpDeviceState.ZTP_DEV_STATE_UPDATED;
-            case DELETED:
-                return ZtpDeviceState.ZTP_DEV_STATE_DELETED;
-            case UNDEFINED:
-                return ZtpDeviceState.ZTP_DEV_STATE_UNDEFINED;
-            default:
-                return ZtpDeviceState.UNRECOGNIZED;
-        }
-    }
-
-    public DeviceState deserialize(Automation.ZtpDeviceState serializedDeviceState) {
-        switch (serializedDeviceState) {
-            case ZTP_DEV_STATE_CREATED:
-                return DeviceState.CREATED;
-            case ZTP_DEV_STATE_UPDATED:
-                return DeviceState.UPDATED;
-            case ZTP_DEV_STATE_DELETED:
-                return DeviceState.DELETED;
-            case ZTP_DEV_STATE_UNDEFINED:
-            case UNRECOGNIZED:
-            default:
-                return DeviceState.UNDEFINED;
-        }
-    }
-
     public Automation.DeviceRole serialize(DeviceRole deviceRole) {
         final var builder = Automation.DeviceRole.newBuilder();
         final var serializedDeviceRoleId = serialize(deviceRole.getDeviceRoleId());
@@ -183,24 +149,6 @@ public class Serializer {
         return new DeviceRole(deviceRoleId, deviceRoleType);
     }
 
-    public Automation.DeviceRoleConfig serialize(DeviceRoleConfig deviceRoleConfig) {
-        final var builder = Automation.DeviceRoleConfig.newBuilder();
-        final var serializedDeviceRole = serialize(deviceRoleConfig.getDeviceRole());
-        final var serializedDeviceConfig = serialize(deviceRoleConfig.getDeviceConfig());
-
-        builder.setDevRole(serializedDeviceRole);
-        builder.setDevConfig(serializedDeviceConfig);
-
-        return builder.build();
-    }
-
-    public DeviceRoleConfig deserialize(Automation.DeviceRoleConfig deviceRoleConfig) {
-        final var deviceRole = deserialize(deviceRoleConfig.getDevRole());
-        final var deviceConfig = deserialize(deviceRoleConfig.getDevConfig());
-
-        return new DeviceRoleConfig(deviceRole, deviceConfig);
-    }
-
     public ContextOuterClass.EventTypeEnum serialize(EventTypeEnum eventTypeEnum) {
         switch (eventTypeEnum) {
             case CREATE:
@@ -974,17 +922,6 @@ public class Serializer {
                 deviceEndPoints);
     }
 
-    public ContextOuterClass.Empty serializeEmpty(Empty empty) {
-
-        final var builder = ContextOuterClass.Empty.newBuilder();
-
-        return builder.build();
-    }
-
-    public Empty deserializeEmpty(ContextOuterClass.Empty serializedEmpty) {
-        return new Empty();
-    }
-
     public Uuid serializeUuid(String uuid) {
         return Uuid.newBuilder().setUuid(uuid).build();
     }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
index 5244f8ea63abdf88ce50cd6c30074809a1fb0c7b..8cbf0885ba6537e7bca31e5bb6efd0494e4fe879 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
@@ -18,13 +18,10 @@ package eu.teraflow.automation.device;
 
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
-import eu.teraflow.automation.context.model.Empty;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceGateway {
     Uni<DeviceConfig> getInitialConfiguration(String deviceId);
 
     Uni<String> configureDevice(Device device);
-
-    Uni<Empty> deleteDevice(String deviceId);
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
index f045833eb98e3ce2e784ff11c9ba28bb3e955a84..7849e36e6965df293381e5bc8a04db552d3f28d4 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
@@ -20,7 +20,6 @@ import device.DeviceService;
 import eu.teraflow.automation.Serializer;
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
-import eu.teraflow.automation.context.model.Empty;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
@@ -58,14 +57,4 @@ public class DeviceGatewayImpl implements DeviceGateway {
                 .onItem()
                 .transform(serializer::deserialize);
     }
-
-    @Override
-    public Uni<Empty> deleteDevice(String deviceId) {
-        final var serializedDeviceId = serializer.serializeDeviceId(deviceId);
-
-        return deviceDelegate
-                .deleteDevice(serializedDeviceId)
-                .onItem()
-                .transform(serializer::deserializeEmpty);
-    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
index d9f03d612743a765adbbe6b8ecbabaf48c39a9a0..229aea7dfe29a11487d3e61709981300a2ff9600 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
@@ -18,7 +18,6 @@ package eu.teraflow.automation.device;
 
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
-import eu.teraflow.automation.context.model.Empty;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceService {
@@ -26,6 +25,4 @@ public interface DeviceService {
     Uni<DeviceConfig> getInitialConfiguration(String deviceId);
 
     Uni<String> configureDevice(Device device);
-
-    Uni<Empty> deleteDevice(String deviceId);
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
index e6a8fc675479ba61a045445fdb03e2c7f7b924e2..d5dd6fc2be73b55da9f6d31efbc21bf40c431c20 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
@@ -18,7 +18,6 @@ package eu.teraflow.automation.device;
 
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
-import eu.teraflow.automation.context.model.Empty;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
@@ -44,9 +43,4 @@ public class DeviceServiceImpl implements DeviceService {
 
         return deviceGateway.configureDevice(device);
     }
-
-    @Override
-    public Uni<Empty> deleteDevice(String deviceId) {
-        return deviceGateway.deleteDevice(deviceId);
-    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
index da2f1c80e2f1433fe0cff6ba5397a86dd1c2da55..6dffcd1c0300672a3e23fc0ee8372b77b1bb55b7 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
@@ -34,10 +34,4 @@ public class DeviceRole {
     public DeviceRoleType getType() {
         return type;
     }
-
-    @Override
-    public String toString() {
-        return String.format(
-                "%s:{%s, deviceRoleType:\"%s\"}", getClass().getSimpleName(), id, type.toString());
-    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
index 064c4f1e647ce6fded0f67925924d50d582f29e2..b11f42ad054a3446370e123e37c7c13b025711f3 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
@@ -33,10 +33,4 @@ public class DeviceRoleId {
     public String getDeviceId() {
         return deviceId;
     }
-
-    @Override
-    public String toString() {
-        return String.format(
-                "%s:{id:\"%s\", deviceId:\"%s\"}", getClass().getSimpleName(), id, deviceId);
-    }
 }
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
index 75045288c99ff041e9fdc1d4a1bdf7365f9dd48a..e250a905c8379c01383c149cc944fdd4a55a81b4 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
@@ -300,80 +300,4 @@ class AutomationFunctionalServiceTest {
                             assertThat(deviceConfig.getDeviceId()).isEqualTo(deviceId);
                         });
     }
-
-    @Test
-    void shouldDeleteDevice() {
-        final var uuidForDeviceRoleId =
-                ContextOuterClass.Uuid.newBuilder()
-                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
-                        .build();
-
-        final var uuidForDeviceId =
-                ContextOuterClass.Uuid.newBuilder()
-                        .setUuid(UUID.fromString("9f14d0ab-9608-7862-a9e4-5ed26688389c").toString())
-                        .build();
-
-        final var outDeviceId =
-                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuidForDeviceId).build();
-
-        final var outDeviceRoleId =
-                Automation.DeviceRoleId.newBuilder()
-                        .setDevRoleId(uuidForDeviceRoleId)
-                        .setDevId(outDeviceId)
-                        .build();
-
-        String deviceId = outDeviceRoleId.getDevRoleId().toString();
-        String deviceType = "cisco";
-
-        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
-
-        final var topologyIdA = new TopologyId("contextIdA", "idA");
-        final var deviceIdA = "deviceIdA";
-        final var idA = "idA";
-        final var endPointIdA = new EndPointId(topologyIdA, deviceIdA, idA);
-
-        final var endPointTypeA = "endPointTypeA";
-        final var kpiSampleTypesA =
-                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
-        final var locationTypeRegionA = new LocationTypeRegion("ATH");
-        final var locationA = new Location(locationTypeRegionA);
-        final var endPointA =
-                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
-                        .location(locationA)
-                        .build();
-
-        final var topologyIdB = new TopologyId("contextIdB", "idB");
-        final var deviceIdB = "deviceIdB";
-        final var idB = "idB";
-        final var endPointIdB = new EndPointId(topologyIdB, deviceIdB, idB);
-        final var endPointTypeB = "endPointTypeB";
-        final var kpiSampleTypesB =
-                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
-        final var locationTypeRegionB = new LocationTypeRegion("ATH");
-        final var locationB = new Location(locationTypeRegionB);
-        final var endPointB =
-                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
-                        .location(locationB)
-                        .build();
-
-        final var endPoints = List.of(endPointA, endPointB);
-
-        Device device =
-                new Device(
-                        deviceId, deviceType, DeviceOperationalStatus.DISABLED, deviceDrivers, endPoints);
-        Uni<Device> deviceUni = Uni.createFrom().item(device);
-
-        Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni);
-
-        final var deletedDevice = automationService.deleteDevice(deviceId);
-
-        Assertions.assertThat(deletedDevice).isNotNull();
-
-        deletedDevice
-                .subscribe()
-                .with(
-                        removedDevice -> {
-                            assertThat(removedDevice).isEqualTo(deletedDevice);
-                        });
-    }
 }
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
index 85ed170efbf938b11303d92a6697c89836e0bf70..b1a70a7e0f0933d9d8aa6049c53d75a40ebf14d8 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
@@ -38,7 +38,6 @@ import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.device.DeviceGateway;
 import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
-import eu.teraflow.automation.model.DeviceRoleConfig;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
 import io.quarkus.grpc.GrpcClient;
@@ -161,68 +160,16 @@ class AutomationServiceTest {
     @Test
     void shouldUpdateDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
-
         final var DEVICE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389b";
         final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a";
-        final var DEVICE_TYPE = "ztp";
-
-        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
-
-        final var topologyIdA = new TopologyId("contextIdA", "idA");
-        final var deviceIdA = "deviceIdA";
-        final var idA = "idA";
-        final var endPointIdA = new EndPointId(topologyIdA, deviceIdA, idA);
-
-        final var endPointTypeA = "endPointTypeA";
-        final var kpiSampleTypesA =
-                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
-        final var locationTypeRegionA = new LocationTypeRegion("ATH");
-        final var locationA = new Location(locationTypeRegionA);
-        final var endPointA =
-                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
-                        .location(locationA)
-                        .build();
-
-        final var topologyIdB = new TopologyId("contextIdB", "idB");
-        final var deviceIdB = "deviceIdB";
-        final var idB = "idB";
-        final var endPointIdB = new EndPointId(topologyIdB, deviceIdB, idB);
-        final var endPointTypeB = "endPointTypeB";
-        final var kpiSampleTypesB =
-                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
-        final var locationTypeRegionB = new LocationTypeRegion("ATH");
-        final var locationB = new Location(locationTypeRegionB);
-        final var endPointB =
-                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
-                        .location(locationB)
-                        .build();
-
-        final var endPoints = List.of(endPointA, endPointB);
-
-        final var emptyDeviceConfig = new DeviceConfig(List.of());
-        final var device =
-                new Device(
-                        DEVICE_ID,
-                        DEVICE_TYPE,
-                        emptyDeviceConfig,
-                        DeviceOperationalStatus.ENABLED,
-                        deviceDrivers,
-                        endPoints);
-        Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(Uni.createFrom().item(device));
 
         final var deviceRoleId = new DeviceRoleId(DEVICE_ROLE_ID, DEVICE_ID);
-        final var deviceRole = new DeviceRole(deviceRoleId, DeviceRoleType.DEV_OPS);
-
-        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
-        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
-        final var deviceConfig =
-                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
-
-        final var deviceRoleConfig = new DeviceRoleConfig(deviceRole, deviceConfig);
-        final var serializedDeviceRoleConfig = serializer.serialize(deviceRoleConfig);
+        final var deviceRoleType = DeviceRoleType.DEV_CONF;
+        final var deviceRole = new DeviceRole(deviceRoleId, deviceRoleType);
+        final var serializedDeviceRole = serializer.serialize(deviceRole);
 
         client
-                .ztpUpdate(serializedDeviceRoleConfig)
+                .ztpUpdate(serializedDeviceRole)
                 .subscribe()
                 .with(
                         deviceRoleState -> {
diff --git a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
index 6f8834a1f68e96d3f0be38f8d918ad1be7d391e9..e8a97d7922b49878af533c23918cf7b23aa20c06 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
@@ -61,7 +61,6 @@ class ContextSubscriberTest {
 
         contextSubscriber.listenForDeviceEvents();
 
-        verify(automationService, times(0)).deleteDevice(deviceId);
         verify(automationService, times(1)).addDevice(deviceId);
     }
 
@@ -96,7 +95,7 @@ class ContextSubscriberTest {
     }
 
     @Test
-    void shouldCallRemoveDeviceUponRemoveEvent() {
+    void shouldNotCallAddDeviceUponRemoveEvent() {
         final var uuidForDeviceRoleId =
                 ContextOuterClass.Uuid.newBuilder().setUuid(UUID_FOR_DEVICE_ROLE_ID).build();
 
@@ -123,7 +122,6 @@ class ContextSubscriberTest {
         contextSubscriber.listenForDeviceEvents();
 
         verify(automationService, times(0)).addDevice(deviceId);
-        verify(automationService, times(1)).deleteDevice(deviceId);
     }
 
     @Test
diff --git a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
index a02fbbca49319feb93de85efbe759a30a4ed3aa9..63f0eb45fdf0c287b68300db84ef1ef7f88418ba 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
@@ -21,7 +21,6 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
 import acl.Acl;
 import automation.Automation;
-import automation.Automation.ZtpDeviceState;
 import context.ContextOuterClass;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
@@ -44,7 +43,6 @@ import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.context.model.DeviceDriverEnum;
 import eu.teraflow.automation.context.model.DeviceEvent;
 import eu.teraflow.automation.context.model.DeviceOperationalStatus;
-import eu.teraflow.automation.context.model.Empty;
 import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
 import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
@@ -56,10 +54,8 @@ import eu.teraflow.automation.context.model.LocationTypeRegion;
 import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
-import eu.teraflow.automation.model.DeviceRoleConfig;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
-import eu.teraflow.automation.model.DeviceState;
 import io.quarkus.test.junit.QuarkusTest;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -246,61 +242,6 @@ class SerializerTest {
         assertThat(deviceRole).usingRecursiveComparison().isEqualTo(expectedDeviceRole);
     }
 
-    @Test
-    void shouldSerializeDeviceRoleConfig() {
-        final var expectedDevRoleId = new DeviceRoleId("expectedDevRoleId", "expectedDeviceId");
-        final var expectedDevRoleType = DeviceRoleType.DEV_OPS;
-
-        final var deviceRole = new DeviceRole(expectedDevRoleId, expectedDevRoleType);
-        final var serializedDeviceRole = serializer.serialize(deviceRole);
-
-        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
-        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
-        final var deviceConfig =
-                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
-        final var serializedDeviceConfig = serializer.serialize(deviceConfig);
-
-        final var expectedDeviceRoleConfig =
-                Automation.DeviceRoleConfig.newBuilder()
-                        .setDevRole(serializedDeviceRole)
-                        .setDevConfig(serializedDeviceConfig)
-                        .build();
-
-        final var deviceRoleConfig = new DeviceRoleConfig(deviceRole, deviceConfig);
-        final var serializedDeviceRoleConfig = serializer.serialize(deviceRoleConfig);
-
-        assertThat(serializedDeviceRoleConfig)
-                .usingRecursiveComparison()
-                .isEqualTo(expectedDeviceRoleConfig);
-    }
-
-    @Test
-    void shouldDeserializeDeviceRoleConfig() {
-        final var expectedDevRoleId = new DeviceRoleId("expectedDevRoleId", "expectedDeviceId");
-        final var expectedDevRoleType = DeviceRoleType.DEV_OPS;
-
-        final var deviceRole = new DeviceRole(expectedDevRoleId, expectedDevRoleType);
-        final var serializedDeviceRole = serializer.serialize(deviceRole);
-
-        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
-        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
-        final var deviceConfig =
-                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
-        final var serializedDeviceConfig = serializer.serialize(deviceConfig);
-
-        final var expectedDeviceRoleConfig = new DeviceRoleConfig(deviceRole, deviceConfig);
-
-        final var serializedDeviceRoleConfig =
-                Automation.DeviceRoleConfig.newBuilder()
-                        .setDevRole(serializedDeviceRole)
-                        .setDevConfig(serializedDeviceConfig)
-                        .build();
-
-        final var deviceRoleConfig = serializer.deserialize(serializedDeviceRoleConfig);
-
-        assertThat(deviceRoleConfig).usingRecursiveComparison().isEqualTo(expectedDeviceRoleConfig);
-    }
-
     private static Stream<Arguments> provideEventTypeEnum() {
         return Stream.of(
                 Arguments.of(EventTypeEnum.CREATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE),
@@ -325,31 +266,6 @@ class SerializerTest {
         assertThat(eventType).isEqualTo(expectedEventType);
     }
 
-    private static Stream<Arguments> provideDeviceState() {
-        return Stream.of(
-                Arguments.of(DeviceState.CREATED, ZtpDeviceState.ZTP_DEV_STATE_CREATED),
-                Arguments.of(DeviceState.UPDATED, ZtpDeviceState.ZTP_DEV_STATE_UPDATED),
-                Arguments.of(DeviceState.DELETED, ZtpDeviceState.ZTP_DEV_STATE_DELETED),
-                Arguments.of(DeviceState.UNDEFINED, ZtpDeviceState.ZTP_DEV_STATE_UNDEFINED));
-    }
-
-    @ParameterizedTest
-    @MethodSource("provideDeviceState")
-    void shouldSerializeDeviceState(
-            DeviceState deviceState, ZtpDeviceState expectedSerializedDeviceState) {
-        final var serializedDeviceState = serializer.serialize(deviceState);
-        assertThat(serializedDeviceState.getNumber())
-                .isEqualTo(expectedSerializedDeviceState.getNumber());
-    }
-
-    @ParameterizedTest
-    @MethodSource("provideDeviceState")
-    void shouldDeserializeDeviceState(
-            DeviceState expectedDeviceState, ZtpDeviceState serializedDeviceState) {
-        final var deviceState = serializer.deserialize(serializedDeviceState);
-        assertThat(deviceState).isEqualTo(expectedDeviceState);
-    }
-
     @Test
     void shouldSerializeEvent() {
         final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
@@ -1755,27 +1671,6 @@ class SerializerTest {
         assertThat(device).usingRecursiveComparison().isEqualTo(expectedDevice);
     }
 
-    @Test
-    void shouldSerializeEmpty() {
-        final var empty = new Empty();
-        final var expectedEmpty = ContextOuterClass.Empty.newBuilder().build();
-
-        final var serializeEmpty = serializer.serializeEmpty(empty);
-
-        assertThat(serializeEmpty).isEqualTo(expectedEmpty);
-    }
-
-    @Test
-    void shouldDeserializeEmpty() {
-        final var expectedEmpty = new Empty();
-
-        final var serializedEmpty = serializer.serializeEmpty(expectedEmpty);
-
-        final var empty = serializer.deserializeEmpty(serializedEmpty);
-
-        assertThat(empty).usingRecursiveComparison().isEqualTo(expectedEmpty);
-    }
-
     @Test
     void shouldSerializeUuid() {
         final var expectedUuid = "uuid";
diff --git a/src/automation/target/generated-sources/grpc/automation/Automation.java b/src/automation/target/generated-sources/grpc/automation/Automation.java
index cd82f7423092c72c6c2fa02836db645db52f7041..f3918e0fc18e6d97b8fd669fb307dcb94964b0e0 100644
--- a/src/automation/target/generated-sources/grpc/automation/Automation.java
+++ b/src/automation/target/generated-sources/grpc/automation/Automation.java
@@ -1818,830 +1818,6 @@ public final class Automation {
 
   }
 
-  public interface DeviceRoleConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:automation.DeviceRoleConfig)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.automation.DeviceRole devRole = 1;</code>
-     * @return Whether the devRole field is set.
-     */
-    boolean hasDevRole();
-    /**
-     * <code>.automation.DeviceRole devRole = 1;</code>
-     * @return The devRole.
-     */
-    automation.Automation.DeviceRole getDevRole();
-    /**
-     * <code>.automation.DeviceRole devRole = 1;</code>
-     */
-    automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder();
-
-    /**
-     * <code>.context.DeviceConfig devConfig = 2;</code>
-     * @return Whether the devConfig field is set.
-     */
-    boolean hasDevConfig();
-    /**
-     * <code>.context.DeviceConfig devConfig = 2;</code>
-     * @return The devConfig.
-     */
-    context.ContextOuterClass.DeviceConfig getDevConfig();
-    /**
-     * <code>.context.DeviceConfig devConfig = 2;</code>
-     */
-    context.ContextOuterClass.DeviceConfigOrBuilder getDevConfigOrBuilder();
-  }
-  /**
-   * Protobuf type {@code automation.DeviceRoleConfig}
-   */
-  public static final class DeviceRoleConfig extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:automation.DeviceRoleConfig)
-      DeviceRoleConfigOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use DeviceRoleConfig.newBuilder() to construct.
-    private DeviceRoleConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private DeviceRoleConfig() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new DeviceRoleConfig();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private DeviceRoleConfig(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              automation.Automation.DeviceRole.Builder subBuilder = null;
-              if (devRole_ != null) {
-                subBuilder = devRole_.toBuilder();
-              }
-              devRole_ = input.readMessage(automation.Automation.DeviceRole.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(devRole_);
-                devRole_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
-              if (devConfig_ != null) {
-                subBuilder = devConfig_.toBuilder();
-              }
-              devConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(devConfig_);
-                devConfig_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return automation.Automation.internal_static_automation_DeviceRoleConfig_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return automation.Automation.internal_static_automation_DeviceRoleConfig_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              automation.Automation.DeviceRoleConfig.class, automation.Automation.DeviceRoleConfig.Builder.class);
-    }
-
-    public static final int DEVROLE_FIELD_NUMBER = 1;
-    private automation.Automation.DeviceRole devRole_;
-    /**
-     * <code>.automation.DeviceRole devRole = 1;</code>
-     * @return Whether the devRole field is set.
-     */
-    @java.lang.Override
-    public boolean hasDevRole() {
-      return devRole_ != null;
-    }
-    /**
-     * <code>.automation.DeviceRole devRole = 1;</code>
-     * @return The devRole.
-     */
-    @java.lang.Override
-    public automation.Automation.DeviceRole getDevRole() {
-      return devRole_ == null ? automation.Automation.DeviceRole.getDefaultInstance() : devRole_;
-    }
-    /**
-     * <code>.automation.DeviceRole devRole = 1;</code>
-     */
-    @java.lang.Override
-    public automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder() {
-      return getDevRole();
-    }
-
-    public static final int DEVCONFIG_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceConfig devConfig_;
-    /**
-     * <code>.context.DeviceConfig devConfig = 2;</code>
-     * @return Whether the devConfig field is set.
-     */
-    @java.lang.Override
-    public boolean hasDevConfig() {
-      return devConfig_ != null;
-    }
-    /**
-     * <code>.context.DeviceConfig devConfig = 2;</code>
-     * @return The devConfig.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDevConfig() {
-      return devConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : devConfig_;
-    }
-    /**
-     * <code>.context.DeviceConfig devConfig = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfigOrBuilder getDevConfigOrBuilder() {
-      return getDevConfig();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (devRole_ != null) {
-        output.writeMessage(1, getDevRole());
-      }
-      if (devConfig_ != null) {
-        output.writeMessage(2, getDevConfig());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (devRole_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getDevRole());
-      }
-      if (devConfig_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDevConfig());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof automation.Automation.DeviceRoleConfig)) {
-        return super.equals(obj);
-      }
-      automation.Automation.DeviceRoleConfig other = (automation.Automation.DeviceRoleConfig) obj;
-
-      if (hasDevRole() != other.hasDevRole()) return false;
-      if (hasDevRole()) {
-        if (!getDevRole()
-            .equals(other.getDevRole())) return false;
-      }
-      if (hasDevConfig() != other.hasDevConfig()) return false;
-      if (hasDevConfig()) {
-        if (!getDevConfig()
-            .equals(other.getDevConfig())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasDevRole()) {
-        hash = (37 * hash) + DEVROLE_FIELD_NUMBER;
-        hash = (53 * hash) + getDevRole().hashCode();
-      }
-      if (hasDevConfig()) {
-        hash = (37 * hash) + DEVCONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getDevConfig().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static automation.Automation.DeviceRoleConfig parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static automation.Automation.DeviceRoleConfig parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static automation.Automation.DeviceRoleConfig parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(automation.Automation.DeviceRoleConfig prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code automation.DeviceRoleConfig}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:automation.DeviceRoleConfig)
-        automation.Automation.DeviceRoleConfigOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return automation.Automation.internal_static_automation_DeviceRoleConfig_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return automation.Automation.internal_static_automation_DeviceRoleConfig_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                automation.Automation.DeviceRoleConfig.class, automation.Automation.DeviceRoleConfig.Builder.class);
-      }
-
-      // Construct using automation.Automation.DeviceRoleConfig.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (devRoleBuilder_ == null) {
-          devRole_ = null;
-        } else {
-          devRole_ = null;
-          devRoleBuilder_ = null;
-        }
-        if (devConfigBuilder_ == null) {
-          devConfig_ = null;
-        } else {
-          devConfig_ = null;
-          devConfigBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return automation.Automation.internal_static_automation_DeviceRoleConfig_descriptor;
-      }
-
-      @java.lang.Override
-      public automation.Automation.DeviceRoleConfig getDefaultInstanceForType() {
-        return automation.Automation.DeviceRoleConfig.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public automation.Automation.DeviceRoleConfig build() {
-        automation.Automation.DeviceRoleConfig result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public automation.Automation.DeviceRoleConfig buildPartial() {
-        automation.Automation.DeviceRoleConfig result = new automation.Automation.DeviceRoleConfig(this);
-        if (devRoleBuilder_ == null) {
-          result.devRole_ = devRole_;
-        } else {
-          result.devRole_ = devRoleBuilder_.build();
-        }
-        if (devConfigBuilder_ == null) {
-          result.devConfig_ = devConfig_;
-        } else {
-          result.devConfig_ = devConfigBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof automation.Automation.DeviceRoleConfig) {
-          return mergeFrom((automation.Automation.DeviceRoleConfig)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(automation.Automation.DeviceRoleConfig other) {
-        if (other == automation.Automation.DeviceRoleConfig.getDefaultInstance()) return this;
-        if (other.hasDevRole()) {
-          mergeDevRole(other.getDevRole());
-        }
-        if (other.hasDevConfig()) {
-          mergeDevConfig(other.getDevConfig());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        automation.Automation.DeviceRoleConfig parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (automation.Automation.DeviceRoleConfig) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private automation.Automation.DeviceRole devRole_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder> devRoleBuilder_;
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       * @return Whether the devRole field is set.
-       */
-      public boolean hasDevRole() {
-        return devRoleBuilder_ != null || devRole_ != null;
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       * @return The devRole.
-       */
-      public automation.Automation.DeviceRole getDevRole() {
-        if (devRoleBuilder_ == null) {
-          return devRole_ == null ? automation.Automation.DeviceRole.getDefaultInstance() : devRole_;
-        } else {
-          return devRoleBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       */
-      public Builder setDevRole(automation.Automation.DeviceRole value) {
-        if (devRoleBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          devRole_ = value;
-          onChanged();
-        } else {
-          devRoleBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       */
-      public Builder setDevRole(
-          automation.Automation.DeviceRole.Builder builderForValue) {
-        if (devRoleBuilder_ == null) {
-          devRole_ = builderForValue.build();
-          onChanged();
-        } else {
-          devRoleBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       */
-      public Builder mergeDevRole(automation.Automation.DeviceRole value) {
-        if (devRoleBuilder_ == null) {
-          if (devRole_ != null) {
-            devRole_ =
-              automation.Automation.DeviceRole.newBuilder(devRole_).mergeFrom(value).buildPartial();
-          } else {
-            devRole_ = value;
-          }
-          onChanged();
-        } else {
-          devRoleBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       */
-      public Builder clearDevRole() {
-        if (devRoleBuilder_ == null) {
-          devRole_ = null;
-          onChanged();
-        } else {
-          devRole_ = null;
-          devRoleBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       */
-      public automation.Automation.DeviceRole.Builder getDevRoleBuilder() {
-        
-        onChanged();
-        return getDevRoleFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       */
-      public automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder() {
-        if (devRoleBuilder_ != null) {
-          return devRoleBuilder_.getMessageOrBuilder();
-        } else {
-          return devRole_ == null ?
-              automation.Automation.DeviceRole.getDefaultInstance() : devRole_;
-        }
-      }
-      /**
-       * <code>.automation.DeviceRole devRole = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder> 
-          getDevRoleFieldBuilder() {
-        if (devRoleBuilder_ == null) {
-          devRoleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder>(
-                  getDevRole(),
-                  getParentForChildren(),
-                  isClean());
-          devRole_ = null;
-        }
-        return devRoleBuilder_;
-      }
-
-      private context.ContextOuterClass.DeviceConfig devConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> devConfigBuilder_;
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       * @return Whether the devConfig field is set.
-       */
-      public boolean hasDevConfig() {
-        return devConfigBuilder_ != null || devConfig_ != null;
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       * @return The devConfig.
-       */
-      public context.ContextOuterClass.DeviceConfig getDevConfig() {
-        if (devConfigBuilder_ == null) {
-          return devConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : devConfig_;
-        } else {
-          return devConfigBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       */
-      public Builder setDevConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (devConfigBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          devConfig_ = value;
-          onChanged();
-        } else {
-          devConfigBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       */
-      public Builder setDevConfig(
-          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
-        if (devConfigBuilder_ == null) {
-          devConfig_ = builderForValue.build();
-          onChanged();
-        } else {
-          devConfigBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       */
-      public Builder mergeDevConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (devConfigBuilder_ == null) {
-          if (devConfig_ != null) {
-            devConfig_ =
-              context.ContextOuterClass.DeviceConfig.newBuilder(devConfig_).mergeFrom(value).buildPartial();
-          } else {
-            devConfig_ = value;
-          }
-          onChanged();
-        } else {
-          devConfigBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       */
-      public Builder clearDevConfig() {
-        if (devConfigBuilder_ == null) {
-          devConfig_ = null;
-          onChanged();
-        } else {
-          devConfig_ = null;
-          devConfigBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceConfig.Builder getDevConfigBuilder() {
-        
-        onChanged();
-        return getDevConfigFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceConfigOrBuilder getDevConfigOrBuilder() {
-        if (devConfigBuilder_ != null) {
-          return devConfigBuilder_.getMessageOrBuilder();
-        } else {
-          return devConfig_ == null ?
-              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : devConfig_;
-        }
-      }
-      /**
-       * <code>.context.DeviceConfig devConfig = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
-          getDevConfigFieldBuilder() {
-        if (devConfigBuilder_ == null) {
-          devConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
-                  getDevConfig(),
-                  getParentForChildren(),
-                  isClean());
-          devConfig_ = null;
-        }
-        return devConfigBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:automation.DeviceRoleConfig)
-    }
-
-    // @@protoc_insertion_point(class_scope:automation.DeviceRoleConfig)
-    private static final automation.Automation.DeviceRoleConfig DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new automation.Automation.DeviceRoleConfig();
-    }
-
-    public static automation.Automation.DeviceRoleConfig getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<DeviceRoleConfig>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceRoleConfig>() {
-      @java.lang.Override
-      public DeviceRoleConfig parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceRoleConfig(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<DeviceRoleConfig> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<DeviceRoleConfig> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public automation.Automation.DeviceRoleConfig getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
   public interface DeviceRoleListOrBuilder extends
       // @@protoc_insertion_point(interface_extends:automation.DeviceRoleList)
       com.google.protobuf.MessageOrBuilder {
@@ -4811,11 +3987,6 @@ public final class Automation {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_automation_DeviceRole_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_automation_DeviceRoleConfig_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_automation_DeviceRoleConfig_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_automation_DeviceRoleList_descriptor;
   private static final 
@@ -4845,32 +4016,29 @@ public final class Automation {
       "2\r.context.Uuid\022 \n\005devId\030\002 \001(\0132\021.context" +
       ".DeviceId\"j\n\nDeviceRole\022+\n\tdevRoleId\030\001 \001" +
       "(\0132\030.automation.DeviceRoleId\022/\n\013devRoleT" +
-      "ype\030\002 \001(\0162\032.automation.DeviceRoleType\"e\n" +
-      "\020DeviceRoleConfig\022\'\n\007devRole\030\001 \001(\0132\026.aut" +
-      "omation.DeviceRole\022(\n\tdevConfig\030\002 \001(\0132\025." +
-      "context.DeviceConfig\"9\n\016DeviceRoleList\022\'" +
-      "\n\007devRole\030\001 \003(\0132\026.automation.DeviceRole\"" +
-      "p\n\017DeviceRoleState\022+\n\tdevRoleId\030\001 \001(\0132\030." +
-      "automation.DeviceRoleId\0220\n\014devRoleState\030" +
-      "\002 \001(\0162\032.automation.ZtpDeviceState\"\'\n\024Dev" +
-      "iceDeletionResult\022\017\n\007deleted\030\001 \003(\t*H\n\016De" +
-      "viceRoleType\022\010\n\004NONE\020\000\022\013\n\007DEV_OPS\020\001\022\014\n\010D" +
-      "EV_CONF\020\002\022\021\n\rPIPELINE_CONF\020\003*~\n\016ZtpDevic" +
-      "eState\022\033\n\027ZTP_DEV_STATE_UNDEFINED\020\000\022\031\n\025Z" +
-      "TP_DEV_STATE_CREATED\020\001\022\031\n\025ZTP_DEV_STATE_" +
-      "UPDATED\020\002\022\031\n\025ZTP_DEV_STATE_DELETED\020\0032\276\003\n" +
-      "\021AutomationService\022F\n\020ZtpGetDeviceRole\022\030" +
-      ".automation.DeviceRoleId\032\026.automation.De" +
-      "viceRole\"\000\022N\n\033ZtpGetDeviceRolesByDeviceI" +
-      "d\022\021.context.DeviceId\032\032.automation.Device" +
-      "RoleList\"\000\022?\n\006ZtpAdd\022\026.automation.Device" +
-      "Role\032\033.automation.DeviceRoleState\"\000\022H\n\tZ" +
-      "tpUpdate\022\034.automation.DeviceRoleConfig\032\033" +
-      ".automation.DeviceRoleState\"\000\022B\n\tZtpDele" +
-      "te\022\026.automation.DeviceRole\032\033.automation." +
-      "DeviceRoleState\"\000\022B\n\014ZtpDeleteAll\022\016.cont" +
-      "ext.Empty\032 .automation.DeviceDeletionRes" +
-      "ult\"\000b\006proto3"
+      "ype\030\002 \001(\0162\032.automation.DeviceRoleType\"9\n" +
+      "\016DeviceRoleList\022\'\n\007devRole\030\001 \003(\0132\026.autom" +
+      "ation.DeviceRole\"p\n\017DeviceRoleState\022+\n\td" +
+      "evRoleId\030\001 \001(\0132\030.automation.DeviceRoleId" +
+      "\0220\n\014devRoleState\030\002 \001(\0162\032.automation.ZtpD" +
+      "eviceState\"\'\n\024DeviceDeletionResult\022\017\n\007de" +
+      "leted\030\001 \003(\t*H\n\016DeviceRoleType\022\010\n\004NONE\020\000\022" +
+      "\013\n\007DEV_OPS\020\001\022\014\n\010DEV_CONF\020\002\022\021\n\rPIPELINE_C" +
+      "ONF\020\003*~\n\016ZtpDeviceState\022\033\n\027ZTP_DEV_STATE" +
+      "_UNDEFINED\020\000\022\031\n\025ZTP_DEV_STATE_CREATED\020\001\022" +
+      "\031\n\025ZTP_DEV_STATE_UPDATED\020\002\022\031\n\025ZTP_DEV_ST" +
+      "ATE_DELETED\020\0032\270\003\n\021AutomationService\022F\n\020Z" +
+      "tpGetDeviceRole\022\030.automation.DeviceRoleI" +
+      "d\032\026.automation.DeviceRole\"\000\022N\n\033ZtpGetDev" +
+      "iceRolesByDeviceId\022\021.context.DeviceId\032\032." +
+      "automation.DeviceRoleList\"\000\022?\n\006ZtpAdd\022\026." +
+      "automation.DeviceRole\032\033.automation.Devic" +
+      "eRoleState\"\000\022B\n\tZtpUpdate\022\026.automation.D" +
+      "eviceRole\032\033.automation.DeviceRoleState\"\000" +
+      "\022B\n\tZtpDelete\022\026.automation.DeviceRole\032\033." +
+      "automation.DeviceRoleState\"\000\022B\n\014ZtpDelet" +
+      "eAll\022\016.context.Empty\032 .automation.Device" +
+      "DeletionResult\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -4889,26 +4057,20 @@ public final class Automation {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceRole_descriptor,
         new java.lang.String[] { "DevRoleId", "DevRoleType", });
-    internal_static_automation_DeviceRoleConfig_descriptor =
-      getDescriptor().getMessageTypes().get(2);
-    internal_static_automation_DeviceRoleConfig_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_automation_DeviceRoleConfig_descriptor,
-        new java.lang.String[] { "DevRole", "DevConfig", });
     internal_static_automation_DeviceRoleList_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(2);
     internal_static_automation_DeviceRoleList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceRoleList_descriptor,
         new java.lang.String[] { "DevRole", });
     internal_static_automation_DeviceRoleState_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(3);
     internal_static_automation_DeviceRoleState_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceRoleState_descriptor,
         new java.lang.String[] { "DevRoleId", "DevRoleState", });
     internal_static_automation_DeviceDeletionResult_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_automation_DeviceDeletionResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceDeletionResult_descriptor,
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationService.java b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
index 8ef5784815a7b8bb6d51b05f89f6ca3a4b23f2e5..4df9e1098d2028bba58da0959512310ed3d2c4ba 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationService.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
@@ -14,7 +14,7 @@ public interface AutomationService extends MutinyService {
     
     io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpAdd(automation.Automation.DeviceRole request);
     
-    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request);
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request);
     
     io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request);
     
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
index 3c7923a0ce8a1501689d1bb567c915590376cf5f..74d420a1ee8c3c11f824c30fb96f694ddddc64fe 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
@@ -40,7 +40,7 @@ public class AutomationServiceBean extends MutinyAutomationServiceGrpc.Automatio
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
        try {
          return delegate.ztpUpdate(request);
        } catch (UnsupportedOperationException e) {
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
index 13d13c431b63baebd22ed7fd566b6b25395977e3..9dcad532a0238f6f14d8e6ca2aa64b445747e9e6 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
@@ -33,7 +33,7 @@ public class AutomationServiceClient implements AutomationService, MutinyClient<
        return stub.ztpAdd(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
        return stub.ztpUpdate(request);
     }
     @Override
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
index 841994ea713bb9d1c0223689386d6cae35c6d014..25f5feaf327702102d1ec6cd9ca6cc8ab74cf14f 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
@@ -107,27 +107,27 @@ public final class AutomationServiceGrpc {
     return getZtpAddMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRoleConfig,
+  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
       automation.Automation.DeviceRoleState> getZtpUpdateMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "ZtpUpdate",
-      requestType = automation.Automation.DeviceRoleConfig.class,
+      requestType = automation.Automation.DeviceRole.class,
       responseType = automation.Automation.DeviceRoleState.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRoleConfig,
+  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
       automation.Automation.DeviceRoleState> getZtpUpdateMethod() {
-    io.grpc.MethodDescriptor<automation.Automation.DeviceRoleConfig, automation.Automation.DeviceRoleState> getZtpUpdateMethod;
+    io.grpc.MethodDescriptor<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState> getZtpUpdateMethod;
     if ((getZtpUpdateMethod = AutomationServiceGrpc.getZtpUpdateMethod) == null) {
       synchronized (AutomationServiceGrpc.class) {
         if ((getZtpUpdateMethod = AutomationServiceGrpc.getZtpUpdateMethod) == null) {
           AutomationServiceGrpc.getZtpUpdateMethod = getZtpUpdateMethod =
-              io.grpc.MethodDescriptor.<automation.Automation.DeviceRoleConfig, automation.Automation.DeviceRoleState>newBuilder()
+              io.grpc.MethodDescriptor.<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpUpdate"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  automation.Automation.DeviceRoleConfig.getDefaultInstance()))
+                  automation.Automation.DeviceRole.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   automation.Automation.DeviceRoleState.getDefaultInstance()))
               .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpUpdate"))
@@ -271,7 +271,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public void ztpUpdate(automation.Automation.DeviceRoleConfig request,
+    public void ztpUpdate(automation.Automation.DeviceRole request,
         io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpUpdateMethod(), responseObserver);
     }
@@ -317,7 +317,7 @@ public final class AutomationServiceGrpc {
             getZtpUpdateMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                automation.Automation.DeviceRoleConfig,
+                automation.Automation.DeviceRole,
                 automation.Automation.DeviceRoleState>(
                   this, METHODID_ZTP_UPDATE)))
           .addMethod(
@@ -378,7 +378,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public void ztpUpdate(automation.Automation.DeviceRoleConfig request,
+    public void ztpUpdate(automation.Automation.DeviceRole request,
         io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
           getChannel().newCall(getZtpUpdateMethod(), getCallOptions()), request, responseObserver);
@@ -438,7 +438,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public automation.Automation.DeviceRoleState ztpUpdate(automation.Automation.DeviceRoleConfig request) {
+    public automation.Automation.DeviceRoleState ztpUpdate(automation.Automation.DeviceRole request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
           getChannel(), getZtpUpdateMethod(), getCallOptions(), request);
     }
@@ -499,7 +499,7 @@ public final class AutomationServiceGrpc {
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRoleState> ztpUpdate(
-        automation.Automation.DeviceRoleConfig request) {
+        automation.Automation.DeviceRole request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getZtpUpdateMethod(), getCallOptions()), request);
     }
@@ -558,7 +558,7 @@ public final class AutomationServiceGrpc {
               (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
           break;
         case METHODID_ZTP_UPDATE:
-          serviceImpl.ztpUpdate((automation.Automation.DeviceRoleConfig) request,
+          serviceImpl.ztpUpdate((automation.Automation.DeviceRole) request,
               (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
           break;
         case METHODID_ZTP_DELETE:
diff --git a/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
index 64565286ca36fd0b820c000e466954144207ab0b..9b641fcdd7733828c58ce563651ac3d46e697287 100644
--- a/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
@@ -51,7 +51,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpUpdate);
         }
 
@@ -98,7 +98,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -139,7 +139,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
                             automation.AutomationServiceGrpc.getZtpUpdateMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            automation.Automation.DeviceRoleConfig,
+                                            automation.Automation.DeviceRole,
                                             automation.Automation.DeviceRoleState>(
                                             this, METHODID_ZTP_UPDATE, compression)))
                     .addMethod(
@@ -205,7 +205,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
                             serviceImpl::ztpAdd);
                     break;
                 case METHODID_ZTP_UPDATE:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRoleConfig) request,
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRole) request,
                             (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver,
                             compression,
                             serviceImpl::ztpUpdate);
diff --git a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
index 9d05f3da8a831e74922e65473206539680c8d78b..5d63d4aa45e578957a7a3414c33491cebe98acbe 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -19,124 +19,85 @@ public final class Monitoring {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The kpiDescription.
      */
     java.lang.String getKpiDescription();
     /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The bytes for kpiDescription.
      */
     com.google.protobuf.ByteString
         getKpiDescriptionBytes();
 
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdListList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    monitoring.Monitoring.KpiId getKpiIdList(int index);
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    int getKpiIdListCount();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-        int index);
-
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The enum numeric value on the wire for kpiSampleType.
      */
     int getKpiSampleTypeValue();
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The kpiSampleType.
      */
     kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
 
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return Whether the deviceId field is set.
      */
     boolean hasDeviceId();
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return The deviceId.
      */
     context.ContextOuterClass.DeviceId getDeviceId();
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      */
     context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
 
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return Whether the endpointId field is set.
      */
     boolean hasEndpointId();
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return The endpointId.
      */
     context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      */
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
     boolean hasServiceId();
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
     context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      */
     context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return Whether the sliceId field is set.
      */
     boolean hasSliceId();
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return The sliceId.
      */
     context.ContextOuterClass.SliceId getSliceId();
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      */
     context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
@@ -154,7 +115,6 @@ public final class Monitoring {
     }
     private KpiDescriptor() {
       kpiDescription_ = "";
-      kpiIdList_ = java.util.Collections.emptyList();
       kpiSampleType_ = 0;
     }
 
@@ -178,7 +138,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -190,40 +149,18 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
 
               kpiDescription_ = s;
               break;
             }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiIdList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-              break;
-            }
-            case 32: {
+            case 16: {
               int rawValue = input.readEnum();
 
               kpiSampleType_ = rawValue;
               break;
             }
-            case 42: {
+            case 26: {
               context.ContextOuterClass.DeviceId.Builder subBuilder = null;
               if (deviceId_ != null) {
                 subBuilder = deviceId_.toBuilder();
@@ -236,7 +173,7 @@ public final class Monitoring {
 
               break;
             }
-            case 50: {
+            case 34: {
               context.ContextOuterClass.EndPointId.Builder subBuilder = null;
               if (endpointId_ != null) {
                 subBuilder = endpointId_.toBuilder();
@@ -249,7 +186,7 @@ public final class Monitoring {
 
               break;
             }
-            case 58: {
+            case 42: {
               context.ContextOuterClass.ServiceId.Builder subBuilder = null;
               if (serviceId_ != null) {
                 subBuilder = serviceId_.toBuilder();
@@ -262,7 +199,7 @@ public final class Monitoring {
 
               break;
             }
-            case 66: {
+            case 50: {
               context.ContextOuterClass.SliceId.Builder subBuilder = null;
               if (sliceId_ != null) {
                 subBuilder = sliceId_.toBuilder();
@@ -290,9 +227,6 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -310,36 +244,10 @@ public final class Monitoring {
               monitoring.Monitoring.KpiDescriptor.class, monitoring.Monitoring.KpiDescriptor.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
     private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The kpiDescription.
      */
     @java.lang.Override
@@ -356,7 +264,7 @@ public final class Monitoring {
       }
     }
     /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The bytes for kpiDescription.
      */
     @java.lang.Override
@@ -374,57 +282,17 @@ public final class Monitoring {
       }
     }
 
-    public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-      return kpiIdList_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList() {
-      return kpiIdList_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public int getKpiIdListCount() {
-      return kpiIdList_.size();
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-      return kpiIdList_.get(index);
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-        int index) {
-      return kpiIdList_.get(index);
-    }
-
-    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 2;
     private int kpiSampleType_;
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The enum numeric value on the wire for kpiSampleType.
      */
     @java.lang.Override public int getKpiSampleTypeValue() {
       return kpiSampleType_;
     }
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The kpiSampleType.
      */
     @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
@@ -433,10 +301,10 @@ public final class Monitoring {
       return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 5;
+    public static final int DEVICE_ID_FIELD_NUMBER = 3;
     private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return Whether the deviceId field is set.
      */
     @java.lang.Override
@@ -444,7 +312,7 @@ public final class Monitoring {
       return deviceId_ != null;
     }
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return The deviceId.
      */
     @java.lang.Override
@@ -452,17 +320,17 @@ public final class Monitoring {
       return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
     }
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
       return getDeviceId();
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 4;
     private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return Whether the endpointId field is set.
      */
     @java.lang.Override
@@ -470,7 +338,7 @@ public final class Monitoring {
       return endpointId_ != null;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return The endpointId.
      */
     @java.lang.Override
@@ -478,17 +346,17 @@ public final class Monitoring {
       return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
       return getEndpointId();
     }
 
-    public static final int SERVICE_ID_FIELD_NUMBER = 7;
+    public static final int SERVICE_ID_FIELD_NUMBER = 5;
     private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
     @java.lang.Override
@@ -496,7 +364,7 @@ public final class Monitoring {
       return serviceId_ != null;
     }
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
     @java.lang.Override
@@ -504,17 +372,17 @@ public final class Monitoring {
       return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
       return getServiceId();
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 8;
+    public static final int SLICE_ID_FIELD_NUMBER = 6;
     private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return Whether the sliceId field is set.
      */
     @java.lang.Override
@@ -522,7 +390,7 @@ public final class Monitoring {
       return sliceId_ != null;
     }
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return The sliceId.
      */
     @java.lang.Override
@@ -530,7 +398,7 @@ public final class Monitoring {
       return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
@@ -551,29 +419,23 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
       if (!getKpiDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        output.writeMessage(3, kpiIdList_.get(i));
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
       }
       if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(4, kpiSampleType_);
+        output.writeEnum(2, kpiSampleType_);
       }
       if (deviceId_ != null) {
-        output.writeMessage(5, getDeviceId());
+        output.writeMessage(3, getDeviceId());
       }
       if (endpointId_ != null) {
-        output.writeMessage(6, getEndpointId());
+        output.writeMessage(4, getEndpointId());
       }
       if (serviceId_ != null) {
-        output.writeMessage(7, getServiceId());
+        output.writeMessage(5, getServiceId());
       }
       if (sliceId_ != null) {
-        output.writeMessage(8, getSliceId());
+        output.writeMessage(6, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -584,36 +446,28 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
-      }
       if (!getKpiDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, kpiIdList_.get(i));
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
       }
       if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, kpiSampleType_);
+          .computeEnumSize(2, kpiSampleType_);
       }
       if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getDeviceId());
+          .computeMessageSize(3, getDeviceId());
       }
       if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndpointId());
+          .computeMessageSize(4, getEndpointId());
       }
       if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getServiceId());
+          .computeMessageSize(5, getServiceId());
       }
       if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, getSliceId());
+          .computeMessageSize(6, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -630,15 +484,8 @@ public final class Monitoring {
       }
       monitoring.Monitoring.KpiDescriptor other = (monitoring.Monitoring.KpiDescriptor) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
       if (!getKpiDescription()
           .equals(other.getKpiDescription())) return false;
-      if (!getKpiIdListList()
-          .equals(other.getKpiIdListList())) return false;
       if (kpiSampleType_ != other.kpiSampleType_) return false;
       if (hasDeviceId() != other.hasDeviceId()) return false;
       if (hasDeviceId()) {
@@ -671,16 +518,8 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
       hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
       hash = (53 * hash) + getKpiDescription().hashCode();
-      if (getKpiIdListCount() > 0) {
-        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdListList().hashCode();
-      }
       hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
       hash = (53 * hash) + kpiSampleType_;
       if (hasDeviceId()) {
@@ -827,26 +666,13 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiIdListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
         kpiDescription_ = "";
 
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          kpiIdListBuilder_.clear();
-        }
         kpiSampleType_ = 0;
 
         if (deviceIdBuilder_ == null) {
@@ -899,22 +725,7 @@ public final class Monitoring {
       @java.lang.Override
       public monitoring.Monitoring.KpiDescriptor buildPartial() {
         monitoring.Monitoring.KpiDescriptor result = new monitoring.Monitoring.KpiDescriptor(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
         result.kpiDescription_ = kpiDescription_;
-        if (kpiIdListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiIdList_ = kpiIdList_;
-        } else {
-          result.kpiIdList_ = kpiIdListBuilder_.build();
-        }
         result.kpiSampleType_ = kpiSampleType_;
         if (deviceIdBuilder_ == null) {
           result.deviceId_ = deviceId_;
@@ -984,39 +795,10 @@ public final class Monitoring {
 
       public Builder mergeFrom(monitoring.Monitoring.KpiDescriptor other) {
         if (other == monitoring.Monitoring.KpiDescriptor.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
         if (!other.getKpiDescription().isEmpty()) {
           kpiDescription_ = other.kpiDescription_;
           onChanged();
         }
-        if (kpiIdListBuilder_ == null) {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdList_.isEmpty()) {
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiIdListIsMutable();
-              kpiIdList_.addAll(other.kpiIdList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdListBuilder_.isEmpty()) {
-              kpiIdListBuilder_.dispose();
-              kpiIdListBuilder_ = null;
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdListFieldBuilder() : null;
-            } else {
-              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
-            }
-          }
-        }
         if (other.kpiSampleType_ != 0) {
           setKpiSampleTypeValue(other.getKpiSampleTypeValue());
         }
@@ -1060,130 +842,10 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
-      }
 
       private java.lang.Object kpiDescription_ = "";
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @return The kpiDescription.
        */
       public java.lang.String getKpiDescription() {
@@ -1199,7 +861,7 @@ public final class Monitoring {
         }
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @return The bytes for kpiDescription.
        */
       public com.google.protobuf.ByteString
@@ -1216,7 +878,7 @@ public final class Monitoring {
         }
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @param value The kpiDescription to set.
        * @return This builder for chaining.
        */
@@ -1231,7 +893,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @return This builder for chaining.
        */
       public Builder clearKpiDescription() {
@@ -1241,7 +903,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @param value The bytes for kpiDescription to set.
        * @return This builder for chaining.
        */
@@ -1257,785 +919,545 @@ public final class Monitoring {
         return this;
       }
 
-      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
-          bitField0_ |= 0x00000001;
-         }
+      private int kpiSampleType_ = 0;
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
+       */
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
-
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-        if (kpiIdListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
-        } else {
-          return kpiIdListBuilder_.getMessageList();
-        }
+      public Builder setKpiSampleTypeValue(int value) {
+        
+        kpiSampleType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @return The kpiSampleType.
        */
-      public int getKpiIdListCount() {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.size();
-        } else {
-          return kpiIdListBuilder_.getCount();
+      @java.lang.Override
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @param value The kpiSampleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        
+        kpiSampleType_ = value.getNumber();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);
+      public Builder clearKpiSampleType() {
+        
+        kpiSampleType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 3;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 3;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return kpiIdListBuilder_.getMessage(index);
+          return deviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, value);
+          deviceId_ = value;
           onChanged();
         } else {
-          kpiIdListBuilder_.setMessage(index, value);
+          deviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, builderForValue.build());
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiIdListBuilder_.setMessage(index, builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
           }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(value);
           onChanged();
         } else {
-          kpiIdListBuilder_.addMessage(value);
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, value);
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          kpiIdListBuilder_.addMessage(index, value);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          kpiIdListBuilder_.addMessage(builderForValue.build());
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
         }
-        return this;
+        return deviceIdBuilder_;
       }
+
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * @return Whether the endpointId field is set.
        */
-      public Builder addAllKpiIdList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiIdList_);
-          onChanged();
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          kpiIdListBuilder_.addAllMessages(values);
+          return endpointIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public Builder clearKpiIdList() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
           onChanged();
         } else {
-          kpiIdListBuilder_.clear();
+          endpointIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public Builder removeKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.remove(index);
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiIdListBuilder_.remove(index);
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-          int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);  } else {
-          return kpiIdListBuilder_.getMessageOrBuilder(index);
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdListOrBuilderList() {
-        if (kpiIdListBuilder_ != null) {
-          return kpiIdListBuilder_.getMessageOrBuilderList();
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
-        return getKpiIdListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdListBuilderList() {
-        return getKpiIdListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdListFieldBuilder() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiIdList_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
                   getParentForChildren(),
                   isClean());
-          kpiIdList_ = null;
+          endpointId_ = null;
         }
-        return kpiIdListBuilder_;
+        return endpointIdBuilder_;
       }
 
-      private int kpiSampleType_ = 0;
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return The enum numeric value on the wire for kpiSampleType.
+       * <code>.context.ServiceId service_id = 5;</code>
+       * @return Whether the serviceId field is set.
        */
-      @java.lang.Override public int getKpiSampleTypeValue() {
-        return kpiSampleType_;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @param value The enum numeric value on the wire for kpiSampleType to set.
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 5;</code>
+       * @return The serviceId.
        */
-      public Builder setKpiSampleTypeValue(int value) {
-        
-        kpiSampleType_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return The kpiSampleType.
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      @java.lang.Override
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-        @SuppressWarnings("deprecation")
-        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
-        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @param value The kpiSampleType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        kpiSampleType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleType() {
-        
-        kpiSampleType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
           } else {
-            deviceId_ = value;
+            serviceId_ = value;
           }
           onChanged();
         } else {
-          deviceIdBuilder_.mergeFrom(value);
+          serviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
           onChanged();
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
         
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
                   getParentForChildren(),
                   isClean());
-          deviceId_ = null;
+          serviceId_ = null;
         }
-        return deviceIdBuilder_;
+        return serviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.EndPointId endpointId_;
+      private context.ContextOuterClass.SliceId sliceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       * @return Whether the endpointId field is set.
+       * <code>.context.SliceId slice_id = 6;</code>
+       * @return Whether the sliceId field is set.
        */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       * @return The endpointId.
+       * <code>.context.SliceId slice_id = 6;</code>
+       * @return The sliceId.
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return endpointIdBuilder_.getMessage();
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointId_ = value;
+          sliceId_ = value;
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          sliceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
           } else {
-            endpointId_ = value;
+            sliceId_ = value;
           }
           onChanged();
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          sliceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
         
         onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+        return getSliceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
         } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
                   getParentForChildren(),
                   isClean());
-          endpointId_ = null;
+          sliceId_ = null;
         }
-        return endpointIdBuilder_;
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       * @return The serviceId.
-       */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
-        }
-        return serviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       * @return The sliceId.
-       */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        } else {
-          return sliceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
 
@@ -2079,61 +1501,140 @@ public final class Monitoring {
 
   }
 
-  public interface MonitorKpiRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
+  public interface BundleKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.BundleKpiDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
-    boolean hasKpiId();
+    java.lang.String getKpiDescription();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdListList();
     /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    float getMonitoringWindowS();
-
+    monitoring.Monitoring.KpiId getKpiIdList(int index);
     /**
-     * <pre>
-     * Pending add field to reflect Available Device Protocols
-     * </pre>
-     *
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    float getSamplingRateS();
+    int getKpiIdListCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index);
+
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
+
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return Whether the endpointId field is set.
+     */
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.MonitorKpiRequest}
+   * Protobuf type {@code monitoring.BundleKpiDescriptor}
    */
-  public static final class MonitorKpiRequest extends
+  public static final class BundleKpiDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
-      MonitorKpiRequestOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.BundleKpiDescriptor)
+      BundleKpiDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use MonitorKpiRequest.newBuilder() to construct.
-    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use BundleKpiDescriptor.newBuilder() to construct.
+    private BundleKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private MonitorKpiRequest() {
+    private BundleKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new MonitorKpiRequest();
+      return new BundleKpiDescriptor();
     }
 
     @java.lang.Override
@@ -2141,7 +1642,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private MonitorKpiRequest(
+    private BundleKpiDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2149,6 +1650,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -2160,26 +1662,76 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
+              java.lang.String s = input.readStringRequireUtf8();
+
+              kpiDescription_ = s;
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              kpiIdList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+
+              kpiSampleType_ = rawValue;
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 21: {
+            case 42: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
 
-              monitoringWindowS_ = input.readFloat();
               break;
             }
-            case 29: {
+            case 50: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
 
-              samplingRateS_ = input.readFloat();
               break;
             }
             default: {
@@ -2197,99 +1749,263 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+              monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public java.lang.String getKpiDescription() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        kpiDescription_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public com.google.protobuf.ByteString
+        getKpiDescriptionBytes() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        kpiDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int KPI_ID_LIST_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
     }
-
-    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
-    private float monitoringWindowS_;
     /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public float getMonitoringWindowS() {
-      return monitoringWindowS_;
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
     }
-
-    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
-    private float samplingRateS_;
     /**
-     * <pre>
-     * Pending add field to reflect Available Device Protocols
-     * </pre>
-     *
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public float getSamplingRateS() {
-      return samplingRateS_;
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
     }
-
-    private byte memoizedIsInitialized = -1;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
     @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
     }
-
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
     @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
-      if (monitoringWindowS_ != 0F) {
-        output.writeFloat(2, monitoringWindowS_);
-      }
-      if (samplingRateS_ != 0F) {
-        output.writeFloat(3, samplingRateS_);
-      }
-      unknownFields.writeTo(output);
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
+    }
+
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 3;
+    private int kpiSampleType_;
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    @java.lang.Override public int getKpiSampleTypeValue() {
+      return kpiSampleType_;
+    }
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The kpiSampleType.
+     */
+    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+      @SuppressWarnings("deprecation")
+      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(2, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(3, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(4, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        output.writeMessage(5, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(7, getSliceId());
+      }
+      unknownFields.writeTo(output);
     }
 
     @java.lang.Override
@@ -2298,17 +2014,32 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(2, kpiIdList_.get(i));
       }
-      if (monitoringWindowS_ != 0F) {
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, monitoringWindowS_);
+          .computeEnumSize(3, kpiSampleType_);
       }
-      if (samplingRateS_ != 0F) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingRateS_);
+          .computeMessageSize(4, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -2320,22 +2051,36 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
+      if (!(obj instanceof monitoring.Monitoring.BundleKpiDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
+      monitoring.Monitoring.BundleKpiDescriptor other = (monitoring.Monitoring.BundleKpiDescriptor) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
+      if (!getKpiDescription()
+          .equals(other.getKpiDescription())) return false;
+      if (!getKpiIdListList()
+          .equals(other.getKpiIdListList())) return false;
+      if (kpiSampleType_ != other.kpiSampleType_) return false;
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
       }
-      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
-          != java.lang.Float.floatToIntBits(
-              other.getMonitoringWindowS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingRateS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingRateS())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2347,84 +2092,98 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
+      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getKpiDescription().hashCode();
+      if (getKpiIdListCount() > 0) {
+        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdListList().hashCode();
+      }
+      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + kpiSampleType_;
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
-      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getMonitoringWindowS());
-      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingRateS());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2437,7 +2196,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.BundleKpiDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2453,26 +2212,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.MonitorKpiRequest}
+     * Protobuf type {@code monitoring.BundleKpiDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
-        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.BundleKpiDescriptor)
+        monitoring.Monitoring.BundleKpiDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+                monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
+      // Construct using monitoring.Monitoring.BundleKpiDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2485,38 +2244,63 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiIdListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        monitoringWindowS_ = 0F;
+        kpiDescription_ = "";
 
-        samplingRateS_ = 0F;
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        kpiSampleType_ = 0;
 
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
+      public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest build() {
-        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
+      public monitoring.Monitoring.BundleKpiDescriptor build() {
+        monitoring.Monitoring.BundleKpiDescriptor result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2524,15 +2308,40 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
-        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+      public monitoring.Monitoring.BundleKpiDescriptor buildPartial() {
+        monitoring.Monitoring.BundleKpiDescriptor result = new monitoring.Monitoring.BundleKpiDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        result.kpiDescription_ = kpiDescription_;
+        if (kpiIdListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIdList_ = kpiIdList_;
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          result.kpiIdList_ = kpiIdListBuilder_.build();
+        }
+        result.kpiSampleType_ = kpiSampleType_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
         }
-        result.monitoringWindowS_ = monitoringWindowS_;
-        result.samplingRateS_ = samplingRateS_;
         onBuilt();
         return result;
       }
@@ -2571,24 +2380,60 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
-          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
+        if (other instanceof monitoring.Monitoring.BundleKpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.BundleKpiDescriptor)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
-        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      public Builder mergeFrom(monitoring.Monitoring.BundleKpiDescriptor other) {
+        if (other == monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()) return this;
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
         }
-        if (other.getMonitoringWindowS() != 0F) {
-          setMonitoringWindowS(other.getMonitoringWindowS());
+        if (kpiIdListBuilder_ == null) {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdList_.isEmpty()) {
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdListIsMutable();
+              kpiIdList_.addAll(other.kpiIdList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdListBuilder_.isEmpty()) {
+              kpiIdListBuilder_.dispose();
+              kpiIdListBuilder_ = null;
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdListFieldBuilder() : null;
+            } else {
+              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
+            }
+          }
         }
-        if (other.getSamplingRateS() != 0F) {
-          setSamplingRateS(other.getSamplingRateS());
+        if (other.kpiSampleType_ != 0) {
+          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -2605,11 +2450,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
+        monitoring.Monitoring.BundleKpiDescriptor parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.BundleKpiDescriptor) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2618,377 +2463,1055 @@ public final class Monitoring {
         }
         return this;
       }
+      private int bitField0_;
 
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      private java.lang.Object kpiDescription_ = "";
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>string kpi_description = 1;</code>
+       * @return The kpiDescription.
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      public java.lang.String getKpiDescription() {
+        java.lang.Object ref = kpiDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          kpiDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>string kpi_description = 1;</code>
+       * @return The bytes for kpiDescription.
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+      public com.google.protobuf.ByteString
+          getKpiDescriptionBytes() {
+        java.lang.Object ref = kpiDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          kpiDescription_ = b;
+          return b;
         } else {
-          return kpiIdBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
+      public Builder setKpiDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        kpiDescription_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The bytes for kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
+      public Builder setKpiDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        kpiDescription_ = value;
+        onChanged();
         return this;
       }
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
+
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+        if (kpiIdListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          return kpiIdListBuilder_.getMessageList();
         }
-
-        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          return kpiIdListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addAllKpiIdList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIdList_);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder clearKpiIdList() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder removeKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.remove(index);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+          int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);  } else {
+          return kpiIdListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdListOrBuilderList() {
+        if (kpiIdListBuilder_ != null) {
+          return kpiIdListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
+        return getKpiIdListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdListBuilderList() {
+        return getKpiIdListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
           monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          getKpiIdListFieldBuilder() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
+                  kpiIdList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          kpiId_ = null;
+          kpiIdList_ = null;
         }
-        return kpiIdBuilder_;
+        return kpiIdListBuilder_;
       }
 
-      private float monitoringWindowS_ ;
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return The monitoringWindowS.
-       */
-      @java.lang.Override
-      public float getMonitoringWindowS() {
-        return monitoringWindowS_;
-      }
+      private int kpiSampleType_ = 0;
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @param value The monitoringWindowS to set.
-       * @return This builder for chaining.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
        */
-      public Builder setMonitoringWindowS(float value) {
-        
-        monitoringWindowS_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
       }
       /**
-       * <code>float monitoring_window_s = 2;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
        * @return This builder for chaining.
        */
-      public Builder clearMonitoringWindowS() {
+      public Builder setKpiSampleTypeValue(int value) {
         
-        monitoringWindowS_ = 0F;
+        kpiSampleType_ = value;
         onChanged();
         return this;
       }
-
-      private float samplingRateS_ ;
       /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
-       * @return The samplingRateS.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @return The kpiSampleType.
        */
       @java.lang.Override
-      public float getSamplingRateS() {
-        return samplingRateS_;
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
       }
       /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
-       * @param value The samplingRateS to set.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @param value The kpiSampleType to set.
        * @return This builder for chaining.
        */
-      public Builder setSamplingRateS(float value) {
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
         
-        samplingRateS_ = value;
+        kpiSampleType_ = value.getNumber();
         onChanged();
         return this;
       }
       /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSamplingRateS() {
+      public Builder clearKpiSampleType() {
         
-        samplingRateS_ = 0F;
+        kpiSampleType_ = 0;
         onChanged();
         return this;
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
       }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+        return this;
       }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
 
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
 
-      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
-    }
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
 
-    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
-    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
-    }
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
 
-    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       * @return Whether the endpointId field is set.
+       */
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
 
-    private static final com.google.protobuf.Parser<MonitorKpiRequest>
-        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
-      @java.lang.Override
-      public MonitorKpiRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new MonitorKpiRequest(input, extensionRegistry);
+        return this;
       }
-    };
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
 
-    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
-      return PARSER;
-    }
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
 
-    @java.lang.Override
-    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
-      return PARSER;
-    }
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
 
-    @java.lang.Override
-    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
 
-  }
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
 
-  public interface KpiQueryOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery)
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.BundleKpiDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.BundleKpiDescriptor)
+    private static final monitoring.Monitoring.BundleKpiDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.BundleKpiDescriptor();
+    }
+
+    public static monitoring.Monitoring.BundleKpiDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<BundleKpiDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<BundleKpiDescriptor>() {
+      @java.lang.Override
+      public BundleKpiDescriptor parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new BundleKpiDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<BundleKpiDescriptor> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<BundleKpiDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EditedKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.EditedKpiDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The kpiDescription.
+     */
+    java.lang.String getKpiDescription();
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The bytes for kpiDescription.
+     */
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
     java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdList();
+        getKpiIdListList();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
-    monitoring.Monitoring.KpiId getKpiId(int index);
+    monitoring.Monitoring.KpiId getKpiIdList(int index);
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
-    int getKpiIdCount();
+    int getKpiIdListCount();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
     java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList();
+        getKpiIdListOrBuilderList();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
         int index);
 
     /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
      */
-    float getMonitoringWindowS();
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
 
     /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return Whether the deviceId field is set.
      */
-    float getSamplingRateS();
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
 
     /**
-     * <pre>
-     * used when you want something like "get the last N many samples
-     * </pre>
-     *
-     * <code>uint32 last_n_samples = 4;</code>
-     * @return The lastNSamples.
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return Whether the endpointId field is set.
      */
-    int getLastNSamples();
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
      */
-    boolean hasStartTimestamp();
+    boolean hasServiceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.Timestamp getStartTimestamp();
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder();
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
      */
-    boolean hasEndTimestamp();
+    boolean hasSliceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return The sliceId.
      */
-    context.ContextOuterClass.Timestamp getEndTimestamp();
+    context.ContextOuterClass.SliceId getSliceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder();
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiQuery}
+   * Protobuf type {@code monitoring.EditedKpiDescriptor}
    */
-  public static final class KpiQuery extends
+  public static final class EditedKpiDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiQuery)
-      KpiQueryOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.EditedKpiDescriptor)
+      EditedKpiDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiQuery.newBuilder() to construct.
-    private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EditedKpiDescriptor.newBuilder() to construct.
+    private EditedKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiQuery() {
-      kpiId_ = java.util.Collections.emptyList();
+    private EditedKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiQuery();
+      return new EditedKpiDescriptor();
     }
 
     @java.lang.Override
@@ -2996,7 +3519,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiQuery(
+    private EditedKpiDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -3015,52 +3538,88 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 10: {
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              kpiDescription_ = s;
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiId_.add(
+              kpiIdList_.add(
                   input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
               break;
             }
-            case 21: {
+            case 32: {
+              int rawValue = input.readEnum();
 
-              monitoringWindowS_ = input.readFloat();
+              kpiSampleType_ = rawValue;
               break;
             }
-            case 29: {
+            case 42: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
 
-              samplingRateS_ = input.readFloat();
               break;
             }
-            case 32: {
+            case 50: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
 
-              lastNSamples_ = input.readUInt32();
               break;
             }
-            case 42: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (startTimestamp_ != null) {
-                subBuilder = startTimestamp_.toBuilder();
+            case 58: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
               }
-              startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(startTimestamp_);
-                startTimestamp_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 50: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (endTimestamp_ != null) {
-                subBuilder = endTimestamp_.toBuilder();
+            case 66: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
               }
-              endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endTimestamp_);
-                endTimestamp_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -3081,7 +3640,7 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -3089,1280 +3648,1732 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+              monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
+    private volatile java.lang.Object kpiDescription_;
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The kpiDescription.
+     */
+    @java.lang.Override
+    public java.lang.String getKpiDescription() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        kpiDescription_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The bytes for kpiDescription.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getKpiDescriptionBytes() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        kpiDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
+    }
+
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
+    private int kpiSampleType_;
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    @java.lang.Override public int getKpiSampleTypeValue() {
+      return kpiSampleType_;
+    }
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The kpiSampleType.
+     */
+    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+      @SuppressWarnings("deprecation")
+      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-      return kpiId_;
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList() {
-      return kpiId_;
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
      */
     @java.lang.Override
-    public int getKpiIdCount() {
-      return kpiId_.size();
+    public boolean hasSliceId() {
+      return sliceId_ != null;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return The sliceId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId(int index) {
-      return kpiId_.get(index);
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index) {
-      return kpiId_.get(index);
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
-    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
-    private float monitoringWindowS_;
-    /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
-     */
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public float getMonitoringWindowS() {
-      return monitoringWindowS_;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
 
-    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
-    private float samplingRateS_;
-    /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
     @java.lang.Override
-    public float getSamplingRateS() {
-      return samplingRateS_;
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(3, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(4, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(5, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        output.writeMessage(6, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(7, getServiceId());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(8, getSliceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getServiceId());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getSliceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.EditedKpiDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.EditedKpiDescriptor other = (monitoring.Monitoring.EditedKpiDescriptor) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!getKpiDescription()
+          .equals(other.getKpiDescription())) return false;
+      if (!getKpiIdListList()
+          .equals(other.getKpiIdListList())) return false;
+      if (kpiSampleType_ != other.kpiSampleType_) return false;
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getKpiDescription().hashCode();
+      if (getKpiIdListCount() > 0) {
+        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdListList().hashCode();
+      }
+      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + kpiSampleType_;
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-
-    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
-    private int lastNSamples_;
-    /**
-     * <pre>
-     * used when you want something like "get the last N many samples
-     * </pre>
-     *
-     * <code>uint32 last_n_samples = 4;</code>
-     * @return The lastNSamples.
-     */
-    @java.lang.Override
-    public int getLastNSamples() {
-      return lastNSamples_;
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.Timestamp startTimestamp_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
-     */
     @java.lang.Override
-    public boolean hasStartTimestamp() {
-      return startTimestamp_ != null;
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
     }
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getStartTimestamp() {
-      return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+    public static Builder newBuilder(monitoring.Monitoring.EditedKpiDescriptor prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-      return getStartTimestamp();
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
     }
 
-    public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.Timestamp endTimestamp_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndTimestamp() {
-      return endTimestamp_ != null;
-    }
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
-     */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getEndTimestamp() {
-      return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * Protobuf type {@code monitoring.EditedKpiDescriptor}
      */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-      return getEndTimestamp();
-    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.EditedKpiDescriptor)
+        monitoring.Monitoring.EditedKpiDescriptorOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
+      }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
+      }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+      // Construct using monitoring.Monitoring.EditedKpiDescriptor.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < kpiId_.size(); i++) {
-        output.writeMessage(1, kpiId_.get(i));
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      if (monitoringWindowS_ != 0F) {
-        output.writeFloat(2, monitoringWindowS_);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiIdListFieldBuilder();
+        }
       }
-      if (samplingRateS_ != 0F) {
-        output.writeFloat(3, samplingRateS_);
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        kpiDescription_ = "";
+
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        kpiSampleType_ = 0;
+
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+        return this;
       }
-      if (lastNSamples_ != 0) {
-        output.writeUInt32(4, lastNSamples_);
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
       }
-      if (startTimestamp_ != null) {
-        output.writeMessage(5, getStartTimestamp());
+
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance();
       }
-      if (endTimestamp_ != null) {
-        output.writeMessage(6, getEndTimestamp());
+
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor build() {
+        monitoring.Monitoring.EditedKpiDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
       }
-      unknownFields.writeTo(output);
-    }
 
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor buildPartial() {
+        monitoring.Monitoring.EditedKpiDescriptor result = new monitoring.Monitoring.EditedKpiDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.kpiDescription_ = kpiDescription_;
+        if (kpiIdListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIdList_ = kpiIdList_;
+        } else {
+          result.kpiIdList_ = kpiIdListBuilder_.build();
+        }
+        result.kpiSampleType_ = kpiSampleType_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
 
-      size = 0;
-      for (int i = 0; i < kpiId_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiId_.get(i));
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      if (monitoringWindowS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, monitoringWindowS_);
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      if (samplingRateS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingRateS_);
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      if (lastNSamples_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, lastNSamples_);
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      if (startTimestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getStartTimestamp());
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      if (endTimestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndTimestamp());
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.EditedKpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.EditedKpiDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
 
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof monitoring.Monitoring.KpiQuery)) {
-        return super.equals(obj);
+      public Builder mergeFrom(monitoring.Monitoring.EditedKpiDescriptor other) {
+        if (other == monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
+        }
+        if (kpiIdListBuilder_ == null) {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdList_.isEmpty()) {
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdListIsMutable();
+              kpiIdList_.addAll(other.kpiIdList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdListBuilder_.isEmpty()) {
+              kpiIdListBuilder_.dispose();
+              kpiIdListBuilder_ = null;
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdListFieldBuilder() : null;
+            } else {
+              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
+            }
+          }
+        }
+        if (other.kpiSampleType_ != 0) {
+          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-      monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
 
-      if (!getKpiIdList()
-          .equals(other.getKpiIdList())) return false;
-      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
-          != java.lang.Float.floatToIntBits(
-              other.getMonitoringWindowS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingRateS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingRateS())) return false;
-      if (getLastNSamples()
-          != other.getLastNSamples()) return false;
-      if (hasStartTimestamp() != other.hasStartTimestamp()) return false;
-      if (hasStartTimestamp()) {
-        if (!getStartTimestamp()
-            .equals(other.getStartTimestamp())) return false;
-      }
-      if (hasEndTimestamp() != other.hasEndTimestamp()) return false;
-      if (hasEndTimestamp()) {
-        if (!getEndTimestamp()
-            .equals(other.getEndTimestamp())) return false;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
 
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiIdCount() > 0) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdList().hashCode();
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.EditedKpiDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.EditedKpiDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
-      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getMonitoringWindowS());
-      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingRateS());
-      hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
-      hash = (53 * hash) + getLastNSamples();
-      if (hasStartTimestamp()) {
-        hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getStartTimestamp().hashCode();
+      private int bitField0_;
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
-      if (hasEndTimestamp()) {
-        hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getEndTimestamp().hashCode();
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.KpiQuery prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.KpiQuery}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiQuery)
-        monitoring.Monitoring.KpiQueryOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
       }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+        return this;
       }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
 
-      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+        return this;
       }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+        return this;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getKpiIdFieldBuilder();
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
         if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private java.lang.Object kpiDescription_ = "";
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return The kpiDescription.
+       */
+      public java.lang.String getKpiDescription() {
+        java.lang.Object ref = kpiDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          kpiDescription_ = s;
+          return s;
         } else {
-          kpiIdBuilder_.clear();
+          return (java.lang.String) ref;
         }
-        monitoringWindowS_ = 0F;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return The bytes for kpiDescription.
+       */
+      public com.google.protobuf.ByteString
+          getKpiDescriptionBytes() {
+        java.lang.Object ref = kpiDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          kpiDescription_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @param value The kpiDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        kpiDescription_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @param value The bytes for kpiDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        kpiDescription_ = value;
+        onChanged();
+        return this;
+      }
 
-        samplingRateS_ = 0F;
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
 
-        lastNSamples_ = 0;
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
 
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+        if (kpiIdListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        } else {
+          return kpiIdListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);
+        } else {
+          return kpiIdListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, builderForValue.build());
+          onChanged();
         } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
+          kpiIdListBuilder_.setMessage(index, builderForValue.build());
         }
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(value);
+          onChanged();
         } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
+          kpiIdListBuilder_.addMessage(value);
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiQuery.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery build() {
-        monitoring.Monitoring.KpiQuery result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery buildPartial() {
-        monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiIdBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          result.kpiId_ = kpiId_;
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, value);
+          onChanged();
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          kpiIdListBuilder_.addMessage(index, value);
         }
-        result.monitoringWindowS_ = monitoringWindowS_;
-        result.samplingRateS_ = samplingRateS_;
-        result.lastNSamples_ = lastNSamples_;
-        if (startTimestampBuilder_ == null) {
-          result.startTimestamp_ = startTimestamp_;
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(builderForValue.build());
+          onChanged();
         } else {
-          result.startTimestamp_ = startTimestampBuilder_.build();
+          kpiIdListBuilder_.addMessage(builderForValue.build());
         }
-        if (endTimestampBuilder_ == null) {
-          result.endTimestamp_ = endTimestamp_;
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          result.endTimestamp_ = endTimestampBuilder_.build();
+          kpiIdListBuilder_.addMessage(index, builderForValue.build());
         }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiQuery) {
-          return mergeFrom((monitoring.Monitoring.KpiQuery)other);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addAllKpiIdList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIdList_);
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          kpiIdListBuilder_.addAllMessages(values);
         }
+        return this;
       }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
-        if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
-        if (kpiIdBuilder_ == null) {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiId_.isEmpty()) {
-              kpiId_ = other.kpiId_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiIdIsMutable();
-              kpiId_.addAll(other.kpiId_);
-            }
-            onChanged();
-          }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder clearKpiIdList() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiIdBuilder_.isEmpty()) {
-              kpiIdBuilder_.dispose();
-              kpiIdBuilder_ = null;
-              kpiId_ = other.kpiId_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdFieldBuilder() : null;
-            } else {
-              kpiIdBuilder_.addAllMessages(other.kpiId_);
-            }
-          }
-        }
-        if (other.getMonitoringWindowS() != 0F) {
-          setMonitoringWindowS(other.getMonitoringWindowS());
-        }
-        if (other.getSamplingRateS() != 0F) {
-          setSamplingRateS(other.getSamplingRateS());
-        }
-        if (other.getLastNSamples() != 0) {
-          setLastNSamples(other.getLastNSamples());
-        }
-        if (other.hasStartTimestamp()) {
-          mergeStartTimestamp(other.getStartTimestamp());
+          kpiIdListBuilder_.clear();
         }
-        if (other.hasEndTimestamp()) {
-          mergeEndTimestamp(other.getEndTimestamp());
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder removeKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.remove(index);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.remove(index);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().getBuilder(index);
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.KpiQuery parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+          int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);  } else {
+          return kpiIdListBuilder_.getMessageOrBuilder(index);
         }
-        return this;
       }
-      private int bitField0_;
-
-      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
-          bitField0_ |= 0x00000001;
-         }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdListOrBuilderList() {
+        if (kpiIdListBuilder_ != null) {
+          return kpiIdListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
+        return getKpiIdListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-        if (kpiIdBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiId_);
-        } else {
-          return kpiIdBuilder_.getMessageList();
-        }
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public int getKpiIdCount() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.size();
-        } else {
-          return kpiIdBuilder_.getCount();
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdListBuilderList() {
+        return getKpiIdListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdListFieldBuilder() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiIdList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiIdList_ = null;
         }
+        return kpiIdListBuilder_;
       }
+
+      private int kpiSampleType_ = 0;
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
        */
-      public monitoring.Monitoring.KpiId getKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);
-        } else {
-          return kpiIdBuilder_.getMessage(index);
-        }
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, value);
-        }
+      public Builder setKpiSampleTypeValue(int value) {
+        
+        kpiSampleType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The kpiSampleType.
        */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The kpiSampleType to set.
+       * @return This builder for chaining.
        */
-      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(value);
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        
+        kpiSampleType_ = value.getNumber();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(index, value);
-        }
+      public Builder clearKpiSampleType() {
+        
+        kpiSampleType_ = 0;
+        onChanged();
         return this;
       }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return Whether the deviceId field is set.
        */
-      public Builder addKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return The deviceId.
        */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          kpiIdBuilder_.addMessage(index, builderForValue.build());
+          return deviceIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder addAllKpiId(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiId_);
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
           onChanged();
         } else {
-          kpiIdBuilder_.addAllMessages(values);
+          deviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiIdBuilder_.clear();
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder removeKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.remove(index);
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
           onChanged();
         } else {
-          kpiIdBuilder_.remove(index);
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-          int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);  } else {
-          return kpiIdBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdOrBuilderList() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilderList();
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(kpiId_);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
-        return getKpiIdFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdBuilderList() {
-        return getKpiIdFieldBuilder().getBuilderList();
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiId_,
-                  ((bitField0_ & 0x00000001) != 0),
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
                   getParentForChildren(),
                   isClean());
-          kpiId_ = null;
+          deviceId_ = null;
         }
-        return kpiIdBuilder_;
+        return deviceIdBuilder_;
       }
 
-      private float monitoringWindowS_ ;
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return The monitoringWindowS.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return Whether the endpointId field is set.
        */
-      @java.lang.Override
-      public float getMonitoringWindowS() {
-        return monitoringWindowS_;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @param value The monitoringWindowS to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return The endpointId.
        */
-      public Builder setMonitoringWindowS(float value) {
-        
-        monitoringWindowS_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
       }
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder clearMonitoringWindowS() {
-        
-        monitoringWindowS_ = 0F;
-        onChanged();
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
-
-      private float samplingRateS_ ;
       /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return The samplingRateS.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      @java.lang.Override
-      public float getSamplingRateS() {
-        return samplingRateS_;
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @param value The samplingRateS to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder setSamplingRateS(float value) {
-        
-        samplingRateS_ = value;
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder clearSamplingRateS() {
-        
-        samplingRateS_ = 0F;
-        onChanged();
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
         return this;
       }
-
-      private int lastNSamples_ ;
       /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @return The lastNSamples.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      @java.lang.Override
-      public int getLastNSamples() {
-        return lastNSamples_;
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @param value The lastNSamples to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder setLastNSamples(int value) {
-        
-        lastNSamples_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
       }
       /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder clearLastNSamples() {
-        
-        lastNSamples_ = 0;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.Timestamp startTimestamp_;
+      private context.ContextOuterClass.ServiceId serviceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> startTimestampBuilder_;
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return Whether the startTimestamp field is set.
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return Whether the serviceId field is set.
        */
-      public boolean hasStartTimestamp() {
-        return startTimestampBuilder_ != null || startTimestamp_ != null;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return The startTimestamp.
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return The serviceId.
        */
-      public context.ContextOuterClass.Timestamp getStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          return startTimestampBuilder_.getMessage();
+          return serviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          startTimestamp_ = value;
+          serviceId_ = value;
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(value);
+          serviceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder setStartTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = builderForValue.build();
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(builderForValue.build());
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
-          if (startTimestamp_ != null) {
-            startTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
           } else {
-            startTimestamp_ = value;
+            serviceId_ = value;
           }
           onChanged();
         } else {
-          startTimestampBuilder_.mergeFrom(value);
+          serviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder clearStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
           onChanged();
         } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
         
         onChanged();
-        return getStartTimestampFieldBuilder().getBuilder();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-        if (startTimestampBuilder_ != null) {
-          return startTimestampBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return startTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getStartTimestampFieldBuilder() {
-        if (startTimestampBuilder_ == null) {
-          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getStartTimestamp(),
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
                   getParentForChildren(),
                   isClean());
-          startTimestamp_ = null;
+          serviceId_ = null;
         }
-        return startTimestampBuilder_;
+        return serviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.Timestamp endTimestamp_;
+      private context.ContextOuterClass.SliceId sliceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return Whether the endTimestamp field is set.
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return Whether the sliceId field is set.
        */
-      public boolean hasEndTimestamp() {
-        return endTimestampBuilder_ != null || endTimestamp_ != null;
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return The endTimestamp.
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return The sliceId.
        */
-      public context.ContextOuterClass.Timestamp getEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return endTimestampBuilder_.getMessage();
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endTimestamp_ = value;
+          sliceId_ = value;
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(value);
+          sliceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder setEndTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = builderForValue.build();
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(builderForValue.build());
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
-          if (endTimestamp_ != null) {
-            endTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
           } else {
-            endTimestamp_ = value;
+            sliceId_ = value;
           }
           onChanged();
         } else {
-          endTimestampBuilder_.mergeFrom(value);
+          sliceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder clearEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
         
         onChanged();
-        return getEndTimestampFieldBuilder().getBuilder();
+        return getSliceIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-        if (endTimestampBuilder_ != null) {
-          return endTimestampBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
         } else {
-          return endTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getEndTimestampFieldBuilder() {
-        if (endTimestampBuilder_ == null) {
-          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getEndTimestamp(),
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
                   getParentForChildren(),
                   isClean());
-          endTimestamp_ = null;
+          sliceId_ = null;
         }
-        return endTimestampBuilder_;
+        return sliceIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -4377,85 +5388,101 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
+      // @@protoc_insertion_point(builder_scope:monitoring.EditedKpiDescriptor)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
-    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.EditedKpiDescriptor)
+    private static final monitoring.Monitoring.EditedKpiDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.EditedKpiDescriptor();
     }
 
-    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
+    public static monitoring.Monitoring.EditedKpiDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiQuery>
-        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
+    private static final com.google.protobuf.Parser<EditedKpiDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<EditedKpiDescriptor>() {
       @java.lang.Override
-      public KpiQuery parsePartialFrom(
+      public EditedKpiDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiQuery(input, extensionRegistry);
+        return new EditedKpiDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiQuery> parser() {
+    public static com.google.protobuf.Parser<EditedKpiDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
+    public com.google.protobuf.Parser<EditedKpiDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+    public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
+  public interface MonitorKpiRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return Whether the kpiId field is set.
      */
     boolean hasKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return The kpiId.
      */
-    context.ContextOuterClass.Uuid getKpiId();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    float getMonitoringWindowS();
+
+    /**
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    float getSamplingRateS();
   }
   /**
-   * Protobuf type {@code monitoring.KpiId}
+   * Protobuf type {@code monitoring.MonitorKpiRequest}
    */
-  public static final class KpiId extends
+  public static final class MonitorKpiRequest extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
-      KpiIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
+      MonitorKpiRequestOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiId.newBuilder() to construct.
-    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use MonitorKpiRequest.newBuilder() to construct.
+    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiId() {
+    private MonitorKpiRequest() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiId();
+      return new MonitorKpiRequest();
     }
 
     @java.lang.Override
@@ -4463,7 +5490,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiId(
+    private MonitorKpiRequest(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4482,11 +5509,11 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
               if (kpiId_ != null) {
                 subBuilder = kpiId_.toBuilder();
               }
-              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(kpiId_);
                 kpiId_ = subBuilder.buildPartial();
@@ -4494,6 +5521,16 @@ public final class Monitoring {
 
               break;
             }
+            case 21: {
+
+              monitoringWindowS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingRateS_ = input.readFloat();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4515,21 +5552,21 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid kpiId_;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return Whether the kpiId field is set.
      */
     @java.lang.Override
@@ -4537,21 +5574,47 @@ public final class Monitoring {
       return kpiId_ != null;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return The kpiId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getKpiId() {
-      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
       return getKpiId();
     }
 
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    @java.lang.Override
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
+    }
+
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
+    /**
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    @java.lang.Override
+    public float getSamplingRateS() {
+      return samplingRateS_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -4569,6 +5632,12 @@ public final class Monitoring {
       if (kpiId_ != null) {
         output.writeMessage(1, getKpiId());
       }
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -4582,6 +5651,14 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getKpiId());
       }
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingRateS_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -4592,16 +5669,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
+      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
 
       if (hasKpiId() != other.hasKpiId()) return false;
       if (hasKpiId()) {
         if (!getKpiId()
             .equals(other.getKpiId())) return false;
       }
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4617,74 +5700,80 @@ public final class Monitoring {
         hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
         hash = (53 * hash) + getKpiId().hashCode();
       }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -4697,7 +5786,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -4713,26 +5802,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiId}
+     * Protobuf type {@code monitoring.MonitorKpiRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
-        monitoring.Monitoring.KpiIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
+        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiId.newBuilder()
+      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -4756,23 +5845,27 @@ public final class Monitoring {
           kpiId_ = null;
           kpiIdBuilder_ = null;
         }
+        monitoringWindowS_ = 0F;
+
+        samplingRateS_ = 0F;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiId.getDefaultInstance();
+      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId build() {
-        monitoring.Monitoring.KpiId result = buildPartial();
+      public monitoring.Monitoring.MonitorKpiRequest build() {
+        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -4780,13 +5873,15 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId buildPartial() {
-        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
+        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
         if (kpiIdBuilder_ == null) {
           result.kpiId_ = kpiId_;
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
         onBuilt();
         return result;
       }
@@ -4825,19 +5920,25 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiId) {
-          return mergeFrom((monitoring.Monitoring.KpiId)other);
+        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
+          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
-        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
+      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
+        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
         if (other.hasKpiId()) {
           mergeKpiId(other.getKpiId());
         }
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
+        }
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -4853,11 +5954,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiId parsedMessage = null;
+        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -4867,31 +5968,31 @@ public final class Monitoring {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid kpiId_;
+      private monitoring.Monitoring.KpiId kpiId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        * @return Whether the kpiId field is set.
        */
       public boolean hasKpiId() {
         return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        * @return The kpiId.
        */
-      public context.ContextOuterClass.Uuid getKpiId() {
+      public monitoring.Monitoring.KpiId getKpiId() {
         if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
           return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -4905,10 +6006,10 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder setKpiId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
           kpiId_ = builderForValue.build();
           onChanged();
@@ -4919,13 +6020,13 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (kpiId_ != null) {
             kpiId_ =
-              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
           } else {
             kpiId_ = value;
           }
@@ -4937,7 +6038,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder clearKpiId() {
         if (kpiIdBuilder_ == null) {
@@ -4951,33 +6052,33 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
         
         onChanged();
         return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
         if (kpiIdBuilder_ != null) {
           return kpiIdBuilder_.getMessageOrBuilder();
         } else {
           return kpiId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
           getKpiIdFieldBuilder() {
         if (kpiIdBuilder_ == null) {
           kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
                   getKpiId(),
                   getParentForChildren(),
                   isClean());
@@ -4985,6 +6086,80 @@ public final class Monitoring {
         }
         return kpiIdBuilder_;
       }
+
+      private float monitoringWindowS_ ;
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
+       */
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMonitoringWindowS(float value) {
+        
+        monitoringWindowS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingRateS_ ;
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
+      }
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingRateS(float value) {
+        
+        samplingRateS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingRateS() {
+        
+        samplingRateS_ = 0F;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -4998,115 +6173,159 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
+      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
-    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
+    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
     }
 
-    public static monitoring.Monitoring.KpiId getDefaultInstance() {
+    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiId>
-        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
+    private static final com.google.protobuf.Parser<MonitorKpiRequest>
+        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
       @java.lang.Override
-      public KpiId parsePartialFrom(
+      public MonitorKpiRequest parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiId(input, extensionRegistry);
+        return new MonitorKpiRequest(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiId> parser() {
+    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiId> getParserForType() {
+    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
+  public interface KpiQueryOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    boolean hasKpiId();
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdList();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiId getKpiId(int index);
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    int getKpiIdCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index);
 
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return Whether the timestamp field is set.
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
-    boolean hasTimestamp();
+    float getMonitoringWindowS();
+
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return The timestamp.
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
-    context.ContextOuterClass.Timestamp getTimestamp();
+    float getSamplingRateS();
+
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
      */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+    int getLastNSamples();
 
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return Whether the kpiValue field is set.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The startDate.
      */
-    boolean hasKpiValue();
+    java.lang.String getStartDate();
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return The kpiValue.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The bytes for startDate.
      */
-    monitoring.Monitoring.KpiValue getKpiValue();
+    com.google.protobuf.ByteString
+        getStartDateBytes();
+
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The endDate.
      */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+    java.lang.String getEndDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The bytes for endDate.
+     */
+    com.google.protobuf.ByteString
+        getEndDateBytes();
   }
   /**
-   * Protobuf type {@code monitoring.Kpi}
+   * Protobuf type {@code monitoring.KpiQuery}
    */
-  public static final class Kpi extends
+  public static final class KpiQuery extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
-      KpiOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiQuery)
+      KpiQueryOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Kpi.newBuilder() to construct.
-    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiQuery.newBuilder() to construct.
+    private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Kpi() {
+    private KpiQuery() {
+      kpiId_ = java.util.Collections.emptyList();
+      startDate_ = "";
+      endDate_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Kpi();
+      return new KpiQuery();
     }
 
     @java.lang.Override
@@ -5114,7 +6333,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Kpi(
+    private KpiQuery(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -5122,6 +6341,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -5133,42 +6353,39 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
               }
+              kpiId_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 21: {
 
+              monitoringWindowS_ = input.readFloat();
               break;
             }
-            case 18: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
+            case 29: {
 
+              samplingRateS_ = input.readFloat();
               break;
             }
-            case 26: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiValue_ != null) {
-                subBuilder = kpiValue_.toBuilder();
-              }
-              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiValue_);
-                kpiValue_ = subBuilder.buildPartial();
-              }
+            case 32: {
+
+              lastNSamples_ = input.readUInt32();
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              startDate_ = s;
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
 
+              endDate_ = s;
               break;
             }
             default: {
@@ -5186,99 +6403,193 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+              monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+      return kpiId_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList() {
+      return kpiId_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public int getKpiIdCount() {
+      return kpiId_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId(int index) {
+      return kpiId_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index) {
+      return kpiId_.get(index);
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Timestamp timestamp_;
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return Whether the timestamp field is set.
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
     @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
     }
+
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return The timestamp.
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    public float getSamplingRateS() {
+      return samplingRateS_;
     }
+
+    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
+    private int lastNSamples_;
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
+    public int getLastNSamples() {
+      return lastNSamples_;
     }
 
-    public static final int KPI_VALUE_FIELD_NUMBER = 3;
-    private monitoring.Monitoring.KpiValue kpiValue_;
+    public static final int START_DATE_FIELD_NUMBER = 5;
+    private volatile java.lang.Object startDate_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return Whether the kpiValue field is set.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The startDate.
      */
     @java.lang.Override
-    public boolean hasKpiValue() {
-      return kpiValue_ != null;
+    public java.lang.String getStartDate() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        startDate_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return The kpiValue.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The bytes for startDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiValue() {
-      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    public com.google.protobuf.ByteString
+        getStartDateBytes() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        startDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int END_DATE_FIELD_NUMBER = 6;
+    private volatile java.lang.Object endDate_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The endDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-      return getKpiValue();
+    public java.lang.String getEndDate() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The bytes for endDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndDateBytes() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -5295,14 +6606,23 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
+      for (int i = 0; i < kpiId_.size(); i++) {
+        output.writeMessage(1, kpiId_.get(i));
       }
-      if (timestamp_ != null) {
-        output.writeMessage(2, getTimestamp());
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
       }
-      if (kpiValue_ != null) {
-        output.writeMessage(3, getKpiValue());
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
+      if (lastNSamples_ != 0) {
+        output.writeUInt32(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, endDate_);
       }
       unknownFields.writeTo(output);
     }
@@ -5313,17 +6633,27 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      for (int i = 0; i < kpiId_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(1, kpiId_.get(i));
+      }
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
       }
-      if (timestamp_ != null) {
+      if (samplingRateS_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getTimestamp());
+          .computeFloatSize(3, samplingRateS_);
       }
-      if (kpiValue_ != null) {
+      if (lastNSamples_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getKpiValue());
+          .computeUInt32Size(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, endDate_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -5335,26 +6665,25 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiQuery)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
+      monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
-      }
-      if (hasKpiValue() != other.hasKpiValue()) return false;
-      if (hasKpiValue()) {
-        if (!getKpiValue()
-            .equals(other.getKpiValue())) return false;
-      }
+      if (!getKpiIdList()
+          .equals(other.getKpiIdList())) return false;
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
+      if (getLastNSamples()
+          != other.getLastNSamples()) return false;
+      if (!getStartDate()
+          .equals(other.getStartDate())) return false;
+      if (!getEndDate()
+          .equals(other.getEndDate())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -5366,86 +6695,90 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
+      if (getKpiIdCount() > 0) {
         hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
-      }
-      if (hasKpiValue()) {
-        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiValue().hashCode();
+        hash = (53 * hash) + getKpiIdList().hashCode();
       }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
+      hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
+      hash = (53 * hash) + getLastNSamples();
+      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getStartDate().hashCode();
+      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndDate().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5458,7 +6791,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiQuery prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5474,26 +6807,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.Kpi}
+     * Protobuf type {@code monitoring.KpiQuery}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
-        monitoring.Monitoring.KpiOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiQuery)
+        monitoring.Monitoring.KpiQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+                monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.Kpi.newBuilder()
+      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5506,46 +6839,45 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiIdFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
         if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          kpiIdBuilder_.clear();
         }
+        monitoringWindowS_ = 0F;
+
+        samplingRateS_ = 0F;
+
+        lastNSamples_ = 0;
+
+        startDate_ = "";
+
+        endDate_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
-        return monitoring.Monitoring.Kpi.getDefaultInstance();
+      public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiQuery.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi build() {
-        monitoring.Monitoring.Kpi result = buildPartial();
+      public monitoring.Monitoring.KpiQuery build() {
+        monitoring.Monitoring.KpiQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5553,23 +6885,23 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi buildPartial() {
-        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
+      public monitoring.Monitoring.KpiQuery buildPartial() {
+        monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
+        int from_bitField0_ = bitField0_;
         if (kpiIdBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
           result.kpiId_ = kpiId_;
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
-        } else {
-          result.timestamp_ = timestampBuilder_.build();
-        }
-        if (kpiValueBuilder_ == null) {
-          result.kpiValue_ = kpiValue_;
-        } else {
-          result.kpiValue_ = kpiValueBuilder_.build();
-        }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
+        result.lastNSamples_ = lastNSamples_;
+        result.startDate_ = startDate_;
+        result.endDate_ = endDate_;
         onBuilt();
         return result;
       }
@@ -5608,24 +6940,58 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.Kpi) {
-          return mergeFrom((monitoring.Monitoring.Kpi)other);
+        if (other instanceof monitoring.Monitoring.KpiQuery) {
+          return mergeFrom((monitoring.Monitoring.KpiQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
-        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
+        if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
+        if (kpiIdBuilder_ == null) {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiId_.isEmpty()) {
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdIsMutable();
+              kpiId_.addAll(other.kpiId_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiIdBuilder_.isEmpty()) {
+              kpiIdBuilder_.dispose();
+              kpiIdBuilder_ = null;
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdFieldBuilder() : null;
+            } else {
+              kpiIdBuilder_.addAllMessages(other.kpiId_);
+            }
+          }
         }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
         }
-        if (other.hasKpiValue()) {
-          mergeKpiValue(other.getKpiValue());
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
+        if (other.getLastNSamples() != 0) {
+          setLastNSamples(other.getLastNSamples());
+        }
+        if (!other.getStartDate().isEmpty()) {
+          startDate_ = other.startDate_;
+          onChanged();
+        }
+        if (!other.getEndDate().isEmpty()) {
+          endDate_ = other.endDate_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -5642,11 +7008,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.Kpi parsedMessage = null;
+        monitoring.Monitoring.KpiQuery parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -5655,119 +7021,241 @@ public final class Monitoring {
         }
         return this;
       }
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+        if (kpiIdBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        } else {
+          return kpiIdBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public int getKpiIdCount() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.size();
+        } else {
+          return kpiIdBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);
+        } else {
+          return kpiIdBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
+      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(value);
+          onChanged();
         } else {
-          return kpiIdBuilder_.getMessage();
+          kpiIdBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiId_ = value;
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, value);
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(value);
+          kpiIdBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiId(
+      public Builder addKpiId(
           monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
+          ensureKpiIdIsMutable();
+          kpiId_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
+          kpiIdBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiIdBuilder_.mergeFrom(value);
+          kpiIdBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addAllKpiId(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiId_);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder clearKpiId() {
         if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiIdBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      public Builder removeKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.remove(index);
+          onChanged();
+        } else {
+          kpiIdBuilder_.remove(index);
+        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+          int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);  } else {
+          return kpiIdBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdOrBuilderList() {
         if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+          return kpiIdBuilder_.getMessageOrBuilderList();
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          return java.util.Collections.unmodifiableList(kpiId_);
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
+        return getKpiIdFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdBuilderList() {
+        return getKpiIdFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
           monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
           getKpiIdFieldBuilder() {
         if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
+                  kpiId_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
           kpiId_ = null;
@@ -5775,242 +7263,301 @@ public final class Monitoring {
         return kpiIdBuilder_;
       }
 
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      private float monitoringWindowS_ ;
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
-       * @return Whether the timestamp field is set.
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
        */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
-       * @return The timestamp.
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        } else {
-          return timestampBuilder_.getMessage();
-        }
+      public Builder setMonitoringWindowS(float value) {
+        
+        monitoringWindowS_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(value);
-        }
-
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private float samplingRateS_ ;
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
+      }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
+       * @return This builder for chaining.
        */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder setSamplingRateS(float value) {
+        
+        samplingRateS_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <code>float sampling_rate_s = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
-          onChanged();
-        } else {
-          timestampBuilder_.mergeFrom(value);
-        }
-
+      public Builder clearSamplingRateS() {
+        
+        samplingRateS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private int lastNSamples_ ;
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return The lastNSamples.
        */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-          onChanged();
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
-
+      @java.lang.Override
+      public int getLastNSamples() {
+        return lastNSamples_;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @param value The lastNSamples to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLastNSamples(int value) {
+        
+        lastNSamples_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+      public Builder clearLastNSamples() {
         
+        lastNSamples_ = 0;
         onChanged();
-        return getTimestampFieldBuilder().getBuilder();
+        return this;
       }
+
+      private java.lang.Object startDate_ = "";
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return The startDate.
        */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
+      public java.lang.String getStartDate() {
+        java.lang.Object ref = startDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          startDate_ = s;
+          return s;
         } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return The bytes for startDate.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          timestamp_ = null;
+      public com.google.protobuf.ByteString
+          getStartDateBytes() {
+        java.lang.Object ref = startDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          startDate_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
-        return timestampBuilder_;
       }
-
-      private monitoring.Monitoring.KpiValue kpiValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       * @return Whether the kpiValue field is set.
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @param value The startDate to set.
+       * @return This builder for chaining.
        */
-      public boolean hasKpiValue() {
-        return kpiValueBuilder_ != null || kpiValue_ != null;
+      public Builder setStartDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        startDate_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       * @return The kpiValue.
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiValue getKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
-        } else {
-          return kpiValueBuilder_.getMessage();
-        }
+      public Builder clearStartDate() {
+        
+        startDate_ = getDefaultInstance().getStartDate();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @param value The bytes for startDate to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiValue_ = value;
-          onChanged();
-        } else {
-          kpiValueBuilder_.setMessage(value);
-        }
-
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object endDate_ = "";
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return The endDate.
        */
-      public Builder setKpiValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = builderForValue.build();
-          onChanged();
+      public java.lang.String getEndDate() {
+        java.lang.Object ref = endDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endDate_ = s;
+          return s;
         } else {
-          kpiValueBuilder_.setMessage(builderForValue.build());
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return The bytes for endDate.
        */
-      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
-          if (kpiValue_ != null) {
-            kpiValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiValue_ = value;
-          }
-          onChanged();
+      public com.google.protobuf.ByteString
+          getEndDateBytes() {
+        java.lang.Object ref = endDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endDate_ = b;
+          return b;
         } else {
-          kpiValueBuilder_.mergeFrom(value);
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @param value The endDate to set.
+       * @return This builder for chaining.
        */
-      public Builder clearKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
-          onChanged();
-        } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
-        }
-
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+      public Builder clearEndDate() {
         
+        endDate_ = getDefaultInstance().getEndDate();
         onChanged();
-        return getKpiValueFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-        if (kpiValueBuilder_ != null) {
-          return kpiValueBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
-        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @param value The bytes for endDate to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiValueFieldBuilder() {
-        if (kpiValueBuilder_ == null) {
-          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiValue_ = null;
-        }
-        return kpiValueBuilder_;
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -6025,130 +7572,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
-    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
+    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
     }
 
-    public static monitoring.Monitoring.Kpi getDefaultInstance() {
+    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Kpi>
-        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
+    private static final com.google.protobuf.Parser<KpiQuery>
+        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
       @java.lang.Override
-      public Kpi parsePartialFrom(
+      public KpiQuery parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Kpi(input, extensionRegistry);
+        return new KpiQuery(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Kpi> parser() {
+    public static com.google.protobuf.Parser<KpiQuery> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Kpi> getParserForType() {
+    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueRangeOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
+  public interface KpiIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return Whether the kpiMinValue field is set.
-     */
-    boolean hasKpiMinValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return The kpiMinValue.
-     */
-    monitoring.Monitoring.KpiValue getKpiMinValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
-
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return Whether the kpiMaxValue field is set.
-     */
-    boolean hasKpiMaxValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return The kpiMaxValue.
-     */
-    monitoring.Monitoring.KpiValue getKpiMaxValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
-
-    /**
-     * <pre>
-     * by default True
-     * </pre>
-     *
-     * <code>bool inRange = 3;</code>
-     * @return The inRange.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
-    boolean getInRange();
-
+    boolean hasKpiId();
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMinValue = 4;</code>
-     * @return The includeMinValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
      */
-    boolean getIncludeMinValue();
-
+    context.ContextOuterClass.Uuid getKpiId();
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMaxValue = 5;</code>
-     * @return The includeMaxValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
      */
-    boolean getIncludeMaxValue();
+    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiValueRange}
+   * Protobuf type {@code monitoring.KpiId}
    */
-  public static final class KpiValueRange extends
+  public static final class KpiId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
-      KpiValueRangeOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
+      KpiIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValueRange.newBuilder() to construct.
-    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiId.newBuilder() to construct.
+    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValueRange() {
+    private KpiId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValueRange();
+      return new KpiId();
     }
 
     @java.lang.Override
@@ -6156,7 +7658,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValueRange(
+    private KpiId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -6175,46 +7677,18 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiMinValue_ != null) {
-                subBuilder = kpiMinValue_.toBuilder();
-              }
-              kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiMinValue_);
-                kpiMinValue_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiMaxValue_ != null) {
-                subBuilder = kpiMaxValue_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
               }
-              kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiMaxValue_);
-                kpiMaxValue_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 24: {
-
-              inRange_ = input.readBool();
-              break;
-            }
-            case 32: {
-
-              includeMinValue_ = input.readBool();
-              break;
-            }
-            case 40: {
-
-              includeMaxValue_ = input.readBool();
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -6236,112 +7710,41 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
-    }
-
-    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiValue kpiMinValue_;
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return Whether the kpiMinValue field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiMinValue() {
-      return kpiMinValue_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return The kpiMinValue.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiMinValue() {
-      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
-      return getKpiMinValue();
-    }
-
-    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
-    private monitoring.Monitoring.KpiValue kpiMaxValue_;
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return Whether the kpiMaxValue field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiMaxValue() {
-      return kpiMaxValue_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return The kpiMaxValue.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiMaxValue() {
-      return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
-      return getKpiMaxValue();
+              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
     }
 
-    public static final int INRANGE_FIELD_NUMBER = 3;
-    private boolean inRange_;
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid kpiId_;
     /**
-     * <pre>
-     * by default True
-     * </pre>
-     *
-     * <code>bool inRange = 3;</code>
-     * @return The inRange.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public boolean getInRange() {
-      return inRange_;
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
-
-    public static final int INCLUDEMINVALUE_FIELD_NUMBER = 4;
-    private boolean includeMinValue_;
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMinValue = 4;</code>
-     * @return The includeMinValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public boolean getIncludeMinValue() {
-      return includeMinValue_;
+    public context.ContextOuterClass.Uuid getKpiId() {
+      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
     }
-
-    public static final int INCLUDEMAXVALUE_FIELD_NUMBER = 5;
-    private boolean includeMaxValue_;
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMaxValue = 5;</code>
-     * @return The includeMaxValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
      */
     @java.lang.Override
-    public boolean getIncludeMaxValue() {
-      return includeMaxValue_;
+    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -6358,20 +7761,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiMinValue_ != null) {
-        output.writeMessage(1, getKpiMinValue());
-      }
-      if (kpiMaxValue_ != null) {
-        output.writeMessage(2, getKpiMaxValue());
-      }
-      if (inRange_ != false) {
-        output.writeBool(3, inRange_);
-      }
-      if (includeMinValue_ != false) {
-        output.writeBool(4, includeMinValue_);
-      }
-      if (includeMaxValue_ != false) {
-        output.writeBool(5, includeMaxValue_);
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
       unknownFields.writeTo(output);
     }
@@ -6382,25 +7773,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiMinValue_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiMinValue());
-      }
-      if (kpiMaxValue_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getKpiMaxValue());
-      }
-      if (inRange_ != false) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(3, inRange_);
-      }
-      if (includeMinValue_ != false) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(4, includeMinValue_);
-      }
-      if (includeMaxValue_ != false) {
+      if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(5, includeMaxValue_);
+          .computeMessageSize(1, getKpiId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -6412,27 +7787,16 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj;
+      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
 
-      if (hasKpiMinValue() != other.hasKpiMinValue()) return false;
-      if (hasKpiMinValue()) {
-        if (!getKpiMinValue()
-            .equals(other.getKpiMinValue())) return false;
-      }
-      if (hasKpiMaxValue() != other.hasKpiMaxValue()) return false;
-      if (hasKpiMaxValue()) {
-        if (!getKpiMaxValue()
-            .equals(other.getKpiMaxValue())) return false;
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
       }
-      if (getInRange()
-          != other.getInRange()) return false;
-      if (getIncludeMinValue()
-          != other.getIncludeMinValue()) return false;
-      if (getIncludeMaxValue()
-          != other.getIncludeMaxValue()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6444,91 +7808,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiMinValue()) {
-        hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiMinValue().hashCode();
-      }
-      if (hasKpiMaxValue()) {
-        hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiMaxValue().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
       }
-      hash = (37 * hash) + INRANGE_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-          getInRange());
-      hash = (37 * hash) + INCLUDEMINVALUE_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-          getIncludeMinValue());
-      hash = (37 * hash) + INCLUDEMAXVALUE_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-          getIncludeMaxValue());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -6541,7 +7892,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiValueRange prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -6557,26 +7908,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValueRange}
+     * Protobuf type {@code monitoring.KpiId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiValueRange)
-        monitoring.Monitoring.KpiValueRangeOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
+        monitoring.Monitoring.KpiIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValueRange.newBuilder()
+      // Construct using monitoring.Monitoring.KpiId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -6586,528 +7937,248 @@ public final class Monitoring {
         super(parent);
         maybeForceBuilderInitialization();
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = null;
-        } else {
-          kpiMinValue_ = null;
-          kpiMinValueBuilder_ = null;
-        }
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = null;
-        } else {
-          kpiMaxValue_ = null;
-          kpiMaxValueBuilder_ = null;
-        }
-        inRange_ = false;
-
-        includeMinValue_ = false;
-
-        includeMaxValue_ = false;
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange build() {
-        monitoring.Monitoring.KpiValueRange result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange buildPartial() {
-        monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
-        if (kpiMinValueBuilder_ == null) {
-          result.kpiMinValue_ = kpiMinValue_;
-        } else {
-          result.kpiMinValue_ = kpiMinValueBuilder_.build();
-        }
-        if (kpiMaxValueBuilder_ == null) {
-          result.kpiMaxValue_ = kpiMaxValue_;
-        } else {
-          result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
-        }
-        result.inRange_ = inRange_;
-        result.includeMinValue_ = includeMinValue_;
-        result.includeMaxValue_ = includeMaxValue_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiValueRange) {
-          return mergeFrom((monitoring.Monitoring.KpiValueRange)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiValueRange other) {
-        if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this;
-        if (other.hasKpiMinValue()) {
-          mergeKpiMinValue(other.getKpiMinValue());
-        }
-        if (other.hasKpiMaxValue()) {
-          mergeKpiMaxValue(other.getKpiMaxValue());
-        }
-        if (other.getInRange() != false) {
-          setInRange(other.getInRange());
-        }
-        if (other.getIncludeMinValue() != false) {
-          setIncludeMinValue(other.getIncludeMinValue());
-        }
-        if (other.getIncludeMaxValue() != false) {
-          setIncludeMaxValue(other.getIncludeMaxValue());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.KpiValueRange parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private monitoring.Monitoring.KpiValue kpiMinValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       * @return Whether the kpiMinValue field is set.
-       */
-      public boolean hasKpiMinValue() {
-        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       * @return The kpiMinValue.
-       */
-      public monitoring.Monitoring.KpiValue getKpiMinValue() {
-        if (kpiMinValueBuilder_ == null) {
-          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
-        } else {
-          return kpiMinValueBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMinValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiMinValue_ = value;
-          onChanged();
-        } else {
-          kpiMinValueBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder setKpiMinValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiMinValueBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMinValueBuilder_ == null) {
-          if (kpiMinValue_ != null) {
-            kpiMinValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiMinValue_ = value;
-          }
-          onChanged();
-        } else {
-          kpiMinValueBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder clearKpiMinValue() {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = null;
-          onChanged();
-        } else {
-          kpiMinValue_ = null;
-          kpiMinValueBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
-        
-        onChanged();
-        return getKpiMinValueFieldBuilder().getBuilder();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
-        if (kpiMinValueBuilder_ != null) {
-          return kpiMinValueBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
         } else {
-          return kpiMinValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
+        return this;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiMinValueFieldBuilder() {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiMinValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiMinValue_ = null;
-        }
-        return kpiMinValueBuilder_;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
       }
 
-      private monitoring.Monitoring.KpiValue kpiMaxValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_;
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       * @return Whether the kpiMaxValue field is set.
-       */
-      public boolean hasKpiMaxValue() {
-        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiId.getDefaultInstance();
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       * @return The kpiMaxValue.
-       */
-      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
-        if (kpiMaxValueBuilder_ == null) {
-          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
-        } else {
-          return kpiMaxValueBuilder_.getMessage();
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId build() {
+        monitoring.Monitoring.KpiId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMaxValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiMaxValue_ = value;
-          onChanged();
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId buildPartial() {
+        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
         } else {
-          kpiMaxValueBuilder_.setMessage(value);
+          result.kpiId_ = kpiIdBuilder_.build();
         }
+        onBuilt();
+        return result;
+      }
 
-        return this;
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder setKpiMaxValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = builderForValue.build();
-          onChanged();
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiId) {
+          return mergeFrom((monitoring.Monitoring.KpiId)other);
         } else {
-          kpiMaxValueBuilder_.setMessage(builderForValue.build());
+          super.mergeFrom(other);
+          return this;
         }
+      }
 
+      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
+        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMaxValueBuilder_ == null) {
-          if (kpiMaxValue_ != null) {
-            kpiMaxValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiMaxValue_ = value;
-          }
-          onChanged();
-        } else {
-          kpiMaxValueBuilder_.mergeFrom(value);
-        }
 
-        return this;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder clearKpiMaxValue() {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = null;
-          onChanged();
-        } else {
-          kpiMaxValue_ = null;
-          kpiMaxValueBuilder_ = null;
-        }
 
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
+
+      private context.ContextOuterClass.Uuid kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
-        
-        onChanged();
-        return getKpiMaxValueFieldBuilder().getBuilder();
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
-        if (kpiMaxValueBuilder_ != null) {
-          return kpiMaxValueBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.Uuid getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
         } else {
-          return kpiMaxValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiMaxValueFieldBuilder() {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiMaxValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiMaxValue_ = null;
+          return kpiIdBuilder_.getMessage();
         }
-        return kpiMaxValueBuilder_;
-      }
-
-      private boolean inRange_ ;
-      /**
-       * <pre>
-       * by default True
-       * </pre>
-       *
-       * <code>bool inRange = 3;</code>
-       * @return The inRange.
-       */
-      @java.lang.Override
-      public boolean getInRange() {
-        return inRange_;
-      }
-      /**
-       * <pre>
-       * by default True
-       * </pre>
-       *
-       * <code>bool inRange = 3;</code>
-       * @param value The inRange to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInRange(boolean value) {
-        
-        inRange_ = value;
-        onChanged();
-        return this;
       }
       /**
-       * <pre>
-       * by default True
-       * </pre>
-       *
-       * <code>bool inRange = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearInRange() {
-        
-        inRange_ = false;
-        onChanged();
+      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
-
-      private boolean includeMinValue_ ;
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMinValue = 4;</code>
-       * @return The includeMinValue.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean getIncludeMinValue() {
-        return includeMinValue_;
+      public Builder setKpiId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMinValue = 4;</code>
-       * @param value The includeMinValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder setIncludeMinValue(boolean value) {
-        
-        includeMinValue_ = value;
-        onChanged();
+      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMinValue = 4;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearIncludeMinValue() {
-        
-        includeMinValue_ = false;
-        onChanged();
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
         return this;
       }
-
-      private boolean includeMaxValue_ ;
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMaxValue = 5;</code>
-       * @return The includeMaxValue.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean getIncludeMaxValue() {
-        return includeMaxValue_;
+      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMaxValue = 5;</code>
-       * @param value The includeMaxValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder setIncludeMaxValue(boolean value) {
-        
-        includeMaxValue_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+        }
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMaxValue = 5;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearIncludeMaxValue() {
-        
-        includeMaxValue_ = false;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -7122,155 +8193,113 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
-    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
+    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
     }
 
-    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
+    public static monitoring.Monitoring.KpiId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiValueRange>
-        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
+    private static final com.google.protobuf.Parser<KpiId>
+        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
       @java.lang.Override
-      public KpiValueRange parsePartialFrom(
+      public KpiId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValueRange(input, extensionRegistry);
+        return new KpiId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValueRange> parser() {
+    public static com.google.protobuf.Parser<KpiId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
+    public com.google.protobuf.Parser<KpiId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
+  public interface KpiOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>int32 int32Val = 1;</code>
-     * @return Whether the int32Val field is set.
-     */
-    boolean hasInt32Val();
-    /**
-     * <code>int32 int32Val = 1;</code>
-     * @return The int32Val.
-     */
-    int getInt32Val();
-
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return Whether the uint32Val field is set.
-     */
-    boolean hasUint32Val();
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return The uint32Val.
-     */
-    int getUint32Val();
-
-    /**
-     * <code>int64 int64Val = 3;</code>
-     * @return Whether the int64Val field is set.
-     */
-    boolean hasInt64Val();
-    /**
-     * <code>int64 int64Val = 3;</code>
-     * @return The int64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
-    long getInt64Val();
-
+    boolean hasKpiId();
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return Whether the uint64Val field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
-    boolean hasUint64Val();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return The uint64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    long getUint64Val();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
 
     /**
-     * <code>float floatVal = 5;</code>
-     * @return Whether the floatVal field is set.
+     * <code>string timestamp = 2;</code>
+     * @return The timestamp.
      */
-    boolean hasFloatVal();
+    java.lang.String getTimestamp();
     /**
-     * <code>float floatVal = 5;</code>
-     * @return The floatVal.
+     * <code>string timestamp = 2;</code>
+     * @return The bytes for timestamp.
      */
-    float getFloatVal();
+    com.google.protobuf.ByteString
+        getTimestampBytes();
 
     /**
-     * <code>string stringVal = 6;</code>
-     * @return Whether the stringVal field is set.
-     */
-    boolean hasStringVal();
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return The stringVal.
-     */
-    java.lang.String getStringVal();
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return The bytes for stringVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
-    com.google.protobuf.ByteString
-        getStringValBytes();
-
+    boolean hasKpiValue();
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
-    boolean hasBoolVal();
+    monitoring.Monitoring.KpiValue getKpiValue();
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
      */
-    boolean getBoolVal();
-
-    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiValue}
+   * Protobuf type {@code monitoring.Kpi}
    */
-  public static final class KpiValue extends
+  public static final class Kpi extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
-      KpiValueOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
+      KpiOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValue.newBuilder() to construct.
-    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Kpi.newBuilder() to construct.
+    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValue() {
+    private Kpi() {
+      timestamp_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValue();
+      return new Kpi();
     }
 
     @java.lang.Override
@@ -7278,7 +8307,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValue(
+    private Kpi(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -7296,40 +8325,36 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 8: {
-              valueCase_ = 1;
-              value_ = input.readInt32();
-              break;
-            }
-            case 16: {
-              valueCase_ = 2;
-              value_ = input.readUInt32();
-              break;
-            }
-            case 24: {
-              valueCase_ = 3;
-              value_ = input.readInt64();
-              break;
-            }
-            case 32: {
-              valueCase_ = 4;
-              value_ = input.readUInt64();
-              break;
-            }
-            case 45: {
-              valueCase_ = 5;
-              value_ = input.readFloat();
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
-            case 50: {
+            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
-              valueCase_ = 6;
-              value_ = s;
+
+              timestamp_ = s;
               break;
             }
-            case 56: {
-              valueCase_ = 7;
-              value_ = input.readBool();
+            case 26: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiValue_ != null) {
+                subBuilder = kpiValue_.toBuilder();
+              }
+              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValue_);
+                kpiValue_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -7353,244 +8378,105 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
-    }
-
-    private int valueCase_ = 0;
-    private java.lang.Object value_;
-    public enum ValueCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      INT32VAL(1),
-      UINT32VAL(2),
-      INT64VAL(3),
-      UINT64VAL(4),
-      FLOATVAL(5),
-      STRINGVAL(6),
-      BOOLVAL(7),
-      VALUE_NOT_SET(0);
-      private final int value;
-      private ValueCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ValueCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ValueCase forNumber(int value) {
-        switch (value) {
-          case 1: return INT32VAL;
-          case 2: return UINT32VAL;
-          case 3: return INT64VAL;
-          case 4: return UINT64VAL;
-          case 5: return FLOATVAL;
-          case 6: return STRINGVAL;
-          case 7: return BOOLVAL;
-          case 0: return VALUE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ValueCase
-    getValueCase() {
-      return ValueCase.forNumber(
-          valueCase_);
-    }
-
-    public static final int INT32VAL_FIELD_NUMBER = 1;
-    /**
-     * <code>int32 int32Val = 1;</code>
-     * @return Whether the int32Val field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt32Val() {
-      return valueCase_ == 1;
-    }
-    /**
-     * <code>int32 int32Val = 1;</code>
-     * @return The int32Val.
-     */
-    @java.lang.Override
-    public int getInt32Val() {
-      if (valueCase_ == 1) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int UINT32VAL_FIELD_NUMBER = 2;
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return Whether the uint32Val field is set.
-     */
-    @java.lang.Override
-    public boolean hasUint32Val() {
-      return valueCase_ == 2;
-    }
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return The uint32Val.
-     */
-    @java.lang.Override
-    public int getUint32Val() {
-      if (valueCase_ == 2) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
+              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
     }
 
-    public static final int INT64VAL_FIELD_NUMBER = 3;
-    /**
-     * <code>int64 int64Val = 3;</code>
-     * @return Whether the int64Val field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt64Val() {
-      return valueCase_ == 3;
-    }
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>int64 int64Val = 3;</code>
-     * @return The int64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public long getInt64Val() {
-      if (valueCase_ == 3) {
-        return (java.lang.Long) value_;
-      }
-      return 0L;
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
-
-    public static final int UINT64VAL_FIELD_NUMBER = 4;
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return Whether the uint64Val field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public boolean hasUint64Val() {
-      return valueCase_ == 4;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return The uint64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public long getUint64Val() {
-      if (valueCase_ == 4) {
-        return (java.lang.Long) value_;
-      }
-      return 0L;
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
     }
 
-    public static final int FLOATVAL_FIELD_NUMBER = 5;
-    /**
-     * <code>float floatVal = 5;</code>
-     * @return Whether the floatVal field is set.
-     */
-    @java.lang.Override
-    public boolean hasFloatVal() {
-      return valueCase_ == 5;
-    }
+    public static final int TIMESTAMP_FIELD_NUMBER = 2;
+    private volatile java.lang.Object timestamp_;
     /**
-     * <code>float floatVal = 5;</code>
-     * @return The floatVal.
+     * <code>string timestamp = 2;</code>
+     * @return The timestamp.
      */
     @java.lang.Override
-    public float getFloatVal() {
-      if (valueCase_ == 5) {
-        return (java.lang.Float) value_;
-      }
-      return 0F;
-    }
-
-    public static final int STRINGVAL_FIELD_NUMBER = 6;
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return Whether the stringVal field is set.
-     */
-    public boolean hasStringVal() {
-      return valueCase_ == 6;
-    }
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return The stringVal.
-     */
-    public java.lang.String getStringVal() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 6) {
-        ref = value_;
-      }
+    public java.lang.String getTimestamp() {
+      java.lang.Object ref = timestamp_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        if (valueCase_ == 6) {
-          value_ = s;
-        }
+        timestamp_ = s;
         return s;
       }
     }
     /**
-     * <code>string stringVal = 6;</code>
-     * @return The bytes for stringVal.
+     * <code>string timestamp = 2;</code>
+     * @return The bytes for timestamp.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
-        getStringValBytes() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 6) {
-        ref = value_;
-      }
+        getTimestampBytes() {
+      java.lang.Object ref = timestamp_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        if (valueCase_ == 6) {
-          value_ = b;
-        }
+        timestamp_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int BOOLVAL_FIELD_NUMBER = 7;
+    public static final int KPI_VALUE_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiValue kpiValue_;
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
     @java.lang.Override
-    public boolean hasBoolVal() {
-      return valueCase_ == 7;
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
     }
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
     @java.lang.Override
-    public boolean getBoolVal() {
-      if (valueCase_ == 7) {
-        return (java.lang.Boolean) value_;
-      }
-      return false;
+    public monitoring.Monitoring.KpiValue getKpiValue() {
+      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+      return getKpiValue();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -7607,32 +8493,14 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (valueCase_ == 1) {
-        output.writeInt32(
-            1, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 2) {
-        output.writeUInt32(
-            2, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 3) {
-        output.writeInt64(
-            3, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 4) {
-        output.writeUInt64(
-            4, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 5) {
-        output.writeFloat(
-            5, (float)((java.lang.Float) value_));
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
-      if (valueCase_ == 6) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, value_);
+      if (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_);
       }
-      if (valueCase_ == 7) {
-        output.writeBool(
-            7, (boolean)((java.lang.Boolean) value_));
+      if (kpiValue_ != null) {
+        output.writeMessage(3, getKpiValue());
       }
       unknownFields.writeTo(output);
     }
@@ -7643,38 +8511,16 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (valueCase_ == 1) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(
-              1, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 2) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(
-              2, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 3) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(
-              3, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 4) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(
-              4, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 5) {
+      if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(
-              5, (float)((java.lang.Float) value_));
+          .computeMessageSize(1, getKpiId());
       }
-      if (valueCase_ == 6) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, value_);
+      if (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_);
       }
-      if (valueCase_ == 7) {
+      if (kpiValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(
-              7, (boolean)((java.lang.Boolean) value_));
+          .computeMessageSize(3, getKpiValue());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -7686,44 +8532,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
+      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
+      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
 
-      if (!getValueCase().equals(other.getValueCase())) return false;
-      switch (valueCase_) {
-        case 1:
-          if (getInt32Val()
-              != other.getInt32Val()) return false;
-          break;
-        case 2:
-          if (getUint32Val()
-              != other.getUint32Val()) return false;
-          break;
-        case 3:
-          if (getInt64Val()
-              != other.getInt64Val()) return false;
-          break;
-        case 4:
-          if (getUint64Val()
-              != other.getUint64Val()) return false;
-          break;
-        case 5:
-          if (java.lang.Float.floatToIntBits(getFloatVal())
-              != java.lang.Float.floatToIntBits(
-                  other.getFloatVal())) return false;
-          break;
-        case 6:
-          if (!getStringVal()
-              .equals(other.getStringVal())) return false;
-          break;
-        case 7:
-          if (getBoolVal()
-              != other.getBoolVal()) return false;
-          break;
-        case 0:
-        default:
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!getTimestamp()
+          .equals(other.getTimestamp())) return false;
+      if (hasKpiValue() != other.hasKpiValue()) return false;
+      if (hasKpiValue()) {
+        if (!getKpiValue()
+            .equals(other.getKpiValue())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -7736,110 +8560,84 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      switch (valueCase_) {
-        case 1:
-          hash = (37 * hash) + INT32VAL_FIELD_NUMBER;
-          hash = (53 * hash) + getInt32Val();
-          break;
-        case 2:
-          hash = (37 * hash) + UINT32VAL_FIELD_NUMBER;
-          hash = (53 * hash) + getUint32Val();
-          break;
-        case 3:
-          hash = (37 * hash) + INT64VAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              getInt64Val());
-          break;
-        case 4:
-          hash = (37 * hash) + UINT64VAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              getUint64Val());
-          break;
-        case 5:
-          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
-          hash = (53 * hash) + java.lang.Float.floatToIntBits(
-              getFloatVal());
-          break;
-        case 6:
-          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
-          hash = (53 * hash) + getStringVal().hashCode();
-          break;
-        case 7:
-          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-              getBoolVal());
-          break;
-        case 0:
-        default:
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp().hashCode();
+      if (hasKpiValue()) {
+        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValue().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
+    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -7852,7 +8650,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -7868,26 +8666,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValue}
+     * Protobuf type {@code monitoring.Kpi}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
-        monitoring.Monitoring.KpiValueOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
+        monitoring.Monitoring.KpiOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
+      // Construct using monitoring.Monitoring.Kpi.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -7905,25 +8703,37 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        valueCase_ = 0;
-        value_ = null;
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        timestamp_ = "";
+
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValue.getDefaultInstance();
+      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+        return monitoring.Monitoring.Kpi.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue build() {
-        monitoring.Monitoring.KpiValue result = buildPartial();
+      public monitoring.Monitoring.Kpi build() {
+        monitoring.Monitoring.Kpi result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -7931,30 +8741,19 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue buildPartial() {
-        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
-        if (valueCase_ == 1) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 2) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 3) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 4) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 5) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 6) {
-          result.value_ = value_;
+      public monitoring.Monitoring.Kpi buildPartial() {
+        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
         }
-        if (valueCase_ == 7) {
-          result.value_ = value_;
+        result.timestamp_ = timestamp_;
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.build();
         }
-        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -7993,50 +8792,25 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiValue) {
-          return mergeFrom((monitoring.Monitoring.KpiValue)other);
+        if (other instanceof monitoring.Monitoring.Kpi) {
+          return mergeFrom((monitoring.Monitoring.Kpi)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
-        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
-        switch (other.getValueCase()) {
-          case INT32VAL: {
-            setInt32Val(other.getInt32Val());
-            break;
-          }
-          case UINT32VAL: {
-            setUint32Val(other.getUint32Val());
-            break;
-          }
-          case INT64VAL: {
-            setInt64Val(other.getInt64Val());
-            break;
-          }
-          case UINT64VAL: {
-            setUint64Val(other.getUint64Val());
-            break;
-          }
-          case FLOATVAL: {
-            setFloatVal(other.getFloatVal());
-            break;
-          }
-          case STRINGVAL: {
-            valueCase_ = 6;
-            value_ = other.value_;
-            onChanged();
-            break;
-          }
-          case BOOLVAL: {
-            setBoolVal(other.getBoolVal());
-            break;
-          }
-          case VALUE_NOT_SET: {
-            break;
-          }
+      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
+        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          onChanged();
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -8053,11 +8827,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiValue parsedMessage = null;
+        monitoring.Monitoring.Kpi parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8066,364 +8840,320 @@ public final class Monitoring {
         }
         return this;
       }
-      private int valueCase_ = 0;
-      private java.lang.Object value_;
-      public ValueCase
-          getValueCase() {
-        return ValueCase.forNumber(
-            valueCase_);
-      }
-
-      public Builder clearValue() {
-        valueCase_ = 0;
-        value_ = null;
-        onChanged();
-        return this;
-      }
-
-
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @return Whether the int32Val field is set.
-       */
-      public boolean hasInt32Val() {
-        return valueCase_ == 1;
-      }
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @return The int32Val.
-       */
-      public int getInt32Val() {
-        if (valueCase_ == 1) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @param value The int32Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt32Val(int value) {
-        valueCase_ = 1;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearInt32Val() {
-        if (valueCase_ == 1) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @return Whether the uint32Val field is set.
-       */
-      public boolean hasUint32Val() {
-        return valueCase_ == 2;
-      }
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @return The uint32Val.
-       */
-      public int getUint32Val() {
-        if (valueCase_ == 2) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @param value The uint32Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint32Val(int value) {
-        valueCase_ = 2;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearUint32Val() {
-        if (valueCase_ == 2) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
 
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>int64 int64Val = 3;</code>
-       * @return Whether the int64Val field is set.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public boolean hasInt64Val() {
-        return valueCase_ == 3;
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>int64 int64Val = 3;</code>
-       * @return The int64Val.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public long getInt64Val() {
-        if (valueCase_ == 3) {
-          return (java.lang.Long) value_;
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
         }
-        return 0L;
-      }
-      /**
-       * <code>int64 int64Val = 3;</code>
-       * @param value The int64Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt64Val(long value) {
-        valueCase_ = 3;
-        value_ = value;
-        onChanged();
-        return this;
       }
       /**
-       * <code>int64 int64Val = 3;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearInt64Val() {
-        if (valueCase_ == 3) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
           onChanged();
-        }
-        return this;
-      }
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
 
-      /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @return Whether the uint64Val field is set.
-       */
-      public boolean hasUint64Val() {
-        return valueCase_ == 4;
+        return this;
       }
       /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @return The uint64Val.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public long getUint64Val() {
-        if (valueCase_ == 4) {
-          return (java.lang.Long) value_;
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
         }
-        return 0L;
-      }
-      /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @param value The uint64Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint64Val(long value) {
-        valueCase_ = 4;
-        value_ = value;
-        onChanged();
+
         return this;
       }
       /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearUint64Val() {
-        if (valueCase_ == 4) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
           onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
         }
-        return this;
-      }
 
-      /**
-       * <code>float floatVal = 5;</code>
-       * @return Whether the floatVal field is set.
-       */
-      public boolean hasFloatVal() {
-        return valueCase_ == 5;
+        return this;
       }
       /**
-       * <code>float floatVal = 5;</code>
-       * @return The floatVal.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public float getFloatVal() {
-        if (valueCase_ == 5) {
-          return (java.lang.Float) value_;
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
-        return 0F;
+
+        return this;
       }
       /**
-       * <code>float floatVal = 5;</code>
-       * @param value The floatVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setFloatVal(float value) {
-        valueCase_ = 5;
-        value_ = value;
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
         onChanged();
-        return this;
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>float floatVal = 5;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearFloatVal() {
-        if (valueCase_ == 5) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
-        return this;
       }
-
       /**
-       * <code>string stringVal = 6;</code>
-       * @return Whether the stringVal field is set.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean hasStringVal() {
-        return valueCase_ == 6;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
+
+      private java.lang.Object timestamp_ = "";
       /**
-       * <code>string stringVal = 6;</code>
-       * @return The stringVal.
+       * <code>string timestamp = 2;</code>
+       * @return The timestamp.
        */
-      @java.lang.Override
-      public java.lang.String getStringVal() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 6) {
-          ref = value_;
-        }
+      public java.lang.String getTimestamp() {
+        java.lang.Object ref = timestamp_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          if (valueCase_ == 6) {
-            value_ = s;
-          }
+          timestamp_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string stringVal = 6;</code>
-       * @return The bytes for stringVal.
+       * <code>string timestamp = 2;</code>
+       * @return The bytes for timestamp.
        */
-      @java.lang.Override
       public com.google.protobuf.ByteString
-          getStringValBytes() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 6) {
-          ref = value_;
-        }
+          getTimestampBytes() {
+        java.lang.Object ref = timestamp_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          if (valueCase_ == 6) {
-            value_ = b;
-          }
+          timestamp_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string stringVal = 6;</code>
-       * @param value The stringVal to set.
+       * <code>string timestamp = 2;</code>
+       * @param value The timestamp to set.
        * @return This builder for chaining.
        */
-      public Builder setStringVal(
+      public Builder setTimestamp(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  valueCase_ = 6;
-        value_ = value;
+  
+        timestamp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 6;</code>
+       * <code>string timestamp = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearStringVal() {
-        if (valueCase_ == 6) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
+      public Builder clearTimestamp() {
+        
+        timestamp_ = getDefaultInstance().getTimestamp();
+        onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 6;</code>
-       * @param value The bytes for stringVal to set.
+       * <code>string timestamp = 2;</code>
+       * @param value The bytes for timestamp to set.
        * @return This builder for chaining.
        */
-      public Builder setStringValBytes(
+      public Builder setTimestampBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
-        valueCase_ = 6;
-        value_ = value;
+        
+        timestamp_ = value;
         onChanged();
         return this;
       }
 
+      private monitoring.Monitoring.KpiValue kpiValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
       /**
-       * <code>bool boolVal = 7;</code>
-       * @return Whether the boolVal field is set.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return Whether the kpiValue field is set.
        */
-      public boolean hasBoolVal() {
-        return valueCase_ == 7;
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
       }
       /**
-       * <code>bool boolVal = 7;</code>
-       * @return The boolVal.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return The kpiValue.
        */
-      public boolean getBoolVal() {
-        if (valueCase_ == 7) {
-          return (java.lang.Boolean) value_;
+      public monitoring.Monitoring.KpiValue getKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        } else {
+          return kpiValueBuilder_.getMessage();
         }
-        return false;
       }
       /**
-       * <code>bool boolVal = 7;</code>
-       * @param value The boolVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder setBoolVal(boolean value) {
-        valueCase_ = 7;
-        value_ = value;
-        onChanged();
+      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValue_ = value;
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>bool boolVal = 7;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder clearBoolVal() {
-        if (valueCase_ == 7) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setKpiValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (kpiValue_ != null) {
+            kpiValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
           onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
         }
+
         return this;
       }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+        if (kpiValueBuilder_ != null) {
+          return kpiValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiValueFieldBuilder() {
+        if (kpiValueBuilder_ == null) {
+          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiValue_ = null;
+        }
+        return kpiValueBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -8437,95 +9167,100 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
+      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
-    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
+    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
     }
 
-    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
+    public static monitoring.Monitoring.Kpi getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiValue>
-        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
+    private static final com.google.protobuf.Parser<Kpi>
+        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
       @java.lang.Override
-      public KpiValue parsePartialFrom(
+      public Kpi parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValue(input, extensionRegistry);
+        return new Kpi(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValue> parser() {
+    public static com.google.protobuf.Parser<Kpi> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValue> getParserForType() {
+    public com.google.protobuf.Parser<Kpi> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
+  public interface KpiValueRangeOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
      */
-    java.util.List<monitoring.Monitoring.Kpi> 
-        getKpiListList();
+    boolean hasKpiMinValue();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
      */
-    monitoring.Monitoring.Kpi getKpiList(int index);
+    monitoring.Monitoring.KpiValue getKpiMinValue();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
      */
-    int getKpiListCount();
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
+
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList();
+    boolean hasKpiMaxValue();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
      */
-    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
-        int index);
+    monitoring.Monitoring.KpiValue getKpiMaxValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiList}
+   * Protobuf type {@code monitoring.KpiValueRange}
    */
-  public static final class KpiList extends
+  public static final class KpiValueRange extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
-      KpiListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
+      KpiValueRangeOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiList.newBuilder() to construct.
-    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiValueRange.newBuilder() to construct.
+    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiList() {
-      kpiList_ = java.util.Collections.emptyList();
+    private KpiValueRange() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiList();
+      return new KpiValueRange();
     }
 
     @java.lang.Override
@@ -8533,7 +9268,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiList(
+    private KpiValueRange(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -8541,7 +9276,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -8553,12 +9287,29 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
-                mutable_bitField0_ |= 0x00000001;
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiMinValue_ != null) {
+                subBuilder = kpiMinValue_.toBuilder();
               }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
+              kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiMinValue_);
+                kpiMinValue_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiMaxValue_ != null) {
+                subBuilder = kpiMaxValue_.toBuilder();
+              }
+              kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiMaxValue_);
+                kpiMaxValue_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -8576,64 +9327,73 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
+    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiValue kpiMinValue_;
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-      return kpiList_;
+    public boolean hasKpiMinValue() {
+      return kpiMinValue_ != null;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public monitoring.Monitoring.KpiValue getKpiMinValue() {
+      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+      return getKpiMinValue();
     }
+
+    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
+    private monitoring.Monitoring.KpiValue kpiMaxValue_;
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getKpiList(int index) {
-      return kpiList_.get(index);
+    public boolean hasKpiMaxValue() {
+      return kpiMaxValue_ != null;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
-        int index) {
-      return kpiList_.get(index);
+    public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+      return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+      return getKpiMaxValue();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -8650,8 +9410,11 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < kpiList_.size(); i++) {
-        output.writeMessage(1, kpiList_.get(i));
+      if (kpiMinValue_ != null) {
+        output.writeMessage(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        output.writeMessage(2, getKpiMaxValue());
       }
       unknownFields.writeTo(output);
     }
@@ -8662,9 +9425,13 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < kpiList_.size(); i++) {
+      if (kpiMinValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiList_.get(i));
+          .computeMessageSize(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getKpiMaxValue());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -8676,13 +9443,21 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
+      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj;
 
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (hasKpiMinValue() != other.hasKpiMinValue()) return false;
+      if (hasKpiMinValue()) {
+        if (!getKpiMinValue()
+            .equals(other.getKpiMinValue())) return false;
+      }
+      if (hasKpiMaxValue() != other.hasKpiMaxValue()) return false;
+      if (hasKpiMaxValue()) {
+        if (!getKpiMaxValue()
+            .equals(other.getKpiMaxValue())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -8694,78 +9469,82 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiListCount() > 0) {
-        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiListList().hashCode();
+      if (hasKpiMinValue()) {
+        hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMinValue().hashCode();
+      }
+      if (hasKpiMaxValue()) {
+        hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMaxValue().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValueRange parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -8778,7 +9557,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiValueRange prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -8794,26 +9573,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiList}
+     * Protobuf type {@code monitoring.KpiValueRange}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
-        monitoring.Monitoring.KpiListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValueRange)
+        monitoring.Monitoring.KpiValueRangeOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      // Construct using monitoring.Monitoring.KpiValueRange.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -8826,17 +9605,22 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
         } else {
-          kpiListBuilder_.clear();
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+        } else {
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
         }
         return this;
       }
@@ -8844,17 +9628,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiList.getDefaultInstance();
+      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList build() {
-        monitoring.Monitoring.KpiList result = buildPartial();
+      public monitoring.Monitoring.KpiValueRange build() {
+        monitoring.Monitoring.KpiValueRange result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -8862,17 +9646,17 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList buildPartial() {
-        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiList_ = kpiList_;
+      public monitoring.Monitoring.KpiValueRange buildPartial() {
+        monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
+        if (kpiMinValueBuilder_ == null) {
+          result.kpiMinValue_ = kpiMinValue_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.kpiMinValue_ = kpiMinValueBuilder_.build();
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          result.kpiMaxValue_ = kpiMaxValue_;
+        } else {
+          result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
         }
         onBuilt();
         return result;
@@ -8912,41 +9696,21 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiList) {
-          return mergeFrom((monitoring.Monitoring.KpiList)other);
+        if (other instanceof monitoring.Monitoring.KpiValueRange) {
+          return mergeFrom((monitoring.Monitoring.KpiValueRange)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
-        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
-        if (kpiListBuilder_ == null) {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiList_.isEmpty()) {
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
-            } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
-            }
-          }
+      public Builder mergeFrom(monitoring.Monitoring.KpiValueRange other) {
+        if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this;
+        if (other.hasKpiMinValue()) {
+          mergeKpiMinValue(other.getKpiMinValue());
+        }
+        if (other.hasKpiMaxValue()) {
+          mergeKpiMaxValue(other.getKpiMaxValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -8963,11 +9727,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiList parsedMessage = null;
+        monitoring.Monitoring.KpiValueRange parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8976,246 +9740,243 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
-          bitField0_ |= 0x00000001;
-         }
-      }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
-
-      /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-        if (kpiListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiList_);
-        } else {
-          return kpiListBuilder_.getMessageList();
-        }
-      }
+      private monitoring.Monitoring.KpiValue kpiMinValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return Whether the kpiMinValue field is set.
        */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
-        } else {
-          return kpiListBuilder_.getCount();
-        }
+      public boolean hasKpiMinValue() {
+        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return The kpiMinValue.
        */
-      public monitoring.Monitoring.Kpi getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
+      public monitoring.Monitoring.KpiValue getKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
         } else {
-          return kpiListBuilder_.getMessage(index);
+          return kpiMinValueBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
+          kpiMinValue_ = value;
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, value);
+          kpiMinValueBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
+      public Builder setKpiMinValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = builderForValue.build();
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
+          kpiMinValueBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
+          if (kpiMinValue_ != null) {
+            kpiMinValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiMinValue_ = value;
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(value);
+          kpiMinValueBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
+      public Builder clearKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, value);
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
-          onChanged();
+      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
+        
+        onChanged();
+        return getKpiMinValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+        if (kpiMinValueBuilder_ != null) {
+          return kpiMinValueBuilder_.getMessageOrBuilder();
         } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
+          return kpiMinValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
-          onChanged();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiMinValueFieldBuilder() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiMinValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiMinValue_ = null;
+        }
+        return kpiMinValueBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiValue kpiMaxValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_;
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return Whether the kpiMaxValue field is set.
+       */
+      public boolean hasKpiMaxValue() {
+        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return The kpiMaxValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
         } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
+          return kpiMaxValueBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
+      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiMaxValue_ = value;
           onChanged();
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          kpiMaxValueBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setKpiMaxValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = builderForValue.build();
           onChanged();
         } else {
-          kpiListBuilder_.clear();
+          kpiMaxValueBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
+      public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (kpiMaxValue_ != null) {
+            kpiMaxValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiMaxValue_ = value;
+          }
           onChanged();
         } else {
-          kpiListBuilder_.remove(index);
+          kpiMaxValueBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
-       */
-      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
-       */
-      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
-          int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-           getKpiListOrBuilderList() {
-        if (kpiListBuilder_ != null) {
-          return kpiListBuilder_.getMessageOrBuilderList();
+      public Builder clearKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.Kpi.getDefaultInstance());
+      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
+        
+        onChanged();
+        return getKpiMaxValueFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+        if (kpiMaxValueBuilder_ != null) {
+          return kpiMaxValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiMaxValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+        }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
-          getKpiListFieldBuilder() {
-        if (kpiListBuilder_ == null) {
-          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
-                  kpiList_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiMaxValueFieldBuilder() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiMaxValue(),
                   getParentForChildren(),
                   isClean());
-          kpiList_ = null;
+          kpiMaxValue_ = null;
         }
-        return kpiListBuilder_;
+        return kpiMaxValueBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -9230,95 +9991,122 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
-    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
+    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
     }
 
-    public static monitoring.Monitoring.KpiList getDefaultInstance() {
+    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiList>
-        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
+    private static final com.google.protobuf.Parser<KpiValueRange>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
       @java.lang.Override
-      public KpiList parsePartialFrom(
+      public KpiValueRange parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiList(input, extensionRegistry);
+        return new KpiValueRange(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiList> parser() {
+    public static com.google.protobuf.Parser<KpiValueRange> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiList> getParserForType() {
+    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiDescriptorListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
+  public interface KpiValueOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>uint32 intVal = 1;</code>
+     * @return Whether the intVal field is set.
      */
-    java.util.List<monitoring.Monitoring.KpiDescriptor> 
-        getKpiDescriptorListList();
+    boolean hasIntVal();
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>uint32 intVal = 1;</code>
+     * @return The intVal.
      */
-    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
+    int getIntVal();
+
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return Whether the floatVal field is set.
      */
-    int getKpiDescriptorListCount();
+    boolean hasFloatVal();
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return The floatVal.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-        getKpiDescriptorListOrBuilderList();
+    float getFloatVal();
+
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>string stringVal = 3;</code>
+     * @return Whether the stringVal field is set.
      */
-    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-        int index);
+    boolean hasStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The stringVal.
+     */
+    java.lang.String getStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    com.google.protobuf.ByteString
+        getStringValBytes();
+
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
+     */
+    boolean hasBoolVal();
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
+     */
+    boolean getBoolVal();
+
+    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
   }
   /**
-   * Protobuf type {@code monitoring.KpiDescriptorList}
+   * Protobuf type {@code monitoring.KpiValue}
    */
-  public static final class KpiDescriptorList extends
+  public static final class KpiValue extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
-      KpiDescriptorListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
+      KpiValueOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiDescriptorList.newBuilder() to construct.
-    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiValue.newBuilder() to construct.
+    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiDescriptorList() {
-      kpiDescriptorList_ = java.util.Collections.emptyList();
+    private KpiValue() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiDescriptorList();
+      return new KpiValue();
     }
 
     @java.lang.Override
@@ -9326,7 +10114,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiDescriptorList(
+    private KpiValue(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -9334,7 +10122,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -9345,13 +10132,25 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiDescriptorList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry));
+            case 8: {
+              valueCase_ = 1;
+              value_ = input.readUInt32();
+              break;
+            }
+            case 21: {
+              valueCase_ = 2;
+              value_ = input.readFloat();
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+              valueCase_ = 3;
+              value_ = s;
+              break;
+            }
+            case 32: {
+              valueCase_ = 4;
+              value_ = input.readBool();
               break;
             }
             default: {
@@ -9369,64 +10168,181 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+    }
+
+    private int valueCase_ = 0;
+    private java.lang.Object value_;
+    public enum ValueCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      INTVAL(1),
+      FLOATVAL(2),
+      STRINGVAL(3),
+      BOOLVAL(4),
+      VALUE_NOT_SET(0);
+      private final int value;
+      private ValueCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ValueCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ValueCase forNumber(int value) {
+        switch (value) {
+          case 1: return INTVAL;
+          case 2: return FLOATVAL;
+          case 3: return STRINGVAL;
+          case 4: return BOOLVAL;
+          case 0: return VALUE_NOT_SET;
+          default: return null;
         }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ValueCase
+    getValueCase() {
+      return ValueCase.forNumber(
+          valueCase_);
     }
 
+    public static final int INTVAL_FIELD_NUMBER = 1;
+    /**
+     * <code>uint32 intVal = 1;</code>
+     * @return Whether the intVal field is set.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+    public boolean hasIntVal() {
+      return valueCase_ == 1;
     }
-
-    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>uint32 intVal = 1;</code>
+     * @return The intVal.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
-      return kpiDescriptorList_;
+    public int getIntVal() {
+      if (valueCase_ == 1) {
+        return (java.lang.Integer) value_;
+      }
+      return 0;
     }
+
+    public static final int FLOATVAL_FIELD_NUMBER = 2;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return Whether the floatVal field is set.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-        getKpiDescriptorListOrBuilderList() {
-      return kpiDescriptorList_;
+    public boolean hasFloatVal() {
+      return valueCase_ == 2;
     }
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return The floatVal.
      */
     @java.lang.Override
-    public int getKpiDescriptorListCount() {
-      return kpiDescriptorList_.size();
+    public float getFloatVal() {
+      if (valueCase_ == 2) {
+        return (java.lang.Float) value_;
+      }
+      return 0F;
     }
+
+    public static final int STRINGVAL_FIELD_NUMBER = 3;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>string stringVal = 3;</code>
+     * @return Whether the stringVal field is set.
+     */
+    public boolean hasStringVal() {
+      return valueCase_ == 3;
+    }
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The stringVal.
+     */
+    public java.lang.String getStringVal() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 3) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (valueCase_ == 3) {
+          value_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    public com.google.protobuf.ByteString
+        getStringValBytes() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 3) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (valueCase_ == 3) {
+          value_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int BOOLVAL_FIELD_NUMBER = 4;
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
-      return kpiDescriptorList_.get(index);
+    public boolean hasBoolVal() {
+      return valueCase_ == 4;
     }
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-        int index) {
-      return kpiDescriptorList_.get(index);
+    public boolean getBoolVal() {
+      if (valueCase_ == 4) {
+        return (java.lang.Boolean) value_;
+      }
+      return false;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -9443,8 +10359,20 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
-        output.writeMessage(1, kpiDescriptorList_.get(i));
+      if (valueCase_ == 1) {
+        output.writeUInt32(
+            1, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 2) {
+        output.writeFloat(
+            2, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 3) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
+      }
+      if (valueCase_ == 4) {
+        output.writeBool(
+            4, (boolean)((java.lang.Boolean) value_));
       }
       unknownFields.writeTo(output);
     }
@@ -9455,9 +10383,23 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+      if (valueCase_ == 1) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiDescriptorList_.get(i));
+          .computeUInt32Size(
+              1, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 2) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(
+              2, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 3) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
+      }
+      if (valueCase_ == 4) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(
+              4, (boolean)((java.lang.Boolean) value_));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -9469,13 +10411,33 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
+      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
 
-      if (!getKpiDescriptorListList()
-          .equals(other.getKpiDescriptorListList())) return false;
+      if (!getValueCase().equals(other.getValueCase())) return false;
+      switch (valueCase_) {
+        case 1:
+          if (getIntVal()
+              != other.getIntVal()) return false;
+          break;
+        case 2:
+          if (java.lang.Float.floatToIntBits(getFloatVal())
+              != java.lang.Float.floatToIntBits(
+                  other.getFloatVal())) return false;
+          break;
+        case 3:
+          if (!getStringVal()
+              .equals(other.getStringVal())) return false;
+          break;
+        case 4:
+          if (getBoolVal()
+              != other.getBoolVal()) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -9487,78 +10449,96 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiDescriptorListCount() > 0) {
-        hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiDescriptorListList().hashCode();
+      switch (valueCase_) {
+        case 1:
+          hash = (37 * hash) + INTVAL_FIELD_NUMBER;
+          hash = (53 * hash) + getIntVal();
+          break;
+        case 2:
+          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
+          hash = (53 * hash) + java.lang.Float.floatToIntBits(
+              getFloatVal());
+          break;
+        case 3:
+          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
+          hash = (53 * hash) + getStringVal().hashCode();
+          break;
+        case 4:
+          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
+          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+              getBoolVal());
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -9571,7 +10551,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiDescriptorList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -9587,26 +10567,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiDescriptorList}
+     * Protobuf type {@code monitoring.KpiValue}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptorList)
-        monitoring.Monitoring.KpiDescriptorListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
+        monitoring.Monitoring.KpiValueOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
+      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -9619,35 +10599,30 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiDescriptorListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
-        super.clear();
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          kpiDescriptorListBuilder_.clear();
-        }
+        super.clear();
+        valueCase_ = 0;
+        value_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
+      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValue.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList build() {
-        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
+      public monitoring.Monitoring.KpiValue build() {
+        monitoring.Monitoring.KpiValue result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -9655,18 +10630,21 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList buildPartial() {
-        monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiDescriptorListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiDescriptorList_ = kpiDescriptorList_;
-        } else {
-          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build();
+      public monitoring.Monitoring.KpiValue buildPartial() {
+        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
+        if (valueCase_ == 1) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 2) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 3) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 4) {
+          result.value_ = value_;
         }
+        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -9705,40 +10683,37 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiDescriptorList) {
-          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
+        if (other instanceof monitoring.Monitoring.KpiValue) {
+          return mergeFrom((monitoring.Monitoring.KpiValue)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptorList other) {
-        if (other == monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()) return this;
-        if (kpiDescriptorListBuilder_ == null) {
-          if (!other.kpiDescriptorList_.isEmpty()) {
-            if (kpiDescriptorList_.isEmpty()) {
-              kpiDescriptorList_ = other.kpiDescriptorList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiDescriptorListIsMutable();
-              kpiDescriptorList_.addAll(other.kpiDescriptorList_);
-            }
+      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
+        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
+        switch (other.getValueCase()) {
+          case INTVAL: {
+            setIntVal(other.getIntVal());
+            break;
+          }
+          case FLOATVAL: {
+            setFloatVal(other.getFloatVal());
+            break;
+          }
+          case STRINGVAL: {
+            valueCase_ = 3;
+            value_ = other.value_;
             onChanged();
+            break;
           }
-        } else {
-          if (!other.kpiDescriptorList_.isEmpty()) {
-            if (kpiDescriptorListBuilder_.isEmpty()) {
-              kpiDescriptorListBuilder_.dispose();
-              kpiDescriptorListBuilder_ = null;
-              kpiDescriptorList_ = other.kpiDescriptorList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiDescriptorListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiDescriptorListFieldBuilder() : null;
-            } else {
-              kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_);
-            }
+          case BOOLVAL: {
+            setBoolVal(other.getBoolVal());
+            break;
+          }
+          case VALUE_NOT_SET: {
+            break;
           }
         }
         this.mergeUnknownFields(other.unknownFields);
@@ -9756,11 +10731,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
+        monitoring.Monitoring.KpiValue parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -9769,246 +10744,240 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
+      private int valueCase_ = 0;
+      private java.lang.Object value_;
+      public ValueCase
+          getValueCase() {
+        return ValueCase.forNumber(
+            valueCase_);
+      }
 
-      private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiDescriptorListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_);
-          bitField0_ |= 0x00000001;
-         }
+      public Builder clearValue() {
+        valueCase_ = 0;
+        value_ = null;
+        onChanged();
+        return this;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_;
 
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @return Whether the intVal field is set.
        */
-      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
-        if (kpiDescriptorListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
-        } else {
-          return kpiDescriptorListBuilder_.getMessageList();
-        }
+      public boolean hasIntVal() {
+        return valueCase_ == 1;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @return The intVal.
        */
-      public int getKpiDescriptorListCount() {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.size();
-        } else {
-          return kpiDescriptorListBuilder_.getCount();
+      public int getIntVal() {
+        if (valueCase_ == 1) {
+          return (java.lang.Integer) value_;
         }
+        return 0;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @param value The intVal to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.get(index);
-        } else {
-          return kpiDescriptorListBuilder_.getMessage(index);
-        }
+      public Builder setIntVal(int value) {
+        valueCase_ = 1;
+        value_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.set(index, value);
+      public Builder clearIntVal() {
+        if (valueCase_ == 1) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiDescriptorListBuilder_.setMessage(index, value);
         }
         return this;
       }
+
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @return Whether the floatVal field is set.
        */
-      public Builder setKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      public boolean hasFloatVal() {
+        return valueCase_ == 2;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @return The floatVal.
        */
-      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(value);
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(value);
+      public float getFloatVal() {
+        if (valueCase_ == 2) {
+          return (java.lang.Float) value_;
         }
-        return this;
+        return 0F;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @param value The floatVal to set.
+       * @return This builder for chaining.
        */
-      public Builder addKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(index, value);
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(index, value);
-        }
+      public Builder setFloatVal(float value) {
+        valueCase_ = 2;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiDescriptorList(
-          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(builderForValue.build());
+      public Builder clearFloatVal() {
+        if (valueCase_ == 2) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
+
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return Whether the stringVal field is set.
        */
-      public Builder addKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public boolean hasStringVal() {
+        return valueCase_ == 3;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return The stringVal.
        */
-      public Builder addAllKpiDescriptorList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiDescriptorList_);
-          onChanged();
+      @java.lang.Override
+      public java.lang.String getStringVal() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 3) {
+          ref = value_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (valueCase_ == 3) {
+            value_ = s;
+          }
+          return s;
         } else {
-          kpiDescriptorListBuilder_.addAllMessages(values);
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return The bytes for stringVal.
        */
-      public Builder clearKpiDescriptorList() {
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getStringValBytes() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 3) {
+          ref = value_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (valueCase_ == 3) {
+            value_ = b;
+          }
+          return b;
         } else {
-          kpiDescriptorListBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @param value The stringVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStringVal(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  valueCase_ = 3;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeKpiDescriptorList(int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.remove(index);
+      public Builder clearStringVal() {
+        if (valueCase_ == 3) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiDescriptorListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @param value The bytes for stringVal to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
-          int index) {
-        return getKpiDescriptorListFieldBuilder().getBuilder(index);
+      public Builder setStringValBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        valueCase_ = 3;
+        value_ = value;
+        onChanged();
+        return this;
       }
+
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @return Whether the boolVal field is set.
        */
-      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-          int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.get(index);  } else {
-          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
-        }
+      public boolean hasBoolVal() {
+        return valueCase_ == 4;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @return The boolVal.
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-           getKpiDescriptorListOrBuilderList() {
-        if (kpiDescriptorListBuilder_ != null) {
-          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+      public boolean getBoolVal() {
+        if (valueCase_ == 4) {
+          return (java.lang.Boolean) value_;
         }
+        return false;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
-       */
-      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
-        return getKpiDescriptorListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @param value The boolVal to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
-          int index) {
-        return getKpiDescriptorListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      public Builder setBoolVal(boolean value) {
+        valueCase_ = 4;
+        value_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> 
-           getKpiDescriptorListBuilderList() {
-        return getKpiDescriptorListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> 
-          getKpiDescriptorListFieldBuilder() {
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>(
-                  kpiDescriptorList_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiDescriptorList_ = null;
+      public Builder clearBoolVal() {
+        if (valueCase_ == 4) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
         }
-        return kpiDescriptorListBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -10023,166 +10992,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
-    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
+    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
     }
 
-    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
+    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiDescriptorList>
-        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
+    private static final com.google.protobuf.Parser<KpiValue>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
       @java.lang.Override
-      public KpiDescriptorList parsePartialFrom(
+      public KpiValue parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiDescriptorList(input, extensionRegistry);
+        return new KpiValue(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiDescriptorList> parser() {
+    public static com.google.protobuf.Parser<KpiValue> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() {
+    public com.google.protobuf.Parser<KpiValue> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubsDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor)
+  public interface KpiListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
-     */
-    boolean hasSubsId();
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
-     */
-    monitoring.Monitoring.SubscriptionID getSubsId();
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
-
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>float sampling_duration_s = 3;</code>
-     * @return The samplingDurationS.
-     */
-    float getSamplingDurationS();
-
-    /**
-     * <code>float sampling_interval_s = 4;</code>
-     * @return The samplingIntervalS.
-     */
-    float getSamplingIntervalS();
-
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
-     */
-    boolean hasStartTimestamp();
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.Timestamp getStartTimestamp();
+    java.util.List<monitoring.Monitoring.Kpi> 
+        getKpiListList();
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder();
-
+    monitoring.Monitoring.Kpi getKpiList(int index);
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    boolean hasEndTimestamp();
+    int getKpiListCount();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.Timestamp getEndTimestamp();
+    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder();
+    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code monitoring.SubsDescriptor}
+   * Protobuf type {@code monitoring.KpiList}
    */
-  public static final class SubsDescriptor extends
+  public static final class KpiList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
-      SubsDescriptorOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
+      KpiListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsDescriptor.newBuilder() to construct.
-    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiList.newBuilder() to construct.
+    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsDescriptor() {
+    private KpiList() {
+      kpiList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsDescriptor();
+      return new KpiList();
     }
 
     @java.lang.Override
@@ -10190,7 +11088,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsDescriptor(
+    private KpiList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -10198,6 +11096,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -10209,65 +11108,12 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
-              if (subsId_ != null) {
-                subBuilder = subsId_.toBuilder();
-              }
-              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(subsId_);
-                subsId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 29: {
-
-              samplingDurationS_ = input.readFloat();
-              break;
-            }
-            case 37: {
-
-              samplingIntervalS_ = input.readFloat();
-              break;
-            }
-            case 42: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (startTimestamp_ != null) {
-                subBuilder = startTimestamp_.toBuilder();
-              }
-              startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(startTimestamp_);
-                startTimestamp_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (endTimestamp_ != null) {
-                subBuilder = endTimestamp_.toBuilder();
-              }
-              endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endTimestamp_);
-                endTimestamp_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -10285,171 +11131,64 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
-    }
-
-    public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.SubscriptionID subsId_;
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
-     */
-    @java.lang.Override
-    public boolean hasSubsId() {
-      return subsId_ != null;
-    }
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsId() {
-      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
-    }
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-      return getSubsId();
-    }
-
-    public static final int KPI_ID_FIELD_NUMBER = 2;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 3;
-    private float samplingDurationS_;
-    /**
-     * <code>float sampling_duration_s = 3;</code>
-     * @return The samplingDurationS.
-     */
-    @java.lang.Override
-    public float getSamplingDurationS() {
-      return samplingDurationS_;
-    }
-
-    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 4;
-    private float samplingIntervalS_;
-    /**
-     * <code>float sampling_interval_s = 4;</code>
-     * @return The samplingIntervalS.
-     */
-    @java.lang.Override
-    public float getSamplingIntervalS() {
-      return samplingIntervalS_;
+              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.Timestamp startTimestamp_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasStartTimestamp() {
-      return startTimestamp_ != null;
-    }
+    public static final int KPI_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getStartTimestamp() {
-      return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+      return kpiList_;
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-      return getStartTimestamp();
+    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
     }
-
-    public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.Timestamp endTimestamp_;
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public boolean hasEndTimestamp() {
-      return endTimestamp_ != null;
+    public int getKpiListCount() {
+      return kpiList_.size();
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getEndTimestamp() {
-      return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+    public monitoring.Monitoring.Kpi getKpiList(int index) {
+      return kpiList_.get(index);
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-      return getEndTimestamp();
+    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index) {
+      return kpiList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -10466,23 +11205,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (subsId_ != null) {
-        output.writeMessage(1, getSubsId());
-      }
-      if (kpiId_ != null) {
-        output.writeMessage(2, getKpiId());
-      }
-      if (samplingDurationS_ != 0F) {
-        output.writeFloat(3, samplingDurationS_);
-      }
-      if (samplingIntervalS_ != 0F) {
-        output.writeFloat(4, samplingIntervalS_);
-      }
-      if (startTimestamp_ != null) {
-        output.writeMessage(5, getStartTimestamp());
-      }
-      if (endTimestamp_ != null) {
-        output.writeMessage(6, getEndTimestamp());
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(1, kpiList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -10493,29 +11217,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (subsId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSubsId());
-      }
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getKpiId());
-      }
-      if (samplingDurationS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingDurationS_);
-      }
-      if (samplingIntervalS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(4, samplingIntervalS_);
-      }
-      if (startTimestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getStartTimestamp());
-      }
-      if (endTimestamp_ != null) {
+      for (int i = 0; i < kpiList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndTimestamp());
+          .computeMessageSize(1, kpiList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -10527,37 +11231,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
+      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
 
-      if (hasSubsId() != other.hasSubsId()) return false;
-      if (hasSubsId()) {
-        if (!getSubsId()
-            .equals(other.getSubsId())) return false;
-      }
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
-      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingDurationS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingIntervalS())) return false;
-      if (hasStartTimestamp() != other.hasStartTimestamp()) return false;
-      if (hasStartTimestamp()) {
-        if (!getStartTimestamp()
-            .equals(other.getStartTimestamp())) return false;
-      }
-      if (hasEndTimestamp() != other.hasEndTimestamp()) return false;
-      if (hasEndTimestamp()) {
-        if (!getEndTimestamp()
-            .equals(other.getEndTimestamp())) return false;
-      }
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10569,96 +11249,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSubsId()) {
-        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsId().hashCode();
-      }
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
-      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingDurationS());
-      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingIntervalS());
-      if (hasStartTimestamp()) {
-        hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getStartTimestamp().hashCode();
-      }
-      if (hasEndTimestamp()) {
-        hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getEndTimestamp().hashCode();
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -10671,7 +11333,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsDescriptor prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -10686,823 +11348,429 @@ public final class Monitoring {
       Builder builder = new Builder(parent);
       return builder;
     }
-    /**
-     * Protobuf type {@code monitoring.SubsDescriptor}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor)
-        monitoring.Monitoring.SubsDescriptorOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
-      }
-
-      // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        samplingDurationS_ = 0F;
-
-        samplingIntervalS_ = 0F;
-
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
-        } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
-        }
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
-        } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor build() {
-        monitoring.Monitoring.SubsDescriptor result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor buildPartial() {
-        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
-        if (subsIdBuilder_ == null) {
-          result.subsId_ = subsId_;
-        } else {
-          result.subsId_ = subsIdBuilder_.build();
-        }
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        result.samplingDurationS_ = samplingDurationS_;
-        result.samplingIntervalS_ = samplingIntervalS_;
-        if (startTimestampBuilder_ == null) {
-          result.startTimestamp_ = startTimestamp_;
-        } else {
-          result.startTimestamp_ = startTimestampBuilder_.build();
-        }
-        if (endTimestampBuilder_ == null) {
-          result.endTimestamp_ = endTimestamp_;
-        } else {
-          result.endTimestamp_ = endTimestampBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsDescriptor) {
-          return mergeFrom((monitoring.Monitoring.SubsDescriptor)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.SubsDescriptor other) {
-        if (other == monitoring.Monitoring.SubsDescriptor.getDefaultInstance()) return this;
-        if (other.hasSubsId()) {
-          mergeSubsId(other.getSubsId());
-        }
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
-        if (other.getSamplingDurationS() != 0F) {
-          setSamplingDurationS(other.getSamplingDurationS());
-        }
-        if (other.getSamplingIntervalS() != 0F) {
-          setSamplingIntervalS(other.getSamplingIntervalS());
-        }
-        if (other.hasStartTimestamp()) {
-          mergeStartTimestamp(other.getStartTimestamp());
-        }
-        if (other.hasEndTimestamp()) {
-          mergeEndTimestamp(other.getEndTimestamp());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.SubsDescriptor parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private monitoring.Monitoring.SubscriptionID subsId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return Whether the subsId field is set.
-       */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return The subsId.
-       */
-      public monitoring.Monitoring.SubscriptionID getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
-        } else {
-          return subsIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          subsId_ = value;
-          onChanged();
-        } else {
-          subsIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder setSubsId(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
-          onChanged();
-        } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+    /**
+     * Protobuf type {@code monitoring.KpiList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
+        monitoring.Monitoring.KpiListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
-          } else {
-            subsId_ = value;
-          }
-          onChanged();
-        } else {
-          subsIdBuilder_.mergeFrom(value);
-        }
 
-        return this;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-          onChanged();
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
 
-        return this;
+      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
-        
-        onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
-        } else {
-          return subsId_ == null ?
-              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
         }
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  getSubsId(),
-                  getParentForChildren(),
-                  isClean());
-          subsId_ = null;
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiListBuilder_.clear();
         }
-        return subsIdBuilder_;
+        return this;
       }
 
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
 
-        return this;
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiList.getDefaultInstance();
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList build() {
+        monitoring.Monitoring.KpiList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList buildPartial() {
+        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
           }
-          onChanged();
+          result.kpiList_ = kpiList_;
         } else {
-          kpiIdBuilder_.mergeFrom(value);
+          result.kpiList_ = kpiListBuilder_.build();
         }
-
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
 
-        return this;
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-
-      private float samplingDurationS_ ;
-      /**
-       * <code>float sampling_duration_s = 3;</code>
-       * @return The samplingDurationS.
-       */
       @java.lang.Override
-      public float getSamplingDurationS() {
-        return samplingDurationS_;
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      /**
-       * <code>float sampling_duration_s = 3;</code>
-       * @param value The samplingDurationS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingDurationS(float value) {
-        
-        samplingDurationS_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>float sampling_duration_s = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSamplingDurationS() {
-        
-        samplingDurationS_ = 0F;
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiList) {
+          return mergeFrom((monitoring.Monitoring.KpiList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
+        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiListFieldBuilder() : null;
+            } else {
+              kpiListBuilder_.addAllMessages(other.kpiList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
 
-      private float samplingIntervalS_ ;
-      /**
-       * <code>float sampling_interval_s = 4;</code>
-       * @return The samplingIntervalS.
-       */
       @java.lang.Override
-      public float getSamplingIntervalS() {
-        return samplingIntervalS_;
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>float sampling_interval_s = 4;</code>
-       * @param value The samplingIntervalS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingIntervalS(float value) {
-        
-        samplingIntervalS_ = value;
-        onChanged();
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
+
       /**
-       * <code>float sampling_interval_s = 4;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearSamplingIntervalS() {
-        
-        samplingIntervalS_ = 0F;
-        onChanged();
-        return this;
+      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
       }
-
-      private context.ContextOuterClass.Timestamp startTimestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> startTimestampBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return Whether the startTimestamp field is set.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public boolean hasStartTimestamp() {
-        return startTimestampBuilder_ != null || startTimestamp_ != null;
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return The startTimestamp.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp getStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+      public monitoring.Monitoring.Kpi getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
         } else {
-          return startTimestampBuilder_.getMessage();
+          return kpiListBuilder_.getMessage(index);
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          startTimestamp_ = value;
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(value);
+          kpiListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setStartTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = builderForValue.build();
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(builderForValue.build());
+          kpiListBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
-          if (startTimestamp_ != null) {
-            startTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
-          } else {
-            startTimestamp_ = value;
+      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
           onChanged();
         } else {
-          startTimestampBuilder_.mergeFrom(value);
+          kpiListBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
           onChanged();
         } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
+          kpiListBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       */
-      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
-        
-        onChanged();
-        return getStartTimestampFieldBuilder().getBuilder();
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       */
-      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-        if (startTimestampBuilder_ != null) {
-          return startTimestampBuilder_.getMessageOrBuilder();
-        } else {
-          return startTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
-        }
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getStartTimestampFieldBuilder() {
-        if (startTimestampBuilder_ == null) {
-          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getStartTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          startTimestamp_ = null;
-        }
-        return startTimestampBuilder_;
-      }
-
-      private context.ContextOuterClass.Timestamp endTimestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
-      /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return Whether the endTimestamp field is set.
-       */
-      public boolean hasEndTimestamp() {
-        return endTimestampBuilder_ != null || endTimestamp_ != null;
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return The endTimestamp.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp getEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+      public Builder addKpiList(
+          monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
         } else {
-          return endTimestampBuilder_.getMessage();
+          kpiListBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endTimestamp_ = value;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(value);
+          kpiListBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setEndTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = builderForValue.build();
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(builderForValue.build());
+          kpiListBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
-          if (endTimestamp_ != null) {
-            endTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
-          } else {
-            endTimestamp_ = value;
-          }
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          endTimestampBuilder_.mergeFrom(value);
+          kpiListBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
           onChanged();
         } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
+          kpiListBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
-        
-        onChanged();
-        return getEndTimestampFieldBuilder().getBuilder();
+      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-        if (endTimestampBuilder_ != null) {
-          return endTimestampBuilder_.getMessageOrBuilder();
+      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
         } else {
-          return endTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+          return java.util.Collections.unmodifiableList(kpiList_);
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getEndTimestampFieldBuilder() {
-        if (endTimestampBuilder_ == null) {
-          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getEndTimestamp(),
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          endTimestamp_ = null;
+          kpiList_ = null;
         }
-        return endTimestampBuilder_;
+        return kpiListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -11517,85 +11785,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
-    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
+    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
     }
 
-    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
+    public static monitoring.Monitoring.KpiList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
+    private static final com.google.protobuf.Parser<KpiList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
       @java.lang.Override
-      public SubsDescriptor parsePartialFrom(
+      public KpiList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsDescriptor(input, extensionRegistry);
+        return new KpiList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
+    public static com.google.protobuf.Parser<KpiList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsDescriptor> getParserForType() {
+    public com.google.protobuf.Parser<KpiList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubscriptionIDOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID)
+  public interface KpiDescriptorListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    boolean hasSubsId();
+    java.util.List<monitoring.Monitoring.KpiDescriptor> 
+        getKpiDescriptorListList();
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return The subsId.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    context.ContextOuterClass.Uuid getSubsId();
+    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
+    int getKpiDescriptorListCount();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code monitoring.SubscriptionID}
+   * Protobuf type {@code monitoring.KpiDescriptorList}
    */
-  public static final class SubscriptionID extends
+  public static final class KpiDescriptorList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
-      SubscriptionIDOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
+      KpiDescriptorListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubscriptionID.newBuilder() to construct.
-    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiDescriptorList.newBuilder() to construct.
+    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubscriptionID() {
+    private KpiDescriptorList() {
+      kpiDescriptorList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubscriptionID();
+      return new KpiDescriptorList();
     }
 
     @java.lang.Override
@@ -11603,7 +11881,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubscriptionID(
+    private KpiDescriptorList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -11611,6 +11889,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -11622,16 +11901,12 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (subsId_ != null) {
-                subBuilder = subsId_.toBuilder();
-              }
-              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(subsId_);
-                subsId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              kpiDescriptorList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11649,47 +11924,64 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
     }
 
-    public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid subsId_;
+    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public boolean hasSubsId() {
-      return subsId_ != null;
+    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+      return kpiDescriptorList_;
     }
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return The subsId.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getSubsId() {
-      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList() {
+      return kpiDescriptorList_;
     }
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
-      return getSubsId();
+    public int getKpiDescriptorListCount() {
+      return kpiDescriptorList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+      return kpiDescriptorList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index) {
+      return kpiDescriptorList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11706,8 +11998,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (subsId_ != null) {
-        output.writeMessage(1, getSubsId());
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+        output.writeMessage(1, kpiDescriptorList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11718,9 +12010,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (subsId_ != null) {
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSubsId());
+          .computeMessageSize(1, kpiDescriptorList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11732,16 +12024,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
+      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
 
-      if (hasSubsId() != other.hasSubsId()) return false;
-      if (hasSubsId()) {
-        if (!getSubsId()
-            .equals(other.getSubsId())) return false;
-      }
+      if (!getKpiDescriptorListList()
+          .equals(other.getKpiDescriptorListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11753,78 +12042,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSubsId()) {
-        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsId().hashCode();
+      if (getKpiDescriptorListCount() > 0) {
+        hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiDescriptorListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -11837,7 +12126,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubscriptionID prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiDescriptorList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -11853,26 +12142,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubscriptionID}
+     * Protobuf type {@code monitoring.KpiDescriptorList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubscriptionID)
-        monitoring.Monitoring.SubscriptionIDOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptorList)
+        monitoring.Monitoring.KpiDescriptorListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubscriptionID.newBuilder()
+      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -11885,16 +12174,17 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiDescriptorListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
+          kpiDescriptorListBuilder_.clear();
         }
         return this;
       }
@@ -11902,17 +12192,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
+      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID build() {
-        monitoring.Monitoring.SubscriptionID result = buildPartial();
+      public monitoring.Monitoring.KpiDescriptorList build() {
+        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -11920,12 +12210,17 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID buildPartial() {
-        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
-        if (subsIdBuilder_ == null) {
-          result.subsId_ = subsId_;
+      public monitoring.Monitoring.KpiDescriptorList buildPartial() {
+        monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiDescriptorListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiDescriptorList_ = kpiDescriptorList_;
         } else {
-          result.subsId_ = subsIdBuilder_.build();
+          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -11965,18 +12260,41 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubscriptionID) {
-          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
+        if (other instanceof monitoring.Monitoring.KpiDescriptorList) {
+          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) {
-        if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this;
-        if (other.hasSubsId()) {
-          mergeSubsId(other.getSubsId());
+      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptorList other) {
+        if (other == monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()) return this;
+        if (kpiDescriptorListBuilder_ == null) {
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorList_.isEmpty()) {
+              kpiDescriptorList_ = other.kpiDescriptorList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiDescriptorListIsMutable();
+              kpiDescriptorList_.addAll(other.kpiDescriptorList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorListBuilder_.isEmpty()) {
+              kpiDescriptorListBuilder_.dispose();
+              kpiDescriptorListBuilder_ = null;
+              kpiDescriptorList_ = other.kpiDescriptorList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiDescriptorListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiDescriptorListFieldBuilder() : null;
+            } else {
+              kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -11993,11 +12311,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubscriptionID parsedMessage = null;
+        monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -12006,124 +12324,246 @@ public final class Monitoring {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiDescriptorListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_;
 
-      private context.ContextOuterClass.Uuid subsId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
-       * @return Whether the subsId field is set.
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
+      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        } else {
+          return kpiDescriptorListBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
-       * @return The subsId.
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+      public int getKpiDescriptorListCount() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.size();
         } else {
-          return subsIdBuilder_.getMessage();
+          return kpiDescriptorListBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
-        if (subsIdBuilder_ == null) {
+      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);
+        } else {
+          return kpiDescriptorListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          subsId_ = value;
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, value);
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(value);
+          kpiDescriptorListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder setSubsId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addAllKpiDescriptorList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiDescriptorList_);
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
+          kpiDescriptorListBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
-          } else {
-            subsId_ = value;
-          }
+      public Builder clearKpiDescriptorList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          subsIdBuilder_.mergeFrom(value);
+          kpiDescriptorListBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
+      public Builder removeKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.remove(index);
           onChanged();
         } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
+          kpiDescriptorListBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
-        
-        onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
+      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+          int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);  } else {
+          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+           getKpiDescriptorListOrBuilderList() {
+        if (kpiDescriptorListBuilder_ != null) {
+          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
         } else {
-          return subsId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
         }
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getSubsId(),
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> 
+           getKpiDescriptorListBuilderList() {
+        return getKpiDescriptorListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> 
+          getKpiDescriptorListFieldBuilder() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>(
+                  kpiDescriptorList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          subsId_ = null;
+          kpiDescriptorList_ = null;
         }
-        return subsIdBuilder_;
+        return kpiDescriptorListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -12138,110 +12578,139 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
-    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
+    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
     }
 
-    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
+    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubscriptionID>
-        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
+    private static final com.google.protobuf.Parser<KpiDescriptorList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
       @java.lang.Override
-      public SubscriptionID parsePartialFrom(
+      public KpiDescriptorList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubscriptionID(input, extensionRegistry);
+        return new KpiDescriptorList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubscriptionID> parser() {
+    public static com.google.protobuf.Parser<KpiDescriptorList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubscriptionID> getParserForType() {
+    public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubsResponseOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse)
+  public interface SubsDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
-    boolean hasSubsId();
+    boolean hasKpiId();
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
-    monitoring.Monitoring.SubscriptionID getSubsId();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
 
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
      */
-    java.util.List<monitoring.Monitoring.KpiList> 
-        getKpiListList();
+    float getSamplingDurationS();
+
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
      */
-    monitoring.Monitoring.KpiList getKpiList(int index);
+    float getSamplingIntervalS();
+
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The startDate.
      */
-    int getKpiListCount();
+    java.lang.String getStartDate();
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The bytes for startDate.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-        getKpiListOrBuilderList();
+    com.google.protobuf.ByteString
+        getStartDateBytes();
+
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The endDate.
      */
-    monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
-        int index);
+    java.lang.String getEndDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The bytes for endDate.
+     */
+    com.google.protobuf.ByteString
+        getEndDateBytes();
   }
   /**
-   * Protobuf type {@code monitoring.SubsResponse}
+   * Protobuf type {@code monitoring.SubsDescriptor}
    */
-  public static final class SubsResponse extends
+  public static final class SubsDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
-      SubsResponseOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
+      SubsDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsResponse.newBuilder() to construct.
-    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubsDescriptor.newBuilder() to construct.
+    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsResponse() {
-      kpiList_ = java.util.Collections.emptyList();
+    private SubsDescriptor() {
+      startDate_ = "";
+      endDate_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsResponse();
+      return new SubsDescriptor();
     }
 
     @java.lang.Override
@@ -12249,7 +12718,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsResponse(
+    private SubsDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -12257,7 +12726,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -12269,25 +12737,38 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
-              if (subsId_ != null) {
-                subBuilder = subsId_.toBuilder();
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
               }
-              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(subsId_);
-                subsId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry));
+            case 21: {
+
+              samplingDurationS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingIntervalS_ = input.readFloat();
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              startDate_ = s;
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endDate_ = s;
               break;
             }
             default: {
@@ -12305,90 +12786,161 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+              monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
     }
 
-    public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.SubscriptionID subsId_;
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public boolean hasSubsId() {
-      return subsId_ != null;
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsId() {
-      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-      return getSubsId();
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 2;
-    private java.util.List<monitoring.Monitoring.KpiList> kpiList_;
+    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 2;
+    private float samplingDurationS_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
-      return kpiList_;
+    public float getSamplingDurationS() {
+      return samplingDurationS_;
     }
+
+    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 3;
+    private float samplingIntervalS_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public float getSamplingIntervalS() {
+      return samplingIntervalS_;
     }
+
+    public static final int START_DATE_FIELD_NUMBER = 4;
+    private volatile java.lang.Object startDate_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The startDate.
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public java.lang.String getStartDate() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        startDate_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The bytes for startDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getKpiList(int index) {
-      return kpiList_.get(index);
+    public com.google.protobuf.ByteString
+        getStartDateBytes() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        startDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int END_DATE_FIELD_NUMBER = 5;
+    private volatile java.lang.Object endDate_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The endDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
-        int index) {
-      return kpiList_.get(index);
+    public java.lang.String getEndDate() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The bytes for endDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndDateBytes() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -12405,11 +12957,20 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (subsId_ != null) {
-        output.writeMessage(1, getSubsId());
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
-      for (int i = 0; i < kpiList_.size(); i++) {
-        output.writeMessage(2, kpiList_.get(i));
+      if (samplingDurationS_ != 0F) {
+        output.writeFloat(2, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        output.writeFloat(3, samplingIntervalS_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, endDate_);
       }
       unknownFields.writeTo(output);
     }
@@ -12420,13 +12981,23 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (subsId_ != null) {
+      if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSubsId());
+          .computeMessageSize(1, getKpiId());
       }
-      for (int i = 0; i < kpiList_.size(); i++) {
+      if (samplingDurationS_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, kpiList_.get(i));
+          .computeFloatSize(2, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingIntervalS_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, endDate_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -12438,18 +13009,26 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsResponse)) {
+      if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj;
+      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
 
-      if (hasSubsId() != other.hasSubsId()) return false;
-      if (hasSubsId()) {
-        if (!getSubsId()
-            .equals(other.getSubsId())) return false;
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
       }
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingDurationS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingIntervalS())) return false;
+      if (!getStartDate()
+          .equals(other.getStartDate())) return false;
+      if (!getEndDate()
+          .equals(other.getEndDate())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12461,82 +13040,88 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSubsId()) {
-        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsId().hashCode();
-      }
-      if (getKpiListCount() > 0) {
-        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiListList().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
       }
+      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingDurationS());
+      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingIntervalS());
+      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getStartDate().hashCode();
+      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndDate().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -12549,7 +13134,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsResponse prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubsDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -12565,26 +13150,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubsResponse}
+     * Protobuf type {@code monitoring.SubsDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsResponse)
-        monitoring.Monitoring.SubsResponseOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor)
+        monitoring.Monitoring.SubsDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
+      // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -12597,65 +13182,60 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
         } else {
-          kpiListBuilder_.clear();
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
+        samplingDurationS_ = 0F;
+
+        samplingIntervalS_ = 0F;
+
+        startDate_ = "";
+
+        endDate_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsResponse build() {
-        monitoring.Monitoring.SubsResponse result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
+      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsResponse buildPartial() {
-        monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
-        int from_bitField0_ = bitField0_;
-        if (subsIdBuilder_ == null) {
-          result.subsId_ = subsId_;
-        } else {
-          result.subsId_ = subsIdBuilder_.build();
+      public monitoring.Monitoring.SubsDescriptor build() {
+        monitoring.Monitoring.SubsDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        if (kpiListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiList_ = kpiList_;
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor buildPartial() {
+        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.kpiId_ = kpiIdBuilder_.build();
         }
+        result.samplingDurationS_ = samplingDurationS_;
+        result.samplingIntervalS_ = samplingIntervalS_;
+        result.startDate_ = startDate_;
+        result.endDate_ = endDate_;
         onBuilt();
         return result;
       }
@@ -12694,44 +13274,32 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsResponse) {
-          return mergeFrom((monitoring.Monitoring.SubsResponse)other);
+        if (other instanceof monitoring.Monitoring.SubsDescriptor) {
+          return mergeFrom((monitoring.Monitoring.SubsDescriptor)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) {
-        if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this;
-        if (other.hasSubsId()) {
-          mergeSubsId(other.getSubsId());
+      public Builder mergeFrom(monitoring.Monitoring.SubsDescriptor other) {
+        if (other == monitoring.Monitoring.SubsDescriptor.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
         }
-        if (kpiListBuilder_ == null) {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiList_.isEmpty()) {
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
-            } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
-            }
-          }
+        if (other.getSamplingDurationS() != 0F) {
+          setSamplingDurationS(other.getSamplingDurationS());
+        }
+        if (other.getSamplingIntervalS() != 0F) {
+          setSamplingIntervalS(other.getSamplingIntervalS());
+        }
+        if (!other.getStartDate().isEmpty()) {
+          startDate_ = other.startDate_;
+          onChanged();
+        }
+        if (!other.getEndDate().isEmpty()) {
+          endDate_ = other.endDate_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -12748,11 +13316,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubsResponse parsedMessage = null;
+        monitoring.Monitoring.SubsDescriptor parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -12761,365 +13329,378 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
 
-      private monitoring.Monitoring.SubscriptionID subsId_;
+      private monitoring.Monitoring.KpiId kpiId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return Whether the subsId field is set.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return The subsId.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public monitoring.Monitoring.SubscriptionID getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
-          return subsIdBuilder_.getMessage();
+          return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          subsId_ = value;
+          kpiId_ = value;
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(value);
+          kpiIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setSubsId(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
+          kpiIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
           } else {
-            subsId_ = value;
+            kpiId_ = value;
           }
           onChanged();
         } else {
-          subsIdBuilder_.mergeFrom(value);
+          kpiIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
           onChanged();
         } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
         
         onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
         } else {
-          return subsId_ == null ?
-              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  getSubsId(),
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
                   getParentForChildren(),
                   isClean());
-          subsId_ = null;
+          kpiId_ = null;
         }
-        return subsIdBuilder_;
-      }
-
-      private java.util.List<monitoring.Monitoring.KpiList> kpiList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_);
-          bitField0_ |= 0x00000001;
-         }
+        return kpiIdBuilder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_;
-
-      /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
-        if (kpiListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiList_);
-        } else {
-          return kpiListBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
-       */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
-        } else {
-          return kpiListBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
-       */
-      public monitoring.Monitoring.KpiList getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
-        } else {
-          return kpiListBuilder_.getMessage(index);
-        }
-      }
+      private float samplingDurationS_ ;
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_duration_s = 2;</code>
+       * @return The samplingDurationS.
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
-          onChanged();
-        } else {
-          kpiListBuilder_.setMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public float getSamplingDurationS() {
+        return samplingDurationS_;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_duration_s = 2;</code>
+       * @param value The samplingDurationS to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder setSamplingDurationS(float value) {
+        
+        samplingDurationS_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_duration_s = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(value);
-        }
+      public Builder clearSamplingDurationS() {
+        
+        samplingDurationS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private float samplingIntervalS_ ;
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_interval_s = 3;</code>
+       * @return The samplingIntervalS.
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public float getSamplingIntervalS() {
+        return samplingIntervalS_;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_interval_s = 3;</code>
+       * @param value The samplingIntervalS to set.
+       * @return This builder for chaining.
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
-        }
+      public Builder setSamplingIntervalS(float value) {
+        
+        samplingIntervalS_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_interval_s = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder clearSamplingIntervalS() {
+        
+        samplingIntervalS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object startDate_ = "";
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return The startDate.
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
-          onChanged();
+      public java.lang.String getStartDate() {
+        java.lang.Object ref = startDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          startDate_ = s;
+          return s;
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return The bytes for startDate.
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public com.google.protobuf.ByteString
+          getStartDateBytes() {
+        java.lang.Object ref = startDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          startDate_ = b;
+          return b;
         } else {
-          kpiListBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @param value The startDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        startDate_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
-          onChanged();
-        } else {
-          kpiListBuilder_.remove(index);
-        }
+      public Builder clearStartDate() {
+        
+        startDate_ = getDefaultInstance().getStartDate();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @param value The bytes for startDate to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiList.Builder getKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
+        return this;
       }
+
+      private java.lang.Object endDate_ = "";
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return The endDate.
        */
-      public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
-          int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
+      public java.lang.String getEndDate() {
+        java.lang.Object ref = endDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endDate_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return The bytes for endDate.
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-           getKpiListOrBuilderList() {
-        if (kpiListBuilder_ != null) {
-          return kpiListBuilder_.getMessageOrBuilderList();
+      public com.google.protobuf.ByteString
+          getEndDateBytes() {
+        java.lang.Object ref = endDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endDate_ = b;
+          return b;
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @param value The endDate to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiList.getDefaultInstance());
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiList.getDefaultInstance());
+      public Builder clearEndDate() {
+        
+        endDate_ = getDefaultInstance().getEndDate();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @param value The bytes for endDate to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<monitoring.Monitoring.KpiList.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> 
-          getKpiListFieldBuilder() {
-        if (kpiListBuilder_ == null) {
-          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder>(
-                  kpiList_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiList_ = null;
-        }
-        return kpiListBuilder_;
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -13134,95 +13715,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
     }
-
-    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
-    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
+    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
     }
 
-    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
+    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsResponse>
-        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
+    private static final com.google.protobuf.Parser<SubsDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
       @java.lang.Override
-      public SubsResponse parsePartialFrom(
+      public SubsDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsResponse(input, extensionRegistry);
+        return new SubsDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsResponse> parser() {
+    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
+    public com.google.protobuf.Parser<SubsDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubsIDListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList)
+  public interface SubscriptionIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    java.util.List<monitoring.Monitoring.SubscriptionID> 
-        getSubsListList();
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    monitoring.Monitoring.SubscriptionID getSubsList(int index);
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
-    int getSubsListCount();
+    boolean hasSubsId();
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
      */
-    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-        getSubsListOrBuilderList();
+    context.ContextOuterClass.Uuid getSubsId();
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
      */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
-        int index);
+    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.SubsIDList}
+   * Protobuf type {@code monitoring.SubscriptionID}
    */
-  public static final class SubsIDList extends
+  public static final class SubscriptionID extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
-      SubsIDListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
+      SubscriptionIDOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsIDList.newBuilder() to construct.
-    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubscriptionID.newBuilder() to construct.
+    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsIDList() {
-      subsList_ = java.util.Collections.emptyList();
+    private SubscriptionID() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsIDList();
+      return new SubscriptionID();
     }
 
     @java.lang.Override
@@ -13230,7 +13801,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsIDList(
+    private SubscriptionID(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -13238,7 +13809,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -13250,12 +13820,16 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
               }
-              subsList_.add(
-                  input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry));
+              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -13273,64 +13847,47 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          subsList_ = java.util.Collections.unmodifiableList(subsList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
     }
 
-    public static final int SUBS_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
-      return subsList_;
-    }
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-        getSubsListOrBuilderList() {
-      return subsList_;
-    }
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid subsId_;
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
     @java.lang.Override
-    public int getSubsListCount() {
-      return subsList_.size();
+    public boolean hasSubsId() {
+      return subsId_ != null;
     }
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
-      return subsList_.get(index);
+    public context.ContextOuterClass.Uuid getSubsId() {
+      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
     }
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
-        int index) {
-      return subsList_.get(index);
+    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -13347,8 +13904,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < subsList_.size(); i++) {
-        output.writeMessage(1, subsList_.get(i));
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
       }
       unknownFields.writeTo(output);
     }
@@ -13359,9 +13916,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < subsList_.size(); i++) {
+      if (subsId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, subsList_.get(i));
+          .computeMessageSize(1, getSubsId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -13373,13 +13930,16 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsIDList)) {
+      if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
+      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
 
-      if (!getSubsListList()
-          .equals(other.getSubsListList())) return false;
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -13391,78 +13951,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSubsListCount() > 0) {
-        hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsListList().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubscriptionID parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -13475,7 +14035,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsIDList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubscriptionID prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -13491,26 +14051,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubsIDList}
+     * Protobuf type {@code monitoring.SubscriptionID}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsIDList)
-        monitoring.Monitoring.SubsIDListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubscriptionID)
+        monitoring.Monitoring.SubscriptionIDOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
+      // Construct using monitoring.Monitoring.SubscriptionID.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -13523,17 +14083,16 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSubsListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsListBuilder_ == null) {
-          subsList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
         } else {
-          subsListBuilder_.clear();
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
         return this;
       }
@@ -13541,17 +14100,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsIDList.getDefaultInstance();
+      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsIDList build() {
-        monitoring.Monitoring.SubsIDList result = buildPartial();
+      public monitoring.Monitoring.SubscriptionID build() {
+        monitoring.Monitoring.SubscriptionID result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -13559,17 +14118,12 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsIDList buildPartial() {
-        monitoring.Monitoring.SubsIDList result = new monitoring.Monitoring.SubsIDList(this);
-        int from_bitField0_ = bitField0_;
-        if (subsListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            subsList_ = java.util.Collections.unmodifiableList(subsList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.subsList_ = subsList_;
+      public monitoring.Monitoring.SubscriptionID buildPartial() {
+        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
         } else {
-          result.subsList_ = subsListBuilder_.build();
+          result.subsId_ = subsIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -13606,44 +14160,21 @@ public final class Monitoring {
           com.google.protobuf.Descriptors.FieldDescriptor field,
           java.lang.Object value) {
         return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsIDList) {
-          return mergeFrom((monitoring.Monitoring.SubsIDList)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.SubsIDList other) {
-        if (other == monitoring.Monitoring.SubsIDList.getDefaultInstance()) return this;
-        if (subsListBuilder_ == null) {
-          if (!other.subsList_.isEmpty()) {
-            if (subsList_.isEmpty()) {
-              subsList_ = other.subsList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSubsListIsMutable();
-              subsList_.addAll(other.subsList_);
-            }
-            onChanged();
-          }
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubscriptionID) {
+          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
         } else {
-          if (!other.subsList_.isEmpty()) {
-            if (subsListBuilder_.isEmpty()) {
-              subsListBuilder_.dispose();
-              subsListBuilder_ = null;
-              subsList_ = other.subsList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              subsListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubsListFieldBuilder() : null;
-            } else {
-              subsListBuilder_.addAllMessages(other.subsList_);
-            }
-          }
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) {
+        if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -13660,11 +14191,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubsIDList parsedMessage = null;
+        monitoring.Monitoring.SubscriptionID parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -13673,246 +14204,124 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ =
-        java.util.Collections.emptyList();
-      private void ensureSubsListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_;
 
+      private context.ContextOuterClass.Uuid subsId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
-        if (subsListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subsList_);
-        } else {
-          return subsListBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return Whether the subsId field is set.
        */
-      public int getSubsListCount() {
-        if (subsListBuilder_ == null) {
-          return subsList_.size();
-        } else {
-          return subsListBuilder_.getCount();
-        }
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return The subsId.
        */
-      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
-        if (subsListBuilder_ == null) {
-          return subsList_.get(index);
+      public context.ContextOuterClass.Uuid getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
         } else {
-          return subsListBuilder_.getMessage(index);
+          return subsIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder setSubsList(
-          int index, monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
+      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubsListIsMutable();
-          subsList_.set(index, value);
-          onChanged();
-        } else {
-          subsListBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder setSubsList(
-          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.set(index, builderForValue.build());
+          subsId_ = value;
           onChanged();
         } else {
-          subsListBuilder_.setMessage(index, builderForValue.build());
+          subsIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubsListIsMutable();
-          subsList_.add(value);
+      public Builder setSubsId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
           onChanged();
         } else {
-          subsListBuilder_.addMessage(value);
+          subsIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder addSubsList(
-          int index, monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
           }
-          ensureSubsListIsMutable();
-          subsList_.add(index, value);
-          onChanged();
-        } else {
-          subsListBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          subsListBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(
-          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          subsListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addAllSubsList(
-          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subsList_);
-          onChanged();
-        } else {
-          subsListBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder clearSubsList() {
-        if (subsListBuilder_ == null) {
-          subsList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          subsListBuilder_.clear();
+          subsIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder removeSubsList(int index) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.remove(index);
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
           onChanged();
         } else {
-          subsListBuilder_.remove(index);
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
-          int index) {
-        return getSubsListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
-          int index) {
-        if (subsListBuilder_ == null) {
-          return subsList_.get(index);  } else {
-          return subsListBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-           getSubsListOrBuilderList() {
-        if (subsListBuilder_ != null) {
-          return subsListBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(subsList_);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() {
-        return getSubsListFieldBuilder().addBuilder(
-            monitoring.Monitoring.SubscriptionID.getDefaultInstance());
+      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder(
-          int index) {
-        return getSubsListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.SubscriptionID.getDefaultInstance());
+      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+        }
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> 
-           getSubsListBuilderList() {
-        return getSubsListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsListFieldBuilder() {
-        if (subsListBuilder_ == null) {
-          subsListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  subsList_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getSubsId(),
                   getParentForChildren(),
                   isClean());
-          subsList_ = null;
+          subsId_ = null;
         }
-        return subsListBuilder_;
+        return subsIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -13927,176 +14336,110 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
-    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
+    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
     }
 
-    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
+    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsIDList>
-        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
+    private static final com.google.protobuf.Parser<SubscriptionID>
+        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
       @java.lang.Override
-      public SubsIDList parsePartialFrom(
+      public SubscriptionID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsIDList(input, extensionRegistry);
+        return new SubscriptionID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsIDList> parser() {
+    public static com.google.protobuf.Parser<SubscriptionID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
+    public com.google.protobuf.Parser<SubscriptionID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface AlarmDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
+  public interface SubsResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
-    boolean hasAlarmId();
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return The alarmId.
-     */
-    monitoring.Monitoring.AlarmID getAlarmId();
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     */
-    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder();
-
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The alarmDescription.
-     */
-    java.lang.String getAlarmDescription();
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The bytes for alarmDescription.
-     */
-    com.google.protobuf.ByteString
-        getAlarmDescriptionBytes();
-
-    /**
-     * <code>string name = 3;</code>
-     * @return The name.
-     */
-    java.lang.String getName();
-    /**
-     * <code>string name = 3;</code>
-     * @return The bytes for name.
-     */
-    com.google.protobuf.ByteString
-        getNameBytes();
-
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    monitoring.Monitoring.KpiId getKpiId(int index);
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
-    int getKpiIdCount();
+    boolean hasSubsId();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList();
+    monitoring.Monitoring.SubscriptionID getSubsId();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index);
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
 
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    java.util.List<monitoring.Monitoring.KpiValueRange> 
-        getKpiValueRangeList();
+    java.util.List<monitoring.Monitoring.KpiList> 
+        getKpiListList();
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    monitoring.Monitoring.KpiValueRange getKpiValueRange(int index);
+    monitoring.Monitoring.KpiList getKpiList(int index);
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    int getKpiValueRangeCount();
+    int getKpiListCount();
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
-        getKpiValueRangeOrBuilderList();
+    java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList();
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+    monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
         int index);
-
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return Whether the timestamp field is set.
-     */
-    boolean hasTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return The timestamp.
-     */
-    context.ContextOuterClass.Timestamp getTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.AlarmDescriptor}
+   * Protobuf type {@code monitoring.SubsResponse}
    */
-  public static final class AlarmDescriptor extends
+  public static final class SubsResponse extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
-      AlarmDescriptorOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
+      SubsResponseOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use AlarmDescriptor.newBuilder() to construct.
-    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubsResponse.newBuilder() to construct.
+    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private AlarmDescriptor() {
-      alarmDescription_ = "";
-      name_ = "";
-      kpiId_ = java.util.Collections.emptyList();
-      kpiValueRange_ = java.util.Collections.emptyList();
+    private SubsResponse() {
+      kpiList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new AlarmDescriptor();
+      return new SubsResponse();
     }
 
     @java.lang.Override
@@ -14104,7 +14447,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private AlarmDescriptor(
+    private SubsResponse(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -14124,59 +14467,25 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.AlarmID.Builder subBuilder = null;
-              if (alarmId_ != null) {
-                subBuilder = alarmId_.toBuilder();
+              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
               }
-              alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
+              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(alarmId_);
-                alarmId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              alarmDescription_ = s;
-              break;
-            }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              name_ = s;
-              break;
-            }
-            case 34: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiId_.add(
-                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                kpiValueRange_ = new java.util.ArrayList<monitoring.Monitoring.KpiValueRange>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              kpiValueRange_.add(
-                  input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry));
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
-
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -14195,234 +14504,89 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
-    }
-
-    public static final int ALARM_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.AlarmID alarmId_;
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
-    @java.lang.Override
-    public boolean hasAlarmId() {
-      return alarmId_ != null;
-    }
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return The alarmId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmID getAlarmId() {
-      return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
-    }
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
-      return getAlarmId();
-    }
-
-    public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 2;
-    private volatile java.lang.Object alarmDescription_;
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The alarmDescription.
-     */
-    @java.lang.Override
-    public java.lang.String getAlarmDescription() {
-      java.lang.Object ref = alarmDescription_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        alarmDescription_ = s;
-        return s;
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
     }
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The bytes for alarmDescription.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getAlarmDescriptionBytes() {
-      java.lang.Object ref = alarmDescription_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        alarmDescription_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
     }
 
-    public static final int NAME_FIELD_NUMBER = 3;
-    private volatile java.lang.Object name_;
-    /**
-     * <code>string name = 3;</code>
-     * @return The name.
-     */
-    @java.lang.Override
-    public java.lang.String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        name_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string name = 3;</code>
-     * @return The bytes for name.
-     */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 4;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-      return kpiId_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList() {
-      return kpiId_;
-    }
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.SubscriptionID subsId_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
     @java.lang.Override
-    public int getKpiIdCount() {
-      return kpiId_.size();
+    public boolean hasSubsId() {
+      return subsId_ != null;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId(int index) {
-      return kpiId_.get(index);
+    public monitoring.Monitoring.SubscriptionID getSubsId() {
+      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index) {
-      return kpiId_.get(index);
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
     }
 
-    public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 5;
-    private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_;
+    public static final int KPI_LIST_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.KpiList> kpiList_;
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() {
-      return kpiValueRange_;
+    public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+      return kpiList_;
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
-        getKpiValueRangeOrBuilderList() {
-      return kpiValueRange_;
+    public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public int getKpiValueRangeCount() {
-      return kpiValueRange_.size();
+    public int getKpiListCount() {
+      return kpiList_.size();
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) {
-      return kpiValueRange_.get(index);
+    public monitoring.Monitoring.KpiList getKpiList(int index) {
+      return kpiList_.get(index);
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+    public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
         int index) {
-      return kpiValueRange_.get(index);
-    }
-
-    public static final int TIMESTAMP_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.Timestamp timestamp_;
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return Whether the timestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
+      return kpiList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -14439,23 +14603,11 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (alarmId_ != null) {
-        output.writeMessage(1, getAlarmId());
-      }
-      if (!getAlarmDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, alarmDescription_);
-      }
-      if (!getNameBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);
-      }
-      for (int i = 0; i < kpiId_.size(); i++) {
-        output.writeMessage(4, kpiId_.get(i));
-      }
-      for (int i = 0; i < kpiValueRange_.size(); i++) {
-        output.writeMessage(5, kpiValueRange_.get(i));
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
       }
-      if (timestamp_ != null) {
-        output.writeMessage(6, getTimestamp());
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(2, kpiList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -14466,27 +14618,13 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (alarmId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getAlarmId());
-      }
-      if (!getAlarmDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, alarmDescription_);
-      }
-      if (!getNameBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);
-      }
-      for (int i = 0; i < kpiId_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, kpiId_.get(i));
-      }
-      for (int i = 0; i < kpiValueRange_.size(); i++) {
+      if (subsId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, kpiValueRange_.get(i));
+          .computeMessageSize(1, getSubsId());
       }
-      if (timestamp_ != null) {
+      for (int i = 0; i < kpiList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getTimestamp());
+          .computeMessageSize(2, kpiList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -14498,29 +14636,18 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
+      if (!(obj instanceof monitoring.Monitoring.SubsResponse)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj;
+      monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj;
 
-      if (hasAlarmId() != other.hasAlarmId()) return false;
-      if (hasAlarmId()) {
-        if (!getAlarmId()
-            .equals(other.getAlarmId())) return false;
-      }
-      if (!getAlarmDescription()
-          .equals(other.getAlarmDescription())) return false;
-      if (!getName()
-          .equals(other.getName())) return false;
-      if (!getKpiIdList()
-          .equals(other.getKpiIdList())) return false;
-      if (!getKpiValueRangeList()
-          .equals(other.getKpiValueRangeList())) return false;
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
       }
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -14532,94 +14659,82 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasAlarmId()) {
-        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getAlarmId().hashCode();
-      }
-      hash = (37 * hash) + ALARM_DESCRIPTION_FIELD_NUMBER;
-      hash = (53 * hash) + getAlarmDescription().hashCode();
-      hash = (37 * hash) + NAME_FIELD_NUMBER;
-      hash = (53 * hash) + getName().hashCode();
-      if (getKpiIdCount() > 0) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdList().hashCode();
-      }
-      if (getKpiValueRangeCount() > 0) {
-        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiValueRangeList().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
       }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -14632,7 +14747,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmDescriptor prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubsResponse prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -14648,26 +14763,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.AlarmDescriptor}
+     * Protobuf type {@code monitoring.SubsResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmDescriptor)
-        monitoring.Monitoring.AlarmDescriptorOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsResponse)
+        monitoring.Monitoring.SubsResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
+      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -14680,40 +14795,23 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiIdFieldBuilder();
-          getKpiValueRangeFieldBuilder();
+          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
-        } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
-        }
-        alarmDescription_ = "";
-
-        name_ = "";
-
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          kpiIdBuilder_.clear();
-        }
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRange_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
         } else {
-          kpiValueRangeBuilder_.clear();
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
+          kpiListBuilder_.clear();
         }
         return this;
       }
@@ -14721,17 +14819,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
+      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor build() {
-        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
+      public monitoring.Monitoring.SubsResponse build() {
+        monitoring.Monitoring.SubsResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -14739,38 +14837,22 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor buildPartial() {
-        monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
+      public monitoring.Monitoring.SubsResponse buildPartial() {
+        monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
         int from_bitField0_ = bitField0_;
-        if (alarmIdBuilder_ == null) {
-          result.alarmId_ = alarmId_;
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
         } else {
-          result.alarmId_ = alarmIdBuilder_.build();
+          result.subsId_ = subsIdBuilder_.build();
         }
-        result.alarmDescription_ = alarmDescription_;
-        result.name_ = name_;
-        if (kpiIdBuilder_ == null) {
+        if (kpiListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        if (kpiValueRangeBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.kpiValueRange_ = kpiValueRange_;
-        } else {
-          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
-        }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
+          result.kpiList_ = kpiList_;
         } else {
-          result.timestamp_ = timestampBuilder_.build();
+          result.kpiList_ = kpiListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -14810,82 +14892,45 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmDescriptor) {
-          return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other);
+        if (other instanceof monitoring.Monitoring.SubsResponse) {
+          return mergeFrom((monitoring.Monitoring.SubsResponse)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmDescriptor other) {
-        if (other == monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()) return this;
-        if (other.hasAlarmId()) {
-          mergeAlarmId(other.getAlarmId());
-        }
-        if (!other.getAlarmDescription().isEmpty()) {
-          alarmDescription_ = other.alarmDescription_;
-          onChanged();
-        }
-        if (!other.getName().isEmpty()) {
-          name_ = other.name_;
-          onChanged();
+      public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) {
+        if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
         }
-        if (kpiIdBuilder_ == null) {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiId_.isEmpty()) {
-              kpiId_ = other.kpiId_;
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureKpiIdIsMutable();
-              kpiId_.addAll(other.kpiId_);
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
             }
             onChanged();
           }
         } else {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiIdBuilder_.isEmpty()) {
-              kpiIdBuilder_.dispose();
-              kpiIdBuilder_ = null;
-              kpiId_ = other.kpiId_;
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdFieldBuilder() : null;
-            } else {
-              kpiIdBuilder_.addAllMessages(other.kpiId_);
-            }
-          }
-        }
-        if (kpiValueRangeBuilder_ == null) {
-          if (!other.kpiValueRange_.isEmpty()) {
-            if (kpiValueRange_.isEmpty()) {
-              kpiValueRange_ = other.kpiValueRange_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureKpiValueRangeIsMutable();
-              kpiValueRange_.addAll(other.kpiValueRange_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiValueRange_.isEmpty()) {
-            if (kpiValueRangeBuilder_.isEmpty()) {
-              kpiValueRangeBuilder_.dispose();
-              kpiValueRangeBuilder_ = null;
-              kpiValueRange_ = other.kpiValueRange_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              kpiValueRangeBuilder_ = 
+              kpiListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiValueRangeFieldBuilder() : null;
+                   getKpiListFieldBuilder() : null;
             } else {
-              kpiValueRangeBuilder_.addAllMessages(other.kpiValueRange_);
+              kpiListBuilder_.addAllMessages(other.kpiList_);
             }
           }
         }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -14901,11 +14946,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
+        monitoring.Monitoring.SubsResponse parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -14916,1495 +14961,2430 @@ public final class Monitoring {
       }
       private int bitField0_;
 
-      private monitoring.Monitoring.AlarmID alarmId_;
+      private monitoring.Monitoring.SubscriptionID subsId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
-       * @return Whether the alarmId field is set.
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return Whether the subsId field is set.
        */
-      public boolean hasAlarmId() {
-        return alarmIdBuilder_ != null || alarmId_ != null;
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return The subsId.
+       */
+      public monitoring.Monitoring.SubscriptionID getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        } else {
+          return subsIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
+          }
+          onChanged();
+        } else {
+          subsIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  getSubsId(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
+      }
+
+      private java.util.List<monitoring.Monitoring.KpiList> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
-       * @return The alarmId.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public monitoring.Monitoring.AlarmID getAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+      public monitoring.Monitoring.KpiList getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
         } else {
-          return alarmIdBuilder_.getMessage();
+          return kpiListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setAlarmId(monitoring.Monitoring.AlarmID value) {
-        if (alarmIdBuilder_ == null) {
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          alarmId_ = value;
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(value);
+          kpiListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setAlarmId(
-          monitoring.Monitoring.AlarmID.Builder builderForValue) {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = builderForValue.build();
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(builderForValue.build());
+          kpiListBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder mergeAlarmId(monitoring.Monitoring.AlarmID value) {
-        if (alarmIdBuilder_ == null) {
-          if (alarmId_ != null) {
-            alarmId_ =
-              monitoring.Monitoring.AlarmID.newBuilder(alarmId_).mergeFrom(value).buildPartial();
-          } else {
-            alarmId_ = value;
+      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
           onChanged();
         } else {
-          alarmIdBuilder_.mergeFrom(value);
+          kpiListBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder clearAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
           onChanged();
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          kpiListBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
-       */
-      public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
-        
-        onChanged();
-        return getAlarmIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
-        if (alarmIdBuilder_ != null) {
-          return alarmIdBuilder_.getMessageOrBuilder();
+      public Builder addKpiList(
+          monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
         } else {
-          return alarmId_ == null ?
-              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+          kpiListBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
-          getAlarmIdFieldBuilder() {
-        if (alarmIdBuilder_ == null) {
-          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
-                  getAlarmId(),
-                  getParentForChildren(),
-                  isClean());
-          alarmId_ = null;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, builderForValue.build());
         }
-        return alarmIdBuilder_;
+        return this;
       }
-
-      private java.lang.Object alarmDescription_ = "";
       /**
-       * <code>string alarm_description = 2;</code>
-       * @return The alarmDescription.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public java.lang.String getAlarmDescription() {
-        java.lang.Object ref = alarmDescription_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          alarmDescription_ = s;
-          return s;
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          kpiListBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>string alarm_description = 2;</code>
-       * @return The bytes for alarmDescription.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getAlarmDescriptionBytes() {
-        java.lang.Object ref = alarmDescription_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          alarmDescription_ = b;
-          return b;
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          kpiListBuilder_.clear();
         }
-      }
-      /**
-       * <code>string alarm_description = 2;</code>
-       * @param value The alarmDescription to set.
-       * @return This builder for chaining.
-       */
-      public Builder setAlarmDescription(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        alarmDescription_ = value;
-        onChanged();
         return this;
       }
       /**
-       * <code>string alarm_description = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder clearAlarmDescription() {
-        
-        alarmDescription_ = getDefaultInstance().getAlarmDescription();
-        onChanged();
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
+          onChanged();
+        } else {
+          kpiListBuilder_.remove(index);
+        }
         return this;
       }
       /**
-       * <code>string alarm_description = 2;</code>
-       * @param value The bytes for alarmDescription to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setAlarmDescriptionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        alarmDescription_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.KpiList.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
       }
-
-      private java.lang.Object name_ = "";
       /**
-       * <code>string name = 3;</code>
-       * @return The name.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public java.lang.String getName() {
-        java.lang.Object ref = name_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          name_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
+      public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>string name = 3;</code>
-       * @return The bytes for name.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getNameBytes() {
-        java.lang.Object ref = name_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          name_ = b;
-          return b;
+      public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          return java.util.Collections.unmodifiableList(kpiList_);
         }
       }
       /**
-       * <code>string name = 3;</code>
-       * @param value The name to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        name_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiList.getDefaultInstance());
       }
       /**
-       * <code>string name = 3;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder clearName() {
-        
-        name_ = getDefaultInstance().getName();
-        onChanged();
-        return this;
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiList.getDefaultInstance());
       }
       /**
-       * <code>string name = 3;</code>
-       * @param value The bytes for name to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
+      public java.util.List<monitoring.Monitoring.KpiList.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiList_ = null;
+        }
+        return kpiListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
+    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
+    }
+
+    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsResponse>
+        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
+      @java.lang.Override
+      public SubsResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsResponse(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsResponse> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
   }
-  checkByteStringIsUtf8(value);
-        
-        name_ = value;
-        onChanged();
-        return this;
+
+  public interface SubsIDListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.SubscriptionID> 
+        getSubsListList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionID getSubsList(int index);
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    int getSubsListCount();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.SubsIDList}
+   */
+  public static final class SubsIDList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
+      SubsIDListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsIDList.newBuilder() to construct.
+    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsIDList() {
+      subsList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubsIDList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubsIDList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              subsList_.add(
+                  input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          subsList_ = java.util.Collections.unmodifiableList(subsList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+    }
+
+    public static final int SUBS_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getSubsListCount() {
+      return subsList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+      return subsList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index) {
+      return subsList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
-      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
-          bitField0_ |= 0x00000001;
-         }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < subsList_.size(); i++) {
+        output.writeMessage(1, subsList_.get(i));
       }
+      unknownFields.writeTo(output);
+    }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-        if (kpiIdBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiId_);
-        } else {
-          return kpiIdBuilder_.getMessageList();
-        }
+      size = 0;
+      for (int i = 0; i < subsList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, subsList_.get(i));
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public int getKpiIdCount() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.size();
-        } else {
-          return kpiIdBuilder_.getCount();
-        }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId getKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);
-        } else {
-          return kpiIdBuilder_.getMessage(index);
-        }
+      if (!(obj instanceof monitoring.Monitoring.SubsIDList)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, value);
-        }
-        return this;
+      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
+
+      if (!getSubsListList()
+          .equals(other.getSubsListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getSubsListCount() > 0) {
+        hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsListList().hashCode();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(value);
-        }
-        return this;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.SubsIDList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.SubsIDList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsIDList)
+        monitoring.Monitoring.SubsIDListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(index, value);
-        }
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(builderForValue.build());
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getSubsListFieldBuilder();
         }
-        return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, builderForValue.build());
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiIdBuilder_.addMessage(index, builderForValue.build());
+          subsListBuilder_.clear();
         }
         return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addAllKpiId(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiId_);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addAllMessages(values);
-        }
-        return this;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          kpiIdBuilder_.clear();
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsIDList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList build() {
+        monitoring.Monitoring.SubsIDList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder removeKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.remove(index);
-          onChanged();
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList buildPartial() {
+        monitoring.Monitoring.SubsIDList result = new monitoring.Monitoring.SubsIDList(this);
+        int from_bitField0_ = bitField0_;
+        if (subsListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            subsList_ = java.util.Collections.unmodifiableList(subsList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.subsList_ = subsList_;
         } else {
-          kpiIdBuilder_.remove(index);
+          result.subsList_ = subsListBuilder_.build();
         }
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().getBuilder(index);
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-          int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);  } else {
-          return kpiIdBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdOrBuilderList() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilderList();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubsIDList) {
+          return mergeFrom((monitoring.Monitoring.SubsIDList)other);
         } else {
-          return java.util.Collections.unmodifiableList(kpiId_);
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
-        return getKpiIdFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+
+      public Builder mergeFrom(monitoring.Monitoring.SubsIDList other) {
+        if (other == monitoring.Monitoring.SubsIDList.getDefaultInstance()) return this;
+        if (subsListBuilder_ == null) {
+          if (!other.subsList_.isEmpty()) {
+            if (subsList_.isEmpty()) {
+              subsList_ = other.subsList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSubsListIsMutable();
+              subsList_.addAll(other.subsList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subsList_.isEmpty()) {
+            if (subsListBuilder_.isEmpty()) {
+              subsListBuilder_.dispose();
+              subsListBuilder_ = null;
+              subsList_ = other.subsList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              subsListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubsListFieldBuilder() : null;
+            } else {
+              subsListBuilder_.addAllMessages(other.subsList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdBuilderList() {
-        return getKpiIdFieldBuilder().getBuilderList();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiId_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubsIDList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return kpiIdBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_ =
+      private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ =
         java.util.Collections.emptyList();
-      private void ensureKpiValueRangeIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          kpiValueRange_ = new java.util.ArrayList<monitoring.Monitoring.KpiValueRange>(kpiValueRange_);
-          bitField0_ |= 0x00000002;
+      private void ensureSubsListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_;
 
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() {
-        if (kpiValueRangeBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiValueRange_);
+      public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+        if (subsListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subsList_);
         } else {
-          return kpiValueRangeBuilder_.getMessageList();
+          return subsListBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public int getKpiValueRangeCount() {
-        if (kpiValueRangeBuilder_ == null) {
-          return kpiValueRange_.size();
+      public int getSubsListCount() {
+        if (subsListBuilder_ == null) {
+          return subsList_.size();
         } else {
-          return kpiValueRangeBuilder_.getCount();
+          return subsListBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) {
-        if (kpiValueRangeBuilder_ == null) {
-          return kpiValueRange_.get(index);
+      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);
         } else {
-          return kpiValueRangeBuilder_.getMessage(index);
+          return subsListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.set(index, value);
+          ensureSubsListIsMutable();
+          subsList_.set(index, value);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.setMessage(index, value);
+          subsListBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.set(index, builderForValue.build());
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiValueRangeBuilder_.setMessage(index, builderForValue.build());
+          subsListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
+      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(value);
+          ensureSubsListIsMutable();
+          subsList_.add(value);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(value);
+          subsListBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(index, value);
+          ensureSubsListIsMutable();
+          subsList_.add(index, value);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(index, value);
+          subsListBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(
-          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(builderForValue.build());
+      public Builder addSubsList(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(builderForValue.build());
+          subsListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(index, builderForValue.build());
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(index, builderForValue.build());
+          subsListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addAllKpiValueRange(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiValueRange> values) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
+      public Builder addAllSubsList(
+          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiValueRange_);
+              values, subsList_);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addAllMessages(values);
+          subsListBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearKpiValueRange() {
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRange_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder clearSubsList() {
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.clear();
+          subsListBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder removeKpiValueRange(int index) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.remove(index);
+      public Builder removeSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.remove(index);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.remove(index);
+          subsListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder(
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
           int index) {
-        return getKpiValueRangeFieldBuilder().getBuilder(index);
+        return getSubsListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
           int index) {
-        if (kpiValueRangeBuilder_ == null) {
-          return kpiValueRange_.get(index);  } else {
-          return kpiValueRangeBuilder_.getMessageOrBuilder(index);
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);  } else {
+          return subsListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
-           getKpiValueRangeOrBuilderList() {
-        if (kpiValueRangeBuilder_ != null) {
-          return kpiValueRangeBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+           getSubsListOrBuilderList() {
+        if (subsListBuilder_ != null) {
+          return subsListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(kpiValueRange_);
+          return java.util.Collections.unmodifiableList(subsList_);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder() {
-        return getKpiValueRangeFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiValueRange.getDefaultInstance());
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() {
+        return getSubsListFieldBuilder().addBuilder(
+            monitoring.Monitoring.SubscriptionID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder(
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder(
           int index) {
-        return getKpiValueRangeFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiValueRange.getDefaultInstance());
+        return getSubsListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.SubscriptionID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiValueRange.Builder> 
-           getKpiValueRangeBuilderList() {
-        return getKpiValueRangeFieldBuilder().getBuilderList();
+      public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> 
+           getSubsListBuilderList() {
+        return getSubsListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsListFieldBuilder() {
+        if (subsListBuilder_ == null) {
+          subsListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  subsList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subsList_ = null;
+        }
+        return subsListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
+    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
+    }
+
+    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsIDList>
+        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
+      @java.lang.Override
+      public SubsIDList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsIDList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsIDList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AlarmDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The alarmDescription.
+     */
+    java.lang.String getAlarmDescription();
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The bytes for alarmDescription.
+     */
+    com.google.protobuf.ByteString
+        getAlarmDescriptionBytes();
+
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return Whether the kpiValueRange field is set.
+     */
+    boolean hasKpiValueRange();
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return The kpiValueRange.
+     */
+    monitoring.Monitoring.KpiValueRange getKpiValueRange();
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     */
+    monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder();
+
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The timestamp.
+     */
+    java.lang.String getTimestamp();
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The bytes for timestamp.
+     */
+    com.google.protobuf.ByteString
+        getTimestampBytes();
+  }
+  /**
+   * Protobuf type {@code monitoring.AlarmDescriptor}
+   */
+  public static final class AlarmDescriptor extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
+      AlarmDescriptorOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AlarmDescriptor.newBuilder() to construct.
+    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AlarmDescriptor() {
+      alarmDescription_ = "";
+      name_ = "";
+      timestamp_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AlarmDescriptor();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AlarmDescriptor(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> 
-          getKpiValueRangeFieldBuilder() {
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder>(
-                  kpiValueRange_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiValueRange_ = null;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              alarmDescription_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 34: {
+              monitoring.Monitoring.KpiValueRange.Builder subBuilder = null;
+              if (kpiValueRange_ != null) {
+                subBuilder = kpiValueRange_.toBuilder();
+              }
+              kpiValueRange_ = input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValueRange_);
+                kpiValueRange_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              timestamp_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
         }
-        return kpiValueRangeBuilder_;
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+    }
 
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       * @return Whether the timestamp field is set.
-       */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+    }
+
+    public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object alarmDescription_;
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The alarmDescription.
+     */
+    @java.lang.Override
+    public java.lang.String getAlarmDescription() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        alarmDescription_ = s;
+        return s;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       * @return The timestamp.
-       */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        } else {
-          return timestampBuilder_.getMessage();
-        }
+    }
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The bytes for alarmDescription.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getAlarmDescriptionBytes() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        alarmDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(value);
-        }
+    }
 
-        return this;
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
-          onChanged();
-        } else {
-          timestampBuilder_.mergeFrom(value);
-        }
+    }
 
-        return this;
+    public static final int KPI_ID_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 4;
+    private monitoring.Monitoring.KpiValueRange kpiValueRange_;
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return Whether the kpiValueRange field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValueRange() {
+      return kpiValueRange_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return The kpiValueRange.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
+      return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+    }
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
+      return getKpiValueRange();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 5;
+    private volatile java.lang.Object timestamp_;
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public java.lang.String getTimestamp() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        timestamp_ = s;
+        return s;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-          onChanged();
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
+    }
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The bytes for timestamp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTimestampBytes() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        timestamp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
-        
-        onChanged();
-        return getTimestampFieldBuilder().getBuilder();
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, alarmDescription_);
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
-        } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          timestamp_ = null;
-        }
-        return timestampBuilder_;
+      if (kpiId_ != null) {
+        output.writeMessage(3, getKpiId());
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+      if (kpiValueRange_ != null) {
+        output.writeMessage(4, getKpiValueRange());
       }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      if (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timestamp_);
       }
-
-
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
+      unknownFields.writeTo(output);
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
-    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
-    }
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-    public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() {
-      return DEFAULT_INSTANCE;
+      size = 0;
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, alarmDescription_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getKpiId());
+      }
+      if (kpiValueRange_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getKpiValueRange());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timestamp_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
     }
 
-    private static final com.google.protobuf.Parser<AlarmDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
-      @java.lang.Override
-      public AlarmDescriptor parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmDescriptor(input, extensionRegistry);
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-    };
+      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj;
 
-    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
-      return PARSER;
+      if (!getAlarmDescription()
+          .equals(other.getAlarmDescription())) return false;
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (hasKpiValueRange() != other.hasKpiValueRange()) return false;
+      if (hasKpiValueRange()) {
+        if (!getKpiValueRange()
+            .equals(other.getKpiValueRange())) return false;
+      }
+      if (!getTimestamp()
+          .equals(other.getTimestamp())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
-      return PARSER;
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ALARM_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getAlarmDescription().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      if (hasKpiValueRange()) {
+        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValueRange().hashCode();
+      }
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
     }
 
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
     }
-
-  }
-
-  public interface AlarmIDOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
-    boolean hasAlarmId();
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return The alarmId.
-     */
-    context.ContextOuterClass.Uuid getAlarmId();
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     */
-    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
-  }
-  /**
-   * Protobuf type {@code monitoring.AlarmID}
-   */
-  public static final class AlarmID extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
-      AlarmIDOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use AlarmID.newBuilder() to construct.
-    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
     }
-    private AlarmID() {
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
     }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new AlarmID();
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
     }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
     }
-    private AlarmID(
-        com.google.protobuf.CodedInputStream input,
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (alarmId_ != null) {
-                subBuilder = alarmId_.toBuilder();
-              }
-              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(alarmId_);
-                alarmId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.AlarmDescriptor prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-
-    public static final int ALARM_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid alarmId_;
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
     @java.lang.Override
-    public boolean hasAlarmId() {
-      return alarmId_ != null;
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
     }
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return The alarmId.
-     */
+
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getAlarmId() {
-      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
     }
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
+     * Protobuf type {@code monitoring.AlarmDescriptor}
      */
-    @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
-      return getAlarmId();
-    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmDescriptor)
+        monitoring.Monitoring.AlarmDescriptorOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+      }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+      }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (alarmId_ != null) {
-        output.writeMessage(1, getAlarmId());
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      unknownFields.writeTo(output);
-    }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        alarmDescription_ = "";
 
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+        name_ = "";
 
-      size = 0;
-      if (alarmId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getAlarmId());
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
+        } else {
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
+        }
+        timestamp_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor build() {
+        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor buildPartial() {
+        monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
+        result.alarmDescription_ = alarmDescription_;
+        result.name_ = name_;
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        if (kpiValueRangeBuilder_ == null) {
+          result.kpiValueRange_ = kpiValueRange_;
+        } else {
+          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
+        }
+        result.timestamp_ = timestamp_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.AlarmDescriptor) {
+          return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.AlarmDescriptor other) {
+        if (other == monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()) return this;
+        if (!other.getAlarmDescription().isEmpty()) {
+          alarmDescription_ = other.alarmDescription_;
+          onChanged();
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.hasKpiValueRange()) {
+          mergeKpiValueRange(other.getKpiValueRange());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
 
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      private java.lang.Object alarmDescription_ = "";
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return The alarmDescription.
+       */
+      public java.lang.String getAlarmDescription() {
+        java.lang.Object ref = alarmDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          alarmDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
-        return super.equals(obj);
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return The bytes for alarmDescription.
+       */
+      public com.google.protobuf.ByteString
+          getAlarmDescriptionBytes() {
+        java.lang.Object ref = alarmDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          alarmDescription_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
       }
-      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
-
-      if (hasAlarmId() != other.hasAlarmId()) return false;
-      if (hasAlarmId()) {
-        if (!getAlarmId()
-            .equals(other.getAlarmId())) return false;
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @param value The alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        alarmDescription_ = value;
+        onChanged();
+        return this;
       }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlarmDescription() {
+        
+        alarmDescription_ = getDefaultInstance().getAlarmDescription();
+        onChanged();
+        return this;
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasAlarmId()) {
-        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getAlarmId().hashCode();
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @param value The bytes for alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        alarmDescription_ = value;
+        onChanged();
+        return this;
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
 
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.AlarmID}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmID)
-        monitoring.Monitoring.AlarmIDOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
       }
-
-      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
       }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          kpiIdBuilder_.setMessage(value);
         }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
-      }
 
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmID.getDefaultInstance();
+        return this;
       }
-
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmID build() {
-        monitoring.Monitoring.AlarmID result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
         }
-        return result;
-      }
 
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmID buildPartial() {
-        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
-        if (alarmIdBuilder_ == null) {
-          result.alarmId_ = alarmId_;
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
         } else {
-          result.alarmId_ = alarmIdBuilder_.build();
+          kpiIdBuilder_.mergeFrom(value);
         }
-        onBuilt();
-        return result;
-      }
 
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmID) {
-          return mergeFrom((monitoring.Monitoring.AlarmID)other);
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
-      }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
-        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
-        if (other.hasAlarmId()) {
-          mergeAlarmId(other.getAlarmId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.AlarmID parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
-        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid alarmId_;
+      private monitoring.Monitoring.KpiValueRange kpiValueRange_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
-       * @return Whether the alarmId field is set.
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return Whether the kpiValueRange field is set.
        */
-      public boolean hasAlarmId() {
-        return alarmIdBuilder_ != null || alarmId_ != null;
+      public boolean hasKpiValueRange() {
+        return kpiValueRangeBuilder_ != null || kpiValueRange_ != null;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
-       * @return The alarmId.
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return The kpiValueRange.
        */
-      public context.ContextOuterClass.Uuid getAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+      public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
         } else {
-          return alarmIdBuilder_.getMessage();
+          return kpiValueRangeBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
-        if (alarmIdBuilder_ == null) {
+      public Builder setKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          alarmId_ = value;
+          kpiValueRange_ = value;
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(value);
+          kpiValueRangeBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder setAlarmId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = builderForValue.build();
+      public Builder setKpiValueRange(
+          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = builderForValue.build();
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(builderForValue.build());
+          kpiValueRangeBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
-        if (alarmIdBuilder_ == null) {
-          if (alarmId_ != null) {
-            alarmId_ =
-              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+      public Builder mergeKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (kpiValueRange_ != null) {
+            kpiValueRange_ =
+              monitoring.Monitoring.KpiValueRange.newBuilder(kpiValueRange_).mergeFrom(value).buildPartial();
           } else {
-            alarmId_ = value;
+            kpiValueRange_ = value;
           }
           onChanged();
         } else {
-          alarmIdBuilder_.mergeFrom(value);
+          kpiValueRangeBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder clearAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+      public Builder clearKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
           onChanged();
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
+      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder() {
         
         onChanged();
-        return getAlarmIdFieldBuilder().getBuilder();
+        return getKpiValueRangeFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
-        if (alarmIdBuilder_ != null) {
-          return alarmIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
+        if (kpiValueRangeBuilder_ != null) {
+          return kpiValueRangeBuilder_.getMessageOrBuilder();
         } else {
-          return alarmId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+          return kpiValueRange_ == null ?
+              monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
         }
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getAlarmIdFieldBuilder() {
-        if (alarmIdBuilder_ == null) {
-          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getAlarmId(),
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> 
+          getKpiValueRangeFieldBuilder() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRangeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder>(
+                  getKpiValueRange(),
                   getParentForChildren(),
                   isClean());
-          alarmId_ = null;
+          kpiValueRange_ = null;
         }
-        return alarmIdBuilder_;
+        return kpiValueRangeBuilder_;
+      }
+
+      private java.lang.Object timestamp_ = "";
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return The timestamp.
+       */
+      public java.lang.String getTimestamp() {
+        java.lang.Object ref = timestamp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          timestamp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return The bytes for timestamp.
+       */
+      public com.google.protobuf.ByteString
+          getTimestampBytes() {
+        java.lang.Object ref = timestamp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          timestamp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestamp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTimestamp() {
+        
+        timestamp_ = getDefaultInstance().getTimestamp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @param value The bytes for timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestampBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -16419,97 +17399,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
-    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
+    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
     }
 
-    public static monitoring.Monitoring.AlarmID getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<AlarmID>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
+    private static final com.google.protobuf.Parser<AlarmDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
       @java.lang.Override
-      public AlarmID parsePartialFrom(
+      public AlarmDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmID(input, extensionRegistry);
+        return new AlarmDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<AlarmID> parser() {
+    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmID> getParserForType() {
+    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface AlarmSubscriptionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmSubscription)
+  public interface AlarmIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return Whether the alarmID field is set.
-     */
-    boolean hasAlarmID();
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return The alarmID.
-     */
-    monitoring.Monitoring.AlarmID getAlarmID();
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
-    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder();
-
+    boolean hasAlarmId();
     /**
-     * <code>float subscription_timeout_s = 2;</code>
-     * @return The subscriptionTimeoutS.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
-    float getSubscriptionTimeoutS();
-
+    context.ContextOuterClass.Uuid getAlarmId();
     /**
-     * <code>float subscription_frequency_ms = 3;</code>
-     * @return The subscriptionFrequencyMs.
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
-    float getSubscriptionFrequencyMs();
+    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.AlarmSubscription}
+   * Protobuf type {@code monitoring.AlarmID}
    */
-  public static final class AlarmSubscription extends
+  public static final class AlarmID extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmSubscription)
-      AlarmSubscriptionOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
+      AlarmIDOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use AlarmSubscription.newBuilder() to construct.
-    private AlarmSubscription(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmID.newBuilder() to construct.
+    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private AlarmSubscription() {
+    private AlarmID() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new AlarmSubscription();
+      return new AlarmID();
     }
 
     @java.lang.Override
@@ -16517,7 +17485,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private AlarmSubscription(
+    private AlarmID(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -16536,28 +17504,18 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.AlarmID.Builder subBuilder = null;
-              if (alarmID_ != null) {
-                subBuilder = alarmID_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (alarmId_ != null) {
+                subBuilder = alarmId_.toBuilder();
               }
-              alarmID_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
+              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(alarmID_);
-                alarmID_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(alarmId_);
+                alarmId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 21: {
-
-              subscriptionTimeoutS_ = input.readFloat();
-              break;
-            }
-            case 29: {
-
-              subscriptionFrequencyMs_ = input.readFloat();
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -16579,63 +17537,41 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class);
+              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
     }
 
-    public static final int ALARMID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.AlarmID alarmID_;
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return Whether the alarmID field is set.
-     */
-    @java.lang.Override
-    public boolean hasAlarmID() {
-      return alarmID_ != null;
-    }
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return The alarmID.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmID getAlarmID() {
-      return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
-    }
+    public static final int ALARM_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid alarmId_;
     /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() {
-      return getAlarmID();
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
     }
-
-    public static final int SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER = 2;
-    private float subscriptionTimeoutS_;
     /**
-     * <code>float subscription_timeout_s = 2;</code>
-     * @return The subscriptionTimeoutS.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
     @java.lang.Override
-    public float getSubscriptionTimeoutS() {
-      return subscriptionTimeoutS_;
+    public context.ContextOuterClass.Uuid getAlarmId() {
+      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
     }
-
-    public static final int SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER = 3;
-    private float subscriptionFrequencyMs_;
     /**
-     * <code>float subscription_frequency_ms = 3;</code>
-     * @return The subscriptionFrequencyMs.
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
     @java.lang.Override
-    public float getSubscriptionFrequencyMs() {
-      return subscriptionFrequencyMs_;
+    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -16652,14 +17588,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (alarmID_ != null) {
-        output.writeMessage(1, getAlarmID());
-      }
-      if (subscriptionTimeoutS_ != 0F) {
-        output.writeFloat(2, subscriptionTimeoutS_);
-      }
-      if (subscriptionFrequencyMs_ != 0F) {
-        output.writeFloat(3, subscriptionFrequencyMs_);
+      if (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
       }
       unknownFields.writeTo(output);
     }
@@ -16670,17 +17600,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (alarmID_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getAlarmID());
-      }
-      if (subscriptionTimeoutS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, subscriptionTimeoutS_);
-      }
-      if (subscriptionFrequencyMs_ != 0F) {
+      if (alarmId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, subscriptionFrequencyMs_);
+          .computeMessageSize(1, getAlarmId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -16692,22 +17614,16 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmSubscription)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.AlarmSubscription other = (monitoring.Monitoring.AlarmSubscription) obj;
+      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
 
-      if (hasAlarmID() != other.hasAlarmID()) return false;
-      if (hasAlarmID()) {
-        if (!getAlarmID()
-            .equals(other.getAlarmID())) return false;
+      if (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
       }
-      if (java.lang.Float.floatToIntBits(getSubscriptionTimeoutS())
-          != java.lang.Float.floatToIntBits(
-              other.getSubscriptionTimeoutS())) return false;
-      if (java.lang.Float.floatToIntBits(getSubscriptionFrequencyMs())
-          != java.lang.Float.floatToIntBits(
-              other.getSubscriptionFrequencyMs())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -16719,84 +17635,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasAlarmID()) {
-        hash = (37 * hash) + ALARMID_FIELD_NUMBER;
-        hash = (53 * hash) + getAlarmID().hashCode();
+      if (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
       }
-      hash = (37 * hash) + SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSubscriptionTimeoutS());
-      hash = (37 * hash) + SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSubscriptionFrequencyMs());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmID parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -16809,7 +17719,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmSubscription prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -16825,26 +17735,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.AlarmSubscription}
+     * Protobuf type {@code monitoring.AlarmID}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmSubscription)
-        monitoring.Monitoring.AlarmSubscriptionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmID)
+        monitoring.Monitoring.AlarmIDOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class);
+                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.AlarmSubscription.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -16862,33 +17772,29 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (alarmIDBuilder_ == null) {
-          alarmID_ = null;
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
         } else {
-          alarmID_ = null;
-          alarmIDBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
-        subscriptionTimeoutS_ = 0F;
-
-        subscriptionFrequencyMs_ = 0F;
-
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmSubscription.getDefaultInstance();
+      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmID.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmSubscription build() {
-        monitoring.Monitoring.AlarmSubscription result = buildPartial();
+      public monitoring.Monitoring.AlarmID build() {
+        monitoring.Monitoring.AlarmID result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -16896,15 +17802,13 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmSubscription buildPartial() {
-        monitoring.Monitoring.AlarmSubscription result = new monitoring.Monitoring.AlarmSubscription(this);
-        if (alarmIDBuilder_ == null) {
-          result.alarmID_ = alarmID_;
+      public monitoring.Monitoring.AlarmID buildPartial() {
+        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
         } else {
-          result.alarmID_ = alarmIDBuilder_.build();
+          result.alarmId_ = alarmIdBuilder_.build();
         }
-        result.subscriptionTimeoutS_ = subscriptionTimeoutS_;
-        result.subscriptionFrequencyMs_ = subscriptionFrequencyMs_;
         onBuilt();
         return result;
       }
@@ -16943,24 +17847,18 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmSubscription) {
-          return mergeFrom((monitoring.Monitoring.AlarmSubscription)other);
+        if (other instanceof monitoring.Monitoring.AlarmID) {
+          return mergeFrom((monitoring.Monitoring.AlarmID)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmSubscription other) {
-        if (other == monitoring.Monitoring.AlarmSubscription.getDefaultInstance()) return this;
-        if (other.hasAlarmID()) {
-          mergeAlarmID(other.getAlarmID());
-        }
-        if (other.getSubscriptionTimeoutS() != 0F) {
-          setSubscriptionTimeoutS(other.getSubscriptionTimeoutS());
-        }
-        if (other.getSubscriptionFrequencyMs() != 0F) {
-          setSubscriptionFrequencyMs(other.getSubscriptionFrequencyMs());
+      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
+        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -16977,11 +17875,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.AlarmSubscription parsedMessage = null;
+        monitoring.Monitoring.AlarmID parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmSubscription) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -16991,185 +17889,123 @@ public final class Monitoring {
         return this;
       }
 
-      private monitoring.Monitoring.AlarmID alarmID_;
+      private context.ContextOuterClass.Uuid alarmId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIDBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
-       * @return Whether the alarmID field is set.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
        */
-      public boolean hasAlarmID() {
-        return alarmIDBuilder_ != null || alarmID_ != null;
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
-       * @return The alarmID.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return The alarmId.
        */
-      public monitoring.Monitoring.AlarmID getAlarmID() {
-        if (alarmIDBuilder_ == null) {
-          return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
+      public context.ContextOuterClass.Uuid getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         } else {
-          return alarmIDBuilder_.getMessage();
+          return alarmIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setAlarmID(monitoring.Monitoring.AlarmID value) {
-        if (alarmIDBuilder_ == null) {
+      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          alarmID_ = value;
+          alarmId_ = value;
           onChanged();
         } else {
-          alarmIDBuilder_.setMessage(value);
+          alarmIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setAlarmID(
-          monitoring.Monitoring.AlarmID.Builder builderForValue) {
-        if (alarmIDBuilder_ == null) {
-          alarmID_ = builderForValue.build();
+      public Builder setAlarmId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
           onChanged();
         } else {
-          alarmIDBuilder_.setMessage(builderForValue.build());
+          alarmIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder mergeAlarmID(monitoring.Monitoring.AlarmID value) {
-        if (alarmIDBuilder_ == null) {
-          if (alarmID_ != null) {
-            alarmID_ =
-              monitoring.Monitoring.AlarmID.newBuilder(alarmID_).mergeFrom(value).buildPartial();
+      public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
+          if (alarmId_ != null) {
+            alarmId_ =
+              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
           } else {
-            alarmID_ = value;
+            alarmId_ = value;
           }
           onChanged();
         } else {
-          alarmIDBuilder_.mergeFrom(value);
+          alarmIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder clearAlarmID() {
-        if (alarmIDBuilder_ == null) {
-          alarmID_ = null;
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
           onChanged();
         } else {
-          alarmID_ = null;
-          alarmIDBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.AlarmID.Builder getAlarmIDBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
         
         onChanged();
-        return getAlarmIDFieldBuilder().getBuilder();
+        return getAlarmIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() {
-        if (alarmIDBuilder_ != null) {
-          return alarmIDBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
         } else {
-          return alarmID_ == null ?
-              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
+          return alarmId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         }
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
-          getAlarmIDFieldBuilder() {
-        if (alarmIDBuilder_ == null) {
-          alarmIDBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
-                  getAlarmID(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getAlarmIdFieldBuilder() {
+        if (alarmIdBuilder_ == null) {
+          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getAlarmId(),
                   getParentForChildren(),
                   isClean());
-          alarmID_ = null;
+          alarmId_ = null;
         }
-        return alarmIDBuilder_;
-      }
-
-      private float subscriptionTimeoutS_ ;
-      /**
-       * <code>float subscription_timeout_s = 2;</code>
-       * @return The subscriptionTimeoutS.
-       */
-      @java.lang.Override
-      public float getSubscriptionTimeoutS() {
-        return subscriptionTimeoutS_;
-      }
-      /**
-       * <code>float subscription_timeout_s = 2;</code>
-       * @param value The subscriptionTimeoutS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSubscriptionTimeoutS(float value) {
-        
-        subscriptionTimeoutS_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>float subscription_timeout_s = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSubscriptionTimeoutS() {
-        
-        subscriptionTimeoutS_ = 0F;
-        onChanged();
-        return this;
-      }
-
-      private float subscriptionFrequencyMs_ ;
-      /**
-       * <code>float subscription_frequency_ms = 3;</code>
-       * @return The subscriptionFrequencyMs.
-       */
-      @java.lang.Override
-      public float getSubscriptionFrequencyMs() {
-        return subscriptionFrequencyMs_;
-      }
-      /**
-       * <code>float subscription_frequency_ms = 3;</code>
-       * @param value The subscriptionFrequencyMs to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSubscriptionFrequencyMs(float value) {
-        
-        subscriptionFrequencyMs_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>float subscription_frequency_ms = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSubscriptionFrequencyMs() {
-        
-        subscriptionFrequencyMs_ = 0F;
-        onChanged();
-        return this;
+        return alarmIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -17184,41 +18020,41 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmSubscription)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmSubscription)
-    private static final monitoring.Monitoring.AlarmSubscription DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
+    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmSubscription();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
     }
 
-    public static monitoring.Monitoring.AlarmSubscription getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmID getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<AlarmSubscription>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmSubscription>() {
+    private static final com.google.protobuf.Parser<AlarmID>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
       @java.lang.Override
-      public AlarmSubscription parsePartialFrom(
+      public AlarmID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmSubscription(input, extensionRegistry);
+        return new AlarmID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<AlarmSubscription> parser() {
+    public static com.google.protobuf.Parser<AlarmID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmSubscription> getParserForType() {
+    public com.google.protobuf.Parser<AlarmID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -17269,21 +18105,6 @@ public final class Monitoring {
      * <code>.monitoring.KpiValue kpi_value = 3;</code>
      */
     monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
-
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return Whether the timestamp field is set.
-     */
-    boolean hasTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return The timestamp.
-     */
-    context.ContextOuterClass.Timestamp getTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
    * Protobuf type {@code monitoring.AlarmResponse}
@@ -17363,19 +18184,6 @@ public final class Monitoring {
 
               break;
             }
-            case 34: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -17498,32 +18306,6 @@ public final class Monitoring {
       return getKpiValue();
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.Timestamp timestamp_;
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return Whether the timestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
-    }
-
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -17547,9 +18329,6 @@ public final class Monitoring {
       if (kpiValue_ != null) {
         output.writeMessage(3, getKpiValue());
       }
-      if (timestamp_ != null) {
-        output.writeMessage(4, getTimestamp());
-      }
       unknownFields.writeTo(output);
     }
 
@@ -17570,10 +18349,6 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(3, getKpiValue());
       }
-      if (timestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getTimestamp());
-      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -17601,11 +18376,6 @@ public final class Monitoring {
         if (!getKpiValue()
             .equals(other.getKpiValue())) return false;
       }
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
-      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -17627,10 +18397,6 @@ public final class Monitoring {
         hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
         hash = (53 * hash) + getKpiValue().hashCode();
       }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
-      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -17778,12 +18544,6 @@ public final class Monitoring {
           kpiValue_ = null;
           kpiValueBuilder_ = null;
         }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
         return this;
       }
 
@@ -17821,11 +18581,6 @@ public final class Monitoring {
         } else {
           result.kpiValue_ = kpiValueBuilder_.build();
         }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
-        } else {
-          result.timestamp_ = timestampBuilder_.build();
-        }
         onBuilt();
         return result;
       }
@@ -17884,9 +18639,6 @@ public final class Monitoring {
         if (other.hasKpiValue()) {
           mergeKpiValue(other.getKpiValue());
         }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -18229,125 +18981,6 @@ public final class Monitoring {
         }
         return kpiValueBuilder_;
       }
-
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       * @return Whether the timestamp field is set.
-       */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       * @return The timestamp.
-       */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        } else {
-          return timestampBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
-          onChanged();
-        } else {
-          timestampBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-          onChanged();
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
-        
-        onChanged();
-        return getTimestampFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
-        } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        }
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          timestamp_ = null;
-        }
-        return timestampBuilder_;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -19199,6 +19832,16 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_KpiDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_BundleKpiDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_EditedKpiDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_MonitorKpiRequest_descriptor;
   private static final 
@@ -19269,11 +19912,6 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_AlarmID_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_monitoring_AlarmSubscription_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_monitoring_AlarmSubscription_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_AlarmResponse_descriptor;
   private static final 
@@ -19294,95 +19932,97 @@ public final class Monitoring {
   static {
     java.lang.String[] descriptorData = {
       "\n\020monitoring.proto\022\nmonitoring\032\rcontext." +
-      "proto\032\026kpi_sample_types.proto\"\311\002\n\rKpiDes" +
+      "proto\032\026kpi_sample_types.proto\"\376\001\n\rKpiDes" +
+      "criptor\022\027\n\017kpi_description\030\001 \001(\t\0228\n\017kpi_" +
+      "sample_type\030\002 \001(\0162\037.kpi_sample_types.Kpi" +
+      "SampleType\022$\n\tdevice_id\030\003 \001(\0132\021.context." +
+      "DeviceId\022(\n\013endpoint_id\030\004 \001(\0132\023.context." +
+      "EndPointId\022&\n\nservice_id\030\005 \001(\0132\022.context" +
+      ".ServiceId\022\"\n\010slice_id\030\006 \001(\0132\020.context.S" +
+      "liceId\"\254\002\n\023BundleKpiDescriptor\022\027\n\017kpi_de" +
+      "scription\030\001 \001(\t\022&\n\013kpi_id_list\030\002 \003(\0132\021.m" +
+      "onitoring.KpiId\0228\n\017kpi_sample_type\030\003 \001(\016" +
+      "2\037.kpi_sample_types.KpiSampleType\022$\n\tdev" +
+      "ice_id\030\004 \001(\0132\021.context.DeviceId\022(\n\013endpo" +
+      "int_id\030\005 \001(\0132\023.context.EndPointId\022&\n\nser" +
+      "vice_id\030\006 \001(\0132\022.context.ServiceId\022\"\n\010sli" +
+      "ce_id\030\007 \001(\0132\020.context.SliceId\"\317\002\n\023Edited" +
+      "KpiDescriptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitori" +
+      "ng.KpiId\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi" +
+      "_id_list\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi" +
+      "_sample_type\030\004 \001(\0162\037.kpi_sample_types.Kp" +
+      "iSampleType\022$\n\tdevice_id\030\005 \001(\0132\021.context" +
+      ".DeviceId\022(\n\013endpoint_id\030\006 \001(\0132\023.context" +
+      ".EndPointId\022&\n\nservice_id\030\007 \001(\0132\022.contex" +
+      "t.ServiceId\022\"\n\010slice_id\030\010 \001(\0132\020.context." +
+      "SliceId\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001" +
+      " \001(\0132\021.monitoring.KpiId\022\033\n\023monitoring_wi" +
+      "ndow_s\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\241\001" +
+      "\n\010KpiQuery\022!\n\006kpi_id\030\001 \003(\0132\021.monitoring." +
+      "KpiId\022\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sa" +
+      "mpling_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 " +
+      "\001(\r\022\022\n\nstart_date\030\005 \001(\t\022\020\n\010end_date\030\006 \001(" +
+      "\t\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context.Uui" +
+      "d\"d\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kp" +
+      "iId\022\021\n\ttimestamp\030\002 \001(\t\022\'\n\tkpi_value\030\003 \001(" +
+      "\0132\024.monitoring.KpiValue\"e\n\rKpiValueRange" +
+      "\022)\n\013kpiMinValue\030\001 \001(\0132\024.monitoring.KpiVa" +
+      "lue\022)\n\013kpiMaxValue\030\002 \001(\0132\024.monitoring.Kp" +
+      "iValue\"a\n\010KpiValue\022\020\n\006intVal\030\001 \001(\rH\000\022\022\n\010" +
+      "floatVal\030\002 \001(\002H\000\022\023\n\tstringVal\030\003 \001(\tH\000\022\021\n" +
+      "\007boolVal\030\004 \001(\010H\000B\007\n\005value\",\n\007KpiList\022!\n\010" +
+      "kpi_list\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDe" +
+      "scriptorList\0226\n\023kpi_descriptor_list\030\001 \003(" +
+      "\0132\031.monitoring.KpiDescriptor\"\223\001\n\016SubsDes" +
       "criptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kpi" +
-      "Id\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi_id_li" +
-      "st\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi_sampl" +
-      "e_type\030\004 \001(\0162\037.kpi_sample_types.KpiSampl" +
-      "eType\022$\n\tdevice_id\030\005 \001(\0132\021.context.Devic" +
-      "eId\022(\n\013endpoint_id\030\006 \001(\0132\023.context.EndPo" +
-      "intId\022&\n\nservice_id\030\007 \001(\0132\022.context.Serv" +
-      "iceId\022\"\n\010slice_id\030\010 \001(\0132\020.context.SliceI" +
-      "d\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001 \001(\0132\021" +
-      ".monitoring.KpiId\022\033\n\023monitoring_window_s" +
-      "\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\323\001\n\010KpiQ" +
-      "uery\022!\n\006kpi_id\030\001 \003(\0132\021.monitoring.KpiId\022" +
-      "\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sampling" +
-      "_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 \001(\r\022+\n" +
-      "\017start_timestamp\030\005 \001(\0132\022.context.Timesta" +
-      "mp\022)\n\rend_timestamp\030\006 \001(\0132\022.context.Time" +
-      "stamp\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context" +
-      ".Uuid\"x\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitorin" +
-      "g.KpiId\022%\n\ttimestamp\030\002 \001(\0132\022.context.Tim" +
-      "estamp\022\'\n\tkpi_value\030\003 \001(\0132\024.monitoring.K" +
-      "piValue\"\250\001\n\rKpiValueRange\022)\n\013kpiMinValue" +
-      "\030\001 \001(\0132\024.monitoring.KpiValue\022)\n\013kpiMaxVa" +
-      "lue\030\002 \001(\0132\024.monitoring.KpiValue\022\017\n\007inRan" +
-      "ge\030\003 \001(\010\022\027\n\017includeMinValue\030\004 \001(\010\022\027\n\017inc" +
-      "ludeMaxValue\030\005 \001(\010\"\241\001\n\010KpiValue\022\022\n\010int32" +
-      "Val\030\001 \001(\005H\000\022\023\n\tuint32Val\030\002 \001(\rH\000\022\022\n\010int6" +
-      "4Val\030\003 \001(\003H\000\022\023\n\tuint64Val\030\004 \001(\004H\000\022\022\n\010flo" +
-      "atVal\030\005 \001(\002H\000\022\023\n\tstringVal\030\006 \001(\tH\000\022\021\n\007bo" +
-      "olVal\030\007 \001(\010H\000B\007\n\005value\",\n\007KpiList\022!\n\010kpi" +
-      "_list\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDescr" +
-      "iptorList\0226\n\023kpi_descriptor_list\030\001 \003(\0132\031" +
-      ".monitoring.KpiDescriptor\"\362\001\n\016SubsDescri" +
-      "ptor\022+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subsc" +
-      "riptionID\022!\n\006kpi_id\030\002 \001(\0132\021.monitoring.K" +
-      "piId\022\033\n\023sampling_duration_s\030\003 \001(\002\022\033\n\023sam" +
-      "pling_interval_s\030\004 \001(\002\022+\n\017start_timestam" +
-      "p\030\005 \001(\0132\022.context.Timestamp\022)\n\rend_times" +
-      "tamp\030\006 \001(\0132\022.context.Timestamp\"0\n\016Subscr" +
-      "iptionID\022\036\n\007subs_id\030\001 \001(\0132\r.context.Uuid" +
-      "\"b\n\014SubsResponse\022+\n\007subs_id\030\001 \001(\0132\032.moni" +
-      "toring.SubscriptionID\022%\n\010kpi_list\030\002 \003(\0132" +
-      "\023.monitoring.KpiList\";\n\nSubsIDList\022-\n\tsu" +
-      "bs_list\030\001 \003(\0132\032.monitoring.SubscriptionI" +
-      "D\"\337\001\n\017AlarmDescriptor\022%\n\010alarm_id\030\001 \001(\0132" +
-      "\023.monitoring.AlarmID\022\031\n\021alarm_descriptio" +
-      "n\030\002 \001(\t\022\014\n\004name\030\003 \001(\t\022!\n\006kpi_id\030\004 \003(\0132\021." +
-      "monitoring.KpiId\0222\n\017kpi_value_range\030\005 \003(" +
-      "\0132\031.monitoring.KpiValueRange\022%\n\ttimestam" +
-      "p\030\006 \001(\0132\022.context.Timestamp\"*\n\007AlarmID\022\037" +
-      "\n\010alarm_id\030\001 \001(\0132\r.context.Uuid\"|\n\021Alarm" +
-      "Subscription\022$\n\007alarmID\030\001 \001(\0132\023.monitori" +
-      "ng.AlarmID\022\036\n\026subscription_timeout_s\030\002 \001" +
-      "(\002\022!\n\031subscription_frequency_ms\030\003 \001(\002\"\224\001" +
-      "\n\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.moni" +
-      "toring.AlarmID\022\014\n\004text\030\002 \001(\t\022\'\n\tkpi_valu" +
-      "e\030\003 \001(\0132\024.monitoring.KpiValue\022%\n\ttimesta" +
-      "mp\030\004 \001(\0132\022.context.Timestamp\"6\n\013AlarmIDL" +
-      "ist\022\'\n\nalarm_list\030\001 \003(\0132\023.monitoring.Ala" +
-      "rmID2\233\t\n\021MonitoringService\0228\n\006SetKpi\022\031.m" +
-      "onitoring.KpiDescriptor\032\021.monitoring.Kpi" +
-      "Id\"\000\0220\n\tDeleteKpi\022\021.monitoring.KpiId\032\016.c" +
-      "ontext.Empty\"\000\022B\n\020GetKpiDescriptor\022\021.mon" +
-      "itoring.KpiId\032\031.monitoring.KpiDescriptor" +
-      "\"\000\022G\n\024GetKpiDescriptorList\022\016.context.Emp" +
-      "ty\032\035.monitoring.KpiDescriptorList\"\000\022/\n\nI" +
-      "ncludeKpi\022\017.monitoring.Kpi\032\016.context.Emp" +
-      "ty\"\000\022=\n\nMonitorKpi\022\035.monitoring.MonitorK" +
-      "piRequest\032\016.context.Empty\"\000\022;\n\014QueryKpiD" +
-      "ata\022\024.monitoring.KpiQuery\032\023.monitoring.K" +
-      "piList\"\000\022I\n\022SetKpiSubscription\022\032.monitor" +
-      "ing.SubsDescriptor\032\023.monitoring.KpiList\"" +
-      "\0000\001\022M\n\021GetSubsDescriptor\022\032.monitoring.Su" +
-      "bscriptionID\032\032.monitoring.SubsDescriptor" +
-      "\"\000\022<\n\020GetSubscriptions\022\016.context.Empty\032\026" +
-      ".monitoring.SubsIDList\"\000\022B\n\022DeleteSubscr" +
-      "iption\022\032.monitoring.SubscriptionID\032\016.con" +
-      "text.Empty\"\000\022A\n\013SetKpiAlarm\022\033.monitoring" +
-      ".AlarmDescriptor\032\023.monitoring.AlarmID\"\000\022" +
-      "6\n\tGetAlarms\022\016.context.Empty\032\027.monitorin" +
-      "g.AlarmIDList\"\000\022H\n\022GetAlarmDescriptor\022\023." +
-      "monitoring.AlarmID\032\033.monitoring.AlarmDes" +
-      "criptor\"\000\022V\n\026GetAlarmResponseStream\022\035.mo" +
-      "nitoring.AlarmSubscription\032\031.monitoring." +
-      "AlarmResponse\"\0000\001\0224\n\013DeleteAlarm\022\023.monit" +
-      "oring.AlarmID\032\016.context.Empty\"\000\0226\n\014GetSt" +
-      "reamKpi\022\021.monitoring.KpiId\032\017.monitoring." +
-      "Kpi\"\0000\001\0229\n\rGetInstantKpi\022\021.monitoring.Kp" +
-      "iId\032\023.monitoring.KpiList\"\000b\006proto3"
+      "Id\022\033\n\023sampling_duration_s\030\002 \001(\002\022\033\n\023sampl" +
+      "ing_interval_s\030\003 \001(\002\022\022\n\nstart_date\030\004 \001(\t" +
+      "\022\020\n\010end_date\030\005 \001(\t\"0\n\016SubscriptionID\022\036\n\007" +
+      "subs_id\030\001 \001(\0132\r.context.Uuid\"b\n\014SubsResp" +
+      "onse\022+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subsc" +
+      "riptionID\022%\n\010kpi_list\030\002 \003(\0132\023.monitoring" +
+      ".KpiList\";\n\nSubsIDList\022-\n\tsubs_list\030\001 \003(" +
+      "\0132\032.monitoring.SubscriptionID\"\244\001\n\017AlarmD" +
+      "escriptor\022\031\n\021alarm_description\030\001 \001(\t\022\014\n\004" +
+      "name\030\002 \001(\t\022!\n\006kpi_id\030\003 \001(\0132\021.monitoring." +
+      "KpiId\0222\n\017kpi_value_range\030\004 \001(\0132\031.monitor" +
+      "ing.KpiValueRange\022\021\n\ttimestamp\030\005 \001(\t\"*\n\007" +
+      "AlarmID\022\037\n\010alarm_id\030\001 \001(\0132\r.context.Uuid" +
+      "\"m\n\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.mo" +
+      "nitoring.AlarmID\022\014\n\004text\030\002 \001(\t\022\'\n\tkpi_va" +
+      "lue\030\003 \001(\0132\024.monitoring.KpiValue\"6\n\013Alarm" +
+      "IDList\022\'\n\nalarm_list\030\001 \003(\0132\023.monitoring." +
+      "AlarmID2\271\t\n\021MonitoringService\022;\n\tCreateK" +
+      "pi\022\031.monitoring.KpiDescriptor\032\021.monitori" +
+      "ng.KpiId\"\000\022F\n\021EditKpiDescriptor\022\037.monito" +
+      "ring.EditedKpiDescriptor\032\016.context.Empty" +
+      "\"\000\0220\n\tDeleteKpi\022\021.monitoring.KpiId\032\016.con" +
+      "text.Empty\"\000\022G\n\024GetKpiDescriptorList\022\016.c" +
+      "ontext.Empty\032\035.monitoring.KpiDescriptorL" +
+      "ist\"\000\022G\n\017CreateBundleKpi\022\037.monitoring.Bu" +
+      "ndleKpiDescriptor\032\021.monitoring.KpiId\"\000\022B" +
+      "\n\020GetKpiDescriptor\022\021.monitoring.KpiId\032\031." +
+      "monitoring.KpiDescriptor\"\000\022/\n\nIncludeKpi" +
+      "\022\017.monitoring.Kpi\032\016.context.Empty\"\000\022=\n\nM" +
+      "onitorKpi\022\035.monitoring.MonitorKpiRequest" +
+      "\032\016.context.Empty\"\000\022;\n\014QueryKpiData\022\024.mon" +
+      "itoring.KpiQuery\032\023.monitoring.KpiList\"\000\022" +
+      "C\n\014SubscribeKpi\022\032.monitoring.SubsDescrip" +
+      "tor\032\023.monitoring.KpiList\"\0000\001\022M\n\021GetSubsD" +
+      "escriptor\022\032.monitoring.SubscriptionID\032\032." +
+      "monitoring.SubsDescriptor\"\000\022<\n\020GetSubscr" +
+      "iptions\022\016.context.Empty\032\026.monitoring.Sub" +
+      "sIDList\"\000\022C\n\023EditKpiSubscription\022\032.monit" +
+      "oring.SubsDescriptor\032\016.context.Empty\"\000\022D" +
+      "\n\016CreateKpiAlarm\022\033.monitoring.AlarmDescr" +
+      "iptor\032\023.monitoring.AlarmID\"\000\022=\n\014EditKpiA" +
+      "larm\022\033.monitoring.AlarmDescriptor\032\016.cont" +
+      "ext.Empty\"\000\0226\n\tGetAlarms\022\016.context.Empty" +
+      "\032\027.monitoring.AlarmIDList\"\000\022H\n\022GetAlarmD" +
+      "escriptor\022\023.monitoring.AlarmID\032\033.monitor" +
+      "ing.AlarmDescriptor\"\000\022L\n\026GetAlarmRespons" +
+      "eStream\022\023.monitoring.AlarmID\032\031.monitorin" +
+      "g.AlarmResponse\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -19395,105 +20035,111 @@ public final class Monitoring {
     internal_static_monitoring_KpiDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptor_descriptor,
+        new java.lang.String[] { "KpiDescription", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+    internal_static_monitoring_BundleKpiDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_BundleKpiDescriptor_descriptor,
+        new java.lang.String[] { "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+    internal_static_monitoring_EditedKpiDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_EditedKpiDescriptor_descriptor,
         new java.lang.String[] { "KpiId", "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
     internal_static_monitoring_MonitorKpiRequest_descriptor =
-      getDescriptor().getMessageTypes().get(1);
+      getDescriptor().getMessageTypes().get(3);
     internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_MonitorKpiRequest_descriptor,
         new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", });
     internal_static_monitoring_KpiQuery_descriptor =
-      getDescriptor().getMessageTypes().get(2);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_monitoring_KpiQuery_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiQuery_descriptor,
-        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartTimestamp", "EndTimestamp", });
+        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartDate", "EndDate", });
     internal_static_monitoring_KpiId_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(5);
     internal_static_monitoring_KpiId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiId_descriptor,
         new java.lang.String[] { "KpiId", });
     internal_static_monitoring_Kpi_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(6);
     internal_static_monitoring_Kpi_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_Kpi_descriptor,
         new java.lang.String[] { "KpiId", "Timestamp", "KpiValue", });
     internal_static_monitoring_KpiValueRange_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(7);
     internal_static_monitoring_KpiValueRange_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValueRange_descriptor,
-        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", "InRange", "IncludeMinValue", "IncludeMaxValue", });
+        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", });
     internal_static_monitoring_KpiValue_descriptor =
-      getDescriptor().getMessageTypes().get(6);
+      getDescriptor().getMessageTypes().get(8);
     internal_static_monitoring_KpiValue_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValue_descriptor,
-        new java.lang.String[] { "Int32Val", "Uint32Val", "Int64Val", "Uint64Val", "FloatVal", "StringVal", "BoolVal", "Value", });
+        new java.lang.String[] { "IntVal", "FloatVal", "StringVal", "BoolVal", "Value", });
     internal_static_monitoring_KpiList_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(9);
     internal_static_monitoring_KpiList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiList_descriptor,
         new java.lang.String[] { "KpiList", });
     internal_static_monitoring_KpiDescriptorList_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(10);
     internal_static_monitoring_KpiDescriptorList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptorList_descriptor,
         new java.lang.String[] { "KpiDescriptorList", });
     internal_static_monitoring_SubsDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(9);
+      getDescriptor().getMessageTypes().get(11);
     internal_static_monitoring_SubsDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsDescriptor_descriptor,
-        new java.lang.String[] { "SubsId", "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartTimestamp", "EndTimestamp", });
+        new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartDate", "EndDate", });
     internal_static_monitoring_SubscriptionID_descriptor =
-      getDescriptor().getMessageTypes().get(10);
+      getDescriptor().getMessageTypes().get(12);
     internal_static_monitoring_SubscriptionID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubscriptionID_descriptor,
         new java.lang.String[] { "SubsId", });
     internal_static_monitoring_SubsResponse_descriptor =
-      getDescriptor().getMessageTypes().get(11);
+      getDescriptor().getMessageTypes().get(13);
     internal_static_monitoring_SubsResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsResponse_descriptor,
         new java.lang.String[] { "SubsId", "KpiList", });
     internal_static_monitoring_SubsIDList_descriptor =
-      getDescriptor().getMessageTypes().get(12);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_monitoring_SubsIDList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsIDList_descriptor,
         new java.lang.String[] { "SubsList", });
     internal_static_monitoring_AlarmDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(15);
     internal_static_monitoring_AlarmDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmDescriptor_descriptor,
-        new java.lang.String[] { "AlarmId", "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
+        new java.lang.String[] { "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
     internal_static_monitoring_AlarmID_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_monitoring_AlarmID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmID_descriptor,
         new java.lang.String[] { "AlarmId", });
-    internal_static_monitoring_AlarmSubscription_descriptor =
-      getDescriptor().getMessageTypes().get(15);
-    internal_static_monitoring_AlarmSubscription_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_monitoring_AlarmSubscription_descriptor,
-        new java.lang.String[] { "AlarmID", "SubscriptionTimeoutS", "SubscriptionFrequencyMs", });
     internal_static_monitoring_AlarmResponse_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(17);
     internal_static_monitoring_AlarmResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmResponse_descriptor,
-        new java.lang.String[] { "AlarmId", "Text", "KpiValue", "Timestamp", });
+        new java.lang.String[] { "AlarmId", "Text", "KpiValue", });
     internal_static_monitoring_AlarmIDList_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(18);
     internal_static_monitoring_AlarmIDList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmIDList_descriptor,
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
index 6372600680d57d0b351e7dd67b88c84f9d8e8cff..f826e1167d1ed56567fc470ba70cc09003617eda 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
@@ -8,14 +8,18 @@ comments = "Source: monitoring.proto")
 public interface MonitoringService extends MutinyService {
 
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request);
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request);
     
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request);
+    
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request);
@@ -26,24 +30,20 @@ public interface MonitoringService extends MutinyService {
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request);
-    
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request);
-    
-    
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request);
     
     
 
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
index 21f7f48acd6b6870584133dc3d665f681e78cf5e..c7f776e7bd0c56cabc7009e7b7bdb208669fb441 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
@@ -16,25 +16,25 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
        try {
-         return delegate.setKpi(request);
+         return delegate.createKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
        try {
-         return delegate.deleteKpi(request);
+         return delegate.editKpiDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.getKpiDescriptor(request);
+         return delegate.deleteKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
@@ -48,116 +48,115 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
        try {
-         return delegate.includeKpi(request);
+         return delegate.createBundleKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.monitorKpi(request);
+         return delegate.getKpiDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
        try {
-         return delegate.queryKpiData(request);
+         return delegate.includeKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
        try {
-         return delegate.getSubsDescriptor(request);
+         return delegate.monitorKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
        try {
-         return delegate.getSubscriptions(request);
+         return delegate.queryKpiData(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
        try {
-         return delegate.deleteSubscription(request);
+         return delegate.getSubsDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
        try {
-         return delegate.setKpiAlarm(request);
+         return delegate.getSubscriptions(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
        try {
-         return delegate.getAlarms(request);
+         return delegate.editKpiSubscription(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
        try {
-         return delegate.getAlarmDescriptor(request);
+         return delegate.createKpiAlarm(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
        try {
-         return delegate.deleteAlarm(request);
+         return delegate.editKpiAlarm(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
        try {
-         return delegate.getInstantKpi(request);
+         return delegate.getAlarms(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
-
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.setKpiSubscription(request);
+         return delegate.getAlarmDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
        try {
-         return delegate.getAlarmResponseStream(request);
+         return delegate.subscribeKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.getStreamKpi(request);
+         return delegate.getAlarmResponseStream(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
index 6b6dc38645931ad94287b4151019c3b42a1c098d..35c98e8ff2c240e749e602c4d097c3bef81c8203 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
@@ -21,22 +21,30 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
-       return stub.setKpi(request);
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+       return stub.createKpi(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
-       return stub.deleteKpi(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+       return stub.editKpiDescriptor(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
-       return stub.getKpiDescriptor(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+       return stub.deleteKpi(request);
     }
     @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
        return stub.getKpiDescriptorList(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+       return stub.createBundleKpi(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+       return stub.getKpiDescriptor(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
        return stub.includeKpi(request);
     }
@@ -57,12 +65,16 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.getSubscriptions(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
-       return stub.deleteSubscription(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.editKpiSubscription(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.createKpiAlarm(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-       return stub.setKpiAlarm(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.editKpiAlarm(request);
     }
     @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
@@ -72,28 +84,15 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
        return stub.getAlarmDescriptor(request);
     }
-    @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
-       return stub.deleteAlarm(request);
-    }
-    @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getInstantKpi(request);
-    }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
-       return stub.setKpiSubscription(request);
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.subscribeKpi(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
        return stub.getAlarmResponseStream(request);
     }
 
-    @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getStreamKpi(request);
-    }
-
 }
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
index fe92a7814166b65b12db5d50bb4baaf525c59146..d4ae3510a2f622b195854e4c7d197b8e3ff4d5fd 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -15,96 +15,96 @@ public final class MonitoringServiceGrpc {
 
   // Static method descriptors that strictly reflect the proto.
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
-      monitoring.Monitoring.KpiId> getSetKpiMethod;
+      monitoring.Monitoring.KpiId> getCreateKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "SetKpi",
+      fullMethodName = SERVICE_NAME + '/' + "CreateKpi",
       requestType = monitoring.Monitoring.KpiDescriptor.class,
       responseType = monitoring.Monitoring.KpiId.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
-      monitoring.Monitoring.KpiId> getSetKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getSetKpiMethod;
-    if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) {
+      monitoring.Monitoring.KpiId> getCreateKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getCreateKpiMethod;
+    if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) {
-          MonitoringServiceGrpc.getSetKpiMethod = getSetKpiMethod =
+        if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
+          MonitoringServiceGrpc.getCreateKpiMethod = getCreateKpiMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpi"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpi"))
               .build();
         }
       }
     }
-    return getSetKpiMethod;
+    return getCreateKpiMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      context.ContextOuterClass.Empty> getDeleteKpiMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "DeleteKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiDescriptor",
+      requestType = monitoring.Monitoring.EditedKpiDescriptor.class,
       responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
-    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
+    if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
-          MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder()
+        if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiDescriptorMethod = getEditKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiDescriptor"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+                  monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiDescriptor"))
               .build();
         }
       }
     }
-    return getDeleteKpiMethod;
+    return getEditKpiDescriptorMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+      context.ContextOuterClass.Empty> getDeleteKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor",
+      fullMethodName = SERVICE_NAME + '/' + "DeleteKpi",
       requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.KpiDescriptor.class,
+      responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
-    if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
+    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
-          MonitoringServiceGrpc.getGetKpiDescriptorMethod = getGetKpiDescriptorMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>newBuilder()
+        if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+          MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiId.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor"))
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi"))
               .build();
         }
       }
     }
-    return getGetKpiDescriptorMethod;
+    return getDeleteKpiMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
@@ -138,6 +138,68 @@ public final class MonitoringServiceGrpc {
     return getGetKpiDescriptorListMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "CreateBundleKpi",
+      requestType = monitoring.Monitoring.BundleKpiDescriptor.class,
+      responseType = monitoring.Monitoring.KpiId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
+    if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
+          MonitoringServiceGrpc.getCreateBundleKpiMethod = getCreateBundleKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateBundleKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateBundleKpi"))
+              .build();
+        }
+      }
+    }
+    return getCreateBundleKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = monitoring.Monitoring.KpiDescriptor.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+    if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetKpiDescriptorMethod = getGetKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getGetKpiDescriptorMethod;
+  }
+
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.Kpi,
       context.ContextOuterClass.Empty> getIncludeKpiMethod;
 
@@ -232,34 +294,34 @@ public final class MonitoringServiceGrpc {
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod;
+      monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "SetKpiSubscription",
+      fullMethodName = SERVICE_NAME + '/' + "SubscribeKpi",
       requestType = monitoring.Monitoring.SubsDescriptor.class,
       responseType = monitoring.Monitoring.KpiList.class,
       methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod;
-    if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) {
+      monitoring.Monitoring.KpiList> getSubscribeKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
+    if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) {
-          MonitoringServiceGrpc.getSetKpiSubscriptionMethod = getSetKpiSubscriptionMethod =
+        if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
+          MonitoringServiceGrpc.getSubscribeKpiMethod = getSubscribeKpiMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiSubscription"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SubscribeKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiList.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiSubscription"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SubscribeKpi"))
               .build();
         }
       }
     }
-    return getSetKpiSubscriptionMethod;
+    return getSubscribeKpiMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
@@ -324,66 +386,97 @@ public final class MonitoringServiceGrpc {
     return getGetSubscriptionsMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
-      context.ContextOuterClass.Empty> getDeleteSubscriptionMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "DeleteSubscription",
-      requestType = monitoring.Monitoring.SubscriptionID.class,
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiSubscription",
+      requestType = monitoring.Monitoring.SubsDescriptor.class,
       responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
-      context.ContextOuterClass.Empty> getDeleteSubscriptionMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty> getDeleteSubscriptionMethod;
-    if ((getDeleteSubscriptionMethod = MonitoringServiceGrpc.getDeleteSubscriptionMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
+    if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getDeleteSubscriptionMethod = MonitoringServiceGrpc.getDeleteSubscriptionMethod) == null) {
-          MonitoringServiceGrpc.getDeleteSubscriptionMethod = getDeleteSubscriptionMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>newBuilder()
+        if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiSubscriptionMethod = getEditKpiSubscriptionMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteSubscription"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiSubscription"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.SubscriptionID.getDefaultInstance()))
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteSubscription"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiSubscription"))
               .build();
         }
       }
     }
-    return getDeleteSubscriptionMethod;
+    return getEditKpiSubscriptionMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod;
+      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "SetKpiAlarm",
+      fullMethodName = SERVICE_NAME + '/' + "CreateKpiAlarm",
       requestType = monitoring.Monitoring.AlarmDescriptor.class,
       responseType = monitoring.Monitoring.AlarmID.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod;
-    if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) {
+      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
+    if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) {
-          MonitoringServiceGrpc.getSetKpiAlarmMethod = getSetKpiAlarmMethod =
+        if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getCreateKpiAlarmMethod = getCreateKpiAlarmMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiAlarm"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpiAlarm"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmID.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiAlarm"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpiAlarm"))
               .build();
         }
       }
     }
-    return getSetKpiAlarmMethod;
+    return getCreateKpiAlarmMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiAlarm",
+      requestType = monitoring.Monitoring.AlarmDescriptor.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
+    if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiAlarmMethod = getEditKpiAlarmMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiAlarm"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiAlarm"))
+              .build();
+        }
+      }
+    }
+    return getEditKpiAlarmMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
@@ -448,27 +541,27 @@ public final class MonitoringServiceGrpc {
     return getGetAlarmDescriptorMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription,
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
       monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "GetAlarmResponseStream",
-      requestType = monitoring.Monitoring.AlarmSubscription.class,
+      requestType = monitoring.Monitoring.AlarmID.class,
       responseType = monitoring.Monitoring.AlarmResponse.class,
       methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription,
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
       monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
     if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
         if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
           MonitoringServiceGrpc.getGetAlarmResponseStreamMethod = getGetAlarmResponseStreamMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse>newBuilder()
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarmResponseStream"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.AlarmSubscription.getDefaultInstance()))
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmResponse.getDefaultInstance()))
               .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmResponseStream"))
@@ -479,99 +572,6 @@ public final class MonitoringServiceGrpc {
     return getGetAlarmResponseStreamMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
-      context.ContextOuterClass.Empty> getDeleteAlarmMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "DeleteAlarm",
-      requestType = monitoring.Monitoring.AlarmID.class,
-      responseType = context.ContextOuterClass.Empty.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
-      context.ContextOuterClass.Empty> getDeleteAlarmMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty> getDeleteAlarmMethod;
-    if ((getDeleteAlarmMethod = MonitoringServiceGrpc.getDeleteAlarmMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getDeleteAlarmMethod = MonitoringServiceGrpc.getDeleteAlarmMethod) == null) {
-          MonitoringServiceGrpc.getDeleteAlarmMethod = getDeleteAlarmMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteAlarm"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteAlarm"))
-              .build();
-        }
-      }
-    }
-    return getDeleteAlarmMethod;
-  }
-
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetStreamKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.Kpi.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetStreamKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
-    if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetStreamKpiMethod = getGetStreamKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetStreamKpi"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.Kpi.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetStreamKpi"))
-              .build();
-        }
-      }
-    }
-    return getGetStreamKpiMethod;
-  }
-
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiList> getGetInstantKpiMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetInstantKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.KpiList.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiList> getGetInstantKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiList> getGetInstantKpiMethod;
-    if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetInstantKpiMethod = getGetInstantKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiList>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInstantKpi"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiList.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetInstantKpi"))
-              .build();
-        }
-      }
-    }
-    return getGetInstantKpiMethod;
-  }
-
   /**
    * Creates a new async stub that supports all call types for the service
    */
@@ -622,23 +622,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpi(monitoring.Monitoring.KpiDescriptor request,
+    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiMethod(), responseObserver);
     }
 
     /**
      */
-    public void deleteKpi(monitoring.Monitoring.KpiId request,
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiDescriptorMethod(), responseObserver);
     }
 
     /**
      */
-    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
     }
 
     /**
@@ -648,6 +648,20 @@ public final class MonitoringServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorListMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateBundleKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
+    }
+
     /**
      */
     public void includeKpi(monitoring.Monitoring.Kpi request,
@@ -671,9 +685,9 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiSubscriptionMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSubscribeKpiMethod(), responseObserver);
     }
 
     /**
@@ -692,16 +706,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void deleteSubscription(monitoring.Monitoring.SubscriptionID request,
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteSubscriptionMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiSubscriptionMethod(), responseObserver);
     }
 
     /**
      */
-    public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiAlarmMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiAlarmMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiAlarmMethod(), responseObserver);
     }
 
     /**
@@ -720,55 +741,34 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request,
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmResponseStreamMethod(), responseObserver);
     }
 
-    /**
-     */
-    public void deleteAlarm(monitoring.Monitoring.AlarmID request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteAlarmMethod(), responseObserver);
-    }
-
-    /**
-     */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetStreamKpiMethod(), responseObserver);
-    }
-
-    /**
-     */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInstantKpiMethod(), responseObserver);
-    }
-
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
       return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
           .addMethod(
-            getSetKpiMethod(),
+            getCreateKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.KpiDescriptor,
                 monitoring.Monitoring.KpiId>(
-                  this, METHODID_SET_KPI)))
+                  this, METHODID_CREATE_KPI)))
           .addMethod(
-            getDeleteKpiMethod(),
+            getEditKpiDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.EditedKpiDescriptor,
                 context.ContextOuterClass.Empty>(
-                  this, METHODID_DELETE_KPI)))
+                  this, METHODID_EDIT_KPI_DESCRIPTOR)))
           .addMethod(
-            getGetKpiDescriptorMethod(),
+            getDeleteKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.KpiDescriptor>(
-                  this, METHODID_GET_KPI_DESCRIPTOR)))
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_DELETE_KPI)))
           .addMethod(
             getGetKpiDescriptorListMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -776,6 +776,20 @@ public final class MonitoringServiceGrpc {
                 context.ContextOuterClass.Empty,
                 monitoring.Monitoring.KpiDescriptorList>(
                   this, METHODID_GET_KPI_DESCRIPTOR_LIST)))
+          .addMethod(
+            getCreateBundleKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.BundleKpiDescriptor,
+                monitoring.Monitoring.KpiId>(
+                  this, METHODID_CREATE_BUNDLE_KPI)))
+          .addMethod(
+            getGetKpiDescriptorMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.KpiDescriptor>(
+                  this, METHODID_GET_KPI_DESCRIPTOR)))
           .addMethod(
             getIncludeKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -798,12 +812,12 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.KpiList>(
                   this, METHODID_QUERY_KPI_DATA)))
           .addMethod(
-            getSetKpiSubscriptionMethod(),
+            getSubscribeKpiMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
                 monitoring.Monitoring.SubsDescriptor,
                 monitoring.Monitoring.KpiList>(
-                  this, METHODID_SET_KPI_SUBSCRIPTION)))
+                  this, METHODID_SUBSCRIBE_KPI)))
           .addMethod(
             getGetSubsDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -819,19 +833,26 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.SubsIDList>(
                   this, METHODID_GET_SUBSCRIPTIONS)))
           .addMethod(
-            getDeleteSubscriptionMethod(),
+            getEditKpiSubscriptionMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.SubscriptionID,
+                monitoring.Monitoring.SubsDescriptor,
                 context.ContextOuterClass.Empty>(
-                  this, METHODID_DELETE_SUBSCRIPTION)))
+                  this, METHODID_EDIT_KPI_SUBSCRIPTION)))
           .addMethod(
-            getSetKpiAlarmMethod(),
+            getCreateKpiAlarmMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.AlarmDescriptor,
                 monitoring.Monitoring.AlarmID>(
-                  this, METHODID_SET_KPI_ALARM)))
+                  this, METHODID_CREATE_KPI_ALARM)))
+          .addMethod(
+            getEditKpiAlarmMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmDescriptor,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_EDIT_KPI_ALARM)))
           .addMethod(
             getGetAlarmsMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -850,30 +871,9 @@ public final class MonitoringServiceGrpc {
             getGetAlarmResponseStreamMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
-                monitoring.Monitoring.AlarmSubscription,
+                monitoring.Monitoring.AlarmID,
                 monitoring.Monitoring.AlarmResponse>(
                   this, METHODID_GET_ALARM_RESPONSE_STREAM)))
-          .addMethod(
-            getDeleteAlarmMethod(),
-            io.grpc.stub.ServerCalls.asyncUnaryCall(
-              new MethodHandlers<
-                monitoring.Monitoring.AlarmID,
-                context.ContextOuterClass.Empty>(
-                  this, METHODID_DELETE_ALARM)))
-          .addMethod(
-            getGetStreamKpiMethod(),
-            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
-              new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.Kpi>(
-                  this, METHODID_GET_STREAM_KPI)))
-          .addMethod(
-            getGetInstantKpiMethod(),
-            io.grpc.stub.ServerCalls.asyncUnaryCall(
-              new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.KpiList>(
-                  this, METHODID_GET_INSTANT_KPI)))
           .build();
     }
   }
@@ -894,26 +894,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpi(monitoring.Monitoring.KpiDescriptor request,
+    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getSetKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void deleteKpi(monitoring.Monitoring.KpiId request,
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -924,6 +924,22 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
     /**
      */
     public void includeKpi(monitoring.Monitoring.Kpi request,
@@ -950,10 +966,10 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
-          getChannel().newCall(getSetKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getSubscribeKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -974,18 +990,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void deleteSubscription(monitoring.Monitoring.SubscriptionID request,
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -1006,35 +1030,11 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request,
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
           getChannel().newCall(getGetAlarmResponseStreamMethod(), getCallOptions()), request, responseObserver);
     }
-
-    /**
-     */
-    public void deleteAlarm(monitoring.Monitoring.AlarmID request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getDeleteAlarmMethod(), getCallOptions()), request, responseObserver);
-    }
-
-    /**
-     */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
-          getChannel().newCall(getGetStreamKpiMethod(), getCallOptions()), request, responseObserver);
-    }
-
-    /**
-     */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request, responseObserver);
-    }
   }
 
   /**
@@ -1053,23 +1053,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public monitoring.Monitoring.KpiId setKpi(monitoring.Monitoring.KpiDescriptor request) {
+    public monitoring.Monitoring.KpiId createKpi(monitoring.Monitoring.KpiDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getSetKpiMethod(), getCallOptions(), request);
+          getChannel(), getCreateKpiMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public context.ContextOuterClass.Empty deleteKpi(monitoring.Monitoring.KpiId request) {
+    public context.ContextOuterClass.Empty editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getDeleteKpiMethod(), getCallOptions(), request);
+          getChannel(), getEditKpiDescriptorMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+    public context.ContextOuterClass.Empty deleteKpi(monitoring.Monitoring.KpiId request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request);
+          getChannel(), getDeleteKpiMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1079,6 +1079,20 @@ public final class MonitoringServiceGrpc {
           getChannel(), getGetKpiDescriptorListMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public monitoring.Monitoring.KpiId createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getCreateBundleKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public context.ContextOuterClass.Empty includeKpi(monitoring.Monitoring.Kpi request) {
@@ -1102,10 +1116,10 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public java.util.Iterator<monitoring.Monitoring.KpiList> setKpiSubscription(
+    public java.util.Iterator<monitoring.Monitoring.KpiList> subscribeKpi(
         monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
-          getChannel(), getSetKpiSubscriptionMethod(), getCallOptions(), request);
+          getChannel(), getSubscribeKpiMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1124,16 +1138,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public context.ContextOuterClass.Empty deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+    public context.ContextOuterClass.Empty editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getDeleteSubscriptionMethod(), getCallOptions(), request);
+          getChannel(), getEditKpiSubscriptionMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public monitoring.Monitoring.AlarmID setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+    public monitoring.Monitoring.AlarmID createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getSetKpiAlarmMethod(), getCallOptions(), request);
+          getChannel(), getCreateKpiAlarmMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getEditKpiAlarmMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1153,32 +1174,10 @@ public final class MonitoringServiceGrpc {
     /**
      */
     public java.util.Iterator<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(
-        monitoring.Monitoring.AlarmSubscription request) {
+        monitoring.Monitoring.AlarmID request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
           getChannel(), getGetAlarmResponseStreamMethod(), getCallOptions(), request);
     }
-
-    /**
-     */
-    public context.ContextOuterClass.Empty deleteAlarm(monitoring.Monitoring.AlarmID request) {
-      return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getDeleteAlarmMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public java.util.Iterator<monitoring.Monitoring.Kpi> getStreamKpi(
-        monitoring.Monitoring.KpiId request) {
-      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
-          getChannel(), getGetStreamKpiMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public monitoring.Monitoring.KpiList getInstantKpi(monitoring.Monitoring.KpiId request) {
-      return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetInstantKpiMethod(), getCallOptions(), request);
-    }
   }
 
   /**
@@ -1197,26 +1196,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> setKpi(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createKpi(
         monitoring.Monitoring.KpiDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getSetKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
-        monitoring.Monitoring.KpiId request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiDescriptor(
+        monitoring.Monitoring.EditedKpiDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
         monitoring.Monitoring.KpiId request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request);
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
     }
 
     /**
@@ -1227,6 +1226,22 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createBundleKpi(
+        monitoring.Monitoring.BundleKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request);
+    }
+
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> includeKpi(
@@ -1269,71 +1284,63 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteSubscription(
-        monitoring.Monitoring.SubscriptionID request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiSubscription(
+        monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request);
+          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> setKpiAlarm(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> createKpiAlarm(
         monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request);
+          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmIDList> getAlarms(
-        context.ContextOuterClass.Empty request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiAlarm(
+        monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request);
+          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(
-        monitoring.Monitoring.AlarmID request) {
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmIDList> getAlarms(
+        context.ContextOuterClass.Empty request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request);
+          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteAlarm(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(
         monitoring.Monitoring.AlarmID request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getDeleteAlarmMethod(), getCallOptions()), request);
-    }
-
-    /**
-     */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiList> getInstantKpi(
-        monitoring.Monitoring.KpiId request) {
-      return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request);
     }
   }
 
-  private static final int METHODID_SET_KPI = 0;
-  private static final int METHODID_DELETE_KPI = 1;
-  private static final int METHODID_GET_KPI_DESCRIPTOR = 2;
+  private static final int METHODID_CREATE_KPI = 0;
+  private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+  private static final int METHODID_DELETE_KPI = 2;
   private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
-  private static final int METHODID_INCLUDE_KPI = 4;
-  private static final int METHODID_MONITOR_KPI = 5;
-  private static final int METHODID_QUERY_KPI_DATA = 6;
-  private static final int METHODID_SET_KPI_SUBSCRIPTION = 7;
-  private static final int METHODID_GET_SUBS_DESCRIPTOR = 8;
-  private static final int METHODID_GET_SUBSCRIPTIONS = 9;
-  private static final int METHODID_DELETE_SUBSCRIPTION = 10;
-  private static final int METHODID_SET_KPI_ALARM = 11;
-  private static final int METHODID_GET_ALARMS = 12;
-  private static final int METHODID_GET_ALARM_DESCRIPTOR = 13;
-  private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 14;
-  private static final int METHODID_DELETE_ALARM = 15;
-  private static final int METHODID_GET_STREAM_KPI = 16;
-  private static final int METHODID_GET_INSTANT_KPI = 17;
+  private static final int METHODID_CREATE_BUNDLE_KPI = 4;
+  private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
+  private static final int METHODID_INCLUDE_KPI = 6;
+  private static final int METHODID_MONITOR_KPI = 7;
+  private static final int METHODID_QUERY_KPI_DATA = 8;
+  private static final int METHODID_SUBSCRIBE_KPI = 9;
+  private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
+  private static final int METHODID_GET_SUBSCRIPTIONS = 11;
+  private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
+  private static final int METHODID_CREATE_KPI_ALARM = 13;
+  private static final int METHODID_EDIT_KPI_ALARM = 14;
+  private static final int METHODID_GET_ALARMS = 15;
+  private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
+  private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -1352,22 +1359,30 @@ public final class MonitoringServiceGrpc {
     @java.lang.SuppressWarnings("unchecked")
     public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
       switch (methodId) {
-        case METHODID_SET_KPI:
-          serviceImpl.setKpi((monitoring.Monitoring.KpiDescriptor) request,
+        case METHODID_CREATE_KPI:
+          serviceImpl.createKpi((monitoring.Monitoring.KpiDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
           break;
+        case METHODID_EDIT_KPI_DESCRIPTOR:
+          serviceImpl.editKpiDescriptor((monitoring.Monitoring.EditedKpiDescriptor) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
         case METHODID_DELETE_KPI:
           serviceImpl.deleteKpi((monitoring.Monitoring.KpiId) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
-        case METHODID_GET_KPI_DESCRIPTOR:
-          serviceImpl.getKpiDescriptor((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver);
-          break;
         case METHODID_GET_KPI_DESCRIPTOR_LIST:
           serviceImpl.getKpiDescriptorList((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver);
           break;
+        case METHODID_CREATE_BUNDLE_KPI:
+          serviceImpl.createBundleKpi((monitoring.Monitoring.BundleKpiDescriptor) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
+          break;
+        case METHODID_GET_KPI_DESCRIPTOR:
+          serviceImpl.getKpiDescriptor((monitoring.Monitoring.KpiId) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver);
+          break;
         case METHODID_INCLUDE_KPI:
           serviceImpl.includeKpi((monitoring.Monitoring.Kpi) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
@@ -1380,8 +1395,8 @@ public final class MonitoringServiceGrpc {
           serviceImpl.queryKpiData((monitoring.Monitoring.KpiQuery) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
           break;
-        case METHODID_SET_KPI_SUBSCRIPTION:
-          serviceImpl.setKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
+        case METHODID_SUBSCRIBE_KPI:
+          serviceImpl.subscribeKpi((monitoring.Monitoring.SubsDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
           break;
         case METHODID_GET_SUBS_DESCRIPTOR:
@@ -1392,14 +1407,18 @@ public final class MonitoringServiceGrpc {
           serviceImpl.getSubscriptions((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList>) responseObserver);
           break;
-        case METHODID_DELETE_SUBSCRIPTION:
-          serviceImpl.deleteSubscription((monitoring.Monitoring.SubscriptionID) request,
+        case METHODID_EDIT_KPI_SUBSCRIPTION:
+          serviceImpl.editKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
-        case METHODID_SET_KPI_ALARM:
-          serviceImpl.setKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
+        case METHODID_CREATE_KPI_ALARM:
+          serviceImpl.createKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver);
           break;
+        case METHODID_EDIT_KPI_ALARM:
+          serviceImpl.editKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
         case METHODID_GET_ALARMS:
           serviceImpl.getAlarms((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList>) responseObserver);
@@ -1409,21 +1428,9 @@ public final class MonitoringServiceGrpc {
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver);
           break;
         case METHODID_GET_ALARM_RESPONSE_STREAM:
-          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmSubscription) request,
+          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmID) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver);
           break;
-        case METHODID_DELETE_ALARM:
-          serviceImpl.deleteAlarm((monitoring.Monitoring.AlarmID) request,
-              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
-          break;
-        case METHODID_GET_STREAM_KPI:
-          serviceImpl.getStreamKpi((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver);
-          break;
-        case METHODID_GET_INSTANT_KPI:
-          serviceImpl.getInstantKpi((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
-          break;
         default:
           throw new AssertionError();
       }
@@ -1485,24 +1492,24 @@ public final class MonitoringServiceGrpc {
         if (result == null) {
           serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
               .setSchemaDescriptor(new MonitoringServiceFileDescriptorSupplier())
-              .addMethod(getSetKpiMethod())
+              .addMethod(getCreateKpiMethod())
+              .addMethod(getEditKpiDescriptorMethod())
               .addMethod(getDeleteKpiMethod())
-              .addMethod(getGetKpiDescriptorMethod())
               .addMethod(getGetKpiDescriptorListMethod())
+              .addMethod(getCreateBundleKpiMethod())
+              .addMethod(getGetKpiDescriptorMethod())
               .addMethod(getIncludeKpiMethod())
               .addMethod(getMonitorKpiMethod())
               .addMethod(getQueryKpiDataMethod())
-              .addMethod(getSetKpiSubscriptionMethod())
+              .addMethod(getSubscribeKpiMethod())
               .addMethod(getGetSubsDescriptorMethod())
               .addMethod(getGetSubscriptionsMethod())
-              .addMethod(getDeleteSubscriptionMethod())
-              .addMethod(getSetKpiAlarmMethod())
+              .addMethod(getEditKpiSubscriptionMethod())
+              .addMethod(getCreateKpiAlarmMethod())
+              .addMethod(getEditKpiAlarmMethod())
               .addMethod(getGetAlarmsMethod())
               .addMethod(getGetAlarmDescriptorMethod())
               .addMethod(getGetAlarmResponseStreamMethod())
-              .addMethod(getDeleteAlarmMethod())
-              .addMethod(getGetStreamKpiMethod())
-              .addMethod(getGetInstantKpiMethod())
               .build();
         }
       }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
index d663b38c923a2b5401642db4e697e16be4720f05..46f442b743ee176a83a416fe13711beda6baf937 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
@@ -36,18 +36,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpi);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpi);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteKpi);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiDescriptor);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteKpi);
         }
 
         
@@ -56,6 +56,16 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createBundleKpi);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::includeKpi);
         }
@@ -81,13 +91,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteSubscription);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiSubscription);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpiAlarm);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpiAlarm);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiAlarm);
         }
 
         
@@ -101,30 +116,15 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteAlarm);
-        }
-
-        
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getInstantKpi);
-        }
-
-        
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::setKpiSubscription);
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::subscribeKpi);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getAlarmResponseStream);
         }
 
-        
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getStreamKpi);
-        }
-
     }
 
     
@@ -143,17 +143,17 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
 
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -163,98 +163,98 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
             return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getSetKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getCreateKpiMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.KpiDescriptor,
                                             monitoring.Monitoring.KpiId>(
-                                            this, METHODID_SET_KPI, compression)))
+                                            this, METHODID_CREATE_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getEditKpiDescriptorMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.EditedKpiDescriptor,
                                             context.ContextOuterClass.Empty>(
-                                            this, METHODID_DELETE_KPI, compression)))
+                                            this, METHODID_EDIT_KPI_DESCRIPTOR, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
+                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.KpiDescriptor>(
-                                            this, METHODID_GET_KPI_DESCRIPTOR, compression)))
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_DELETE_KPI, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetKpiDescriptorListMethod(),
                             asyncUnaryCall(
@@ -262,6 +262,20 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             context.ContextOuterClass.Empty,
                                             monitoring.Monitoring.KpiDescriptorList>(
                                             this, METHODID_GET_KPI_DESCRIPTOR_LIST, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getCreateBundleKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.BundleKpiDescriptor,
+                                            monitoring.Monitoring.KpiId>(
+                                            this, METHODID_CREATE_BUNDLE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.KpiDescriptor>(
+                                            this, METHODID_GET_KPI_DESCRIPTOR, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getIncludeKpiMethod(),
                             asyncUnaryCall(
@@ -284,12 +298,12 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.KpiList>(
                                             this, METHODID_QUERY_KPI_DATA, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getSetKpiSubscriptionMethod(),
+                            monitoring.MonitoringServiceGrpc.getSubscribeKpiMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.SubsDescriptor,
                                             monitoring.Monitoring.KpiList>(
-                                            this, METHODID_SET_KPI_SUBSCRIPTION, compression)))
+                                            this, METHODID_SUBSCRIBE_KPI, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetSubsDescriptorMethod(),
                             asyncUnaryCall(
@@ -305,19 +319,26 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.SubsIDList>(
                                             this, METHODID_GET_SUBSCRIPTIONS, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getDeleteSubscriptionMethod(),
+                            monitoring.MonitoringServiceGrpc.getEditKpiSubscriptionMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.SubscriptionID,
+                                            monitoring.Monitoring.SubsDescriptor,
                                             context.ContextOuterClass.Empty>(
-                                            this, METHODID_DELETE_SUBSCRIPTION, compression)))
+                                            this, METHODID_EDIT_KPI_SUBSCRIPTION, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getSetKpiAlarmMethod(),
+                            monitoring.MonitoringServiceGrpc.getCreateKpiAlarmMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.AlarmDescriptor,
                                             monitoring.Monitoring.AlarmID>(
-                                            this, METHODID_SET_KPI_ALARM, compression)))
+                                            this, METHODID_CREATE_KPI_ALARM, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getEditKpiAlarmMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmDescriptor,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_EDIT_KPI_ALARM, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetAlarmsMethod(),
                             asyncUnaryCall(
@@ -336,52 +357,31 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             monitoring.MonitoringServiceGrpc.getGetAlarmResponseStreamMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.AlarmSubscription,
+                                            monitoring.Monitoring.AlarmID,
                                             monitoring.Monitoring.AlarmResponse>(
                                             this, METHODID_GET_ALARM_RESPONSE_STREAM, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getDeleteAlarmMethod(),
-                            asyncUnaryCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.AlarmID,
-                                            context.ContextOuterClass.Empty>(
-                                            this, METHODID_DELETE_ALARM, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetStreamKpiMethod(),
-                            asyncServerStreamingCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.Kpi>(
-                                            this, METHODID_GET_STREAM_KPI, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetInstantKpiMethod(),
-                            asyncUnaryCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.KpiList>(
-                                            this, METHODID_GET_INSTANT_KPI, compression)))
                     .build();
         }
     }
 
-    private static final int METHODID_SET_KPI = 0;
-    private static final int METHODID_DELETE_KPI = 1;
-    private static final int METHODID_GET_KPI_DESCRIPTOR = 2;
+    private static final int METHODID_CREATE_KPI = 0;
+    private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+    private static final int METHODID_DELETE_KPI = 2;
     private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
-    private static final int METHODID_INCLUDE_KPI = 4;
-    private static final int METHODID_MONITOR_KPI = 5;
-    private static final int METHODID_QUERY_KPI_DATA = 6;
-    private static final int METHODID_SET_KPI_SUBSCRIPTION = 7;
-    private static final int METHODID_GET_SUBS_DESCRIPTOR = 8;
-    private static final int METHODID_GET_SUBSCRIPTIONS = 9;
-    private static final int METHODID_DELETE_SUBSCRIPTION = 10;
-    private static final int METHODID_SET_KPI_ALARM = 11;
-    private static final int METHODID_GET_ALARMS = 12;
-    private static final int METHODID_GET_ALARM_DESCRIPTOR = 13;
-    private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 14;
-    private static final int METHODID_DELETE_ALARM = 15;
-    private static final int METHODID_GET_STREAM_KPI = 16;
-    private static final int METHODID_GET_INSTANT_KPI = 17;
+    private static final int METHODID_CREATE_BUNDLE_KPI = 4;
+    private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
+    private static final int METHODID_INCLUDE_KPI = 6;
+    private static final int METHODID_MONITOR_KPI = 7;
+    private static final int METHODID_QUERY_KPI_DATA = 8;
+    private static final int METHODID_SUBSCRIBE_KPI = 9;
+    private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
+    private static final int METHODID_GET_SUBSCRIPTIONS = 11;
+    private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
+    private static final int METHODID_CREATE_KPI_ALARM = 13;
+    private static final int METHODID_EDIT_KPI_ALARM = 14;
+    private static final int METHODID_GET_ALARMS = 15;
+    private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
+    private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
 
     private static final class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -402,23 +402,23 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         @java.lang.SuppressWarnings("unchecked")
         public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
             switch (methodId) {
-                case METHODID_SET_KPI:
+                case METHODID_CREATE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
                             compression,
-                            serviceImpl::setKpi);
+                            serviceImpl::createKpi);
                     break;
-                case METHODID_DELETE_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                case METHODID_EDIT_KPI_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.EditedKpiDescriptor) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
                             compression,
-                            serviceImpl::deleteKpi);
+                            serviceImpl::editKpiDescriptor);
                     break;
-                case METHODID_GET_KPI_DESCRIPTOR:
+                case METHODID_DELETE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
                             compression,
-                            serviceImpl::getKpiDescriptor);
+                            serviceImpl::deleteKpi);
                     break;
                 case METHODID_GET_KPI_DESCRIPTOR_LIST:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
@@ -426,6 +426,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::getKpiDescriptorList);
                     break;
+                case METHODID_CREATE_BUNDLE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.BundleKpiDescriptor) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
+                            compression,
+                            serviceImpl::createBundleKpi);
+                    break;
+                case METHODID_GET_KPI_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver,
+                            compression,
+                            serviceImpl::getKpiDescriptor);
+                    break;
                 case METHODID_INCLUDE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.Kpi) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
@@ -444,11 +456,11 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::queryKpiData);
                     break;
-                case METHODID_SET_KPI_SUBSCRIPTION:
+                case METHODID_SUBSCRIBE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.SubsDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
                             compression,
-                            serviceImpl::setKpiSubscription);
+                            serviceImpl::subscribeKpi);
                     break;
                 case METHODID_GET_SUBS_DESCRIPTOR:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
@@ -462,17 +474,23 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::getSubscriptions);
                     break;
-                case METHODID_DELETE_SUBSCRIPTION:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
+                case METHODID_EDIT_KPI_SUBSCRIPTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubsDescriptor) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
                             compression,
-                            serviceImpl::deleteSubscription);
+                            serviceImpl::editKpiSubscription);
                     break;
-                case METHODID_SET_KPI_ALARM:
+                case METHODID_CREATE_KPI_ALARM:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver,
                             compression,
-                            serviceImpl::setKpiAlarm);
+                            serviceImpl::createKpiAlarm);
+                    break;
+                case METHODID_EDIT_KPI_ALARM:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::editKpiAlarm);
                     break;
                 case METHODID_GET_ALARMS:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
@@ -487,29 +505,11 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             serviceImpl::getAlarmDescriptor);
                     break;
                 case METHODID_GET_ALARM_RESPONSE_STREAM:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmSubscription) request,
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmID) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver,
                             compression,
                             serviceImpl::getAlarmResponseStream);
                     break;
-                case METHODID_DELETE_ALARM:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmID) request,
-                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
-                            compression,
-                            serviceImpl::deleteAlarm);
-                    break;
-                case METHODID_GET_STREAM_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
-                            compression,
-                            serviceImpl::getStreamKpi);
-                    break;
-                case METHODID_GET_INSTANT_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
-                            compression,
-                            serviceImpl::getInstantKpi);
-                    break;
                 default:
                     throw new java.lang.AssertionError();
             }
diff --git a/src/automation/target/kubernetes/kubernetes.yml b/src/automation/target/kubernetes/kubernetes.yml
index 8bc14b935b4e4f4a18ed03f10cca0b74f480dcf0..93842169827b48a5c8907aa1d3dade68d1be90a2 100644
--- a/src/automation/target/kubernetes/kubernetes.yml
+++ b/src/automation/target/kubernetes/kubernetes.yml
@@ -3,7 +3,8 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/build-timestamp: 2022-09-19 - 10:48:18 +0000
+    app.quarkus.io/commit-id: ac09ca6e8827edf1379450dc3e68dcdc35957479
+    app.quarkus.io/build-timestamp: 2022-08-02 - 07:36:43 +0000
   labels:
     app.kubernetes.io/name: automationservice
     app: automationservice
@@ -24,7 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/build-timestamp: 2022-09-19 - 10:48:18 +0000
+    app.quarkus.io/commit-id: ac09ca6e8827edf1379450dc3e68dcdc35957479
+    app.quarkus.io/build-timestamp: 2022-08-02 - 07:36:43 +0000
   labels:
     app: automationservice
     app.kubernetes.io/name: automationservice
@@ -37,7 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/build-timestamp: 2022-09-19 - 10:48:18 +0000
+        app.quarkus.io/commit-id: ac09ca6e8827edf1379450dc3e68dcdc35957479
+        app.quarkus.io/build-timestamp: 2022-08-02 - 07:36:43 +0000
       labels:
         app: automationservice
         app.kubernetes.io/name: automationservice
diff --git a/src/common/DeviceTypes.py b/src/common/DeviceTypes.py
index 4d67ff6615227f0d9e7d82e2f69b39d72011a75c..bf871a2d5afa6a73f1c9dd39431c64a7f31bbd7e 100644
--- a/src/common/DeviceTypes.py
+++ b/src/common/DeviceTypes.py
@@ -15,14 +15,12 @@
 from enum import Enum
 
 class DeviceTypeEnum(Enum):
-    EMULATED_DATACENTER       = 'emu-datacenter'
-    EMULATED_OPEN_LINE_SYSTEM = 'emu-open-line-system'
-    EMULATED_PACKET_ROUTER    = 'emu-packet-router'
-    DATACENTER                = 'datacenter'
-    MICROVAWE_RADIO_SYSTEM    = 'microwave-radio-system'
-    OPTICAL_ROADM             = 'optical-roadm'
-    OPTICAL_TRANDPONDER       = 'optical-trandponder'
-    OPEN_LINE_SYSTEM          = 'open-line-system'
-    PACKET_ROUTER             = 'packet-router'
-    PACKET_SWITCH             = 'packet-switch'
-    P4_SWITCH                 = 'p4-switch'
+    EMULATED_OPTICAL_LINE_SYSTEM = 'emu-optical-line-system'
+    EMULATED_PACKET_ROUTER       = 'emu-packet-router'
+    MICROVAWE_RADIO_SYSTEM       = 'microwave-radio-system'
+    OPTICAL_ROADM                = 'optical-roadm'
+    OPTICAL_TRANDPONDER          = 'optical-trandponder'
+    OPTICAL_LINE_SYSTEM          = 'optical-line-system'
+    PACKET_ROUTER                = 'packet-router'
+    PACKET_SWITCH                = 'packet-switch'
+    P4_SWITCH                    = 'p4-switch'
diff --git a/src/common/tools/object_factory/Constraint.py b/src/common/tools/object_factory/Constraint.py
index 757531daf65b60c5f5b6c90ee67ef00488f91590..df290d4285330f1965608d710d9d48ca49131521 100644
--- a/src/common/tools/object_factory/Constraint.py
+++ b/src/common/tools/object_factory/Constraint.py
@@ -15,19 +15,6 @@
 import json
 from typing import Any, Dict, Union
 
-def json_constraint_custom(constraint_type : str, constraint_value : Union[str, Dict[str, Any]]) -> Dict:
+def json_constraint(constraint_type : str, constraint_value : Union[str, Dict[str, Any]]):
     if not isinstance(constraint_value, str): constraint_value = json.dumps(constraint_value, sort_keys=True)
     return {'custom': {'constraint_type': constraint_type, 'constraint_value': constraint_value}}
-
-def json_constraint_endpoint_location_region(endpoint_id : Dict, region : str) -> Dict:
-    return {'endpoint_location': {'endpoint_id': endpoint_id, 'location': {'region': region}}}
-
-def json_constraint_endpoint_location_gps(endpoint_id : Dict, latitude : float, longitude : float) -> Dict:
-    gps_position = {'latitude': latitude, 'longitude': longitude}
-    return {'endpoint_location': {'endpoint_id': endpoint_id, 'location': {'gps_position': gps_position}}}
-
-def json_constraint_endpoint_priority(endpoint_id : Dict, priority : int) -> Dict:
-    return {'endpoint_priority': {'endpoint_id': endpoint_id, 'priority': priority}}
-
-def json_constraint_sla_availability(num_disjoint_paths : int, all_active : bool) -> Dict:
-    return {'sla_availability': {'num_disjoint_paths': num_disjoint_paths, 'all_active': all_active}}
diff --git a/src/common/tools/object_factory/Device.py b/src/common/tools/object_factory/Device.py
index 4a590134dd7b455c92b62fc5e4aa9fece0f874b4..32baff9ae5cfb9a9a41d1d06bfec7df5fd5c0e4a 100644
--- a/src/common/tools/object_factory/Device.py
+++ b/src/common/tools/object_factory/Device.py
@@ -20,8 +20,7 @@ from common.tools.object_factory.ConfigRule import json_config_rule_set
 
 DEVICE_DISABLED = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED
 
-DEVICE_EMUDC_TYPE   = DeviceTypeEnum.EMULATED_DATACENTER.value
-DEVICE_EMUOLS_TYPE  = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
+DEVICE_EMUOLS_TYPE  = DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM.value
 DEVICE_EMUPR_TYPE   = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
 DEVICE_EMU_DRIVERS  = [DeviceDriverEnum.DEVICEDRIVER_UNDEFINED]
 DEVICE_EMU_ADDRESS  = '127.0.0.1'
@@ -30,7 +29,7 @@ DEVICE_EMU_PORT     = '0'
 DEVICE_PR_TYPE      = DeviceTypeEnum.PACKET_ROUTER.value
 DEVICE_PR_DRIVERS   = [DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG]
 
-DEVICE_TAPI_TYPE    = DeviceTypeEnum.OPEN_LINE_SYSTEM.value
+DEVICE_TAPI_TYPE    = DeviceTypeEnum.OPTICAL_LINE_SYSTEM.value
 DEVICE_TAPI_DRIVERS = [DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API]
 
 # check which enum type and value assign to microwave device
@@ -72,14 +71,6 @@ def json_device_emulated_tapi_disabled(
         device_uuid, DEVICE_EMUOLS_TYPE, DEVICE_DISABLED, endpoints=endpoints, config_rules=config_rules,
         drivers=drivers)
 
-def json_device_emulated_datacenter_disabled(
-        device_uuid : str, endpoints : List[Dict] = [], config_rules : List[Dict] = [],
-        drivers : List[Dict] = DEVICE_EMU_DRIVERS
-    ):
-    return json_device(
-        device_uuid, DEVICE_EMUDC_TYPE, DEVICE_DISABLED, endpoints=endpoints, config_rules=config_rules,
-        drivers=drivers)
-
 def json_device_packetrouter_disabled(
         device_uuid : str, endpoints : List[Dict] = [], config_rules : List[Dict] = [],
         drivers : List[Dict] = DEVICE_PR_DRIVERS
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
index b6177cb9cdfca0c63404b77f28eb9bebf8a4a518..d432e5605cfebaa01c2a8faf0cbffcff110d7dbe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
@@ -51,4 +51,4 @@ BEARER_MAPPINGS = {
     'R4@D2:3/1': ('R4@D2', '3/1', '10.0.2.4', '65002:104', 100, '2.4.3.1', 24),
     'R4@D2:3/2': ('R4@D2', '3/2', '10.0.2.4', '65002:104', 100, '2.4.3.2', 24),
     'R4@D2:3/3': ('R4@D2', '3/3', '10.0.2.4', '65002:104', 100, '2.4.3.3', 24),
-}
\ No newline at end of file
+}
diff --git a/src/compute/tests/Constants.py b/src/compute/tests/Constants.py
index cb1331c7445888070c6c3d5ecef6136f9f149916..640124b07fd8e5dc0dff0635175b1499544f1b2d 100644
--- a/src/compute/tests/Constants.py
+++ b/src/compute/tests/Constants.py
@@ -82,4 +82,4 @@ SERVICE_CONNECTION_POINTS_2 = [
     {'service_endpoint_id': 'ep-3',
         'service_endpoint_encapsulation_type': 'dot1q',
         'service_endpoint_encapsulation_info': {'vlan': 1234}},
-]
\ No newline at end of file
+]
diff --git a/src/context/client/ContextClient.py b/src/context/client/ContextClient.py
index da907341f799def94694817242c106a913e03327..6e8cbac6a28c1b24d1999b0d8db1240905b10f2c 100644
--- a/src/context/client/ContextClient.py
+++ b/src/context/client/ContextClient.py
@@ -250,13 +250,6 @@ class ContextClient:
         LOGGER.debug('SetService result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
-    @RETRY_DECORATOR
-    def UnsetService(self, request: Service) -> ServiceId:
-        LOGGER.debug('UnsetService request: {:s}'.format(grpc_message_to_json_string(request)))
-        response = self.stub.UnsetService(request)
-        LOGGER.debug('UnsetService result: {:s}'.format(grpc_message_to_json_string(response)))
-        return response
-
     @RETRY_DECORATOR
     def RemoveService(self, request: ServiceId) -> Empty:
         LOGGER.debug('RemoveService request: {:s}'.format(grpc_message_to_json_string(request)))
@@ -299,13 +292,6 @@ class ContextClient:
         LOGGER.debug('SetSlice result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
-    @RETRY_DECORATOR
-    def UnsetSlice(self, request: Slice) -> SliceId:
-        LOGGER.debug('UnsetSlice request: {:s}'.format(grpc_message_to_json_string(request)))
-        response = self.stub.UnsetSlice(request)
-        LOGGER.debug('UnsetSlice result: {:s}'.format(grpc_message_to_json_string(response)))
-        return response
-
     @RETRY_DECORATOR
     def RemoveSlice(self, request: SliceId) -> Empty:
         LOGGER.debug('RemoveSlice request: {:s}'.format(grpc_message_to_json_string(request)))
diff --git a/src/context/service/__main__.py b/src/context/service/__main__.py
index dfd0c8773b6a7d2dea7bafa12c12018d62b7cdb8..53754caf4f9d2621ed8a6fdfd325d42f77f44a4f 100644
--- a/src/context/service/__main__.py
+++ b/src/context/service/__main__.py
@@ -36,7 +36,7 @@ def main():
     global LOGGER # pylint: disable=global-statement
 
     log_level = get_log_level()
-    logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s")
+    logging.basicConfig(level=log_level)
     LOGGER = logging.getLogger(__name__)
 
     signal.signal(signal.SIGINT,  signal_handler)
diff --git a/src/context/service/database/ConfigModel.py b/src/context/service/database/ConfigModel.py
index a5f90788e4783edf1eba76cf6fe461aaa96476e6..bb2a37467ce3ad451bd29f824a5092ec1ad43cee 100644
--- a/src/context/service/database/ConfigModel.py
+++ b/src/context/service/database/ConfigModel.py
@@ -116,7 +116,7 @@ def update_config(
     raw_config_rules : List[Tuple[ORM_ConfigActionEnum, str, str]]
 ) -> List[Tuple[Union[ConfigModel, ConfigRuleModel], bool]]:
 
-    str_config_key = key_to_str([config_name, db_parent_pk], separator=':')
+    str_config_key = key_to_str([db_parent_pk, config_name], separator=':')
     result : Tuple[ConfigModel, bool] = get_or_create_object(database, ConfigModel, str_config_key)
     db_config, created = result
 
diff --git a/src/context/service/database/ConstraintModel.py b/src/context/service/database/ConstraintModel.py
index 449dcedeeaf10686ece58607d3a5fa4f4bf6a070..a35ec250d8a62a8a2534e9f27ddecac801db6eff 100644
--- a/src/context/service/database/ConstraintModel.py
+++ b/src/context/service/database/ConstraintModel.py
@@ -54,13 +54,24 @@ class ConstraintCustomModel(Model): # pylint: disable=abstract-method
     def dump(self) -> Dict: # pylint: disable=arguments-differ
         return {'custom': {'constraint_type': self.constraint_type, 'constraint_value': self.constraint_value}}
 
+Union_ConstraintEndpoint = Union[
+    'ConstraintEndpointLocationGpsPositionModel', 'ConstraintEndpointLocationRegionModel',
+    'ConstraintEndpointPriorityModel'
+]
+def dump_endpoint_id(endpoint_constraint : Union_ConstraintEndpoint):
+    db_endpoints_pks = list(endpoint_constraint.references(EndPointModel))
+    num_endpoints = len(db_endpoints_pks)
+    if num_endpoints != 1:
+        raise Exception('Wrong number({:d}) of associated Endpoints with constraint'.format(num_endpoints))
+    db_endpoint = EndPointModel(endpoint_constraint.database, db_endpoints_pks[0])
+    return db_endpoint.dump_id()
+
 class ConstraintEndpointLocationRegionModel(Model): # pylint: disable=abstract-method
     endpoint_fk = ForeignKeyField(EndPointModel)
     region = StringField(required=True, allow_empty=False)
 
     def dump(self) -> Dict: # pylint: disable=arguments-differ
-        json_endpoint_id = EndPointModel(self.database, self.endpoint_fk).dump_id()
-        return {'endpoint_location': {'endpoint_id': json_endpoint_id, 'location': {'region': self.region}}}
+        return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'region': self.region}}
 
 class ConstraintEndpointLocationGpsPositionModel(Model): # pylint: disable=abstract-method
     endpoint_fk = ForeignKeyField(EndPointModel)
@@ -69,16 +80,14 @@ class ConstraintEndpointLocationGpsPositionModel(Model): # pylint: disable=abstr
 
     def dump(self) -> Dict: # pylint: disable=arguments-differ
         gps_position = {'latitude': self.latitude, 'longitude': self.longitude}
-        json_endpoint_id = EndPointModel(self.database, self.endpoint_fk).dump_id()
-        return {'endpoint_location': {'endpoint_id': json_endpoint_id, 'location': {'gps_position': gps_position}}}
+        return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'gps_position': gps_position}}
 
 class ConstraintEndpointPriorityModel(Model): # pylint: disable=abstract-method
     endpoint_fk = ForeignKeyField(EndPointModel)
-    priority = IntegerField(required=True, min_value=0)
+    priority = FloatField(required=True)
 
     def dump(self) -> Dict: # pylint: disable=arguments-differ
-        json_endpoint_id = EndPointModel(self.database, self.endpoint_fk).dump_id()
-        return {'endpoint_priority': {'endpoint_id': json_endpoint_id, 'priority': self.priority}}
+        return {'endpoint_priority': {'endpoint_id': dump_endpoint_id(self), 'priority': self.priority}}
 
 class ConstraintSlaAvailabilityModel(Model): # pylint: disable=abstract-method
     num_disjoint_paths = IntegerField(required=True, min_value=1)
@@ -231,7 +240,7 @@ def set_constraints(
     database : Database, db_parent_pk : str, constraints_name : str, grpc_constraints
 ) -> List[Tuple[Union[ConstraintsModel, ConstraintModel], bool]]:
 
-    str_constraints_key = key_to_str([constraints_name, db_parent_pk], separator=':')
+    str_constraints_key = key_to_str([db_parent_pk, constraints_name], separator=':')
     result : Tuple[ConstraintsModel, bool] = get_or_create_object(database, ConstraintsModel, str_constraints_key)
     db_constraints, created = result
 
diff --git a/src/context/service/grpc_server/ContextServiceServicerImpl.py b/src/context/service/grpc_server/ContextServiceServicerImpl.py
index 71c97bf9ffc65942993dbdd966925f27aafad9ec..4c8f957ecb70765cbd36032fca7bfacc27f9b5ae 100644
--- a/src/context/service/grpc_server/ContextServiceServicerImpl.py
+++ b/src/context/service/grpc_server/ContextServiceServicerImpl.py
@@ -61,7 +61,6 @@ METHOD_NAMES = [
     'ListLinkIds',       'ListLinks',       'GetLink',       'SetLink',       'RemoveLink',       'GetLinkEvents',
     'ListServiceIds',    'ListServices',    'GetService',    'SetService',    'RemoveService',    'GetServiceEvents',
     'ListSliceIds',      'ListSlices',      'GetSlice',      'SetSlice',      'RemoveSlice',      'GetSliceEvents',
-    'UnsetService',      'UnsetSlice',
 ]
 METRICS = create_metrics(SERVICE_NAME, METHOD_NAMES)
 
@@ -278,8 +277,8 @@ class ContextServiceServicerImpl(ContextServiceServicer):
                         ['should be == {:s}({:s})'.format('request.device_id.device_uuid.uuid', device_uuid)])
 
             config_rules = grpc_config_rules_to_raw(request.device_config.config_rules)
-            running_config_rules = update_config(self.database, device_uuid, 'device', config_rules)
-            db_running_config = running_config_rules[0][0]
+            running_config_result = update_config(self.database, device_uuid, 'running', config_rules)
+            db_running_config = running_config_result[0][0]
 
             result : Tuple[DeviceModel, bool] = update_or_create_object(self.database, DeviceModel, device_uuid, {
                 'device_uuid'              : device_uuid,
@@ -320,7 +319,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
 
                 result : Tuple[EndPointModel, bool] = update_or_create_object(
                     self.database, EndPointModel, str_endpoint_key, endpoint_attributes)
-                db_endpoint, endpoint_updated = result # pylint: disable=unused-variable
+                db_endpoint, endpoint_updated = result
 
                 set_kpi_sample_types(self.database, db_endpoint, endpoint.kpi_sample_types)
 
@@ -484,12 +483,12 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             str_service_key = key_to_str([context_uuid, service_uuid])
 
             constraints_result = set_constraints(
-                self.database, str_service_key, 'service', request.service_constraints)
+                self.database, str_service_key, 'constraints', request.service_constraints)
             db_constraints = constraints_result[0][0]
 
             config_rules = grpc_config_rules_to_raw(request.service_config.config_rules)
-            running_config_rules = update_config(self.database, str_service_key, 'service', config_rules)
-            db_running_config = running_config_rules[0][0]
+            running_config_result = update_config(self.database, str_service_key, 'running', config_rules)
+            db_running_config = running_config_result[0][0]
 
             result : Tuple[ServiceModel, bool] = update_or_create_object(self.database, ServiceModel, str_service_key, {
                 'context_fk'            : db_context,
@@ -593,12 +592,12 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             str_slice_key = key_to_str([context_uuid, slice_uuid])
 
             constraints_result = set_constraints(
-                self.database, str_slice_key, 'slice', request.slice_constraints)
+                self.database, str_slice_key, 'constraints', request.slice_constraints)
             db_constraints = constraints_result[0][0]
 
             config_rules = grpc_config_rules_to_raw(request.slice_config.config_rules)
-            running_config_rules = update_config(self.database, str_slice_key, 'slice', config_rules)
-            db_running_config = running_config_rules[0][0]
+            running_config_result = update_config(self.database, str_slice_key, 'running', config_rules)
+            db_running_config = running_config_result[0][0]
 
             result : Tuple[SliceModel, bool] = update_or_create_object(self.database, SliceModel, str_slice_key, {
                 'context_fk'          : db_context,
@@ -657,55 +656,6 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             notify_event(self.messagebroker, TOPIC_SLICE, event_type, {'slice_id': dict_slice_id})
             return SliceId(**dict_slice_id)
 
-    @safe_and_metered_rpc_method(METRICS, LOGGER)
-    def UnsetSlice(self, request: Slice, context : grpc.ServicerContext) -> SliceId:
-        with self.lock:
-            context_uuid = request.slice_id.context_id.context_uuid.uuid
-            db_context : ContextModel = get_object(self.database, ContextModel, context_uuid)
-
-            for i,endpoint_id in enumerate(request.slice_endpoint_ids):
-                endpoint_topology_context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
-                if len(endpoint_topology_context_uuid) > 0 and context_uuid != endpoint_topology_context_uuid:
-                    raise InvalidArgumentException(
-                        'request.slice_endpoint_ids[{:d}].topology_id.context_id.context_uuid.uuid'.format(i),
-                        endpoint_topology_context_uuid,
-                        ['should be == {:s}({:s})'.format(
-                            'request.slice_id.context_id.context_uuid.uuid', context_uuid)])
-
-            slice_uuid = request.slice_id.slice_uuid.uuid
-            str_slice_key = key_to_str([context_uuid, slice_uuid])
-
-            if len(request.slice_constraints) > 0:
-                raise NotImplementedError('UnsetSlice: removal of constraints')
-            if len(request.slice_config.config_rules) > 0:
-                raise NotImplementedError('UnsetSlice: removal of config rules')
-            if len(request.slice_endpoint_ids) > 0:
-                raise NotImplementedError('UnsetSlice: removal of endpoints')
-
-            updated = False
-
-            for service_id in request.slice_service_ids:
-                service_uuid         = service_id.service_uuid.uuid
-                service_context_uuid = service_id.context_id.context_uuid.uuid
-                str_service_key = key_to_str([service_context_uuid, service_uuid])
-                str_slice_service_key = key_to_str([str_slice_key, str_service_key], separator='--')
-                SliceServiceModel(self.database, str_slice_service_key).delete()
-                updated = True
-
-            for subslice_id in request.slice_subslice_ids:
-                subslice_uuid         = subslice_id.slice_uuid.uuid
-                subslice_context_uuid = subslice_id.context_id.context_uuid.uuid
-                str_subslice_key = key_to_str([subslice_context_uuid, subslice_uuid])
-                str_slice_subslice_key = key_to_str([str_slice_key, str_subslice_key], separator='--')
-                SliceSubSliceModel(self.database, str_slice_subslice_key).delete()
-                updated = True
-
-            event_type = EventTypeEnum.EVENTTYPE_UPDATE if updated else EventTypeEnum.EVENTTYPE_CREATE
-            db_slice : SliceModel = get_object(self.database, SliceModel, str_slice_key)
-            dict_slice_id = db_slice.dump_id()
-            notify_event(self.messagebroker, TOPIC_SLICE, event_type, {'slice_id': dict_slice_id})
-            return SliceId(**dict_slice_id)
-
     @safe_and_metered_rpc_method(METRICS, LOGGER)
     def RemoveSlice(self, request: SliceId, context : grpc.ServicerContext) -> Empty:
         with self.lock:
diff --git a/src/context/tests/Objects.py b/src/context/tests/Objects.py
index 140cbff686eaf5b430f23ee987a9335ecb04c0f5..519a0093ac2733125487ed9daf0c61e0821910d5 100644
--- a/src/context/tests/Objects.py
+++ b/src/context/tests/Objects.py
@@ -16,7 +16,7 @@ from common.Constants import DEFAULT_CONTEXT_UUID, DEFAULT_TOPOLOGY_UUID
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
 from common.tools.object_factory.ConfigRule import json_config_rule_set
 from common.tools.object_factory.Connection import json_connection, json_connection_id
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import json_constraint
 from common.tools.object_factory.Context import json_context, json_context_id
 from common.tools.object_factory.Device import json_device_id, json_device_packetrouter_disabled
 from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_id
@@ -129,8 +129,8 @@ SERVICE_R1_R2_EPIDS = [
     json_endpoint_id(DEVICE_R2_ID, 'EP100', topology_id=TOPOLOGY_ID),
 ]
 SERVICE_R1_R2_CONST = [
-    json_constraint_custom('latency[ms]', '15.2'),
-    json_constraint_custom('jitter[us]',  '1.2'),
+    json_constraint('latency_ms', '15.2'),
+    json_constraint('jitter_us',  '1.2'),
 ]
 SERVICE_R1_R2_RULES = [
     json_config_rule_set('svc/rsrc1/value', 'value7'),
@@ -149,8 +149,8 @@ SERVICE_R1_R3_EPIDS = [
     json_endpoint_id(DEVICE_R3_ID, 'EP100', topology_id=TOPOLOGY_ID),
 ]
 SERVICE_R1_R3_CONST = [
-    json_constraint_custom('latency[ms]', '5.8'),
-    json_constraint_custom('jitter[us]',  '0.1'),
+    json_constraint('latency_ms', '5.8'),
+    json_constraint('jitter_us',  '0.1'),
 ]
 SERVICE_R1_R3_RULES = [
     json_config_rule_set('svc/rsrc1/value', 'value7'),
@@ -169,8 +169,8 @@ SERVICE_R2_R3_EPIDS = [
     json_endpoint_id(DEVICE_R3_ID, 'EP100', topology_id=TOPOLOGY_ID),
 ]
 SERVICE_R2_R3_CONST = [
-    json_constraint_custom('latency[ms]', '23.1'),
-    json_constraint_custom('jitter[us]',  '3.4'),
+    json_constraint('latency_ms', '23.1'),
+    json_constraint('jitter_us',  '3.4'),
 ]
 SERVICE_R2_R3_RULES = [
     json_config_rule_set('svc/rsrc1/value', 'value7'),
diff --git a/src/context/tests/context_report.xml b/src/context/tests/context_report.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ee1c17cd6f59c58d55a5eba38de7ea0366a757c
--- /dev/null
+++ b/src/context/tests/context_report.xml
@@ -0,0 +1,1539 @@
+<?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="25" skipped="0" tests="51" time="8.764" timestamp="2022-07-29T09:29:23.786468" hostname="613b7e973910"><testcase classname="context.tests.test_unitary" name="test_grpc_context[all_inmemory]" time="0.028" /><testcase classname="context.tests.test_unitary" name="test_grpc_topology[all_inmemory]" time="0.026" /><testcase classname="context.tests.test_unitary" name="test_grpc_device[all_inmemory]" time="0.139" /><testcase classname="context.tests.test_unitary" name="test_grpc_link[all_inmemory]" time="0.139" /><testcase classname="context.tests.test_unitary" name="test_grpc_service[all_inmemory]" time="0.152" /><testcase classname="context.tests.test_unitary" name="test_grpc_connection[all_inmemory]" time="0.274" /><testcase classname="context.tests.test_unitary" name="test_rest_populate_database[all_inmemory]" time="0.093" /><testcase classname="context.tests.test_unitary" name="test_rest_get_context_ids[all_inmemory]" time="1.033" /><testcase classname="context.tests.test_unitary" name="test_rest_get_contexts[all_inmemory]" time="0.009" /><testcase classname="context.tests.test_unitary" name="test_rest_get_context[all_inmemory]" time="0.009" /><testcase classname="context.tests.test_unitary" name="test_rest_get_topology_ids[all_inmemory]" time="0.006" /><testcase classname="context.tests.test_unitary" name="test_rest_get_topologies[all_inmemory]" time="0.013" /><testcase classname="context.tests.test_unitary" name="test_rest_get_topology[all_inmemory]" time="0.012" /><testcase classname="context.tests.test_unitary" name="test_rest_get_service_ids[all_inmemory]" time="0.007" /><testcase classname="context.tests.test_unitary" name="test_rest_get_services[all_inmemory]" time="0.039" /><testcase classname="context.tests.test_unitary" name="test_rest_get_service[all_inmemory]" time="0.017" /><testcase classname="context.tests.test_unitary" name="test_rest_get_device_ids[all_inmemory]" time="0.005" /><testcase classname="context.tests.test_unitary" name="test_rest_get_devices[all_inmemory]" time="0.070" /><testcase classname="context.tests.test_unitary" name="test_rest_get_device[all_inmemory]" time="0.027" /><testcase classname="context.tests.test_unitary" name="test_rest_get_link_ids[all_inmemory]" time="0.005" /><testcase classname="context.tests.test_unitary" name="test_rest_get_links[all_inmemory]" time="0.023" /><testcase classname="context.tests.test_unitary" name="test_rest_get_link[all_inmemory]" time="0.011" /><testcase classname="context.tests.test_unitary" name="test_rest_get_connection_ids[all_inmemory]" time="0.007" /><testcase classname="context.tests.test_unitary" name="test_rest_get_connections[all_inmemory]" time="0.032" /><testcase classname="context.tests.test_unitary" name="test_rest_get_connection[all_inmemory]" time="0.032" /><testcase classname="context.tests.test_unitary" name="test_grpc_context[all_redis]" time="0.477"><failure message="redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.">self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+&gt;           sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:607: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = &lt;redis.retry.Retry object at 0x7fb0186487f0&gt;
+do = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb01a79edc0&gt;
+fail = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186538b0&gt;
+
+    def call_with_retry(self, do, fail):
+        """
+        Execute an operation that might fail and returns its result, or
+        raise the exception that was thrown depending on the `Backoff` object.
+        `do`: the operation to call. Expects no argument.
+        `fail`: the failure handler, expects the last error that was thrown
+        """
+        self._backoff.reset()
+        failures = 0
+        while True:
+            try:
+&gt;               return do()
+
+/usr/local/lib/python3.9/site-packages/redis/retry.py:45: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+&gt;       lambda: self._connect(), lambda error: self.disconnect(error)
+    )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:608: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+                sock.connect(socket_address)
+    
+                # set the socket_timeout now that we're connected
+                sock.settimeout(self.socket_timeout)
+                return sock
+    
+            except OSError as _:
+                err = _
+                if sock is not None:
+                    sock.close()
+    
+        if err is not None:
+&gt;           raise err
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:673: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+&gt;               sock.connect(socket_address)
+E               ConnectionRefusedError: [Errno 111] Connection refused
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:661: ConnectionRefusedError
+
+During handling of the above exception, another exception occurred:
+
+context_client_grpc = &lt;context.client.ContextClient.ContextClient object at 0x7fb018f15a30&gt;
+context_db_mb = (&lt;common.orm.Database.Database object at 0x7fb018f15910&gt;, &lt;common.message_broker.MessageBroker.MessageBroker object at 0x7fb018f15460&gt;)
+
+    def test_grpc_context(
+        context_client_grpc : ContextClient,                # pylint: disable=redefined-outer-name
+        context_db_mb : Tuple[Database, MessageBroker]):    # pylint: disable=redefined-outer-name
+        context_database = context_db_mb[0]
+    
+        # ----- Clean the database -----------------------------------------------------------------------------------------
+&gt;       context_database.clear_all()
+
+context/tests/test_unitary.py:128: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+common/orm/Database.py:32: in clear_all
+    for key in self._backend.keys():
+common/orm/backend/redis/RedisBackend.py:48: in keys
+    return [k.decode('UTF-8') for k in self._client.keys()]
+/usr/local/lib/python3.9/site-packages/redis/commands/core.py:1370: in keys
+    return self.execute_command("KEYS", pattern, **kwargs)
+/usr/local/lib/python3.9/site-packages/redis/client.py:1173: in execute_command
+    conn = self.connection or pool.get_connection(command_name, **options)
+/usr/local/lib/python3.9/site-packages/redis/connection.py:1370: in get_connection
+    connection.connect()
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+            sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+        except socket.timeout:
+            raise TimeoutError("Timeout connecting to server")
+        except OSError as e:
+&gt;           raise ConnectionError(self._error_message(e))
+E           redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:613: ConnectionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_grpc_topology[all_redis]" time="0.002"><failure message="redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.">self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+&gt;           sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:607: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = &lt;redis.retry.Retry object at 0x7fb0186487f0&gt;
+do = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb018563b80&gt;
+fail = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb018587550&gt;
+
+    def call_with_retry(self, do, fail):
+        """
+        Execute an operation that might fail and returns its result, or
+        raise the exception that was thrown depending on the `Backoff` object.
+        `do`: the operation to call. Expects no argument.
+        `fail`: the failure handler, expects the last error that was thrown
+        """
+        self._backoff.reset()
+        failures = 0
+        while True:
+            try:
+&gt;               return do()
+
+/usr/local/lib/python3.9/site-packages/redis/retry.py:45: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+&gt;       lambda: self._connect(), lambda error: self.disconnect(error)
+    )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:608: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+                sock.connect(socket_address)
+    
+                # set the socket_timeout now that we're connected
+                sock.settimeout(self.socket_timeout)
+                return sock
+    
+            except OSError as _:
+                err = _
+                if sock is not None:
+                    sock.close()
+    
+        if err is not None:
+&gt;           raise err
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:673: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+&gt;               sock.connect(socket_address)
+E               ConnectionRefusedError: [Errno 111] Connection refused
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:661: ConnectionRefusedError
+
+During handling of the above exception, another exception occurred:
+
+context_client_grpc = &lt;context.client.ContextClient.ContextClient object at 0x7fb018f15a30&gt;
+context_db_mb = (&lt;common.orm.Database.Database object at 0x7fb018f15910&gt;, &lt;common.message_broker.MessageBroker.MessageBroker object at 0x7fb018f15460&gt;)
+
+    def test_grpc_topology(
+        context_client_grpc : ContextClient,                # pylint: disable=redefined-outer-name
+        context_db_mb : Tuple[Database, MessageBroker]):    # pylint: disable=redefined-outer-name
+        context_database = context_db_mb[0]
+    
+        # ----- Clean the database -----------------------------------------------------------------------------------------
+&gt;       context_database.clear_all()
+
+context/tests/test_unitary.py:249: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+common/orm/Database.py:32: in clear_all
+    for key in self._backend.keys():
+common/orm/backend/redis/RedisBackend.py:48: in keys
+    return [k.decode('UTF-8') for k in self._client.keys()]
+/usr/local/lib/python3.9/site-packages/redis/commands/core.py:1370: in keys
+    return self.execute_command("KEYS", pattern, **kwargs)
+/usr/local/lib/python3.9/site-packages/redis/client.py:1173: in execute_command
+    conn = self.connection or pool.get_connection(command_name, **options)
+/usr/local/lib/python3.9/site-packages/redis/connection.py:1370: in get_connection
+    connection.connect()
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+            sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+        except socket.timeout:
+            raise TimeoutError("Timeout connecting to server")
+        except OSError as e:
+&gt;           raise ConnectionError(self._error_message(e))
+E           redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:613: ConnectionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_grpc_device[all_redis]" time="0.001"><failure message="redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.">self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+&gt;           sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:607: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = &lt;redis.retry.Retry object at 0x7fb0186487f0&gt;
+do = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb018683820&gt;
+fail = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb018653f70&gt;
+
+    def call_with_retry(self, do, fail):
+        """
+        Execute an operation that might fail and returns its result, or
+        raise the exception that was thrown depending on the `Backoff` object.
+        `do`: the operation to call. Expects no argument.
+        `fail`: the failure handler, expects the last error that was thrown
+        """
+        self._backoff.reset()
+        failures = 0
+        while True:
+            try:
+&gt;               return do()
+
+/usr/local/lib/python3.9/site-packages/redis/retry.py:45: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+&gt;       lambda: self._connect(), lambda error: self.disconnect(error)
+    )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:608: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+                sock.connect(socket_address)
+    
+                # set the socket_timeout now that we're connected
+                sock.settimeout(self.socket_timeout)
+                return sock
+    
+            except OSError as _:
+                err = _
+                if sock is not None:
+                    sock.close()
+    
+        if err is not None:
+&gt;           raise err
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:673: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+&gt;               sock.connect(socket_address)
+E               ConnectionRefusedError: [Errno 111] Connection refused
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:661: ConnectionRefusedError
+
+During handling of the above exception, another exception occurred:
+
+context_client_grpc = &lt;context.client.ContextClient.ContextClient object at 0x7fb018f15a30&gt;
+context_db_mb = (&lt;common.orm.Database.Database object at 0x7fb018f15910&gt;, &lt;common.message_broker.MessageBroker.MessageBroker object at 0x7fb018f15460&gt;)
+
+    def test_grpc_device(
+        context_client_grpc : ContextClient,                # pylint: disable=redefined-outer-name
+        context_db_mb : Tuple[Database, MessageBroker]):    # pylint: disable=redefined-outer-name
+        context_database = context_db_mb[0]
+    
+        # ----- Clean the database -----------------------------------------------------------------------------------------
+&gt;       context_database.clear_all()
+
+context/tests/test_unitary.py:381: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+common/orm/Database.py:32: in clear_all
+    for key in self._backend.keys():
+common/orm/backend/redis/RedisBackend.py:48: in keys
+    return [k.decode('UTF-8') for k in self._client.keys()]
+/usr/local/lib/python3.9/site-packages/redis/commands/core.py:1370: in keys
+    return self.execute_command("KEYS", pattern, **kwargs)
+/usr/local/lib/python3.9/site-packages/redis/client.py:1173: in execute_command
+    conn = self.connection or pool.get_connection(command_name, **options)
+/usr/local/lib/python3.9/site-packages/redis/connection.py:1370: in get_connection
+    connection.connect()
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+            sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+        except socket.timeout:
+            raise TimeoutError("Timeout connecting to server")
+        except OSError as e:
+&gt;           raise ConnectionError(self._error_message(e))
+E           redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:613: ConnectionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_grpc_link[all_redis]" time="0.001"><failure message="redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.">self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+&gt;           sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:607: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = &lt;redis.retry.Retry object at 0x7fb0186487f0&gt;
+do = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186c0550&gt;
+fail = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186c0670&gt;
+
+    def call_with_retry(self, do, fail):
+        """
+        Execute an operation that might fail and returns its result, or
+        raise the exception that was thrown depending on the `Backoff` object.
+        `do`: the operation to call. Expects no argument.
+        `fail`: the failure handler, expects the last error that was thrown
+        """
+        self._backoff.reset()
+        failures = 0
+        while True:
+            try:
+&gt;               return do()
+
+/usr/local/lib/python3.9/site-packages/redis/retry.py:45: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+&gt;       lambda: self._connect(), lambda error: self.disconnect(error)
+    )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:608: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+                sock.connect(socket_address)
+    
+                # set the socket_timeout now that we're connected
+                sock.settimeout(self.socket_timeout)
+                return sock
+    
+            except OSError as _:
+                err = _
+                if sock is not None:
+                    sock.close()
+    
+        if err is not None:
+&gt;           raise err
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:673: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+&gt;               sock.connect(socket_address)
+E               ConnectionRefusedError: [Errno 111] Connection refused
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:661: ConnectionRefusedError
+
+During handling of the above exception, another exception occurred:
+
+context_client_grpc = &lt;context.client.ContextClient.ContextClient object at 0x7fb018f15a30&gt;
+context_db_mb = (&lt;common.orm.Database.Database object at 0x7fb018f15910&gt;, &lt;common.message_broker.MessageBroker.MessageBroker object at 0x7fb018f15460&gt;)
+
+    def test_grpc_link(
+        context_client_grpc : ContextClient,                # pylint: disable=redefined-outer-name
+        context_db_mb : Tuple[Database, MessageBroker]):    # pylint: disable=redefined-outer-name
+        context_database = context_db_mb[0]
+    
+        # ----- Clean the database -----------------------------------------------------------------------------------------
+&gt;       context_database.clear_all()
+
+context/tests/test_unitary.py:556: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+common/orm/Database.py:32: in clear_all
+    for key in self._backend.keys():
+common/orm/backend/redis/RedisBackend.py:48: in keys
+    return [k.decode('UTF-8') for k in self._client.keys()]
+/usr/local/lib/python3.9/site-packages/redis/commands/core.py:1370: in keys
+    return self.execute_command("KEYS", pattern, **kwargs)
+/usr/local/lib/python3.9/site-packages/redis/client.py:1173: in execute_command
+    conn = self.connection or pool.get_connection(command_name, **options)
+/usr/local/lib/python3.9/site-packages/redis/connection.py:1370: in get_connection
+    connection.connect()
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+            sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+        except socket.timeout:
+            raise TimeoutError("Timeout connecting to server")
+        except OSError as e:
+&gt;           raise ConnectionError(self._error_message(e))
+E           redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:613: ConnectionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_grpc_service[all_redis]" time="0.001"><failure message="redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.">self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+&gt;           sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:607: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = &lt;redis.retry.Retry object at 0x7fb0186487f0&gt;
+do = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb018f2f700&gt;
+fail = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186188b0&gt;
+
+    def call_with_retry(self, do, fail):
+        """
+        Execute an operation that might fail and returns its result, or
+        raise the exception that was thrown depending on the `Backoff` object.
+        `do`: the operation to call. Expects no argument.
+        `fail`: the failure handler, expects the last error that was thrown
+        """
+        self._backoff.reset()
+        failures = 0
+        while True:
+            try:
+&gt;               return do()
+
+/usr/local/lib/python3.9/site-packages/redis/retry.py:45: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+&gt;       lambda: self._connect(), lambda error: self.disconnect(error)
+    )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:608: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+                sock.connect(socket_address)
+    
+                # set the socket_timeout now that we're connected
+                sock.settimeout(self.socket_timeout)
+                return sock
+    
+            except OSError as _:
+                err = _
+                if sock is not None:
+                    sock.close()
+    
+        if err is not None:
+&gt;           raise err
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:673: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+&gt;               sock.connect(socket_address)
+E               ConnectionRefusedError: [Errno 111] Connection refused
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:661: ConnectionRefusedError
+
+During handling of the above exception, another exception occurred:
+
+context_client_grpc = &lt;context.client.ContextClient.ContextClient object at 0x7fb018f15a30&gt;
+context_db_mb = (&lt;common.orm.Database.Database object at 0x7fb018f15910&gt;, &lt;common.message_broker.MessageBroker.MessageBroker object at 0x7fb018f15460&gt;)
+
+    def test_grpc_service(
+        context_client_grpc : ContextClient,                # pylint: disable=redefined-outer-name
+        context_db_mb : Tuple[Database, MessageBroker]):    # pylint: disable=redefined-outer-name
+        context_database = context_db_mb[0]
+    
+        # ----- Clean the database -----------------------------------------------------------------------------------------
+&gt;       context_database.clear_all()
+
+context/tests/test_unitary.py:739: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+common/orm/Database.py:32: in clear_all
+    for key in self._backend.keys():
+common/orm/backend/redis/RedisBackend.py:48: in keys
+    return [k.decode('UTF-8') for k in self._client.keys()]
+/usr/local/lib/python3.9/site-packages/redis/commands/core.py:1370: in keys
+    return self.execute_command("KEYS", pattern, **kwargs)
+/usr/local/lib/python3.9/site-packages/redis/client.py:1173: in execute_command
+    conn = self.connection or pool.get_connection(command_name, **options)
+/usr/local/lib/python3.9/site-packages/redis/connection.py:1370: in get_connection
+    connection.connect()
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+            sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+        except socket.timeout:
+            raise TimeoutError("Timeout connecting to server")
+        except OSError as e:
+&gt;           raise ConnectionError(self._error_message(e))
+E           redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:613: ConnectionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_grpc_connection[all_redis]" time="0.001"><failure message="redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.">self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+&gt;           sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:607: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = &lt;redis.retry.Retry object at 0x7fb0186487f0&gt;
+do = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186a43a0&gt;
+fail = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186a4310&gt;
+
+    def call_with_retry(self, do, fail):
+        """
+        Execute an operation that might fail and returns its result, or
+        raise the exception that was thrown depending on the `Backoff` object.
+        `do`: the operation to call. Expects no argument.
+        `fail`: the failure handler, expects the last error that was thrown
+        """
+        self._backoff.reset()
+        failures = 0
+        while True:
+            try:
+&gt;               return do()
+
+/usr/local/lib/python3.9/site-packages/redis/retry.py:45: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+&gt;       lambda: self._connect(), lambda error: self.disconnect(error)
+    )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:608: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+                sock.connect(socket_address)
+    
+                # set the socket_timeout now that we're connected
+                sock.settimeout(self.socket_timeout)
+                return sock
+    
+            except OSError as _:
+                err = _
+                if sock is not None:
+                    sock.close()
+    
+        if err is not None:
+&gt;           raise err
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:673: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+&gt;               sock.connect(socket_address)
+E               ConnectionRefusedError: [Errno 111] Connection refused
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:661: ConnectionRefusedError
+
+During handling of the above exception, another exception occurred:
+
+context_client_grpc = &lt;context.client.ContextClient.ContextClient object at 0x7fb018f15a30&gt;
+context_db_mb = (&lt;common.orm.Database.Database object at 0x7fb018f15910&gt;, &lt;common.message_broker.MessageBroker.MessageBroker object at 0x7fb018f15460&gt;)
+
+    def test_grpc_connection(
+        context_client_grpc : ContextClient,                # pylint: disable=redefined-outer-name
+        context_db_mb : Tuple[Database, MessageBroker]):    # pylint: disable=redefined-outer-name
+        context_database = context_db_mb[0]
+    
+        # ----- Clean the database -----------------------------------------------------------------------------------------
+&gt;       context_database.clear_all()
+
+context/tests/test_unitary.py:926: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+common/orm/Database.py:32: in clear_all
+    for key in self._backend.keys():
+common/orm/backend/redis/RedisBackend.py:48: in keys
+    return [k.decode('UTF-8') for k in self._client.keys()]
+/usr/local/lib/python3.9/site-packages/redis/commands/core.py:1370: in keys
+    return self.execute_command("KEYS", pattern, **kwargs)
+/usr/local/lib/python3.9/site-packages/redis/client.py:1173: in execute_command
+    conn = self.connection or pool.get_connection(command_name, **options)
+/usr/local/lib/python3.9/site-packages/redis/connection.py:1370: in get_connection
+    connection.connect()
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+            sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+        except socket.timeout:
+            raise TimeoutError("Timeout connecting to server")
+        except OSError as e:
+&gt;           raise ConnectionError(self._error_message(e))
+E           redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:613: ConnectionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_populate_database[all_redis]" time="0.001"><failure message="redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.">self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+&gt;           sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:607: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = &lt;redis.retry.Retry object at 0x7fb0186487f0&gt;
+do = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186d49d0&gt;
+fail = &lt;function Connection.connect.&lt;locals&gt;.&lt;lambda&gt; at 0x7fb0186d4280&gt;
+
+    def call_with_retry(self, do, fail):
+        """
+        Execute an operation that might fail and returns its result, or
+        raise the exception that was thrown depending on the `Backoff` object.
+        `do`: the operation to call. Expects no argument.
+        `fail`: the failure handler, expects the last error that was thrown
+        """
+        self._backoff.reset()
+        failures = 0
+        while True:
+            try:
+&gt;               return do()
+
+/usr/local/lib/python3.9/site-packages/redis/retry.py:45: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+&gt;       lambda: self._connect(), lambda error: self.disconnect(error)
+    )
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:608: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+                sock.connect(socket_address)
+    
+                # set the socket_timeout now that we're connected
+                sock.settimeout(self.socket_timeout)
+                return sock
+    
+            except OSError as _:
+                err = _
+                if sock is not None:
+                    sock.close()
+    
+        if err is not None:
+&gt;           raise err
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:673: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def _connect(self):
+        "Create a TCP socket connection"
+        # we want to mimic what socket.create_connection does to support
+        # ipv4/ipv6, but we want to set options prior to calling
+        # socket.connect()
+        err = None
+        for res in socket.getaddrinfo(
+            self.host, self.port, self.socket_type, socket.SOCK_STREAM
+        ):
+            family, socktype, proto, canonname, socket_address = res
+            sock = None
+            try:
+                sock = socket.socket(family, socktype, proto)
+                # TCP_NODELAY
+                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+    
+                # TCP_KEEPALIVE
+                if self.socket_keepalive:
+                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                    for k, v in self.socket_keepalive_options.items():
+                        sock.setsockopt(socket.IPPROTO_TCP, k, v)
+    
+                # set the socket_connect_timeout before we connect
+                sock.settimeout(self.socket_connect_timeout)
+    
+                # connect
+&gt;               sock.connect(socket_address)
+E               ConnectionRefusedError: [Errno 111] Connection refused
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:661: ConnectionRefusedError
+
+During handling of the above exception, another exception occurred:
+
+context_db_mb = (&lt;common.orm.Database.Database object at 0x7fb018f15910&gt;, &lt;common.message_broker.MessageBroker.MessageBroker object at 0x7fb018f15460&gt;)
+context_service_grpc = &lt;context.service.grpc_server.ContextService.ContextService object at 0x7fb018f158e0&gt;
+
+    def test_rest_populate_database(
+        context_db_mb : Tuple[Database, MessageBroker], # pylint: disable=redefined-outer-name
+        context_service_grpc : ContextService           # pylint: disable=redefined-outer-name
+        ):
+        database = context_db_mb[0]
+&gt;       database.clear_all()
+
+context/tests/test_unitary.py:1179: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+common/orm/Database.py:32: in clear_all
+    for key in self._backend.keys():
+common/orm/backend/redis/RedisBackend.py:48: in keys
+    return [k.decode('UTF-8') for k in self._client.keys()]
+/usr/local/lib/python3.9/site-packages/redis/commands/core.py:1370: in keys
+    return self.execute_command("KEYS", pattern, **kwargs)
+/usr/local/lib/python3.9/site-packages/redis/client.py:1173: in execute_command
+    conn = self.connection or pool.get_connection(command_name, **options)
+/usr/local/lib/python3.9/site-packages/redis/connection.py:1370: in get_connection
+    connection.connect()
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+self = Connection&lt;host=127.0.0.1,port=6379,db=0&gt;
+
+    def connect(self):
+        "Connects to the Redis server if not already connected"
+        if self._sock:
+            return
+        try:
+            sock = self.retry.call_with_retry(
+                lambda: self._connect(), lambda error: self.disconnect(error)
+            )
+        except socket.timeout:
+            raise TimeoutError("Timeout connecting to server")
+        except OSError as e:
+&gt;           raise ConnectionError(self._error_message(e))
+E           redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
+
+/usr/local/lib/python3.9/site-packages/redis/connection.py:613: ConnectionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_context_ids[all_redis]" time="1.033"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_context_ids(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+&gt;       reply = do_rest_request('/context_ids')
+
+context/tests/test_unitary.py:1183: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context_ids'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_contexts[all_redis]" time="0.006"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_contexts(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+&gt;       reply = do_rest_request('/contexts')
+
+context/tests/test_unitary.py:1187: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/contexts'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_context[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_context(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+&gt;       reply = do_rest_request('/context/{:s}'.format(context_uuid))
+
+context/tests/test_unitary.py:1192: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_topology_ids[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_topology_ids(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+&gt;       reply = do_rest_request('/context/{:s}/topology_ids'.format(context_uuid))
+
+context/tests/test_unitary.py:1197: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/topology_ids'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_topologies[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_topologies(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+&gt;       reply = do_rest_request('/context/{:s}/topologies'.format(context_uuid))
+
+context/tests/test_unitary.py:1202: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/topologies'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_topology[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_topology(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+        topology_uuid = urllib.parse.quote(DEFAULT_TOPOLOGY_UUID)
+&gt;       reply = do_rest_request('/context/{:s}/topology/{:s}'.format(context_uuid, topology_uuid))
+
+context/tests/test_unitary.py:1208: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/topology/admin'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_service_ids[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_service_ids(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+&gt;       reply = do_rest_request('/context/{:s}/service_ids'.format(context_uuid))
+
+context/tests/test_unitary.py:1213: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/service_ids'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_services[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_services(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+&gt;       reply = do_rest_request('/context/{:s}/services'.format(context_uuid))
+
+context/tests/test_unitary.py:1218: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/services'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_service[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_service(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+        service_uuid = urllib.parse.quote(SERVICE_R1_R2_UUID, safe='')
+&gt;       reply = do_rest_request('/context/{:s}/service/{:s}'.format(context_uuid, service_uuid))
+
+context/tests/test_unitary.py:1224: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/service/SVC%3AR1%2FEP100-R2%2FEP100'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_device_ids[all_redis]" time="0.006"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_device_ids(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+&gt;       reply = do_rest_request('/device_ids')
+
+context/tests/test_unitary.py:1228: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/device_ids'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_devices[all_redis]" time="0.006"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_devices(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+&gt;       reply = do_rest_request('/devices')
+
+context/tests/test_unitary.py:1232: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/devices'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_device[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_device(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        device_uuid = urllib.parse.quote(DEVICE_R1_UUID, safe='')
+&gt;       reply = do_rest_request('/device/{:s}'.format(device_uuid))
+
+context/tests/test_unitary.py:1237: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/device/R1'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_link_ids[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_link_ids(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+&gt;       reply = do_rest_request('/link_ids')
+
+context/tests/test_unitary.py:1241: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/link_ids'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_links[all_redis]" time="0.006"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_links(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+&gt;       reply = do_rest_request('/links')
+
+context/tests/test_unitary.py:1245: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/links'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_link[all_redis]" time="0.008"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_link(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        link_uuid = urllib.parse.quote(LINK_R1_R2_UUID, safe='')
+&gt;       reply = do_rest_request('/link/{:s}'.format(link_uuid))
+
+context/tests/test_unitary.py:1250: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/link/R1%2FEP2-R2%2FEP1'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_connection_ids[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_connection_ids(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+        service_uuid = urllib.parse.quote(SERVICE_R1_R3_UUID, safe='')
+&gt;       reply = do_rest_request('/context/{:s}/service/{:s}/connection_ids'.format(context_uuid, service_uuid))
+
+context/tests/test_unitary.py:1256: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/service/SVC%3AR1%2FEP100-R3%2FEP100/connection_ids'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_connections[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_connections(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        context_uuid = urllib.parse.quote(DEFAULT_CONTEXT_UUID)
+        service_uuid = urllib.parse.quote(SERVICE_R1_R3_UUID, safe='')
+&gt;       reply = do_rest_request('/context/{:s}/service/{:s}/connections'.format(context_uuid, service_uuid))
+
+context/tests/test_unitary.py:1262: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/context/admin/service/SVC%3AR1%2FEP100-R3%2FEP100/connections'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_rest_get_connection[all_redis]" time="0.007"><failure message="AssertionError: Reply failed with code 500&#10;assert 500 == 200&#10;  +500&#10;  -200">context_service_rest = &lt;RestServer(Thread-71, started daemon 140392926267136)&gt;
+
+    def test_rest_get_connection(context_service_rest : RestServer): # pylint: disable=redefined-outer-name
+        connection_uuid = urllib.parse.quote(CONNECTION_R1_R3_UUID, safe='')
+&gt;       reply = do_rest_request('/connection/{:s}'.format(connection_uuid))
+
+context/tests/test_unitary.py:1267: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+
+url = '/connection/CON%3AR1%2FEP100-R3%2FEP100'
+
+    def do_rest_request(url : str):
+        base_url = get_service_baseurl_http(ServiceNameEnum.CONTEXT)
+        request_url = 'http://{:s}:{:s}{:s}{:s}'.format(str(LOCAL_HOST), str(HTTP_PORT), str(base_url), url)
+        LOGGER.warning('Request: GET {:s}'.format(str(request_url)))
+        reply = requests.get(request_url)
+        LOGGER.warning('Reply: {:s}'.format(str(reply.text)))
+&gt;       assert reply.status_code == 200, 'Reply failed with code {}'.format(reply.status_code)
+E       AssertionError: Reply failed with code 500
+E       assert 500 == 200
+E         +500
+E         -200
+
+context/tests/test_unitary.py:116: AssertionError</failure></testcase><testcase classname="context.tests.test_unitary" name="test_tools_fast_string_hasher" time="0.423" /></testsuite></testsuites>
\ No newline at end of file
diff --git a/src/device/service/MonitoringLoops.py b/src/device/service/MonitoringLoops.py
index 18faed0d51d8d594368a0c80ef03539a9b0c4d4e..4d6d3f59147026c3104062cca0684ea9e3a304cf 100644
--- a/src/device/service/MonitoringLoops.py
+++ b/src/device/service/MonitoringLoops.py
@@ -129,8 +129,8 @@ class MonitoringLoops:
             # FIXME: uint32 used for intVal results in out of range issues. Temporarily changed to float
             #        extend the 'kpi_value' to support long integers (uint64 / int64 / ...)
             if isinstance(value, int):
-                kpi_value_field_name = 'int64Val'
-                kpi_value_field_cast = int
+                kpi_value_field_name = 'floatVal'   # 'intVal'
+                kpi_value_field_cast = float        # int
             elif isinstance(value, float):
                 kpi_value_field_name = 'floatVal'
                 kpi_value_field_cast = float
@@ -144,7 +144,7 @@ class MonitoringLoops:
             try:
                 self._monitoring_client.IncludeKpi(Kpi(**{
                     'kpi_id'   : {'kpi_id': {'uuid': db_kpi.kpi_uuid}},
-                    'timestamp': {'timestamp': timestamp},
+                    'timestamp': datetime.utcfromtimestamp(timestamp).isoformat() + 'Z',
                     'kpi_value': {kpi_value_field_name: kpi_value_field_cast(value)}
                 }))
             except: # pylint: disable=bare-except
diff --git a/src/device/service/database/ContextModel.py b/src/device/service/database/ContextModel.py
index a609e1ba9189f5359064e6628cba6c08d353770e..0ca13269c52d02ea663e10be986ab28d12d8f144 100644
--- a/src/device/service/database/ContextModel.py
+++ b/src/device/service/database/ContextModel.py
@@ -24,15 +24,15 @@ class ContextModel(Model):
     pk = PrimaryKeyField()
     context_uuid = StringField(required=True, allow_empty=False)
 
-    def dump_id(self) -> Dict:
-        return {'context_uuid': {'uuid': self.context_uuid}}
+#    def dump_id(self) -> Dict:
+#        return {'context_uuid': {'uuid': self.context_uuid}}
 
-    def dump_topology_ids(self) -> List[Dict]:
-        from .TopologyModel import TopologyModel # pylint: disable=import-outside-toplevel
-        db_topology_pks = self.references(TopologyModel)
-        return [TopologyModel(self.database, pk).dump_id() for pk,_ in db_topology_pks]
+#    def dump_topology_ids(self) -> List[Dict]:
+#        from .TopologyModel import TopologyModel # pylint: disable=import-outside-toplevel
+#        db_topology_pks = self.references(TopologyModel)
+#        return [TopologyModel(self.database, pk).dump_id() for pk,_ in db_topology_pks]
 
-    def dump(self, include_topologies=False) -> Dict: # pylint: disable=arguments-differ
-        result = {'context_id': self.dump_id()}
-        if include_topologies: result['topology_ids'] = self.dump_topology_ids()
-        return result
+#    def dump(self, include_topologies=True) -> Dict: # pylint: disable=arguments-differ
+#        result = {'context_id': self.dump_id()}
+#        if include_topologies: result['topology_ids'] = self.dump_topology_ids()
+#        return result
diff --git a/src/device/service/database/TopologyModel.py b/src/device/service/database/TopologyModel.py
index f9e9c0b1a26fdf8faca7e1cbe0a64b582bdd4d5d..a099c8adfd8bb64d94c8326c90094f39d7fe9b6b 100644
--- a/src/device/service/database/TopologyModel.py
+++ b/src/device/service/database/TopologyModel.py
@@ -27,13 +27,13 @@ class TopologyModel(Model):
     context_fk = ForeignKeyField(ContextModel)
     topology_uuid = StringField(required=True, allow_empty=False)
 
-    def dump_id(self) -> Dict:
-        context_id = ContextModel(self.database, self.context_fk).dump_id()
-        return {
-            'context_id': context_id,
-            'topology_uuid': {'uuid': self.topology_uuid},
-        }
+#    def dump_id(self) -> Dict:
+#        context_id = ContextModel(self.database, self.context_fk).dump_id()
+#        return {
+#            'context_id': context_id,
+#            'topology_uuid': {'uuid': self.topology_uuid},
+#        }
 
-    def dump(self) -> Dict:
-        result = {'topology_id': self.dump_id()}
-        return result
+#    def dump(self) -> Dict:
+#        result = {'topology_id': self.dump_id()}
+#        return result
diff --git a/src/device/service/drivers/__init__.py b/src/device/service/drivers/__init__.py
index 1187b3de36cbf4d16fed1b3e18c0cb1fa21cafa9..14815e8f93efedc8f4aa0706819a62226cc8080d 100644
--- a/src/device/service/drivers/__init__.py
+++ b/src/device/service/drivers/__init__.py
@@ -32,7 +32,7 @@ DRIVERS.append(
         {
             # Emulated OLS/Packet Router, specifying Undefined/OpenConfig/TAPI Driver => use EmulatedDriver
             FilterFieldEnum.DEVICE_TYPE: [
-                DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM,
+                DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM,
                 DeviceTypeEnum.EMULATED_PACKET_ROUTER,
             ],
             FilterFieldEnum.DRIVER     : [
@@ -41,47 +41,32 @@ DRIVERS.append(
                 ORM_DeviceDriverEnum.TRANSPORT_API
             ],
         }
-    ]))
-
-if LOAD_ALL_DEVICE_DRIVERS:
-    from .openconfig.OpenConfigDriver import OpenConfigDriver # pylint: disable=wrong-import-position
-    DRIVERS.append(
-        (OpenConfigDriver, [
-            {
-                # Real Packet Router, specifying OpenConfig Driver => use OpenConfigDriver
-                FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.PACKET_ROUTER,
-                FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.OPENCONFIG,
-            }
-        ]))
-
-if LOAD_ALL_DEVICE_DRIVERS:
-    from .transport_api.TransportApiDriver import TransportApiDriver # pylint: disable=wrong-import-position
-    DRIVERS.append(
-        (TransportApiDriver, [
-            {
-                # Real OLS, specifying TAPI Driver => use TransportApiDriver
-                FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.OPTICAL_LINE_SYSTEM,
-                FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.TRANSPORT_API,
-            }
-        ]))
-
-if LOAD_ALL_DEVICE_DRIVERS:
-    from .p4.p4_driver import P4Driver # pylint: disable=wrong-import-position
-    DRIVERS.append(
-        (P4Driver, [
-            {
-                # Real P4 Switch, specifying P4 Driver => use P4Driver
-                FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.P4_SWITCH,
-                FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.P4,
-            }
-        ]))
-
-if LOAD_ALL_DEVICE_DRIVERS:
-    from .microwave.IETFApiDriver import IETFApiDriver # pylint: disable=wrong-import-position
-    DRIVERS.append(
-        (IETFApiDriver, [
-            {
-                FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.MICROVAWE_RADIO_SYSTEM,
-                FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.IETF_NETWORK_TOPOLOGY,
-            }
-        ]))
+    ]),
+    (OpenConfigDriver, [
+        {
+            # Real Packet Router, specifying OpenConfig Driver => use OpenConfigDriver
+            FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.PACKET_ROUTER,
+            FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.OPENCONFIG,
+        }
+    ]),
+    (TransportApiDriver, [
+        {
+            # Real OLS, specifying TAPI Driver => use TransportApiDriver
+            FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.OPTICAL_LINE_SYSTEM,
+            FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.TRANSPORT_API,
+        }
+    ]),
+    (P4Driver, [
+        {
+            # Real P4 Switch, specifying P4 Driver => use P4Driver
+            FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.P4_SWITCH,
+            FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.P4,
+        }
+    ]),
+    (IETFApiDriver, [
+        {
+            FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.MICROVAWE_RADIO_SYSTEM,
+            FilterFieldEnum.DRIVER     : ORM_DeviceDriverEnum.IETF_NETWORK_TOPOLOGY,
+        }
+    ]),
+]
diff --git a/src/device/tests/device_report.xml b/src/device/tests/device_report.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c05ea0ba79d2b1b6fb5434a76c2e6af022eb2e2c
--- /dev/null
+++ b/src/device/tests/device_report.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="0" time="0.017" timestamp="2022-07-29T09:28:47.168633" hostname="86d45e18bd70" /></testsuites>
\ No newline at end of file
diff --git a/src/device/tests/test_unitary_emulated.py b/src/device/tests/test_unitary_emulated.py
index 745c25c1eba679dc67e0ed9e04f38eb0ae8c3af4..87c067a08e37475bcf44b0546abcfcaf25fc965d 100644
--- a/src/device/tests/test_unitary_emulated.py
+++ b/src/device/tests/test_unitary_emulated.py
@@ -299,7 +299,12 @@ def test_device_emulated_monitor(
     for received_sample in received_samples:
         kpi_uuid = received_sample.kpi_id.kpi_id.uuid
         assert kpi_uuid in KPI_UUIDS__TO__NUM_SAMPLES_RECEIVED
-        timestamp = float(received_sample.timestamp.timestamp)
+        assert isinstance(received_sample.timestamp, str)
+        try:
+            timestamp = float(received_sample.timestamp)
+        except ValueError:
+            dt_time = dateutil.parser.isoparse(received_sample.timestamp).replace(tzinfo=timezone.utc)
+            timestamp = float(calendar.timegm(dt_time.timetuple())) + (dt_time.microsecond / 1.e6)
         assert timestamp > t_start_monitoring
         assert timestamp < t_end_monitoring
         assert received_sample.kpi_value.HasField('floatVal') or received_sample.kpi_value.HasField('intVal')
diff --git a/src/monitoring/.gitlab-ci.yml b/src/monitoring/.gitlab-ci.yml
index 246b29bd42a889b0662a8ab0cb8b198e8f4b92ab..ef3a8c39a045dd059f8a7942223bdc20775ae92c 100644
--- a/src/monitoring/.gitlab-ci.yml
+++ b/src/monitoring/.gitlab-ci.yml
@@ -56,7 +56,7 @@ unit test monitoring:
     - docker pull questdb/questdb
     - docker run --name questdb -d -p 9000:9000  -p 9009:9009  -p 8812:8812  -p 9003:9003  -e QDB_CAIRO_COMMIT_LAG=1000 -e QDB_CAIRO_MAX_UNCOMMITTED_ROWS=100000 --network=teraflowbridge --rm questdb/questdb
     - sleep 10
-    - docker run --name $IMAGE_NAME -d -p 7070:7070 --env METRICSDB_HOSTNAME=localhost --env METRICSDB_ILP_PORT=9009 --env METRICSDB_REST_PORT=9000 --env METRICSDB_TABLE=monitoring -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - docker run --name $IMAGE_NAME -d -p 7070:7070 --env METRICSDB_HOSTNAME=questdb --env METRICSDB_ILP_PORT=9009 --env METRICSDB_REST_PORT=9000 --env METRICSDB_TABLE=monitoring -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - sleep 30
     - docker ps -a
     - docker logs $IMAGE_NAME
diff --git a/src/monitoring/client/MonitoringClient.py b/src/monitoring/client/MonitoringClient.py
index f65072f19013b820312aa56b7f0062f9c95f712c..73607a081cd57e7c62b9c4e2c5e487868e72d189 100644
--- a/src/monitoring/client/MonitoringClient.py
+++ b/src/monitoring/client/MonitoringClient.py
@@ -21,8 +21,8 @@ from common.tools.client.RetryDecorator import retry, delay_exponential
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.proto.context_pb2 import Empty
 from common.proto.monitoring_pb2 import Kpi, KpiDescriptor, KpiId, MonitorKpiRequest, \
-    KpiDescriptorList, KpiQuery, KpiList, SubsDescriptor, SubscriptionID, SubsIDList, \
-    AlarmDescriptor, AlarmID, AlarmIDList, AlarmResponse, AlarmSubscription
+    KpiDescriptorList, KpiQuery, KpiList, SubsDescriptor, SubscriptionID, SubsList, \
+    SubsResponse, AlarmDescriptor, AlarmID, AlarmList, AlarmResponse, AlarmSubscription
 from common.proto.monitoring_pb2_grpc import MonitoringServiceStub
 
 LOGGER = logging.getLogger(__name__)
@@ -100,10 +100,10 @@ class MonitoringClient:
         return response
 
     @RETRY_DECORATOR
-    def SubscribeKpi(self, request : SubsDescriptor) -> Iterator[KpiList]:
-        LOGGER.debug('SubscribeKpi: {:s}'.format(grpc_message_to_json_string(request)))
-        response = self.stub.SubscribeKpi(request)
-        LOGGER.debug('SubscribeKpi result: {:s}'.format(grpc_message_to_json_string(response)))
+    def SetKpiSubscription(self, request : SubsDescriptor) -> Iterator[SubsResponse]:
+        LOGGER.debug('SetKpiSubscription: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.SetKpiSubscription(request)
+        LOGGER.debug('SetKpiSubscription result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
     @RETRY_DECORATOR
@@ -114,7 +114,7 @@ class MonitoringClient:
         return response
 
     @RETRY_DECORATOR
-    def GetSubscriptions(self, request : Empty) -> SubsIDList:
+    def GetSubscriptions(self, request : Empty) -> SubsList:
         LOGGER.debug('GetSubscriptions: {:s}'.format(grpc_message_to_json_string(request)))
         response = self.stub.GetSubscriptions(request)
         LOGGER.debug('GetSubscriptions result: {:s}'.format(grpc_message_to_json_string(response)))
@@ -135,7 +135,7 @@ class MonitoringClient:
         return response
 
     @RETRY_DECORATOR
-    def GetAlarms(self, request : Empty) -> AlarmIDList:
+    def GetAlarms(self, request : Empty) -> AlarmList:
         LOGGER.debug('GetAlarms: {:s}'.format(grpc_message_to_json_string(request)))
         response = self.stub.GetAlarms(request)
         LOGGER.debug('GetAlarms result: {:s}'.format(grpc_message_to_json_string(response)))
diff --git a/src/monitoring/requirements.in b/src/monitoring/requirements.in
index 95953f100c448557471d112cd1e5e8a072320b30..e0176e0266ad6239dabb3aeedc273ddc0b638ded 100644
--- a/src/monitoring/requirements.in
+++ b/src/monitoring/requirements.in
@@ -5,17 +5,18 @@ fastcache==1.1.0
 #opencensus[stackdriver]
 #google-cloud-profiler
 #numpy
-#Jinja2==3.0.3
-#ncclient==0.6.13
-#p4runtime==1.3.0
-#paramiko==2.9.2
-influx-line-protocol==0.1.4
+Jinja2==3.0.3
+ncclient==0.6.13
+p4runtime==1.3.0
+paramiko==2.9.2
+# influx-line-protocol==0.1.4
 python-dateutil==2.8.2
 python-json-logger==2.0.2
 pytz==2021.3
 redis==4.1.2
 requests==2.27.1
 xmltodict==0.12.0
+questdb==1.0.1
 
 # pip's dependency resolver does not take into account installed packages.
 # p4runtime does not specify the version of grpcio/protobuf it needs, so it tries to install latest one
diff --git a/src/monitoring/service/AlarmManager.py b/src/monitoring/service/AlarmManager.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/monitoring/service/EventTools.py b/src/monitoring/service/EventTools.py
index cbcf920f1c5dc98a18b0e48a123bc6490f55737c..4999d2a95991d79ed5417948e220d35aa668c653 100644
--- a/src/monitoring/service/EventTools.py
+++ b/src/monitoring/service/EventTools.py
@@ -19,16 +19,13 @@ import grpc
 
 from common.rpc_method_wrapper.ServiceExceptions import ServiceException
 from context.client.ContextClient import ContextClient
-#from common.proto import kpi_sample_types_pb2
+
 from common.proto.context_pb2 import Empty, EventTypeEnum
 
-from common.logger import getJSONLogger
 from monitoring.client.MonitoringClient import MonitoringClient
+from monitoring.service.MonitoringServiceServicerImpl import LOGGER
 from common.proto import monitoring_pb2
 
-LOGGER = getJSONLogger('monitoringservice-server')
-LOGGER.setLevel('DEBUG')
-
 class EventsDeviceCollector:
     def __init__(self) -> None: # pylint: disable=redefined-outer-name
         self._events_queue = Queue()
@@ -74,7 +71,7 @@ class EventsDeviceCollector:
             kpi_id_list = []
 
             while not self._events_queue.empty():
-                LOGGER.info('getting Kpi by KpiID')
+                # LOGGER.info('getting Kpi by KpiID')
                 event = self.get_event(block=True)
                 if event.event.event_type == EventTypeEnum.EVENTTYPE_CREATE:
                     device = self._context_client.GetDevice(event.device_id)
diff --git a/src/monitoring/service/ManagementDBTools.py b/src/monitoring/service/ManagementDBTools.py
new file mode 100644
index 0000000000000000000000000000000000000000..53430780e843526cdad2ddbfb030f75287d93154
--- /dev/null
+++ b/src/monitoring/service/ManagementDBTools.py
@@ -0,0 +1,124 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import sqlite3 as sl
+
+class ManagementDB():
+    def __init__(self, database):
+        self.client = sl.connect(database, check_same_thread=False)
+        self.create_monitoring_table()
+        self.create_subscription_table()
+        
+    def create_monitoring_table(self):
+        self.client.execute("""
+            CREATE TABLE IF NOT EXISTS kpi(
+                kpi_id INTEGER PRIMARY KEY AUTOINCREMENT,
+                kpi_description TEXT,
+                kpi_sample_type INTEGER,
+                device_id INTEGER,
+                endpoint_id INTEGER,
+                service_id INTEGER
+            );
+        """)
+    
+    def create_subscription_table(self):
+        self.client.execute("""
+            CREATE TABLE IF NOT EXISTS subscription(
+                subs_id INTEGER PRIMARY KEY AUTOINCREMENT,
+                kpi_id INTEGER,
+                subscriber TEXT,
+                sampling_duration_s REAL,
+                sampling_interval_s REAL,
+                start_timestamp REAL,
+                end_timestamp REAL
+            );
+        """)
+
+    def insert_KPI(self,kpi_description,kpi_sample_type,device_id,endpoint_id,service_id):
+        c = self.client.cursor()
+        c.execute("SELECT kpi_id FROM kpi WHERE device_id is ? AND kpi_sample_type is ? AND endpoint_id is ?",(device_id,kpi_sample_type,endpoint_id))
+        data=c.fetchone()
+        if data is None:
+            c.execute("INSERT INTO kpi (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id) VALUES (?,?,?,?,?)", (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id))
+            self.client.commit()
+            return c.lastrowid
+        else:
+            return data[0]
+            
+    def insert_subscription(self,kpi_id,subscriber,sampling_duration_s,sampling_interval_s,start_timestamp, end_timestamp):
+        c = self.client.cursor()
+        c.execute("SELECT subs_id FROM subscription WHERE kpi_id is ? AND subscriber is ? AND sampling_duration_s is ? AND sampling_interval_s is ? AND start_timestamp is ? AND end_timestamp is ?",(kpi_id,subscriber,sampling_duration_s,sampling_interval_s,start_timestamp, end_timestamp))
+        data=c.fetchone()
+        if data is None:
+            c.execute("INSERT INTO subscription (kpi_id,subscriber,sampling_duration_s,sampling_interval_s,start_timestamp, end_timestamp) VALUES (?,?,?,?,?,?)", (kpi_id,subscriber,sampling_duration_s,sampling_interval_s,start_timestamp, end_timestamp))
+            self.client.commit()
+            return c.lastrowid
+        else:
+            print("already exists")
+            return data[0]
+
+    def delete_KPI(self,device_id,kpi_sample_type):
+        c = self.client.cursor()
+        c.execute("SELECT kpi_id FROM kpi WHERE device_id is ? AND kpi_sample_type is ?",(device_id,kpi_sample_type))       
+        data=c.fetchone()
+        if data is None:
+            return False
+        else:
+            c.execute("DELETE FROM kpi WHERE device_id is ? AND kpi_sample_type is ?",(device_id,kpi_sample_type))
+            self.client.commit()
+            return True
+
+    def delete_subscription(self,subs_id):
+        c = self.client.cursor()
+        c.execute("SELECT * FROM subscription WHERE subs_id is ?",(subs_id,))       
+        data=c.fetchone()
+        if data is None:
+            return False
+        else:
+            c.execute("DELETE FROM subscription WHERE subs_id is ?",(subs_id,))
+            self.client.commit()
+            return True
+
+    def delete_kpid_id(self,kpi_id):
+        c = self.client.cursor()
+        c.execute("SELECT * FROM kpi WHERE kpi_id is ?",(kpi_id,))       
+        data=c.fetchone()
+        if data is None:
+            return False
+        else:
+            c.execute("DELETE FROM kpi WHERE kpi_id is ?",(kpi_id,))
+            self.client.commit()
+            return True
+
+    def get_KPI(self,kpi_id):
+        data = self.client.execute("SELECT * FROM kpi WHERE kpi_id is ?",(kpi_id,))
+        return data.fetchone()
+
+    def get_subscription(self,subs_id):
+        data = self.client.execute("SELECT * FROM subscription WHERE subs_id is ?",(subs_id,))
+        return data.fetchone()
+        
+    def get_KPIS(self):
+        data = self.client.execute("SELECT * FROM kpi")
+        #print("\n")
+        #for row in data:
+        #    print(row)
+        return data.fetchall()
+
+    def get_subscriptions(self):
+        data = self.client.execute("SELECT * FROM subscription")
+        #print("\n")
+        #for row in data:
+        #    print(row)
+        return data.fetchall()
\ No newline at end of file
diff --git a/src/monitoring/service/MetricsDBTools.py b/src/monitoring/service/MetricsDBTools.py
index ea6180aa072bd48a04f26d019ba1e4ab9e08af88..a60968df73a6fa3d6c7036d1fe4a61becb10c4e6 100644
--- a/src/monitoring/service/MetricsDBTools.py
+++ b/src/monitoring/service/MetricsDBTools.py
@@ -12,41 +12,73 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from influx_line_protocol import Metric
-import socket
+from questdb.ingress import Sender, IngressError
 import requests
 import json
-import sys
+import logging
+import datetime
+from common.tools.timestamp.Converters import timestamp_float_to_string
+
+LOGGER = logging.getLogger(__name__)
 
 class MetricsDB():
   def __init__(self, host, ilp_port, rest_port, table):
-      self.socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-      self.host=host
-      self.ilp_port=ilp_port
-      self.rest_port=rest_port
-      self.table=table
+    self.host=host
+    self.ilp_port=int(ilp_port)
+    self.rest_port=rest_port
+    self.table=table
+    self.create_table()
 
   def write_KPI(self,time,kpi_id,kpi_sample_type,device_id,endpoint_id,service_id,kpi_value):
-    self.socket.connect((self.host,self.ilp_port))
-    metric = Metric(self.table)
-    metric.with_timestamp(time)
-    metric.add_tag('kpi_id', kpi_id)
-    metric.add_tag('kpi_sample_type', kpi_sample_type)
-    metric.add_tag('device_id', device_id)
-    metric.add_tag('endpoint_id', endpoint_id)
-    metric.add_tag('service_id', service_id)
-    metric.add_value('kpi_value', kpi_value)
-    str_metric = str(metric)
-    str_metric += "\n"
-    self.socket.sendall((str_metric).encode())
-    self.socket.close()
+    counter=0
+    number_of_retries=10
+    while (counter<number_of_retries):
+      try:
+        with Sender(self.host, self.ilp_port) as sender:
+          sender.row(
+          self.table,
+          symbols={
+              'kpi_id': kpi_id,
+              'kpi_sample_type': kpi_sample_type,
+              'device_id': device_id,
+              'endpoint_id': endpoint_id,
+              'service_id': service_id},
+          columns={
+              'kpi_value': kpi_value},
+          at=datetime.datetime.fromtimestamp(time))
+          sender.flush()
+        counter=number_of_retries
+        LOGGER.info(f"KPI written")
+      except IngressError as ierr:
+        # LOGGER.info(ierr)
+        # LOGGER.info(f"Retry number {counter}")
+        counter=counter+1
+
 
   def run_query(self, sql_query):
-      query_params = {'query': sql_query, 'fmt' : 'json'}
-      url = f"http://{self.host}:{self.rest_port}/exec"
-      try:
-          response = requests.get(url, params=query_params)
-          json_response = json.loads(response.text)
-          print(json_response)
-      except requests.exceptions.RequestException as e:
-          print(f'Error: {e}', file=sys.stderr)
+    query_params = {'query': sql_query, 'fmt' : 'json'}
+    url = f"http://{self.host}:{self.rest_port}/exec"
+    response = requests.get(url, params=query_params)
+    json_response = json.loads(response.text)
+    LOGGER.info(f"Query executed, result:{json_response}")
+    return json_response
+  
+  def create_table(self):
+    query = f'CREATE TABLE IF NOT EXISTS {self.table}'\
+    '(kpi_id SYMBOL,'\
+    'kpi_sample_type SYMBOL,'\
+    'device_id SYMBOL,'\
+    'endpoint_id SYMBOL,'\
+    'service_id SYMBOL,'\
+    'timestamp TIMESTAMP,'\
+    'kpi_value DOUBLE)'\
+    'TIMESTAMP(timestamp);'
+    self.run_query(query)
+    LOGGER.info(f"Table {self.table} created")
+
+  def get_subscription_data(self, kpi_id, end_date, sampling_interval_s):
+      start_date = end_date-sampling_interval_s
+      query = f"SELECT kpi_id, timestamp, kpi_value FROM {self.table} WHERE kpi_id = '{kpi_id}' AND (timestamp BETWEEN '{timestamp_float_to_string(start_date)}' AND '{timestamp_float_to_string(end_date)}')"
+      response=self.run_query(query)
+      kpi_list=response['dataset']
+      
diff --git a/src/monitoring/service/MonitoringServiceServicerImpl.py b/src/monitoring/service/MonitoringServiceServicerImpl.py
index d9f8b1e100bada795f8d6c91a796f458da8d212f..4a5d7e4baa0bef8b28259df13c625c9b96042932 100644
--- a/src/monitoring/service/MonitoringServiceServicerImpl.py
+++ b/src/monitoring/service/MonitoringServiceServicerImpl.py
@@ -18,31 +18,32 @@ from typing import Iterator
 
 from common.Constants import ServiceNameEnum
 from common.Settings import get_setting, get_service_port_grpc, get_service_host
+from common.logger import getJSONLogger
 from common.proto.context_pb2 import Empty
 from common.proto.device_pb2 import MonitoringSettings
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
 from common.proto.monitoring_pb2_grpc import MonitoringServiceServicer
-from common.proto.monitoring_pb2 import AlarmResponse, AlarmDescriptor, AlarmIDList, SubsIDList, KpiId, \
+from common.proto.monitoring_pb2 import AlarmResponse, AlarmDescriptor, AlarmList, SubsList, KpiId, \
     KpiDescriptor, KpiList, KpiQuery, SubsDescriptor, SubscriptionID, AlarmID, KpiDescriptorList, \
-    MonitorKpiRequest, Kpi, AlarmSubscription
+    MonitorKpiRequest, Kpi, AlarmSubscription, SubsResponse
 from common.rpc_method_wrapper.ServiceExceptions import ServiceException
-from common.tools.timestamp.Converters import timestamp_float_to_string
 
-from monitoring.service import SqliteTools, MetricsDBTools
+from monitoring.service import ManagementDBTools, MetricsDBTools
 from device.client.DeviceClient import DeviceClient
 
 from prometheus_client import Counter, Summary
 
-LOGGER = logging.getLogger(__name__)
+LOGGER = getJSONLogger('monitoringservice-server')
+LOGGER.setLevel('DEBUG')
 
 MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary(
     'monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request')
 MONITORING_INCLUDEKPI_COUNTER = Counter('monitoring_includekpi_counter', 'Monitoring include kpi request counter')
 
-METRICSDB_HOSTNAME = os.environ.get("METRICSDB_HOSTNAME")
-METRICSDB_ILP_PORT = os.environ.get("METRICSDB_ILP_PORT")
+METRICSDB_HOSTNAME  = os.environ.get("METRICSDB_HOSTNAME")
+METRICSDB_ILP_PORT  = os.environ.get("METRICSDB_ILP_PORT")
 METRICSDB_REST_PORT = os.environ.get("METRICSDB_REST_PORT")
-METRICSDB_TABLE = os.environ.get("METRICSDB_TABLE")
+METRICSDB_TABLE     = os.environ.get("METRICSDB_TABLE")
 
 
 DEVICESERVICE_SERVICE_HOST = get_setting('DEVICESERVICE_SERVICE_HOST',      default=get_service_host(ServiceNameEnum.DEVICE)     )
@@ -54,11 +55,11 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
         LOGGER.info('Init monitoringService')
 
         # Init sqlite monitoring db
-        self.sql_db = SqliteTools.SQLite('monitoring.db')
+        self.management_db = ManagementDBTools.ManagementDB('monitoring.db')
         self.deviceClient = DeviceClient(host=DEVICESERVICE_SERVICE_HOST, port=DEVICESERVICE_SERVICE_PORT_GRPC)  # instantiate the client
 
-        # Set metrics_db client
         self.metrics_db = MetricsDBTools.MetricsDB(METRICSDB_HOSTNAME,METRICSDB_ILP_PORT,METRICSDB_REST_PORT,METRICSDB_TABLE)
+        LOGGER.info('MetricsDB initialized')
 
     # SetKpi (SetKpiRequest) returns (KpiId) {}
     def SetKpi(
@@ -76,11 +77,10 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             kpi_endpoint_id = request.endpoint_id.endpoint_uuid.uuid
             kpi_service_id  = request.service_id.service_uuid.uuid
 
-            data = self.sql_db.insert_KPI(
+            data = self.management_db.insert_KPI(
                 kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
 
             kpi_id.kpi_id.uuid = str(data)
-
             # CREATEKPI_COUNTER_COMPLETED.inc()
             return kpi_id
         except ServiceException as e:
@@ -104,6 +104,30 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
         except Exception as e:  # pragma: no cover
             LOGGER.exception('DeleteKpi exception')
 
+    def GetKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> KpiDescriptor:
+        LOGGER.info('getting Kpi by KpiID')
+        try:
+            kpi_db = self.management_db.get_KPI(int(request.kpi_id.uuid))
+            # LOGGER.info('sql_db.get_KPIS={:s}'.format(str(self.sql_db.get_KPIS())))
+            # LOGGER.info('kpi_db={:s}'.format(str(kpi_db)))
+            if kpi_db is None: return None
+
+            kpiDescriptor = KpiDescriptor()
+
+            kpiDescriptor.kpi_description = kpi_db[1]
+            kpiDescriptor.kpi_sample_type = kpi_db[2]
+            kpiDescriptor.device_id.device_uuid.uuid = str(kpi_db[3])
+            kpiDescriptor.endpoint_id.endpoint_uuid.uuid = str(kpi_db[4])
+            kpiDescriptor.service_id.service_uuid.uuid = str(kpi_db[5])
+
+            return kpiDescriptor
+        except ServiceException as e:
+            LOGGER.exception('GetKpiDescriptor exception')
+            grpc_context.abort(e.code, e.details)
+
+        except Exception:  # pragma: no cover
+            LOGGER.exception('GetKpiDescriptor exception')
+
     def GetKpiDescriptorList ( self, request : Empty, grpc_context : grpc.ServicerContext) -> KpiDescriptorList:
 
         LOGGER.info('GetKpiDescriptorList')
@@ -116,34 +140,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
         except Exception as e:  # pragma: no cover
             LOGGER.exception('GetKpiDescriptorList exception')
 
-    # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {}
-    def MonitorKpi ( self, request : MonitorKpiRequest, grpc_context : grpc.ServicerContext) -> Empty:
-
-        LOGGER.info('MonitorKpi')
-        try:
-            # Sets the request to send to the device service
-            monitor_device_request = MonitoringSettings()
-
-            kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context)
-
-            monitor_device_request.kpi_descriptor.CopyFrom(kpiDescriptor)
-            monitor_device_request.kpi_id.kpi_id.uuid  = request.kpi_id.kpi_id.uuid
-            monitor_device_request.sampling_duration_s = request.monitoring_window_s
-            monitor_device_request.sampling_interval_s = request.sampling_rate_s
-
-            device_client = DeviceClient()
-            device_client.MonitorDeviceKpi(monitor_device_request)
-
-        except ServiceException as e:
-            LOGGER.exception('MonitorKpi exception')
-            # CREATEKPI_COUNTER_FAILED.inc()
-            grpc_context.abort(e.code, e.details)
-        except Exception as e:  # pragma: no cover
-            LOGGER.exception('MonitorKpi exception')
-            grpc_context.abort(grpc.StatusCode.INTERNAL, str(e))
-            # CREATEKPI_COUNTER_FAILED.inc()
 
-        return Empty()
 
     # rpc IncludeKpi(IncludeKpiRequest)  returns(context.Empty)    {}
     def IncludeKpi(self, request : Kpi, grpc_context : grpc.ServicerContext) -> Empty:
@@ -161,7 +158,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             deviceId        = kpiDescriptor.device_id.device_uuid.uuid
             endpointId      = kpiDescriptor.endpoint_id.endpoint_uuid.uuid
             serviceId       = kpiDescriptor.service_id.service_uuid.uuid
-            time_stamp      = timestamp_float_to_string(request.timestamp.timestamp)
+            time_stamp      = request.timestamp.timestamp
             kpi_value       = getattr(request.kpi_value, request.kpi_value.WhichOneof('value'))
 
             # Build the structure to be included as point in the MetricsDB
@@ -178,60 +175,54 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             # CREATEKPI_COUNTER_FAILED.inc()
         return Empty()
 
-    # 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()
-
+    # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {}
+    def MonitorKpi ( self, request : MonitorKpiRequest, grpc_context : grpc.ServicerContext) -> Empty:
 
-    def GetKpiDescriptor(self, request : KpiId, grpc_context : grpc.ServicerContext) -> KpiDescriptor:
-        LOGGER.info('getting Kpi by KpiID')
+        LOGGER.info('MonitorKpi')
         try:
-            kpi_db = self.sql_db.get_KPI(int(request.kpi_id.uuid))
-            #LOGGER.info('sql_db.get_KPIS={:s}'.format(str(self.sql_db.get_KPIS())))
-            #LOGGER.info('kpi_db={:s}'.format(str(kpi_db)))
-            if kpi_db is None: return None
+            # Sets the request to send to the device service
+            monitor_device_request = MonitoringSettings()
 
-            kpiDescriptor = KpiDescriptor()
+            kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context)
+
+            monitor_device_request.kpi_descriptor.CopyFrom(kpiDescriptor)
+            monitor_device_request.kpi_id.kpi_id.uuid  = request.kpi_id.kpi_id.uuid
+            monitor_device_request.sampling_duration_s = request.monitoring_window_s
+            monitor_device_request.sampling_interval_s = request.sampling_rate_s
 
-            kpiDescriptor.kpi_description                   = kpi_db[1]
-            kpiDescriptor.kpi_sample_type                   = kpi_db[2]
-            kpiDescriptor.device_id.device_uuid.uuid        = str(kpi_db[3])
-            kpiDescriptor.endpoint_id.endpoint_uuid.uuid    = str(kpi_db[4])
-            kpiDescriptor.service_id.service_uuid.uuid      = str(kpi_db[5])
+            device_client = DeviceClient()
+            device_client.MonitorDeviceKpi(monitor_device_request)
 
-            return kpiDescriptor
         except ServiceException as e:
-            LOGGER.exception('GetKpiDescriptor exception')
+            LOGGER.exception('MonitorKpi exception')
+            # CREATEKPI_COUNTER_FAILED.inc()
             grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('MonitorKpi exception')
+            grpc_context.abort(grpc.StatusCode.INTERNAL, str(e))
+            # CREATEKPI_COUNTER_FAILED.inc()
+
+        return Empty()
 
-        except Exception:  # pragma: no cover
-            LOGGER.exception('GetKpiDescriptor exception')
 
     def QueryKpiData ( self, request : KpiQuery, grpc_context : grpc.ServicerContext) -> KpiList:
 
         LOGGER.info('QueryKpiData')
         try:
              # TBC
-            return KpiQuery()
+            return KpiList()
         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 : SubsDescriptor, grpc_context : grpc.ServicerContext) -> KpiList:
+    def SetKpiSubscription ( self, request : SubsDescriptor, grpc_context : grpc.ServicerContext) -> SubsResponse:
 
         LOGGER.info('SubscribeKpi')
         try:
              # TBC
-            yield KpiList()
+            yield SubsResponse()
         except ServiceException as e:
             LOGGER.exception('SubscribeKpi exception')
             grpc_context.abort(e.code, e.details)
@@ -251,12 +242,12 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
         except Exception as e:  # pragma: no cover
             LOGGER.exception('GetSubsDescriptor exception')
 
-    def GetSubscriptions ( self, request : Empty, grpc_context : grpc.ServicerContext) -> SubsIDList:
+    def GetSubscriptions ( self, request : Empty, grpc_context : grpc.ServicerContext) -> SubsList:
 
         LOGGER.info('GetSubscriptions')
         try:
              # TBC
-            return SubsIDList()
+            return SubsList()
         except ServiceException as e:
             LOGGER.exception('GetSubscriptions exception')
             grpc_context.abort(e.code, e.details)
@@ -288,12 +279,12 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             LOGGER.exception('SetKpiAlarm exception')
 
 
-    def GetAlarms ( self, request : Empty, grpc_context : grpc.ServicerContext) -> AlarmIDList:
+    def GetAlarms ( self, request : Empty, grpc_context : grpc.ServicerContext) -> AlarmList:
 
         LOGGER.info('GetAlarms')
         try:
              # TBC
-            return AlarmIDList()
+            return AlarmList()
         except ServiceException as e:
             LOGGER.exception('GetAlarms exception')
             grpc_context.abort(e.code, e.details)
@@ -335,3 +326,14 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             grpc_context.abort(e.code, e.details)
         except Exception as e:  # pragma: no cover
             LOGGER.exception('DeleteAlarm exception')
+
+    def GetStreamKpi ( self, request : KpiId, grpc_context : grpc.ServicerContext) -> Iterator[Kpi]:
+
+        LOGGER.info('GetStreamKpi')
+        yield Kpi()
+
+    @MONITORING_GETINSTANTKPI_REQUEST_TIME.time()
+    def GetInstantKpi ( self, request : KpiId, grpc_context : grpc.ServicerContext) -> KpiList:
+
+        LOGGER.info('GetInstantKpi')
+        return KpiList()
\ No newline at end of file
diff --git a/src/monitoring/service/SqliteTools.py b/src/monitoring/service/SqliteTools.py
deleted file mode 100644
index 092d07e9b961e98a91bb244bcc992c701ad3cd72..0000000000000000000000000000000000000000
--- a/src/monitoring/service/SqliteTools.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import sqlite3 as sl
-
-class SQLite():
-    def __init__(self, database):
-        self.client = sl.connect(database, check_same_thread=False)
-        self.client.execute("""
-            CREATE TABLE IF NOT EXISTS KPI(
-                kpi_id INTEGER PRIMARY KEY AUTOINCREMENT,
-                kpi_description TEXT,
-                kpi_sample_type INTEGER,
-                device_id INTEGER,
-                endpoint_id INTEGER,
-                service_id INTEGER
-            );
-        """)
-
-    def insert_KPI(self,kpi_description,kpi_sample_type,device_id,endpoint_id,service_id ):
-        c = self.client.cursor()
-        c.execute("SELECT kpi_id FROM KPI WHERE device_id is ? AND kpi_sample_type is ? AND endpoint_id is ?",(device_id,kpi_sample_type,endpoint_id))
-        data=c.fetchone()
-        if data is None:
-            c.execute("INSERT INTO KPI (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id) VALUES (?,?,?,?,?)", (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id))
-            self.client.commit()
-            return c.lastrowid
-        else:
-            return data[0]
-
-    def delete_KPI(self,device_id,kpi_sample_type):
-        c = self.client.cursor()
-        c.execute("SELECT kpi_id FROM KPI WHERE device_id is ? AND kpi_sample_type is ?",(device_id,kpi_sample_type))       
-        data=c.fetchone()
-        if data is None:
-            return False
-        else:
-            c.execute("DELETE FROM KPI WHERE device_id is ? AND kpi_sample_type is ?",(device_id,kpi_sample_type))
-            self.client.commit()
-            return True
-
-    def delete_kpid_id(self,kpi_id):
-        c = self.client.cursor()
-        c.execute("SELECT * FROM KPI WHERE kpi_id is ?",(kpi_id,))       
-        data=c.fetchone()
-        if data is None:
-            return False
-        else:
-            c.execute("DELETE FROM KPI WHERE kpi_id is ?",(kpi_id,))
-            self.client.commit()
-            return True
-
-    def get_KPI(self,kpi_id):
-        data = self.client.execute("SELECT * FROM KPI WHERE kpi_id is ?",(kpi_id,))
-        return data.fetchone()
-        
-    def get_KPIS(self):
-        data = self.client.execute("SELECT * FROM KPI")
-        #print("\n")
-        #for row in data:
-        #    print(row)
-        return data.fetchall()
\ No newline at end of file
diff --git a/src/monitoring/service/SubscriptionManager.py b/src/monitoring/service/SubscriptionManager.py
new file mode 100644
index 0000000000000000000000000000000000000000..eb46f3ec546862b4caee04c1caedd71c82392cb2
--- /dev/null
+++ b/src/monitoring/service/SubscriptionManager.py
@@ -0,0 +1,31 @@
+from apscheduler.schedulers.background import BackgroundScheduler
+from apscheduler.executors.pool import ProcessPoolExecutor
+from apscheduler.triggers.interval import IntervalTrigger
+from apscheduler.triggers.cron import CronTrigger
+from common.tools.timestamp.Converters import timestamp_utcnow_to_float
+from datetime import datetime, timezone
+import time
+
+
+class SubscriptionManager():
+    def __init__(self, metrics_db):
+        self.metrics_db = metrics_db
+        self.scheduler = BackgroundScheduler(executors={'processpool': ProcessPoolExecutor(max_workers=20)})
+        self.scheduler.start()
+        
+
+    def create_subscription(self, subscription_id, kpi_id, sampling_interval_s, sampling_duration_s=None, start_timestamp=None, end_timestamp=None):
+        start_date=None
+        end_date=None
+        if sampling_duration_s:
+            if not start_timestamp:
+                start_timestamp=time.time()
+            end_timestamp=start_timestamp+sampling_duration_s
+        if start_timestamp:
+            start_date = datetime.fromtimestamp(start_timestamp)
+        if end_timestamp:
+            end_date = datetime.fromtimestamp(end_timestamp)
+        self.scheduler.add_job(self.metrics_db.get_subscription_data, args=(kpi_id, timestamp_utcnow_to_float(), sampling_interval_s),trigger='interval', seconds=sampling_interval_s, start_date=start_date, end_date=end_date, id=subscription_id)
+
+    def delete_subscription(self, subscription_id):
+        self.scheduler.remove_job(subscription_id)
\ No newline at end of file
diff --git a/src/monitoring/service/__main__.py b/src/monitoring/service/__main__.py
index 3334a860ccd94d51390ab5f5869d25e2475084ee..e37412fa004704d089a8e00bada8033d8abe53bd 100644
--- a/src/monitoring/service/__main__.py
+++ b/src/monitoring/service/__main__.py
@@ -45,8 +45,8 @@ def start_monitoring():
                 # Create Monitor Kpi Requests
                 monitor_kpi_request = monitoring_pb2.MonitorKpiRequest()
                 monitor_kpi_request.kpi_id.CopyFrom(kpi_id)
-                monitor_kpi_request.monitoring_window_s = 86400
-                monitor_kpi_request.sampling_rate_s = 30
+                monitor_kpi_request.sampling_duration_s = 86400
+                monitor_kpi_request.sampling_interval_s = 30
                 events_collector._monitoring_client.MonitorKpi(monitor_kpi_request)
     else:
         # Terminate is set, looping terminates
diff --git a/src/monitoring/tests/Messages.py b/src/monitoring/tests/Messages.py
index 7b7f4150e5c084bbf25c6a4d9c1c47b70e3f76a0..b463d900b062bab4ca44613c8a5903318887a2c2 100644
--- a/src/monitoring/tests/Messages.py
+++ b/src/monitoring/tests/Messages.py
@@ -11,17 +11,13 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+import datetime
 
 from common.proto import monitoring_pb2
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
-from common.tools.timestamp.Converters import timestamp_string_to_float
+from common.tools.timestamp.Converters import timestamp_string_to_float, timestamp_utcnow_to_float
 
 
-def kpi():
-    _kpi                    = monitoring_pb2.Kpi()
-    _kpi.kpi_id.kpi_id.uuid = 'KPIID0000'   # pylint: disable=maybe-no-member
-    return _kpi
-
 def kpi_id():
     _kpi_id             = monitoring_pb2.KpiId()
     _kpi_id.kpi_id.uuid = str(1)            # pylint: disable=maybe-no-member
@@ -36,6 +32,24 @@ def create_kpi_request():
     _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END1'     # pylint: disable=maybe-no-member
     return _create_kpi_request
 
+def create_kpi_request_b():
+    _create_kpi_request                                = monitoring_pb2.KpiDescriptor()
+    _create_kpi_request.kpi_description                = 'KPI Description Test'
+    _create_kpi_request.kpi_sample_type                = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
+    _create_kpi_request.device_id.device_uuid.uuid     = 'DEV2'     # pylint: disable=maybe-no-member
+    _create_kpi_request.service_id.service_uuid.uuid   = 'SERV2'    # pylint: disable=maybe-no-member
+    _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END2'     # pylint: disable=maybe-no-member
+    return _create_kpi_request
+
+def create_kpi_request_c():
+    _create_kpi_request                                = monitoring_pb2.KpiDescriptor()
+    _create_kpi_request.kpi_description                = 'KPI Description Test'
+    _create_kpi_request.kpi_sample_type                = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
+    _create_kpi_request.device_id.device_uuid.uuid     = 'DEV3'     # pylint: disable=maybe-no-member
+    _create_kpi_request.service_id.service_uuid.uuid   = 'SERV3'    # pylint: disable=maybe-no-member
+    _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END3'     # pylint: disable=maybe-no-member
+    return _create_kpi_request
+
 def monitor_kpi_request(kpi_uuid, monitoring_window_s, sampling_rate_s):
     _monitor_kpi_request                     = monitoring_pb2.MonitorKpiRequest()
     _monitor_kpi_request.kpi_id.kpi_id.uuid  = kpi_uuid   # pylint: disable=maybe-no-member
@@ -43,9 +57,39 @@ def monitor_kpi_request(kpi_uuid, monitoring_window_s, sampling_rate_s):
     _monitor_kpi_request.sampling_rate_s     = sampling_rate_s
     return _monitor_kpi_request
 
-def include_kpi_request():
+def include_kpi_request(kpi_id):
     _include_kpi_request                        = monitoring_pb2.Kpi()
-    _include_kpi_request.kpi_id.kpi_id.uuid     = str(1)    # pylint: disable=maybe-no-member
-    _include_kpi_request.timestamp.timestamp    = timestamp_string_to_float("2021-10-12T13:14:42Z")
-    _include_kpi_request.kpi_value.int32Val       = 500       # pylint: disable=maybe-no-member
+    _include_kpi_request.kpi_id.kpi_id.uuid     = kpi_id.kpi_id.uuid
+    _include_kpi_request.timestamp.timestamp    = timestamp_utcnow_to_float()
+    _include_kpi_request.kpi_value.int32Val     = 500       # pylint: disable=maybe-no-member
     return _include_kpi_request
+
+def kpi_descriptor_list():
+    _kpi_descriptor_list = monitoring_pb2.KpiDescriptorList()
+
+    return _kpi_descriptor_list
+
+def kpi_query():
+    _kpi_query = monitoring_pb2.KpiQuery()
+
+    return _kpi_query
+
+def subs_descriptor():
+    _subs_descriptor = monitoring_pb2.SubsDescriptor()
+
+    return _subs_descriptor
+
+def subs_id():
+    _subs_id = monitoring_pb2.SubsDescriptor()
+
+    return _subs_id
+
+def alarm_descriptor():
+    _alarm_descriptor = monitoring_pb2.AlarmDescriptor()
+
+    return _alarm_descriptor
+
+def alarm_id():
+    _alarm_id = monitoring_pb2.AlarmID()
+
+    return _alarm_id
\ No newline at end of file
diff --git a/src/monitoring/tests/test_unitary.py b/src/monitoring/tests/test_unitary.py
index 45f55cb05f8c0cb5c9cdb2b3f02ed70c80285009..af0742f6d7165f304114cd0a71e31e2747ba118e 100644
--- a/src/monitoring/tests/test_unitary.py
+++ b/src/monitoring/tests/test_unitary.py
@@ -12,17 +12,23 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import copy, logging, os, pytest
+import copy, os, pytest
 from time import sleep
 from typing import Tuple
+
+from grpc._channel import _MultiThreadedRendezvous
+
 from common.Constants import ServiceNameEnum
 from common.Settings import (
     ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_service_port_grpc)
+from common.logger import getJSONLogger
 from common.orm.Database import Database
 from common.orm.Factory import get_database_backend, BackendEnum as DatabaseBackendEnum
 from common.message_broker.Factory import get_messagebroker_backend, BackendEnum as MessageBrokerBackendEnum
 from common.message_broker.MessageBroker import MessageBroker
-from common.proto.monitoring_pb2 import KpiId, KpiDescriptor
+from common.proto import monitoring_pb2
+from common.proto.monitoring_pb2 import KpiId, KpiDescriptor, KpiList, SubsDescriptor, SubsList, AlarmID, \
+    AlarmDescriptor, AlarmList, Kpi, KpiDescriptorList, SubsResponse
 
 from context.client.ContextClient import ContextClient
 from context.service.grpc_server.ContextService import ContextService
@@ -38,17 +44,19 @@ from device.service.drivers import DRIVERS  # pylint: disable=wrong-import-posit
 
 # pylint: disable=wrong-import-position
 from monitoring.client.MonitoringClient import MonitoringClient
-from common.proto import context_pb2, monitoring_pb2
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
-from monitoring.service import SqliteTools, MetricsDBTools
+from monitoring.service import ManagementDBTools, MetricsDBTools
 from monitoring.service.MonitoringService import MonitoringService
 from monitoring.service.EventTools import EventsDeviceCollector
-from monitoring.tests.Messages import create_kpi_request, include_kpi_request, kpi, kpi_id, monitor_kpi_request
+from monitoring.tests.Messages import create_kpi_request, include_kpi_request, monitor_kpi_request, \
+    create_kpi_request_b, create_kpi_request_c, kpi_query, subs_descriptor, subs_id, alarm_descriptor, alarm_id, kpi_id, \
+    kpi_descriptor_list
 from monitoring.tests.Objects import DEVICE_DEV1, DEVICE_DEV1_CONNECT_RULES, DEVICE_DEV1_UUID
 
+from monitoring.service.MonitoringServiceServicerImpl import LOGGER
 
-LOGGER = logging.getLogger(__name__)
-LOGGER.setLevel(logging.DEBUG)
+# LOGGER = getJSONLogger('monitoringservice-server')
+# LOGGER.setLevel('DEBUG')
 
 ###########################
 # Tests Setup
@@ -149,9 +157,9 @@ def monitoring_client(monitoring_service : MonitoringService): # pylint: disable
     _client.close()
 
 @pytest.fixture(scope='session')
-def sql_db():
-    _sql_db = SqliteTools.SQLite('monitoring.db')
-    return _sql_db
+def management_db():
+    _management_db = ManagementDBTools.ManagementDB('monitoring.db')
+    return _management_db
 
 @pytest.fixture(scope='session')
 def metrics_db():
@@ -171,8 +179,45 @@ def test_set_kpi(monitoring_client): # pylint: disable=redefined-outer-name
     LOGGER.warning('test_create_kpi requesting')
     response = monitoring_client.SetKpi(create_kpi_request())
     LOGGER.debug(str(response))
+    response = monitoring_client.SetKpi(create_kpi_request_b())
+    LOGGER.debug(str(response))
     assert isinstance(response, KpiId)
 
+
+# Test case that makes use of client fixture to test server's DeleteKpi method
+def test_delete_kpi(monitoring_client): # pylint: disable=redefined-outer-name
+    # make call to server
+    LOGGER.warning('delete_kpi requesting')
+    response = monitoring_client.SetKpi(create_kpi_request_b())
+    response = monitoring_client.DeleteKpi(response)
+    LOGGER.debug(str(response))
+    assert isinstance(response, Empty)
+
+# Test case that makes use of client fixture to test server's GetKpiDescriptor method
+def test_get_kpidescritor(monitoring_client): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_getkpidescritor_kpi begin')
+    response = monitoring_client.SetKpi(create_kpi_request_c())
+    # LOGGER.debug(str(response))
+    response = monitoring_client.GetKpiDescriptor(response)
+    # LOGGER.debug(str(response))
+    assert isinstance(response, KpiDescriptor)
+
+# Test case that makes use of client fixture to test server's GetKpiDescriptor method
+def test_get_kpi_descriptor_list(monitoring_client): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_getkpidescritor_kpi begin')
+    response = monitoring_client.GetKpiDescriptorList(kpi_descriptor_list())
+    # LOGGER.debug(str(response))
+    assert isinstance(response, KpiDescriptorList)
+
+
+# Test case that makes use of client fixture to test server's IncludeKpi method
+def test_include_kpi(monitoring_client): # pylint: disable=redefined-outer-name
+    # make call to server
+    LOGGER.warning('test_include_kpi requesting')
+    kpi_id = monitoring_client.SetKpi(create_kpi_request_c())
+    response = monitoring_client.IncludeKpi(include_kpi_request(kpi_id))
+    assert isinstance(response, Empty)
+
 # Test case that makes use of client fixture to test server's MonitorKpi method
 def test_monitor_kpi(
         context_client : ContextClient,                 # pylint: disable=redefined-outer-name
@@ -180,7 +225,7 @@ def test_monitor_kpi(
         monitoring_client : MonitoringClient,           # pylint: disable=redefined-outer-name
         context_db_mb : Tuple[Database, MessageBroker]  # pylint: disable=redefined-outer-name
     ):
-    LOGGER.warning('test_monitor_kpi begin')
+    LOGGER.info('test_monitor_kpi begin')
 
     context_database = context_db_mb[0]
 
@@ -208,39 +253,95 @@ def test_monitor_kpi(
     LOGGER.debug(str(response))
     assert isinstance(response, Empty)
 
-
-# Test case that makes use of client fixture to test server's IncludeKpi method
-def test_include_kpi(monitoring_client): # pylint: disable=redefined-outer-name
-    # make call to server
-    LOGGER.warning('test_include_kpi requesting')
-    response = monitoring_client.IncludeKpi(include_kpi_request())
+# Test case that makes use of client fixture to test server's QueryKpiData method
+def test_query_kpi_data(monitoring_client): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_query_kpi_data')
+    response = monitoring_client.QueryKpiData(kpi_query())
     LOGGER.debug(str(response))
+    assert isinstance(response, KpiList)
+
+# Test case that makes use of client fixture to test server's SetKpiSubscription method
+def test_set_kpi_subscription(monitoring_client): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_set_kpi_subscription')
+    response = monitoring_client.SetKpiSubscription(subs_descriptor())
+    LOGGER.debug(type(response))
+    assert isinstance(response, _MultiThreadedRendezvous)
+
+# Test case that makes use of client fixture to test server's GetSubsDescriptor method
+def test_get_subs_descriptor(monitoring_client):
+    LOGGER.warning('test_get_subs_descriptor')
+    response = monitoring_client.GetSubsDescriptor(subs_id())
+    LOGGER.debug(type(response))
+    assert isinstance(response, SubsDescriptor)
+
+# Test case that makes use of client fixture to test server's GetSubscriptions method
+def test_get_subscriptions(monitoring_client):
+    LOGGER.warning('test_get_subscriptions')
+    response = monitoring_client.GetSubscriptions(Empty())
+    LOGGER.debug(type(response))
+    assert isinstance(response, SubsList)
+
+# Test case that makes use of client fixture to test server's DeleteSubscription method
+def test_delete_subscription(monitoring_client):
+    LOGGER.warning('test_delete_subscription')
+    response = monitoring_client.DeleteSubscription(subs_id())
+    LOGGER.debug(type(response))
+    assert isinstance(response, Empty)
+
+# Test case that makes use of client fixture to test server's SetKpiAlarm method
+def test_set_kpi_alarm(monitoring_client):
+    LOGGER.warning('test_set_kpi_alarm')
+    response = monitoring_client.SetKpiAlarm(alarm_descriptor())
+    LOGGER.debug(type(response))
+    assert isinstance(response, AlarmID)
+
+# Test case that makes use of client fixture to test server's GetAlarms method
+def test_get_alarms(monitoring_client):
+    LOGGER.warning('test_get_alarms')
+    response = monitoring_client.GetAlarms(Empty())
+    LOGGER.debug(type(response))
+    assert isinstance(response, AlarmList)
+
+
+# Test case that makes use of client fixture to test server's GetAlarmDescriptor method
+def test_get_alarm_descriptor(monitoring_client):
+    LOGGER.warning('test_get_alarm_descriptor')
+    response = monitoring_client.GetAlarmDescriptor(alarm_id())
+    LOGGER.debug(type(response))
+    assert isinstance(response, AlarmDescriptor)
+
+# Test case that makes use of client fixture to test server's GetAlarmResponseStream method
+def test_get_alarm_response_stream(monitoring_client):
+    LOGGER.warning('test_get_alarm_descriptor')
+    response = monitoring_client.GetAlarmResponseStream(alarm_descriptor())
+    LOGGER.debug(type(response))
+    assert isinstance(response, _MultiThreadedRendezvous)
+
+
+# Test case that makes use of client fixture to test server's DeleteAlarm method
+def test_delete_alarm(monitoring_client):
+    LOGGER.warning('test_delete_alarm')
+    response = monitoring_client.DeleteAlarm(alarm_id())
+    LOGGER.debug(type(response))
     assert isinstance(response, Empty)
 
 # Test case that makes use of client fixture to test server's GetStreamKpi method
 def test_get_stream_kpi(monitoring_client): # pylint: disable=redefined-outer-name
     LOGGER.warning('test_getstream_kpi begin')
-    response = monitoring_client.GetStreamKpi(kpi())
+    response = monitoring_client.GetStreamKpi(monitoring_pb2.Kpi())
     LOGGER.debug(str(response))
-    #assert isinstance(response, Kpi)
-
-# Test case that makes use of client fixture to test server's GetInstantKpi method
-# def test_get_instant_kpi(monitoring_client): # pylint: disable=redefined-outer-name
-#     LOGGER.warning('test_getinstant_kpi begin')
-#     response = monitoring_client.GetInstantKpi(kpi_id())
-#     LOGGER.debug(str(response))
-#     # assert isinstance(response, Kpi)
+    assert isinstance(response, _MultiThreadedRendezvous)
 
 # Test case that makes use of client fixture to test server's GetInstantKpi method
-def test_get_kpidescritor_kpi(monitoring_client): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_getkpidescritor_kpi begin')
-    response = monitoring_client.SetKpi(create_kpi_request())
-    response = monitoring_client.GetKpiDescriptor(response)
+def test_get_instant_kpi(monitoring_client): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_getinstant_kpi begin')
+    response = monitoring_client.GetInstantKpi(kpi_id())
     LOGGER.debug(str(response))
-    assert isinstance(response, KpiDescriptor)
+    assert isinstance(response, KpiList)
+
 
-def test_sqlitedb_tools_insert_kpi(sql_db): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_sqlitedb_tools_insert_kpi begin')
+def test_managementdb_tools_insert_kpi(management_db): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_managementdb_tools_insert_kpi begin')
     _create_kpi_request = create_kpi_request()
     kpi_description = _create_kpi_request.kpi_description                # pylint: disable=maybe-no-member
     kpi_sample_type = _create_kpi_request.kpi_sample_type                # pylint: disable=maybe-no-member
@@ -248,11 +349,11 @@ def test_sqlitedb_tools_insert_kpi(sql_db): # pylint: disable=redefined-outer-na
     kpi_endpoint_id = _create_kpi_request.endpoint_id.endpoint_uuid.uuid # pylint: disable=maybe-no-member
     kpi_service_id  = _create_kpi_request.service_id.service_uuid.uuid   # pylint: disable=maybe-no-member
 
-    response = sql_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
+    response = management_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
     assert isinstance(response, int)
 
-def test_sqlitedb_tools_get_kpi(sql_db): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_sqlitedb_tools_get_kpi begin')
+def test_managementdb_tools_get_kpi(management_db): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_managementdb_tools_get_kpi begin')
     _create_kpi_request = create_kpi_request()
     kpi_description = _create_kpi_request.kpi_description                # pylint: disable=maybe-no-member
     kpi_sample_type = _create_kpi_request.kpi_sample_type                # pylint: disable=maybe-no-member
@@ -260,19 +361,19 @@ def test_sqlitedb_tools_get_kpi(sql_db): # pylint: disable=redefined-outer-name
     kpi_endpoint_id = _create_kpi_request.endpoint_id.endpoint_uuid.uuid # pylint: disable=maybe-no-member
     kpi_service_id  = _create_kpi_request.service_id.service_uuid.uuid   # pylint: disable=maybe-no-member
 
-    _kpi_id = sql_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
-    response = sql_db.get_KPI(_kpi_id)
+    _kpi_id = management_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
+    response = management_db.get_KPI(_kpi_id)
     assert isinstance(response, tuple)
 
-def test_sqlitedb_tools_get_kpis(sql_db): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_sqlitedb_tools_get_kpis begin')
-    response = sql_db.get_KPIS()
+def test_managementdb_tools_get_kpis(management_db): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_managementdb_tools_get_kpis begin')
+    response = management_db.get_KPIS()
     assert isinstance(response, list)
 
-def test_sqlitedb_tools_delete_kpi(sql_db): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_sqlitedb_tools_get_kpi begin')
+def test_managementdb_tools_delete_kpi(management_db): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_managementdb_tools_get_kpi begin')
 
-    response = sql_db.delete_KPI("DEV1",KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED)
+    response = management_db.delete_KPI("DEV1",KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED)
 
     if not response:
         _create_kpi_request = create_kpi_request()
@@ -282,15 +383,15 @@ def test_sqlitedb_tools_delete_kpi(sql_db): # pylint: disable=redefined-outer-na
         kpi_endpoint_id = _create_kpi_request.endpoint_id.endpoint_uuid.uuid # pylint: disable=maybe-no-member
         kpi_service_id  = _create_kpi_request.service_id.service_uuid.uuid   # pylint: disable=maybe-no-member
 
-        sql_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
-        response = sql_db.delete_KPI("DEV1", KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED)
+        management_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
+        response = management_db.delete_KPI("DEV1", KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED)
 
     assert response
 
-def test_sqlitedb_tools_delete_kpid_id(sql_db): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_sqlitedb_tools_delete_kpid_id begin')
+def test_managementdb_tools_delete_kpid_id(management_db): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_managementdb_tools_delete_kpid_id begin')
 
-    response = sql_db.delete_kpid_id(1)
+    response = management_db.delete_kpid_id(1)
 
     if not response:
         _create_kpi_request = create_kpi_request()
@@ -300,8 +401,8 @@ def test_sqlitedb_tools_delete_kpid_id(sql_db): # pylint: disable=redefined-oute
         kpi_endpoint_id = _create_kpi_request.endpoint_id.endpoint_uuid.uuid # pylint: disable=maybe-no-member
         kpi_service_id  = _create_kpi_request.service_id.service_uuid.uuid   # pylint: disable=maybe-no-member
 
-        _kpi_id = sql_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
-        response = sql_db.delete_kpid_id(_kpi_id)
+        _kpi_id = management_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
+        response = management_db.delete_kpid_id(_kpi_id)
 
     assert response
 
diff --git a/src/pathcomp/.gitlab-ci.yml b/src/pathcomp/.gitlab-ci.yml
index a45e735e4c07299c4853abdff5b6c39963a87a78..fd52da6fb7bf8dc556b92e4db080c9927bb58a5d 100644
--- a/src/pathcomp/.gitlab-ci.yml
+++ b/src/pathcomp/.gitlab-ci.yml
@@ -21,14 +21,9 @@ build pathcomp:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    # This first build tags the builder resulting image to prevent being removed by dangling image removal command
-    - docker build -t "${IMAGE_NAME}-backend:${IMAGE_TAG}-builder" --target builder -f ./src/$IMAGE_NAME/backend/Dockerfile .
-    - docker build -t "${IMAGE_NAME}-backend:$IMAGE_TAG" -f ./src/$IMAGE_NAME/backend/Dockerfile .
-    - docker build -t "${IMAGE_NAME}-frontend:$IMAGE_TAG" -f ./src/$IMAGE_NAME/frontend/Dockerfile .
-    - docker tag "${IMAGE_NAME}-backend:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
-    - docker tag "${IMAGE_NAME}-frontend:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG"
-    - docker push "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
-    - docker push "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG"
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile .
+    - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
@@ -37,18 +32,14 @@ build pathcomp:
     - changes:
       - src/common/**/*.py
       - proto/*.proto
-      - src/$IMAGE_NAME/.gitlab-ci.yml
-      - src/$IMAGE_NAME/backend/**/*.{c,h,conf}
-      - src/$IMAGE_NAME/backend/Makefile
-      - src/$IMAGE_NAME/backend/Dockerfile
-      - src/$IMAGE_NAME/frontend/**/*.{py,in,yml}
-      - src/$IMAGE_NAME/frontend/Dockerfile
-      - src/$IMAGE_NAME/frontend/tests/*.py
+      - src/$IMAGE_NAME/**/*.{py,in,yml}
+      - src/$IMAGE_NAME/Dockerfile
+      - src/$IMAGE_NAME/tests/*.py
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
 
 # Apply unit test to the component
-unit test pathcomp-backend:
+unit test pathcomp:
   variables:
     IMAGE_NAME: 'pathcomp' # name of the microservice
     IMAGE_TAG: 'latest' # tag of the container image (production, development, etc)
@@ -58,22 +49,18 @@ unit test pathcomp-backend:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
     - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi
-    - if docker container ls | grep ${IMAGE_NAME}-frontend; then docker rm -f ${IMAGE_NAME}-frontend; else echo "${IMAGE_NAME}-frontend image is not in the system"; fi
-    - if docker container ls | grep ${IMAGE_NAME}-backend; then docker rm -f ${IMAGE_NAME}-backend; else echo "${IMAGE_NAME}-backend image is not in the system"; fi
+    - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
-    - docker pull "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
-    #- docker run --name ${IMAGE_NAME}-backend -d -p 8081:8081 -v "$PWD/src/${IMAGE_NAME}/backend/tests:/opt/results" --network=teraflowbridge ${IMAGE_NAME}-backend:${IMAGE_TAG}-builder
-    - docker run --name ${IMAGE_NAME}-backend -d -p 8081:8081 --network=teraflowbridge ${IMAGE_NAME}-backend:${IMAGE_TAG}-builder
+    - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+    - docker run --name $IMAGE_NAME -d -p 10020:10020 -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - sleep 5
     - docker ps -a
-    - docker logs ${IMAGE_NAME}-backend
-    - docker exec -i ${IMAGE_NAME}-backend bash -c "curl -0 -v -X POST -H 'Expect:' -H 'Content-Type:\ application/json' http://127.0.0.1:8081/pathComp/api/v1/compRoute -d @/var/teraflow/tests/pc-req.json"
-    - docker kill --signal=SIGUSR1 pathcomp-backend
-    - docker exec -i ${IMAGE_NAME}-backend bash -c "gcovr"
+    - docker logs $IMAGE_NAME
+    - docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}_report.xml"
+    - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
   coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
   after_script:
-    - docker logs ${IMAGE_NAME}-backend
-    - docker rm -f ${IMAGE_NAME}-backend
+    - docker rm -f $IMAGE_NAME
     - docker network rm teraflowbridge
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
@@ -81,71 +68,16 @@ unit test pathcomp-backend:
     - changes:
       - src/common/**/*.py
       - proto/*.proto
-      - src/$IMAGE_NAME/.gitlab-ci.yml
-      - src/$IMAGE_NAME/backend/**/*.{c,h,conf}
-      - src/$IMAGE_NAME/backend/Makefile
-      - src/$IMAGE_NAME/backend/Dockerfile
-      - manifests/${IMAGE_NAME}service.yaml
-      - .gitlab-ci.yml
-  #artifacts:
-  #    when: always
-  #    reports:
-  #      junit: src/$IMAGE_NAME/backend/tests/${IMAGE_NAME}-backend_report.xml
-
-# Apply unit test to the component
-unit test pathcomp-frontend:
-  variables:
-    IMAGE_NAME: 'pathcomp' # name of the microservice
-    IMAGE_TAG: 'latest' # tag of the container image (production, development, etc)
-  stage: unit_test
-  needs:
-    - build pathcomp
-  before_script:
-    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create --driver=bridge --subnet=172.28.0.0/24 --gateway=172.28.0.254 teraflowbridge; fi
-    - if docker container ls | grep ${IMAGE_NAME}-frontend; then docker rm -f ${IMAGE_NAME}-frontend; else echo "${IMAGE_NAME}-frontend image is not in the system"; fi
-    - if docker container ls | grep ${IMAGE_NAME}-backend; then docker rm -f ${IMAGE_NAME}-backend; else echo "${IMAGE_NAME}-backend image is not in the system"; fi
-  script:
-    - docker pull "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG"
-    - docker pull "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
-    - docker run --name ${IMAGE_NAME}-backend -d -p 8081:8081 -v "$PWD/src/${IMAGE_NAME}/backend/tests:/opt/results" --network=teraflowbridge --ip 172.28.0.1 $CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG
-    - sleep 1
-    - docker run --name ${IMAGE_NAME}-frontend -d -p 10020:10020 --env "PATHCOMP_BACKEND_HOST=172.28.0.1" --env "PATHCOMP_BACKEND_PORT=8081" -v "$PWD/src/${IMAGE_NAME}/frontend/tests:/opt/results" --network=teraflowbridge --ip 172.28.0.2 $CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG
-    - docker exec -i ${IMAGE_NAME}-frontend bash -c "env"
-    - docker exec -i ${IMAGE_NAME}-backend bash -c "env"
-    - sleep 5
-    - docker ps -a
-    - docker logs ${IMAGE_NAME}-frontend
-    - docker logs ${IMAGE_NAME}-backend
-    - docker exec -i ${IMAGE_NAME}-frontend bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/frontend/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}-frontend_report.xml"
-    - docker exec -i ${IMAGE_NAME}-frontend bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
-  coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
-  after_script:
-    - docker ps -a
-    - docker logs ${IMAGE_NAME}-frontend
-    - docker logs ${IMAGE_NAME}-backend
-    - docker rm -f ${IMAGE_NAME}-frontend
-    - docker rm -f ${IMAGE_NAME}-backend
-    - docker network rm teraflowbridge
-  rules:
-    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
-    - changes:
-      - src/common/**/*.py
-      - proto/*.proto
-      - src/$IMAGE_NAME/.gitlab-ci.yml
-      - src/$IMAGE_NAME/frontend/**/*.{py,in,yml}
-      - src/$IMAGE_NAME/frontend/Dockerfile
-      - src/$IMAGE_NAME/frontend/tests/*.py
-      - src/$IMAGE_NAME/backend/**/*.{c,h,conf}
-      - src/$IMAGE_NAME/backend/Makefile
-      - src/$IMAGE_NAME/backend/Dockerfile
+      - src/$IMAGE_NAME/**/*.{py,in,yml}
+      - src/$IMAGE_NAME/Dockerfile
+      - src/$IMAGE_NAME/tests/*.py
+      - src/$IMAGE_NAME/tests/Dockerfile
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
   artifacts:
       when: always
       reports:
-        junit: src/$IMAGE_NAME/frontend/tests/${IMAGE_NAME}-frontend_report.xml
+        junit: src/$IMAGE_NAME/tests/${IMAGE_NAME}_report.xml
 
 # Deployment of the service in Kubernetes Cluster
 deploy pathcomp:
@@ -154,8 +86,7 @@ deploy pathcomp:
     IMAGE_TAG: 'latest' # tag of the container image (production, development, etc)
   stage: deploy
   needs:
-    - unit test pathcomp-backend
-    - unit test pathcomp-frontend
+    - unit test pathcomp
     # - integ_test execute
   script:
     - 'sed -i "s/$IMAGE_NAME:.*/$IMAGE_NAME:$IMAGE_TAG/" manifests/${IMAGE_NAME}service.yaml'
diff --git a/src/pathcomp/Config.py b/src/pathcomp/Config.py
new file mode 100644
index 0000000000000000000000000000000000000000..9953c820575d42fa88351cc8de022d880ba96e6a
--- /dev/null
+++ b/src/pathcomp/Config.py
@@ -0,0 +1,13 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/pathcomp/Dockerfile b/src/pathcomp/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ec1ebbf06616233fb96acb4e54d3de24b8a016a4
--- /dev/null
+++ b/src/pathcomp/Dockerfile
@@ -0,0 +1,69 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM python:3.9-slim
+
+# Install dependencies
+RUN apt-get --yes --quiet --quiet update && \
+    apt-get --yes --quiet --quiet install wget g++ && \
+    rm -rf /var/lib/apt/lists/*
+
+# Set Python to show logs as they occur
+ENV PYTHONUNBUFFERED=0
+
+# Download the gRPC health probe
+RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
+    wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \
+    chmod +x /bin/grpc_health_probe
+
+# Get generic Python packages
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
+
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
+WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
+
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
+
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/pathcomp
+WORKDIR /var/teraflow/pathcomp
+COPY src/pathcomp/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
+
+# Add component files into working directory
+WORKDIR /var/teraflow
+COPY src/context/. context/
+COPY src/pathcomp/. pathcomp/
+
+# Start the service
+ENTRYPOINT ["python", "-m", "pathcomp.service"]
diff --git a/src/pathcomp/client/PathCompClient.py b/src/pathcomp/client/PathCompClient.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5a85b533907ce7744df833aad753c8c38475d02
--- /dev/null
+++ b/src/pathcomp/client/PathCompClient.py
@@ -0,0 +1,53 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import grpc, logging
+from common.Constants import ServiceNameEnum
+from common.Settings import get_service_host, get_service_port_grpc
+from common.proto.pathcomp_pb2 import PathCompReply, PathCompRequest
+from common.proto.pathcomp_pb2_grpc import PathCompServiceStub
+from common.tools.client.RetryDecorator import retry, delay_exponential
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+LOGGER = logging.getLogger(__name__)
+MAX_RETRIES = 15
+DELAY_FUNCTION = delay_exponential(initial=0.01, increment=2.0, maximum=5.0)
+RETRY_DECORATOR = retry(max_retries=MAX_RETRIES, delay_function=DELAY_FUNCTION, prepare_method_name='connect')
+
+class PathCompClient:
+    def __init__(self, host=None, port=None):
+        if not host: host = get_service_host(ServiceNameEnum.PATHCOMP)
+        if not port: port = get_service_port_grpc(ServiceNameEnum.PATHCOMP)
+        self.endpoint = '{:s}:{:s}'.format(str(host), str(port))
+        LOGGER.debug('Creating channel to {:s}...'.format(str(self.endpoint)))
+        self.channel = None
+        self.stub = None
+        self.connect()
+        LOGGER.debug('Channel created')
+
+    def connect(self):
+        self.channel = grpc.insecure_channel(self.endpoint)
+        self.stub = PathCompServiceStub(self.channel)
+
+    def close(self):
+        if self.channel is not None: self.channel.close()
+        self.channel = None
+        self.stub = None
+
+    @RETRY_DECORATOR
+    def Compute(self, request : PathCompRequest) -> PathCompReply:
+        LOGGER.debug('Compute request: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.Compute(request)
+        LOGGER.debug('Compute result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
diff --git a/src/pathcomp/client/__init__.py b/src/pathcomp/client/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..70a33251242c51f49140e596b8208a19dd5245f7
--- /dev/null
+++ b/src/pathcomp/client/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/pathcomp/requirements.in b/src/pathcomp/requirements.in
new file mode 100644
index 0000000000000000000000000000000000000000..a743bbe341f33f5668aef1fa28c8252af2fc8c00
--- /dev/null
+++ b/src/pathcomp/requirements.in
@@ -0,0 +1 @@
+requests==2.27.1
diff --git a/src/pathcomp/service/PathCompService.py b/src/pathcomp/service/PathCompService.py
new file mode 100644
index 0000000000000000000000000000000000000000..7fd9eab3ba8de53ddc5fdee018519126c44361f0
--- /dev/null
+++ b/src/pathcomp/service/PathCompService.py
@@ -0,0 +1,28 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from common.Constants import ServiceNameEnum
+from common.Settings import get_service_port_grpc
+from common.tools.service.GenericGrpcService import GenericGrpcService
+from pathcomp.proto.pathcomp_pb2_grpc import add_PathCompServiceServicer_to_server
+from .PathCompServiceServicerImpl import PathCompServiceServicerImpl
+
+class PathCompService(GenericGrpcService):
+    def __init__(self, cls_name: str = __name__) -> None:
+        port = get_service_port_grpc(ServiceNameEnum.PATHCOMP)
+        super().__init__(port, cls_name=cls_name)
+        self.pathcomp_servicer = PathCompServiceServicerImpl()
+
+    def install_servicers(self):
+        add_PathCompServiceServicer_to_server(self.pathcomp_servicer, self.server)
diff --git a/src/pathcomp/service/PathCompServiceServicerImpl.py b/src/pathcomp/service/PathCompServiceServicerImpl.py
new file mode 100644
index 0000000000000000000000000000000000000000..239ab6ab5bbe8b6051115a8200cc1f6f304e75b5
--- /dev/null
+++ b/src/pathcomp/service/PathCompServiceServicerImpl.py
@@ -0,0 +1,85 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import List
+import grpc, logging, uuid
+from common.proto.context_pb2 import Connection, Empty, EndPointId
+from common.proto.pathcomp_pb2 import PathCompReply, PathCompRequest
+from common.proto.pathcomp_pb2_grpc import PathCompServiceServicer
+from common.rpc_method_wrapper.Decorator import create_metrics, safe_and_metered_rpc_method
+from common.tools.grpc.Tools import grpc_message_to_json, grpc_message_to_json_string
+from context.client.ContextClient import ContextClient
+
+LOGGER = logging.getLogger(__name__)
+
+SERVICE_NAME = 'PathComp'
+METHOD_NAMES = ['Compute']
+METRICS = create_metrics(SERVICE_NAME, METHOD_NAMES)
+
+class PathCompServiceServicerImpl(PathCompServiceServicer):
+    def __init__(self) -> None:
+        LOGGER.debug('Creating Servicer...')
+        LOGGER.debug('Servicer Created')
+
+    @safe_and_metered_rpc_method(METRICS, LOGGER)
+    def Compute(self, request : PathCompRequest, context : grpc.ServicerContext) -> PathCompReply:
+        LOGGER.info('[Compute] begin ; request = {:s}'.format(grpc_message_to_json_string(request)))
+
+        context_client = ContextClient()
+
+        # TODO: consider filtering resources
+
+        grpc_contexts = context_client.ListContexts(Empty())
+        grpc_devices = context_client.ListDevices(Empty())
+        grpc_links = context_client.ListLinks(Empty())
+        for grpc_context in grpc_contexts.contexts:
+            # TODO: add context to request
+            grpc_topologies = context_client.ListTopologies(grpc_context.context_id)
+            for grpc_topology in grpc_topologies.topologies:    #pylint: disable=unused-variable
+                # TODO: add topology to request
+                pass
+        for grpc_device in grpc_devices.devices:                #pylint: disable=unused-variable
+            # TODO: add device to request
+            pass
+        for grpc_link in grpc_links.links:                      #pylint: disable=unused-variable
+            # TODO: add link to request
+            pass
+
+        reply = PathCompReply()
+        # TODO: issue path computation request
+        # TODO: compose reply populating reply.services and reply.connections
+
+        for service in request.services:
+            # TODO: implement support for multi-point services
+            service_endpoint_ids = service.service_endpoint_ids
+            if len(service_endpoint_ids) != 2: raise NotImplementedError('Service must have 2 endpoints')
+            a_endpoint_id, z_endpoint_id = service_endpoint_ids[0], service_endpoint_ids[-1]
+
+            connection_uuid = str(uuid.uuid4())
+            connection_path_hops : List[EndPointId] = []
+            connection_path_hops.extend([
+                grpc_message_to_json(a_endpoint_id),
+                grpc_message_to_json(z_endpoint_id),
+            ])
+            connection = Connection(**{
+                'connection_id': {'connection_uuid': {'uuid': connection_uuid}},
+                'service_id': grpc_message_to_json(service.service_id),
+                'path_hops_endpoint_ids': connection_path_hops,
+                'sub_service_ids': [],
+            })
+            reply.connections.append(connection)    #pylint: disable=no-member
+            reply.services.append(service)          #pylint: disable=no-member
+
+        LOGGER.info('[Compute] end ; reply = {:s}'.format(grpc_message_to_json_string(reply)))
+        return reply
diff --git a/src/pathcomp/service/__init__.py b/src/pathcomp/service/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..70a33251242c51f49140e596b8208a19dd5245f7
--- /dev/null
+++ b/src/pathcomp/service/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/pathcomp/service/__main__.py b/src/pathcomp/service/__main__.py
new file mode 100644
index 0000000000000000000000000000000000000000..a41b9e994f02db725c4adf371d9638fd5135693e
--- /dev/null
+++ b/src/pathcomp/service/__main__.py
@@ -0,0 +1,65 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging, signal, sys, threading
+from prometheus_client import start_http_server
+from common.Constants import ServiceNameEnum
+from common.Settings import (
+    ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_log_level, get_metrics_port,
+    wait_for_environment_variables)
+from .PathCompService import PathCompService
+
+terminate = threading.Event()
+LOGGER : logging.Logger = None
+
+def signal_handler(signal, frame): # pylint: disable=redefined-outer-name
+    LOGGER.warning('Terminate signal received')
+    terminate.set()
+
+def main():
+    global LOGGER # pylint: disable=global-statement
+
+    log_level = get_log_level()
+    logging.basicConfig(level=log_level)
+    LOGGER = logging.getLogger(__name__)
+
+    wait_for_environment_variables([
+        get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_HOST     ),
+        get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_PORT_GRPC),
+    ])
+
+    signal.signal(signal.SIGINT,  signal_handler)
+    signal.signal(signal.SIGTERM, signal_handler)
+
+    LOGGER.info('Starting...')
+
+    # Start metrics server
+    metrics_port = get_metrics_port()
+    start_http_server(metrics_port)
+
+    # Starting service service
+    grpc_service = PathCompService()
+    grpc_service.start()
+
+    # Wait for Ctrl+C or termination signal
+    while not terminate.wait(timeout=0.1): pass
+
+    LOGGER.info('Terminating...')
+    grpc_service.stop()
+
+    LOGGER.info('Bye')
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/src/pathcomp/tests/.gitignore b/src/pathcomp/tests/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6b97d6fe3ad32f39097745229ab7f547f26ecb12
--- /dev/null
+++ b/src/pathcomp/tests/.gitignore
@@ -0,0 +1 @@
+# Add here your files containing confidential testbed details such as IP addresses, ports, usernames, passwords, etc.
diff --git a/src/pathcomp/tests/MockService_Dependencies.py b/src/pathcomp/tests/MockService_Dependencies.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5fe85aa9cec8dd3e3993493abf8a26956a1a886
--- /dev/null
+++ b/src/pathcomp/tests/MockService_Dependencies.py
@@ -0,0 +1,58 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+from typing import Union
+from common.Constants import ServiceNameEnum
+from common.Settings import ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name
+from common.proto.context_pb2_grpc import add_ContextServiceServicer_to_server
+from common.proto.device_pb2_grpc import add_DeviceServiceServicer_to_server
+from common.proto.service_pb2_grpc import add_ServiceServiceServicer_to_server
+from common.tests.MockServicerImpl_Context import MockServicerImpl_Context
+from common.tests.MockServicerImpl_Device import MockServicerImpl_Device
+from common.tests.MockServicerImpl_Service import MockServicerImpl_Service
+from common.tools.service.GenericGrpcService import GenericGrpcService
+
+LOCAL_HOST = '127.0.0.1'
+
+SERVICE_CONTEXT = ServiceNameEnum.CONTEXT
+SERVICE_DEVICE  = ServiceNameEnum.DEVICE
+SERVICE_SERVICE = ServiceNameEnum.SERVICE
+
+class MockService_Dependencies(GenericGrpcService):
+    # Mock Service implementing Context, Device, and Service to simplify unitary tests of PathComp
+
+    def __init__(self, bind_port: Union[str, int]) -> None:
+        super().__init__(bind_port, LOCAL_HOST, enable_health_servicer=False, cls_name='MockService')
+
+    # pylint: disable=attribute-defined-outside-init
+    def install_servicers(self):
+        self.context_servicer = MockServicerImpl_Context()
+        add_ContextServiceServicer_to_server(self.context_servicer, self.server)
+
+        self.device_servicer = MockServicerImpl_Device()
+        add_DeviceServiceServicer_to_server(self.device_servicer, self.server)
+
+        self.service_servicer = MockServicerImpl_Service()
+        add_ServiceServiceServicer_to_server(self.service_servicer, self.server)
+
+    def configure_env_vars(self):
+        os.environ[get_env_var_name(SERVICE_CONTEXT, ENVVAR_SUFIX_SERVICE_HOST     )] = str(self.bind_address)
+        os.environ[get_env_var_name(SERVICE_CONTEXT, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(self.bind_port)
+
+        os.environ[get_env_var_name(SERVICE_DEVICE, ENVVAR_SUFIX_SERVICE_HOST     )] = str(self.bind_address)
+        os.environ[get_env_var_name(SERVICE_DEVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(self.bind_port)
+
+        os.environ[get_env_var_name(SERVICE_SERVICE, ENVVAR_SUFIX_SERVICE_HOST     )] = str(self.bind_address)
+        os.environ[get_env_var_name(SERVICE_SERVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(self.bind_port)
diff --git a/src/pathcomp/tests/Objects.py b/src/pathcomp/tests/Objects.py
new file mode 100644
index 0000000000000000000000000000000000000000..f4785d7ae670efcc5525d6b00c4baf3acf3f22b1
--- /dev/null
+++ b/src/pathcomp/tests/Objects.py
@@ -0,0 +1,110 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from common.Constants import DEFAULT_CONTEXT_UUID, DEFAULT_TOPOLOGY_UUID
+from common.tools.object_factory.Constraint import json_constraint
+from common.tools.object_factory.Context import json_context, json_context_id
+from common.tools.object_factory.Device import json_device_emulated_packet_router_disabled, json_device_id
+from common.tools.object_factory.EndPoint import json_endpoints
+from common.tools.object_factory.Link import get_link_uuid, json_link, json_link_id
+from common.tools.object_factory.Service import get_service_uuid, json_service_l3nm_planned
+from common.tools.object_factory.Topology import json_topology, json_topology_id
+
+def compose_device(device_uuid, endpoint_uuids):
+    device_id = json_device_id(device_uuid)
+    endpoints = [(endpoint_uuid, 'copper', []) for endpoint_uuid in endpoint_uuids]
+    endpoints = json_endpoints(device_id, endpoints, topology_id=TOPOLOGY_A_ID)
+    device = json_device_emulated_packet_router_disabled(device_uuid, endpoints=endpoints)
+    return device_id, endpoints, device
+
+def compose_link(endpoint_a, endpoint_z):
+    link_uuid = get_link_uuid(endpoint_a['endpoint_id'], endpoint_z['endpoint_id'])
+    link_id   = json_link_id(link_uuid)
+    link      = json_link(link_uuid, [endpoint_a['endpoint_id'], endpoint_z['endpoint_id']])
+    return link_id, link
+
+def compose_service(endpoint_a, endpoint_z, constraints=[]):
+    service_uuid = get_service_uuid(endpoint_a['endpoint_id'], endpoint_z['endpoint_id'])
+    endpoint_ids = [endpoint_a['endpoint_id'], endpoint_z['endpoint_id']]
+    service = json_service_l3nm_planned(service_uuid, endpoint_ids=endpoint_ids, constraints=constraints)
+    return service
+
+# ----- Context --------------------------------------------------------------------------------------------------------
+CONTEXT_ID = json_context_id(DEFAULT_CONTEXT_UUID)
+CONTEXT    = json_context(DEFAULT_CONTEXT_UUID)
+
+# ----- Domains --------------------------------------------------------------------------------------------------------
+TOPOLOGY_ADMIN_ID = json_topology_id(DEFAULT_TOPOLOGY_UUID, context_id=CONTEXT_ID)
+TOPOLOGY_ADMIN    = json_topology(DEFAULT_TOPOLOGY_UUID, context_id=CONTEXT_ID)
+
+TOPOLOGY_A_ID = json_topology_id('A', context_id=CONTEXT_ID)
+TOPOLOGY_A    = json_topology('A', context_id=CONTEXT_ID)
+
+TOPOLOGY_B_ID = json_topology_id('B', context_id=CONTEXT_ID)
+TOPOLOGY_B    = json_topology('B', context_id=CONTEXT_ID)
+
+TOPOLOGY_C_ID = json_topology_id('C', context_id=CONTEXT_ID)
+TOPOLOGY_C    = json_topology('C', context_id=CONTEXT_ID)
+
+# ----- Devices Domain A -----------------------------------------------------------------------------------------------
+DEVICE_A1_ID, DEVICE_A1_ENDPOINTS, DEVICE_A1 = compose_device('A1', ['1', '2', '2000'])
+DEVICE_A2_ID, DEVICE_A2_ENDPOINTS, DEVICE_A2 = compose_device('A2', ['1', '2', '1001'])
+DEVICE_A3_ID, DEVICE_A3_ENDPOINTS, DEVICE_A3 = compose_device('A3', ['1', '2'])
+
+# ----- Devices Domain B -----------------------------------------------------------------------------------------------
+DEVICE_B1_ID, DEVICE_B1_ENDPOINTS, DEVICE_B1 = compose_device('B1', ['1', '2', '2000'])
+DEVICE_B2_ID, DEVICE_B2_ENDPOINTS, DEVICE_B2 = compose_device('B2', ['1', '2', '1002'])
+DEVICE_B3_ID, DEVICE_B3_ENDPOINTS, DEVICE_B3 = compose_device('B3', ['1', '2'])
+
+# ----- Devices Domain C -----------------------------------------------------------------------------------------------
+DEVICE_C1_ID, DEVICE_C1_ENDPOINTS, DEVICE_C1 = compose_device('C1', ['1', '2', '1001'])
+DEVICE_C2_ID, DEVICE_C2_ENDPOINTS, DEVICE_C2 = compose_device('C2', ['1', '2'])
+DEVICE_C3_ID, DEVICE_C3_ENDPOINTS, DEVICE_C3 = compose_device('C3', ['1', '2', '1002'])
+
+# ----- InterDomain Links ----------------------------------------------------------------------------------------------
+LINK_A2_C3_ID, LINK_A2_C3 = compose_link(DEVICE_A2_ENDPOINTS[2], DEVICE_C3_ENDPOINTS[2])
+LINK_C1_B2_ID, LINK_C1_B2 = compose_link(DEVICE_C1_ENDPOINTS[2], DEVICE_B2_ENDPOINTS[2])
+
+# ----- IntraDomain A Links --------------------------------------------------------------------------------------------
+LINK_A1_A2_ID, LINK_A1_A2 = compose_link(DEVICE_A1_ENDPOINTS[0], DEVICE_A2_ENDPOINTS[0])
+LINK_A1_A3_ID, LINK_A1_A3 = compose_link(DEVICE_A1_ENDPOINTS[1], DEVICE_A3_ENDPOINTS[0])
+LINK_A2_A3_ID, LINK_A2_A3 = compose_link(DEVICE_A2_ENDPOINTS[1], DEVICE_A3_ENDPOINTS[1])
+
+# ----- IntraDomain B Links --------------------------------------------------------------------------------------------
+LINK_B1_B2_ID, LINK_B1_B2 = compose_link(DEVICE_B1_ENDPOINTS[0], DEVICE_B2_ENDPOINTS[0])
+LINK_B1_B3_ID, LINK_B1_B3 = compose_link(DEVICE_B1_ENDPOINTS[1], DEVICE_B3_ENDPOINTS[0])
+LINK_B2_B3_ID, LINK_B2_B3 = compose_link(DEVICE_B2_ENDPOINTS[1], DEVICE_B3_ENDPOINTS[1])
+
+# ----- IntraDomain C Links --------------------------------------------------------------------------------------------
+LINK_C1_C2_ID, LINK_C1_C2 = compose_link(DEVICE_C1_ENDPOINTS[0], DEVICE_C2_ENDPOINTS[0])
+LINK_C1_C3_ID, LINK_C1_C3 = compose_link(DEVICE_C1_ENDPOINTS[1], DEVICE_C3_ENDPOINTS[0])
+LINK_C2_C3_ID, LINK_C2_C3 = compose_link(DEVICE_C2_ENDPOINTS[1], DEVICE_C3_ENDPOINTS[1])
+
+# ----- Service --------------------------------------------------------------------------------------------------------
+SERVICE_A1_B1 = compose_service(DEVICE_A1_ENDPOINTS[2], DEVICE_B1_ENDPOINTS[2], constraints=[
+    json_constraint('bandwidth[gbps]', 10.0),
+    json_constraint('latency[ms]',      5.0),
+])
+
+# ----- Containers -----------------------------------------------------------------------------------------------------
+CONTEXTS   = [CONTEXT]
+TOPOLOGIES = [TOPOLOGY_ADMIN, TOPOLOGY_A, TOPOLOGY_B, TOPOLOGY_C]
+DEVICES    = [  DEVICE_A1, DEVICE_A2, DEVICE_A3,
+                DEVICE_B1, DEVICE_B2, DEVICE_B3,
+                DEVICE_C1, DEVICE_C2, DEVICE_C3,    ]
+LINKS      = [  LINK_A2_C3, LINK_C1_B2,
+                LINK_A1_A2, LINK_A1_A3, LINK_A2_A3,
+                LINK_B1_B2, LINK_B1_B3, LINK_B2_B3,
+                LINK_C1_C2, LINK_C1_C3, LINK_C2_C3, ]
+SERVICES   = [SERVICE_A1_B1]
diff --git a/src/pathcomp/tests/PrepareTestScenario.py b/src/pathcomp/tests/PrepareTestScenario.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4efcbdbfc0d311dfb120ab8124a9d2268660daf
--- /dev/null
+++ b/src/pathcomp/tests/PrepareTestScenario.py
@@ -0,0 +1,65 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import pytest, os
+from common.Constants import ServiceNameEnum
+from common.Settings import (
+    ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_service_port_grpc)
+from context.client.ContextClient import ContextClient
+from device.client.DeviceClient import DeviceClient
+from pathcomp.client.PathCompClient import PathCompClient
+from pathcomp.service.PathCompService import PathCompService
+from pathcomp.tests.MockService_Dependencies import MockService_Dependencies
+
+LOCAL_HOST = '127.0.0.1'
+MOCKSERVICE_PORT = 10000
+PATHCOMP_SERVICE_PORT = MOCKSERVICE_PORT + get_service_port_grpc(ServiceNameEnum.PATHCOMP) # avoid privileged ports
+os.environ[get_env_var_name(ServiceNameEnum.PATHCOMP, ENVVAR_SUFIX_SERVICE_HOST     )] = str(LOCAL_HOST)
+os.environ[get_env_var_name(ServiceNameEnum.PATHCOMP, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(PATHCOMP_SERVICE_PORT)
+
+@pytest.fixture(scope='session')
+def mock_service():
+    _service = MockService_Dependencies(MOCKSERVICE_PORT)
+    _service.configure_env_vars()
+    _service.start()
+    yield _service
+    _service.stop()
+
+@pytest.fixture(scope='session')
+def context_client(mock_service : MockService_Dependencies): # pylint: disable=redefined-outer-name
+    _client = ContextClient()
+    yield _client
+    _client.close()
+
+@pytest.fixture(scope='session')
+def device_client(mock_service : MockService_Dependencies): # pylint: disable=redefined-outer-name
+    _client = DeviceClient()
+    yield _client
+    _client.close()
+
+@pytest.fixture(scope='session')
+def pathcomp_service(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient):  # pylint: disable=redefined-outer-name
+
+    _service = PathCompService()
+    _service.start()
+    yield _service
+    _service.stop()
+
+@pytest.fixture(scope='session')
+def pathcomp_client(pathcomp_service : PathCompService):    # pylint: disable=redefined-outer-name
+    _client = PathCompClient()
+    yield _client
+    _client.close()
diff --git a/src/pathcomp/tests/__init__.py b/src/pathcomp/tests/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..70a33251242c51f49140e596b8208a19dd5245f7
--- /dev/null
+++ b/src/pathcomp/tests/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/pathcomp/tests/test_unitary.py b/src/pathcomp/tests/test_unitary.py
new file mode 100644
index 0000000000000000000000000000000000000000..23e574e0e1b512b7a69b69847ef5ef034bd2ca41
--- /dev/null
+++ b/src/pathcomp/tests/test_unitary.py
@@ -0,0 +1,95 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from common.proto.context_pb2 import Context, ContextId, DeviceId, Link, LinkId, Topology, Device, TopologyId
+from common.proto.pathcomp_pb2 import PathCompRequest
+from common.tools.grpc.Tools import grpc_message_to_json
+from context.client.ContextClient import ContextClient
+from device.client.DeviceClient import DeviceClient
+from pathcomp.client.PathCompClient import PathCompClient
+from .Objects import CONTEXTS, DEVICES, LINKS, SERVICES, TOPOLOGIES
+from .PrepareTestScenario import ( # pylint: disable=unused-import
+    # be careful, order of symbols is important here!
+    mock_service, pathcomp_service, context_client, device_client, pathcomp_client)
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+
+def test_prepare_environment(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient):  # pylint: disable=redefined-outer-name
+
+    for context  in CONTEXTS  : context_client.SetContext (Context (**context ))
+    for topology in TOPOLOGIES: context_client.SetTopology(Topology(**topology))
+    for device   in DEVICES   : device_client .AddDevice  (Device  (**device  ))
+    for link     in LINKS     : context_client.SetLink    (Link    (**link    ))
+
+
+def test_request_service(
+    pathcomp_client : PathCompClient):  # pylint: disable=redefined-outer-name
+
+    request_services = SERVICES
+    pathcomp_request = PathCompRequest(services=request_services)
+    pathcomp_reply = pathcomp_client.Compute(pathcomp_request)
+    pathcomp_reply = grpc_message_to_json(pathcomp_reply)
+    reply_services = pathcomp_reply['services']
+    reply_connections = pathcomp_reply['connections']
+    assert len(request_services) <= len(reply_services)
+    request_service_ids = {
+        '{:s}/{:s}'.format(
+            svc['service_id']['context_id']['context_uuid']['uuid'],
+            svc['service_id']['service_uuid']['uuid']
+        )
+        for svc in request_services
+    }
+    reply_service_ids = {
+        '{:s}/{:s}'.format(
+            svc['service_id']['context_id']['context_uuid']['uuid'],
+            svc['service_id']['service_uuid']['uuid']
+        )
+        for svc in reply_services
+    }
+    # Assert all requested services have a reply
+    # It permits having other services not requested (i.e., sub-services)
+    assert len(request_service_ids.difference(reply_service_ids)) == 0
+
+    reply_connection_service_ids = {
+        '{:s}/{:s}'.format(
+            conn['service_id']['context_id']['context_uuid']['uuid'],
+            conn['service_id']['service_uuid']['uuid']
+        )
+        for conn in reply_connections
+    }
+    # Assert all requested services have a connection associated
+    # It permits having other connections not requested (i.e., connections for sub-services)
+    assert len(request_service_ids.difference(reply_connection_service_ids)) == 0
+
+    # TODO: implement other checks. examples:
+    # - request service and reply service endpoints match
+    # - request service and reply connection endpoints match
+    # - reply sub-service and reply sub-connection endpoints match
+    # - others?
+    #for json_service,json_connection in zip(json_services, json_connections):
+
+
+def test_cleanup_environment(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient):  # pylint: disable=redefined-outer-name
+
+    for link     in LINKS     : context_client.RemoveLink    (LinkId    (**link    ['link_id'    ]))
+    for device   in DEVICES   : device_client .DeleteDevice  (DeviceId  (**device  ['device_id'  ]))
+    for topology in TOPOLOGIES: context_client.RemoveTopology(TopologyId(**topology['topology_id']))
+    for context  in CONTEXTS  : context_client.RemoveContext (ContextId (**context ['context_id' ]))
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index 7cb3935005c6762ee725fd474a2b03cc373f0194..66994625ddb2eb6a52e1d0a99acd52a2cd1cc2f2 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -17,7 +17,6 @@
 package eu.teraflow.policy;
 
 import eu.teraflow.policy.context.ContextService;
-import eu.teraflow.policy.model.PolicyRuleBasic;
 import eu.teraflow.policy.model.PolicyRuleDevice;
 import eu.teraflow.policy.model.PolicyRuleService;
 import eu.teraflow.policy.model.PolicyRuleState;
@@ -25,8 +24,6 @@ import eu.teraflow.policy.model.RuleState;
 import eu.teraflow.policy.monitoring.MonitoringService;
 import eu.teraflow.policy.service.ServiceService;
 import io.smallrye.mutiny.Uni;
-import java.util.ArrayList;
-import java.util.List;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import org.jboss.logging.Logger;
@@ -35,88 +32,23 @@ import org.jboss.logging.Logger;
 public class PolicyServiceImpl implements PolicyService {
 
     private static final Logger LOGGER = Logger.getLogger(PolicyServiceImpl.class);
-    private static final String INVALID_MESSAGE = "%s is invalid.";
-    private static final String VALID_MESSAGE = "%s is valid.";
-    private static final PolicyRuleState INSERTED_POLICYRULE_STATE =
-            new PolicyRuleState(RuleState.POLICY_INSERTED);
-    private static final PolicyRuleState VALIDATED_POLICYRULE_STATE =
-            new PolicyRuleState(RuleState.POLICY_VALIDATED);
-    private static final PolicyRuleState FAILED_POLICYRULE_STATE =
-            new PolicyRuleState(RuleState.POLICY_FAILED);
 
     private final ContextService contextService;
     private final MonitoringService monitoringService;
     private final ServiceService serviceService;
-    private final PolicyRuleConditionValidator policyRuleConditionValidator;
-    private final PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter;
 
     @Inject
     public PolicyServiceImpl(
             ContextService contextService,
             MonitoringService monitoringService,
-            ServiceService serviceService,
-            PolicyRuleConditionValidator policyRuleConditionValidator,
-            PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter) {
+            ServiceService serviceService) {
         this.contextService = contextService;
         this.monitoringService = monitoringService;
         this.serviceService = serviceService;
-        this.policyRuleConditionValidator = policyRuleConditionValidator;
-        this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter;
     }
 
     @Override
     public Uni<PolicyRuleState> addPolicyService(PolicyRuleService policyRuleService) {
-        LOGGER.infof("Received %s", policyRuleService);
-
-        final var serviceId = policyRuleService.getServiceId();
-        final var deviceIds = policyRuleService.getDeviceIds();
-        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-
-        final var policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
-        final var kpiIds = policyRuleConditionFieldsGetter.getKpiIds(policyRuleConditions);
-        final var kpiValues = policyRuleConditionFieldsGetter.getKpiValues(policyRuleConditions);
-        final var numericalOperators =
-                policyRuleConditionFieldsGetter.getNumericalOperators(policyRuleConditions);
-
-        final var isServiceIdValid = policyRuleConditionValidator.validateServiceId(serviceId);
-
-        logAndSetPolicyRuleState(INSERTED_POLICYRULE_STATE, policyRuleBasic);
-        contextService.setPolicyRule(policyRuleBasic);
-
-        // VALIDATION PHASE
-        isServiceIdValid
-                .subscribe()
-                .with(
-                        serviceIdBooleanValue -> {
-                            if (Boolean.FALSE.equals(serviceIdBooleanValue)) {
-                                LOGGER.errorf(INVALID_MESSAGE, serviceId);
-                                final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-
-                                if (invalidDeviceIds.isEmpty()) {
-                                    LOGGER.info("All Device Ids are valid.");
-                                }
-
-                                logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic);
-                            } else {
-                                LOGGER.infof(VALID_MESSAGE, serviceId);
-
-                                final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-
-                                if (!invalidDeviceIds.isEmpty()) {
-                                    logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic);
-                                    contextService.setPolicyRule(policyRuleBasic);
-                                } else {
-                                    LOGGER.infof("All deviceIds are valid");
-                                }
-
-                                logAndSetPolicyRuleState(VALIDATED_POLICYRULE_STATE, policyRuleBasic);
-                            }
-
-                            contextService.setPolicyRule(policyRuleBasic);
-                        });
-
-        // PROVISION PHASE
-
         final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED);
 
         return Uni.createFrom().item(policyRuleState);
@@ -124,80 +56,8 @@ public class PolicyServiceImpl implements PolicyService {
 
     @Override
     public Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
-        LOGGER.infof("Received %s", policyRuleDevice);
-
-        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-        final var deviceIds = policyRuleDevice.getDeviceIds();
-
-        final var policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
-        final var kpiIds = policyRuleConditionFieldsGetter.getKpiIds(policyRuleConditions);
-        final var kpiValues = policyRuleConditionFieldsGetter.getKpiValues(policyRuleConditions);
-        final var numericalOperators =
-                policyRuleConditionFieldsGetter.getNumericalOperators(policyRuleConditions);
-
-        logAndSetPolicyRuleState(INSERTED_POLICYRULE_STATE, policyRuleBasic);
-        contextService.setPolicyRule(policyRuleBasic);
-
-        // VALIDATION PHASE
-        final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-
-        if (!invalidDeviceIds.isEmpty()) {
-            logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic);
-        } else {
-            LOGGER.infof("All deviceIds are valid");
-            logAndSetPolicyRuleState(VALIDATED_POLICYRULE_STATE, policyRuleBasic);
-        }
-        contextService.setPolicyRule(policyRuleBasic);
-
-        // PROVISION PHASE
-
         final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED);
 
         return Uni.createFrom().item(policyRuleState);
     }
-
-    private List<String> returnInvalidDeviceIds(List<String> deviceIds) {
-        var invalidDeviceIds = new ArrayList<String>();
-
-        if (!deviceIds.isEmpty()) {
-
-            for (String deviceId : deviceIds) {
-                final var validatedDeviceId = policyRuleConditionValidator.validateDeviceId(deviceId);
-
-                validatedDeviceId
-                        .subscribe()
-                        .with(
-                                deviceIdBoolean -> {
-                                    if (Boolean.FALSE.equals(deviceIdBoolean)) {
-                                        invalidDeviceIds.add(deviceId);
-                                    }
-                                });
-            }
-
-        } else {
-            LOGGER.warnf("No deviceIds found");
-        }
-
-        return invalidDeviceIds;
-    }
-
-    private void logAndSetPolicyRuleState(
-            PolicyRuleState policyRuleState, PolicyRuleBasic policyRuleBasic) {
-        final var POLICY_RULE_STATE_MESSAGE = "Setting Policy Rule state to [%s]";
-
-        if (policyRuleState.getRuleState() == RuleState.POLICY_INSERTED) {
-            LOGGER.infof(POLICY_RULE_STATE_MESSAGE, RuleState.POLICY_INSERTED.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-        }
-
-        if (policyRuleState.getRuleState() == RuleState.POLICY_VALIDATED) {
-            LOGGER.infof(POLICY_RULE_STATE_MESSAGE, RuleState.POLICY_VALIDATED.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-        }
-
-        if (policyRuleState.getRuleState() == RuleState.POLICY_FAILED) {
-            LOGGER.errorf(POLICY_RULE_STATE_MESSAGE, RuleState.POLICY_FAILED.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-        }
-    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
index 49882be71c471851460257d5d56db7fcaf193444..35b6e2fd8cebf544d3f4b0f56fffbf4572f1de2b 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -88,7 +88,6 @@ import eu.teraflow.policy.model.PolicyRuleState;
 import eu.teraflow.policy.model.RuleState;
 import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
-import eu.teraflow.policy.monitoring.model.AlarmSubscription;
 import eu.teraflow.policy.monitoring.model.BooleanKpiValue;
 import eu.teraflow.policy.monitoring.model.FloatKpiValue;
 import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
@@ -1473,12 +1472,12 @@ public class Serializer {
     public Monitoring.KpiValue serializeIntegerKpiValue(KpiValue<Integer> kpiValue) {
         final var builder = Monitoring.KpiValue.newBuilder();
 
-        return builder.setInt32Val(kpiValue.getValue()).build();
+        return builder.setIntVal(kpiValue.getValue()).build();
     }
 
     public int deserializeIntegerKpiValue(Monitoring.KpiValue serializedKpiValue) {
 
-        return serializedKpiValue.getInt32Val();
+        return serializedKpiValue.getIntVal();
     }
 
     public Monitoring.KpiValue serialize(KpiValue<?> kpiValue) {
@@ -1486,7 +1485,7 @@ public class Serializer {
 
         if (kpiValue.getValue() instanceof Integer) {
             final var serializedIntegerKpiValue = serializeIntegerKpiValue((KpiValue<Integer>) kpiValue);
-            builder.setInt32Val(serializedIntegerKpiValue.getInt32Val());
+            builder.setIntVal(serializedIntegerKpiValue.getIntVal());
         }
         if (kpiValue.getValue() instanceof Float) {
             final var serializedFloatKpiValue = serializeFloatKpiValue((KpiValue<Float>) kpiValue);
@@ -1509,7 +1508,7 @@ public class Serializer {
         final var typeOfKpiValue = serializedKpiValue.getValueCase();
 
         switch (typeOfKpiValue) {
-            case INT32VAL:
+            case INTVAL:
                 final var intValue = deserializeIntegerKpiValue(serializedKpiValue);
                 return new IntegerKpiValue(intValue);
             case BOOLVAL:
@@ -1570,47 +1569,37 @@ public class Serializer {
     public Monitoring.AlarmDescriptor serialize(AlarmDescriptor alarmDescriptor) {
         final var builder = Monitoring.AlarmDescriptor.newBuilder();
 
-        final var alarmId = alarmDescriptor.getAlarmId();
         final var alarmDescription = alarmDescriptor.getAlarmDescription();
         final var name = alarmDescriptor.getName();
-        final var kpiIds = alarmDescriptor.getKpiIds();
-        final var kpiValueRanges = alarmDescriptor.getKpiValueRanges();
+        final var kpiId = alarmDescriptor.getKpiId();
+        final var kpiValueRange = alarmDescriptor.getKpiValueRange();
         final var timestamp = alarmDescriptor.getTimestamp();
 
-        final var serializedAlarmId = serializeAlarmId(alarmId);
-        final var serializedKpiIds =
-                kpiIds.stream().map(this::serializeKpiId).collect(Collectors.toList());
-        final var serializedKpiValueRanges =
-                kpiValueRanges.stream().map(this::serialize).collect(Collectors.toList());
-        final var serializedTimestamp = serialize(timestamp);
+        final var serializedKpiIdUuid = serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedKpiValueRange = serialize(kpiValueRange);
 
-        builder.setAlarmId(serializedAlarmId);
         builder.setAlarmDescription(alarmDescription);
         builder.setName(name);
-        builder.addAllKpiId(serializedKpiIds);
-        builder.addAllKpiValueRange(serializedKpiValueRanges);
-        builder.setTimestamp(serializedTimestamp);
+        builder.setKpiId(serializedKpiId);
+        builder.setKpiValueRange(serializedKpiValueRange);
+        builder.setTimestamp(timestamp);
 
         return builder.build();
     }
 
     public AlarmDescriptor deserialize(Monitoring.AlarmDescriptor serializedAlarmDescriptor) {
 
-        final var serializedAlarmId = serializedAlarmDescriptor.getAlarmId();
         final var alarmDescription = serializedAlarmDescriptor.getAlarmDescription();
         final var name = serializedAlarmDescriptor.getName();
-        final var serializedKpiIds = serializedAlarmDescriptor.getKpiIdList();
-        final var serializedKpiValueRanges = serializedAlarmDescriptor.getKpiValueRangeList();
-        final var serializeTimestamp = serializedAlarmDescriptor.getTimestamp();
+        final var serializedKpiId = serializedAlarmDescriptor.getKpiId();
+        final var serializedKpiValueRange = serializedAlarmDescriptor.getKpiValueRange();
+        final var timestamp = serializedAlarmDescriptor.getTimestamp();
 
-        final var alarmId = deserialize(serializedAlarmId);
-        final var kpiIds =
-                serializedKpiIds.stream().map(this::deserialize).collect(Collectors.toList());
-        final var kpiValueRanges =
-                serializedKpiValueRanges.stream().map(this::deserialize).collect(Collectors.toList());
-        final var timestamp = deserialize(serializeTimestamp);
+        final var kpiId = deserialize(serializedKpiId);
+        final var kpiValueRange = deserialize(serializedKpiValueRange);
 
-        return new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp);
+        return new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
     }
 
     public Monitoring.AlarmResponse serialize(AlarmResponse alarmResponse) {
@@ -1646,44 +1635,34 @@ public class Serializer {
     public Monitoring.SubsDescriptor serialize(SubsDescriptor subDescriptor) {
         final var builder = Monitoring.SubsDescriptor.newBuilder();
 
-        final var subscriptionId = subDescriptor.getSubscriptionId();
         final var kpiId = subDescriptor.getKpiId();
         final var samplingDurationS = subDescriptor.getSamplingDurationS();
         final var samplingIntervalS = subDescriptor.getSamplingIntervalS();
-        final var startTimestamp = subDescriptor.getStartTimestamp();
-        final var endTimestamp = subDescriptor.getEndTimestamp();
+        final var startDate = subDescriptor.getStartDate();
+        final var endDate = subDescriptor.getEndDate();
 
-        final var serializedSubscriptionIdUuid = serializeSubscriptionIdId(subscriptionId);
         final var serializedKpiIdUuid = serializeUuid(kpiId);
         final var serializedKpiId = Monitoring.KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
-        final var serializedStartTimestamp = serialize(startTimestamp);
-        final var serializedEndTimestamp = serialize(endTimestamp);
 
-        builder.setSubsId(serializedSubscriptionIdUuid);
         builder.setKpiId(serializedKpiId);
         builder.setSamplingDurationS(samplingDurationS);
         builder.setSamplingIntervalS(samplingIntervalS);
-        builder.setStartTimestamp(serializedStartTimestamp);
-        builder.setEndTimestamp(serializedEndTimestamp);
+        builder.setStartDate(startDate);
+        builder.setEndDate(endDate);
 
         return builder.build();
     }
 
     public SubsDescriptor deserialize(Monitoring.SubsDescriptor serializedSubDescriptor) {
-        final var serializedSubscriptionId = serializedSubDescriptor.getSubsId();
         final var serializedKpiId = serializedSubDescriptor.getKpiId();
         final var samplingDurationS = serializedSubDescriptor.getSamplingDurationS();
         final var samplingIntervalS = serializedSubDescriptor.getSamplingIntervalS();
-        final var serializedStartTimestamp = serializedSubDescriptor.getStartTimestamp();
-        final var serializedEndTimestamp = serializedSubDescriptor.getEndTimestamp();
+        final var startDate = serializedSubDescriptor.getStartDate();
+        final var endDate = serializedSubDescriptor.getEndDate();
 
-        final var subscriptionId = deserialize(serializedSubscriptionId);
         final var kpiId = deserialize(serializedKpiId);
-        final var startTimestamp = deserialize(serializedStartTimestamp);
-        final var endTimestamp = deserialize(serializedEndTimestamp);
 
-        return new SubsDescriptor(
-                subscriptionId, kpiId, samplingDurationS, samplingIntervalS, startTimestamp, endTimestamp);
+        return new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
     }
 
     public SubscriptionID serializeSubscriptionIdId(String subscriptionId) {
@@ -1951,11 +1930,10 @@ public class Serializer {
         final var kpiValue = kpi.getKpiValue();
 
         final var serializedKpiId = serializeKpiId(kpiId);
-        final var serializedTimestamp = serialize(timestamp);
         final var serializedKpiValue = serialize(kpiValue);
 
         builder.setKpiId(serializedKpiId);
-        builder.setTimestamp(serializedTimestamp);
+        builder.setTimestamp(timestamp);
         builder.setKpiValue(serializedKpiValue);
 
         return builder.build();
@@ -1964,11 +1942,10 @@ public class Serializer {
     public Kpi deserialize(Monitoring.Kpi serializedKpi) {
 
         final var serializedKpiId = serializedKpi.getKpiId();
-        final var serializedTimestamp = serializedKpi.getTimestamp();
+        final var timestamp = serializedKpi.getTimestamp();
         final var serializedKpiValue = serializedKpi.getKpiValue();
 
         final var kpiId = deserialize(serializedKpiId);
-        final var timestamp = deserialize(serializedTimestamp);
         final var kpiValue = deserialize(serializedKpiValue);
 
         return new Kpi(kpiId, timestamp, kpiValue);
@@ -2172,33 +2149,6 @@ public class Serializer {
         return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
     }
 
-    public Monitoring.AlarmSubscription serialize(AlarmSubscription alarmSubscription) {
-        final var builder = Monitoring.AlarmSubscription.newBuilder();
-
-        final var alarmId = alarmSubscription.getAlarmId();
-        final var subscriptionTimeoutS = alarmSubscription.getSubscriptionTimeoutS();
-        final var subscriptionFrequencyMs = alarmSubscription.getSubscriptionFrequencyMs();
-
-        final var serializedAlarmId = serializeAlarmId(alarmId);
-
-        builder.setAlarmID(serializedAlarmId);
-        builder.setSubscriptionTimeoutS(subscriptionTimeoutS);
-        builder.setSubscriptionFrequencyMs(subscriptionFrequencyMs);
-
-        return builder.build();
-    }
-
-    public AlarmSubscription deserialize(Monitoring.AlarmSubscription serializedAlarmSubscription) {
-
-        final var serializedAlarmId = serializedAlarmSubscription.getAlarmID();
-        final var subscriptionTimeoutS = serializedAlarmSubscription.getSubscriptionTimeoutS();
-        final var subscriptionFrequencyMs = serializedAlarmSubscription.getSubscriptionFrequencyMs();
-
-        final var alarmId = deserialize(serializedAlarmId);
-
-        return new AlarmSubscription(alarmId, subscriptionTimeoutS, subscriptionFrequencyMs);
-    }
-
     public ContextOuterClass.Device serialize(Device device) {
         final var builder = ContextOuterClass.Device.newBuilder();
 
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
index 6f50dfca8cb43a3d825137e31a83c63855b5aebd..b32d3cf3008611ea67aee53f5234f1e45b98be8c 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
@@ -25,7 +25,7 @@ import java.util.List;
 public class PolicyRuleBasic {
 
     private final String policyRuleId;
-    private PolicyRuleState policyRuleState;
+    private final PolicyRuleState policyRuleState;
     private final int priority;
     private final List<PolicyRuleCondition> policyRuleConditions;
     private final BooleanOperator booleanOperator;
@@ -64,10 +64,6 @@ public class PolicyRuleBasic {
         return policyRuleState;
     }
 
-    public void setPolicyRuleState(PolicyRuleState state) {
-        this.policyRuleState = state;
-    }
-
     public int getPriority() {
         return priority;
     }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
index 925c22aa62588de6d9a364a647f65e74f6b01740..4b9849a7649894cb4109fb458dac611e834bd916 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
@@ -16,9 +16,9 @@
 
 package eu.teraflow.policy.monitoring;
 
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
-import eu.teraflow.policy.monitoring.model.AlarmSubscription;
 import eu.teraflow.policy.monitoring.model.Kpi;
 import eu.teraflow.policy.monitoring.model.KpiDescriptor;
 import eu.teraflow.policy.monitoring.model.SubsDescriptor;
@@ -28,17 +28,21 @@ import java.util.List;
 
 public interface MonitoringGateway {
 
-    Uni<String> setKpi(KpiDescriptor kpiDescriptor);
+    Uni<String> createKpi(KpiDescriptor kpiDescriptor);
 
     Uni<KpiDescriptor> getKpiDescriptor(String kpiId);
 
-    Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor);
+    Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor);
 
     Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId);
 
-    Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor);
+    Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor);
+
+    Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor);
+
+    Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor);
 
     Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId);
 
-    Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription);
+    Multi<AlarmResponse> getAlarmResponseStream(String alarmId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
index e500b78c508f8e5b22d78c98f7960ff8ca9e7c13..e0b4e088a9e23387f56d956bed5f6e104a68ea56 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
@@ -17,9 +17,9 @@
 package eu.teraflow.policy.monitoring;
 
 import eu.teraflow.policy.Serializer;
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
-import eu.teraflow.policy.monitoring.model.AlarmSubscription;
 import eu.teraflow.policy.monitoring.model.Kpi;
 import eu.teraflow.policy.monitoring.model.KpiDescriptor;
 import eu.teraflow.policy.monitoring.model.SubsDescriptor;
@@ -45,11 +45,11 @@ public class MonitoringGatewayImpl implements MonitoringGateway {
     }
 
     @Override
-    public Uni<String> setKpi(KpiDescriptor kpiDescriptor) {
+    public Uni<String> createKpi(KpiDescriptor kpiDescriptor) {
         final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor);
 
         return streamingDelegateMonitoring
-                .setKpi(serializedKpiDescriptor)
+                .createKpi(serializedKpiDescriptor)
                 .onItem()
                 .transform(serializer::deserialize);
     }
@@ -65,11 +65,11 @@ public class MonitoringGatewayImpl implements MonitoringGateway {
     }
 
     @Override
-    public Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor) {
+    public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) {
         final var serializedSubsDescriptor = serializer.serialize(subsDescriptor);
 
         return streamingDelegateMonitoring
-                .setKpiSubscription(serializedSubsDescriptor)
+                .subscribeKpi(serializedSubsDescriptor)
                 .onItem()
                 .transform(kpiList -> serializer.deserialize(kpiList.getKpiListList()));
     }
@@ -85,15 +85,35 @@ public class MonitoringGatewayImpl implements MonitoringGateway {
     }
 
     @Override
-    public Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor) {
+    public Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor) {
+        final var serializedSubsDescriptor = serializer.serialize(subsDescriptor);
+
+        return streamingDelegateMonitoring
+                .editKpiSubscription(serializedSubsDescriptor)
+                .onItem()
+                .transform(serializer::deserializeEmpty);
+    }
+
+    @Override
+    public Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor) {
         final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor);
 
         return streamingDelegateMonitoring
-                .setKpiAlarm(serializedAlarmDescriptor)
+                .createKpiAlarm(serializedAlarmDescriptor)
                 .onItem()
                 .transform(serializer::deserialize);
     }
 
+    @Override
+    public Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor) {
+        final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor);
+
+        return streamingDelegateMonitoring
+                .editKpiAlarm(serializedAlarmDescriptor)
+                .onItem()
+                .transform(serializer::deserializeEmpty);
+    }
+
     @Override
     public Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId) {
         final var serializedAlarmId = serializer.serializeAlarmId(alarmId);
@@ -105,11 +125,11 @@ public class MonitoringGatewayImpl implements MonitoringGateway {
     }
 
     @Override
-    public Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription) {
-        final var serializedAlarmSubscription = serializer.serialize(alarmSubscription);
+    public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) {
+        final var serializedAlarmId = serializer.serializeAlarmId(alarmId);
 
         return streamingDelegateMonitoring
-                .getAlarmResponseStream(serializedAlarmSubscription)
+                .getAlarmResponseStream(serializedAlarmId)
                 .onItem()
                 .transform(serializer::deserialize);
     }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
index 5022833ceed4896b1458a077125b4f822127cb6c..276a9d3632655cf684ae4dff0469d477ff15a88e 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
@@ -16,9 +16,9 @@
 
 package eu.teraflow.policy.monitoring;
 
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
-import eu.teraflow.policy.monitoring.model.AlarmSubscription;
 import eu.teraflow.policy.monitoring.model.Kpi;
 import eu.teraflow.policy.monitoring.model.KpiDescriptor;
 import eu.teraflow.policy.monitoring.model.SubsDescriptor;
@@ -28,17 +28,21 @@ import java.util.List;
 
 public interface MonitoringService {
 
-    Uni<String> setKpi(KpiDescriptor kpiDescriptor);
+    Uni<String> createKpi(KpiDescriptor kpiDescriptor);
 
     Uni<KpiDescriptor> getKpiDescriptor(String kpiId);
 
-    Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor);
+    Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor);
 
     Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId);
 
-    Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor);
+    Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor);
+
+    Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor);
+
+    Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor);
 
     Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId);
 
-    Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription);
+    Multi<AlarmResponse> getAlarmResponseStream(String alarmId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
index 5cec6e989749ade8083f01be341d0a0fd0982c98..e1e79af757b9866360040b785fd41dd1f0c70cd4 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
@@ -16,9 +16,9 @@
 
 package eu.teraflow.policy.monitoring;
 
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
-import eu.teraflow.policy.monitoring.model.AlarmSubscription;
 import eu.teraflow.policy.monitoring.model.Kpi;
 import eu.teraflow.policy.monitoring.model.KpiDescriptor;
 import eu.teraflow.policy.monitoring.model.SubsDescriptor;
@@ -39,8 +39,8 @@ public class MonitoringServiceImpl implements MonitoringService {
     }
 
     @Override
-    public Uni<String> setKpi(KpiDescriptor kpiDescriptor) {
-        return monitoringGateway.setKpi(kpiDescriptor);
+    public Uni<String> createKpi(KpiDescriptor kpiDescriptor) {
+        return monitoringGateway.createKpi(kpiDescriptor);
     }
 
     @Override
@@ -49,8 +49,8 @@ public class MonitoringServiceImpl implements MonitoringService {
     }
 
     @Override
-    public Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor) {
-        return monitoringGateway.setKpiSubscription(subsDescriptor);
+    public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) {
+        return monitoringGateway.subscribeKpi(subsDescriptor);
     }
 
     @Override
@@ -59,8 +59,18 @@ public class MonitoringServiceImpl implements MonitoringService {
     }
 
     @Override
-    public Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor) {
-        return monitoringGateway.setKpiAlarm(alarmDescriptor);
+    public Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor) {
+        return monitoringGateway.editKpiSubscription(subsDescriptor);
+    }
+
+    @Override
+    public Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor) {
+        return monitoringGateway.createKpiAlarm(alarmDescriptor);
+    }
+
+    @Override
+    public Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor) {
+        return monitoringGateway.editKpiAlarm(alarmDescriptor);
     }
 
     @Override
@@ -69,7 +79,7 @@ public class MonitoringServiceImpl implements MonitoringService {
     }
 
     @Override
-    public Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription) {
-        return monitoringGateway.getAlarmResponseStream(alarmSubscription);
+    public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) {
+        return monitoringGateway.getAlarmResponseStream(alarmId);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
index 85f0ce9e725845c86edf5bf265524db456076505..ac216ee7cec55efbd7f169679b4e0eebad0f3950 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
@@ -16,36 +16,26 @@
 
 package eu.teraflow.policy.monitoring.model;
 
-import eu.teraflow.policy.common.Util;
-import java.util.List;
-
 public class AlarmDescriptor {
-    private final String alarmId;
     private final String alarmDescription;
     private final String name;
-    private final List<String> kpiIds;
-    private final List<KpiValueRange> kpiValueRanges;
-    private final double timestamp;
+    private final String kpiId;
+    private final KpiValueRange kpiValueRange;
+    private final String timestamp;
 
     public AlarmDescriptor(
-            String alarmId,
             String alarmDescription,
             String name,
-            List<String> kpiIds,
-            List<KpiValueRange> kpiValueRanges,
-            double timestamp) {
-        this.alarmId = alarmId;
+            String kpiId,
+            KpiValueRange kpiValueRange,
+            String timestamp) {
         this.alarmDescription = alarmDescription;
         this.name = name;
-        this.kpiIds = kpiIds;
-        this.kpiValueRanges = kpiValueRanges;
+        this.kpiId = kpiId;
+        this.kpiValueRange = kpiValueRange;
         this.timestamp = timestamp;
     }
 
-    public String getAlarmId() {
-        return alarmId;
-    }
-
     public String getAlarmDescription() {
         return alarmDescription;
     }
@@ -54,28 +44,22 @@ public class AlarmDescriptor {
         return name;
     }
 
-    public List<String> getKpiIds() {
-        return kpiIds;
+    public String getKpiId() {
+        return kpiId;
     }
 
-    public List<KpiValueRange> getKpiValueRanges() {
-        return kpiValueRanges;
+    public KpiValueRange getKpiValueRange() {
+        return kpiValueRange;
     }
 
-    public double getTimestamp() {
+    public String getTimestamp() {
         return timestamp;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{alarmId:\"%s\", alarmDescription:\"%s\", name:\"%s\", [%s], [%s], timestamp:\"%f\"}",
-                getClass().getSimpleName(),
-                alarmId,
-                alarmDescription,
-                name,
-                Util.toString(kpiIds),
-                Util.toString(kpiValueRanges),
-                timestamp);
+                "%s:{alarmDescription:\"%s\", name:\"%s\", kpiId:\"%s\", %s, timestamp:\"%s\"}",
+                getClass().getSimpleName(), alarmDescription, name, kpiId, kpiValueRange, timestamp);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
index 98b8c510d487ee2f873d84facac390cdcab4391f..c042240298fdea49ca1509ac2563e849b16575c5 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
@@ -19,10 +19,10 @@ package eu.teraflow.policy.monitoring.model;
 public class Kpi {
 
     private final String kpiId;
-    private final double timestamp;
+    private final String timestamp;
     private final KpiValue<?> kpiValue;
 
-    public Kpi(String kpiId, double timestamp, KpiValue<?> kpiValue) {
+    public Kpi(String kpiId, String timestamp, KpiValue<?> kpiValue) {
         this.kpiId = kpiId;
         this.timestamp = timestamp;
         this.kpiValue = kpiValue;
@@ -32,7 +32,7 @@ public class Kpi {
         return kpiId;
     }
 
-    public double getTimestamp() {
+    public String getTimestamp() {
         return timestamp;
     }
 
@@ -43,7 +43,7 @@ public class Kpi {
     @Override
     public String toString() {
         return String.format(
-                "%s:{kpiId:\"%s\", timeStamp:\"%f\", %s}",
+                "%s:{kpiId:\"%s\", timeStamp:\"%s\", %s}",
                 getClass().getSimpleName(), kpiId, timestamp, kpiValue);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
index 101d784c3ba796bbaf2be9820263e595630f2578..ced38b3f9f76239ee83687f14587da168dc7c320 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
@@ -17,30 +17,23 @@
 package eu.teraflow.policy.monitoring.model;
 
 public class SubsDescriptor {
-    private final String subscriptionId;
     private final String kpiId;
     private final float samplingDurationS;
     private final float samplingIntervalS;
-    private final double startTimestamp;
-    private final double endTimestamp;
+    private final String startDate;
+    private final String endDate;
 
     public SubsDescriptor(
-            String subscriptionId,
             String kpiId,
             float samplingDurationS,
             float samplingIntervalS,
-            double startTimestamp,
-            double endTimestamp) {
-        this.subscriptionId = subscriptionId;
+            String startDate,
+            String endDate) {
         this.kpiId = kpiId;
         this.samplingDurationS = samplingDurationS;
         this.samplingIntervalS = samplingIntervalS;
-        this.startTimestamp = startTimestamp;
-        this.endTimestamp = endTimestamp;
-    }
-
-    public String getSubscriptionId() {
-        return subscriptionId;
+        this.startDate = startDate;
+        this.endDate = endDate;
     }
 
     public String getKpiId() {
@@ -55,24 +48,23 @@ public class SubsDescriptor {
         return samplingIntervalS;
     }
 
-    public double getStartTimestamp() {
-        return startTimestamp;
+    public String getStartDate() {
+        return startDate;
     }
 
-    public double getEndTimestamp() {
-        return endTimestamp;
+    public String getEndDate() {
+        return endDate;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{subscriptionId:\"%s\", kpiId:\"%s\", samplingDurationS:\"%f\", samplingIntervalS:\"%f\", startTimestamp:\"%f\", endTimestamp:\"%f\"}",
+                "%s:{kpiId:\"%s\", samplingDurationS:\"%f\", samplingIntervalS:\"%f\", startDate:\"%s\", endDate:\"%s\"}",
                 getClass().getSimpleName(),
-                subscriptionId,
                 kpiId,
                 samplingDurationS,
                 samplingIntervalS,
-                startTimestamp,
-                endTimestamp);
+                startDate,
+                endDate);
     }
 }
diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
index fa04952179478587dae40b4a4a39a67fdb2a29e1..05f835d58f6552f3bd21f467b02026c9c509a67c 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -2432,7 +2432,7 @@ class SerializerTest {
                 Arguments.of(
                         new BooleanKpiValue(true), Monitoring.KpiValue.newBuilder().setBoolVal(true).build()),
                 Arguments.of(
-                        new IntegerKpiValue(44), Monitoring.KpiValue.newBuilder().setInt32Val(44).build()),
+                        new IntegerKpiValue(44), Monitoring.KpiValue.newBuilder().setIntVal(44).build()),
                 Arguments.of(
                         new FloatKpiValue(12.3f), Monitoring.KpiValue.newBuilder().setFloatVal(12.3f).build()));
     }
@@ -2507,32 +2507,32 @@ class SerializerTest {
                 Arguments.of(
                         new KpiValueRange(new IntegerKpiValue(32), new IntegerKpiValue(42)),
                         Monitoring.KpiValueRange.newBuilder()
-                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build())
-                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build())
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
                                 .build()),
                 Arguments.of(
                         new KpiValueRange(new IntegerKpiValue(32), new FloatKpiValue(42.2f)),
                         Monitoring.KpiValueRange.newBuilder()
-                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build())
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
                                 .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
                                 .build()),
                 Arguments.of(
                         new KpiValueRange(new IntegerKpiValue(32), new BooleanKpiValue(true)),
                         Monitoring.KpiValueRange.newBuilder()
-                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build())
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
                                 .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
                                 .build()),
                 Arguments.of(
                         new KpiValueRange(new IntegerKpiValue(32), new StringKpiValue("string")),
                         Monitoring.KpiValueRange.newBuilder()
-                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build())
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
                                 .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
                                 .build()),
                 Arguments.of(
                         new KpiValueRange(new FloatKpiValue(56.2f), new IntegerKpiValue(42)),
                         Monitoring.KpiValueRange.newBuilder()
                                 .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
-                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
                                 .build()),
                 Arguments.of(
                         new KpiValueRange(new FloatKpiValue(56.2f), new FloatKpiValue(42.2f)),
@@ -2556,7 +2556,7 @@ class SerializerTest {
                         new KpiValueRange(new BooleanKpiValue(true), new IntegerKpiValue(42)),
                         Monitoring.KpiValueRange.newBuilder()
                                 .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
-                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
                                 .build()),
                 Arguments.of(
                         new KpiValueRange(new BooleanKpiValue(false), new FloatKpiValue(42.2f)),
@@ -2580,7 +2580,7 @@ class SerializerTest {
                         new KpiValueRange(new StringKpiValue("string"), new IntegerKpiValue(42)),
                         Monitoring.KpiValueRange.newBuilder()
                                 .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
-                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
                                 .build()),
                 Arguments.of(
                         new KpiValueRange(new StringKpiValue("string"), new FloatKpiValue(42.2f)),
@@ -2656,38 +2656,26 @@ class SerializerTest {
 
     @Test
     void shouldSerializeAlarmDescriptor() {
-        final var alarmId = "alarmId";
         final var alarmDescription = "alarmDescription";
         final var name = "name";
         final var kpiId = "kpiId";
-        final double timestamp = 100.0;
-        final var kpiIds = List.of("kpiId1", "kpiId2");
+        final var timestamp = "timestamp";
 
         final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800));
-        final var kpiValueRanges = List.of(kpiValueRange);
-
         final var alarmDescriptor =
-                new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp);
-
-        final var serializedalarmIdUuid = serializer.serializeUuid(alarmId);
-        final var serializedalarmId = AlarmID.newBuilder().setAlarmId(serializedalarmIdUuid).build();
+                new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
 
-        final var serializedKpiIdUuid = serializer.serializeUuid("kpiId1");
-        final var serializedKpiId1 = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
-        final var serializedKpiId2 = KpiId.newBuilder().setKpiId(serializer.serializeUuid("kpiId2"));
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
         final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
-        final var serializedTimeStamp =
-                context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(timestamp);
 
         final var expectedAlarmDescriptor =
                 Monitoring.AlarmDescriptor.newBuilder()
-                        .setAlarmId(serializedalarmId)
                         .setAlarmDescription(alarmDescription)
                         .setName(name)
-                        .addKpiId(serializedKpiId1)
-                        .addKpiId(serializedKpiId2)
-                        .addKpiValueRange(serializedKpiValueRange)
-                        .setTimestamp(serializedTimeStamp)
+                        .setKpiId(serializedKpiId)
+                        .setKpiValueRange(serializedKpiValueRange)
+                        .setTimestamp(timestamp)
                         .build();
 
         final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor);
@@ -2697,39 +2685,26 @@ class SerializerTest {
 
     @Test
     void shouldDeserializeAlarmDescriptor() {
-        final var alarmId = "alarmId";
         final var alarmDescription = "alarmDescription";
         final var name = "name";
         final var kpiId = "kpiId";
-        final double timestamp = 100.0;
-        final var kpiIds = List.of("kpiId1", "kpiId2");
+        final var timestamp = "timestamp";
 
         final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800));
-        final var kpiValueRanges = List.of(kpiValueRange);
-
         final var expectedAlarmDescriptor =
-                new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp);
-
-        final var serializedalarmIdUuid = serializer.serializeUuid(alarmId);
-        final var serializedalarmId = AlarmID.newBuilder().setAlarmId(serializedalarmIdUuid).build();
-
-        final var serializedKpiIdUuid = serializer.serializeUuid("kpiId1");
-        final var serializedKpiId1 = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
-        final var serializedKpiId2 = KpiId.newBuilder().setKpiId(serializer.serializeUuid("kpiId2"));
+                new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
 
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
         final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
-        final var serializedTimeStamp =
-                context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(timestamp);
 
         final var serializedAlarmDescriptor =
                 Monitoring.AlarmDescriptor.newBuilder()
-                        .setAlarmId(serializedalarmId)
                         .setAlarmDescription(alarmDescription)
                         .setName(name)
-                        .addKpiId(serializedKpiId1)
-                        .addKpiId(serializedKpiId2)
-                        .addKpiValueRange(serializedKpiValueRange)
-                        .setTimestamp(serializedTimeStamp)
+                        .setKpiId(serializedKpiId)
+                        .setKpiValueRange(serializedKpiValueRange)
+                        .setTimestamp(timestamp)
                         .build();
 
         final var alarmDescriptor = serializer.deserialize(serializedAlarmDescriptor);
@@ -2787,42 +2762,25 @@ class SerializerTest {
 
     @Test
     void shouldSerializeSubDescriptor() {
-        final var subscriptionId = "subscriptionId";
         final var kpiId = "kpiId";
         final var samplingDurationS = 10f;
         final var samplingIntervalS = 45f;
-        final var startTimestamp = 1.0;
-        final var endTimestamp = 100.0;
+        final var startDate = "01/07/2022";
+        final var endDate = "02/07/2022";
 
         final var subDescriptor =
-                new SubsDescriptor(
-                        subscriptionId,
-                        kpiId,
-                        samplingDurationS,
-                        samplingIntervalS,
-                        startTimestamp,
-                        endTimestamp);
-
-        final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId);
-        final var serializedSubscriptionId =
-                monitoring.Monitoring.SubscriptionID.newBuilder()
-                        .setSubsId(serializedSubscriptionIdUuid)
-                        .build();
+                new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+
         final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
         final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
-        final var serializedStartTimestamp =
-                ContextOuterClass.Timestamp.newBuilder().setTimestamp(startTimestamp);
-        final var serializedEndTimestamp =
-                ContextOuterClass.Timestamp.newBuilder().setTimestamp(endTimestamp);
 
         final var expectedSubDescriptor =
                 Monitoring.SubsDescriptor.newBuilder()
-                        .setSubsId(serializedSubscriptionId)
                         .setKpiId(serializedKpiId)
                         .setSamplingDurationS(samplingDurationS)
                         .setSamplingIntervalS(samplingIntervalS)
-                        .setStartTimestamp(serializedStartTimestamp)
-                        .setEndTimestamp(serializedEndTimestamp)
+                        .setStartDate(startDate)
+                        .setEndDate(endDate)
                         .build();
 
         final var serializedSubDescriptor = serializer.serialize(subDescriptor);
@@ -2832,42 +2790,25 @@ class SerializerTest {
 
     @Test
     void shouldDeserializeSubDescriptor() {
-        final var subscriptionId = "subscriptionId";
         final var kpiId = "kpiId";
         final var samplingDurationS = 10f;
         final var samplingIntervalS = 45f;
-        final var startTimestamp = 1.0;
-        final var endTimestamp = 100.0;
+        final var startDate = "01/07/2022";
+        final var endDate = "02/07/2022";
 
         final var expectedSubDescriptor =
-                new SubsDescriptor(
-                        subscriptionId,
-                        kpiId,
-                        samplingDurationS,
-                        samplingIntervalS,
-                        startTimestamp,
-                        endTimestamp);
-
-        final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId);
-        final var serializedSubscriptionId =
-                monitoring.Monitoring.SubscriptionID.newBuilder()
-                        .setSubsId(serializedSubscriptionIdUuid)
-                        .build();
+                new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+
         final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
         final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
-        final var serializedStartTimestamp =
-                ContextOuterClass.Timestamp.newBuilder().setTimestamp(startTimestamp);
-        final var serializedEndTimestamp =
-                ContextOuterClass.Timestamp.newBuilder().setTimestamp(endTimestamp);
 
         final var serializedSubDescriptor =
                 Monitoring.SubsDescriptor.newBuilder()
-                        .setSubsId(serializedSubscriptionId)
                         .setKpiId(serializedKpiId)
                         .setSamplingDurationS(samplingDurationS)
                         .setSamplingIntervalS(samplingIntervalS)
-                        .setStartTimestamp(serializedStartTimestamp)
-                        .setEndTimestamp(serializedEndTimestamp)
+                        .setStartDate(startDate)
+                        .setEndDate(endDate)
                         .build();
 
         final var subDescriptor = serializer.deserialize(serializedSubDescriptor);
@@ -3214,20 +3155,18 @@ class SerializerTest {
     @Test
     void shouldSerializeKpi() {
         final var expectedKpiId = "expectedKpiId";
-        final var expectedTimestamp = 100.0;
+        final var expectedTimestamp = "expectedTimestamp";
         final var expectedKpiValue = new FloatKpiValue(643.45f);
 
         final var kpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue);
 
         final var serializedKpiId = serializer.serializeKpiId(expectedKpiId);
         final var serializedKpiValue = serializer.serialize(expectedKpiValue);
-        final var serializedexpectedTimestamp =
-                context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestamp);
 
         final var expectedKpi =
                 Monitoring.Kpi.newBuilder()
                         .setKpiId(serializedKpiId)
-                        .setTimestamp(serializedexpectedTimestamp)
+                        .setTimestamp(expectedTimestamp)
                         .setKpiValue(serializedKpiValue)
                         .build();
 
@@ -3239,7 +3178,7 @@ class SerializerTest {
     @Test
     void shouldDeserializeKpi() {
         final var expectedKpiId = "expectedKpiId";
-        final var expectedTimestamp = 100.0;
+        final var expectedTimestamp = "expectedTimestamp";
         final var expectedKpiValue = new BooleanKpiValue(true);
         final var expectedKpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue);
 
@@ -3253,20 +3192,16 @@ class SerializerTest {
     @Test
     void shouldSerializeKpisList() {
         final var expectedKpiIdA = "expectedKpiIdA";
-        final var expectedTimestampA = 100.0;
+        final var expectedTimestampA = "expectedTimestampA";
         final var expectedKpiValueA = new FloatKpiValue(643.45f);
         final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA);
-        final var serializedexpectedTimestampA =
-                context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampA);
         final var serializedKpiValueA = serializer.serialize(expectedKpiValueA);
         final var kpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA);
 
         final var expectedKpiIdB = "expectedKpiIdB";
-        final var expectedTimestampB = 100.0;
+        final var expectedTimestampB = "expectedTimestampB";
         final var expectedKpiValueB = new IntegerKpiValue(32);
         final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB);
-        final var serializedexpectedTimestampB =
-                context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampB);
         final var serializedKpiValueB = serializer.serialize(expectedKpiValueB);
         final var kpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB);
 
@@ -3275,14 +3210,14 @@ class SerializerTest {
         final var expectedKpiA =
                 Monitoring.Kpi.newBuilder()
                         .setKpiId(serializedKpiIdA)
-                        .setTimestamp(serializedexpectedTimestampA)
+                        .setTimestamp(expectedTimestampA)
                         .setKpiValue(serializedKpiValueA)
                         .build();
 
         final var expectedKpiB =
                 Monitoring.Kpi.newBuilder()
                         .setKpiId(serializedKpiIdB)
-                        .setTimestamp(serializedexpectedTimestampB)
+                        .setTimestamp(expectedTimestampB)
                         .setKpiValue(serializedKpiValueB)
                         .build();
 
@@ -3296,20 +3231,16 @@ class SerializerTest {
     @Test
     void shouldDeserializeKpisList() {
         final var expectedKpiIdA = "expectedKpiIdA";
-        final var expectedTimestampA = 100.0;
+        final var expectedTimestampA = "expectedTimestampA";
         final var expectedKpiValueA = new FloatKpiValue(643.45f);
         final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA);
-        final var serializedexpectedTimestampA =
-                context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampA);
         final var serializedKpiValueA = serializer.serialize(expectedKpiValueA);
         final var expectedKpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA);
 
         final var expectedKpiIdB = "expectedKpiIdB";
-        final var expectedTimestampB = 200.0;
+        final var expectedTimestampB = "expectedTimestampB";
         final var expectedKpiValueB = new IntegerKpiValue(32);
         final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB);
-        final var serializedexpectedTimestampB =
-                context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampB);
         final var serializedKpiValueB = serializer.serialize(expectedKpiValueB);
         final var expectedKpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB);
 
@@ -3318,14 +3249,14 @@ class SerializerTest {
         final var serializedKpiA =
                 Monitoring.Kpi.newBuilder()
                         .setKpiId(serializedKpiIdA)
-                        .setTimestamp(serializedexpectedTimestampA)
+                        .setTimestamp(expectedTimestampA)
                         .setKpiValue(serializedKpiValueA)
                         .build();
 
         final var serializedKpiB =
                 Monitoring.Kpi.newBuilder()
                         .setKpiId(serializedKpiIdB)
-                        .setTimestamp(serializedexpectedTimestampB)
+                        .setTimestamp(expectedTimestampB)
                         .setKpiValue(serializedKpiValueB)
                         .build();
 
diff --git a/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java b/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
index 9d05f3da8a831e74922e65473206539680c8d78b..5d63d4aa45e578957a7a3414c33491cebe98acbe 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -19,124 +19,85 @@ public final class Monitoring {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The kpiDescription.
      */
     java.lang.String getKpiDescription();
     /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The bytes for kpiDescription.
      */
     com.google.protobuf.ByteString
         getKpiDescriptionBytes();
 
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdListList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    monitoring.Monitoring.KpiId getKpiIdList(int index);
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    int getKpiIdListCount();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-        int index);
-
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The enum numeric value on the wire for kpiSampleType.
      */
     int getKpiSampleTypeValue();
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The kpiSampleType.
      */
     kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
 
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return Whether the deviceId field is set.
      */
     boolean hasDeviceId();
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return The deviceId.
      */
     context.ContextOuterClass.DeviceId getDeviceId();
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      */
     context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
 
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return Whether the endpointId field is set.
      */
     boolean hasEndpointId();
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return The endpointId.
      */
     context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      */
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
     boolean hasServiceId();
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
     context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      */
     context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return Whether the sliceId field is set.
      */
     boolean hasSliceId();
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return The sliceId.
      */
     context.ContextOuterClass.SliceId getSliceId();
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      */
     context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
@@ -154,7 +115,6 @@ public final class Monitoring {
     }
     private KpiDescriptor() {
       kpiDescription_ = "";
-      kpiIdList_ = java.util.Collections.emptyList();
       kpiSampleType_ = 0;
     }
 
@@ -178,7 +138,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -190,40 +149,18 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
 
               kpiDescription_ = s;
               break;
             }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiIdList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-              break;
-            }
-            case 32: {
+            case 16: {
               int rawValue = input.readEnum();
 
               kpiSampleType_ = rawValue;
               break;
             }
-            case 42: {
+            case 26: {
               context.ContextOuterClass.DeviceId.Builder subBuilder = null;
               if (deviceId_ != null) {
                 subBuilder = deviceId_.toBuilder();
@@ -236,7 +173,7 @@ public final class Monitoring {
 
               break;
             }
-            case 50: {
+            case 34: {
               context.ContextOuterClass.EndPointId.Builder subBuilder = null;
               if (endpointId_ != null) {
                 subBuilder = endpointId_.toBuilder();
@@ -249,7 +186,7 @@ public final class Monitoring {
 
               break;
             }
-            case 58: {
+            case 42: {
               context.ContextOuterClass.ServiceId.Builder subBuilder = null;
               if (serviceId_ != null) {
                 subBuilder = serviceId_.toBuilder();
@@ -262,7 +199,7 @@ public final class Monitoring {
 
               break;
             }
-            case 66: {
+            case 50: {
               context.ContextOuterClass.SliceId.Builder subBuilder = null;
               if (sliceId_ != null) {
                 subBuilder = sliceId_.toBuilder();
@@ -290,9 +227,6 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -310,36 +244,10 @@ public final class Monitoring {
               monitoring.Monitoring.KpiDescriptor.class, monitoring.Monitoring.KpiDescriptor.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
     private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The kpiDescription.
      */
     @java.lang.Override
@@ -356,7 +264,7 @@ public final class Monitoring {
       }
     }
     /**
-     * <code>string kpi_description = 2;</code>
+     * <code>string kpi_description = 1;</code>
      * @return The bytes for kpiDescription.
      */
     @java.lang.Override
@@ -374,57 +282,17 @@ public final class Monitoring {
       }
     }
 
-    public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-      return kpiIdList_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList() {
-      return kpiIdList_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public int getKpiIdListCount() {
-      return kpiIdList_.size();
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-      return kpiIdList_.get(index);
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-        int index) {
-      return kpiIdList_.get(index);
-    }
-
-    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 2;
     private int kpiSampleType_;
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The enum numeric value on the wire for kpiSampleType.
      */
     @java.lang.Override public int getKpiSampleTypeValue() {
       return kpiSampleType_;
     }
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
      * @return The kpiSampleType.
      */
     @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
@@ -433,10 +301,10 @@ public final class Monitoring {
       return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 5;
+    public static final int DEVICE_ID_FIELD_NUMBER = 3;
     private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return Whether the deviceId field is set.
      */
     @java.lang.Override
@@ -444,7 +312,7 @@ public final class Monitoring {
       return deviceId_ != null;
     }
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      * @return The deviceId.
      */
     @java.lang.Override
@@ -452,17 +320,17 @@ public final class Monitoring {
       return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
     }
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>.context.DeviceId device_id = 3;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
       return getDeviceId();
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 4;
     private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return Whether the endpointId field is set.
      */
     @java.lang.Override
@@ -470,7 +338,7 @@ public final class Monitoring {
       return endpointId_ != null;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      * @return The endpointId.
      */
     @java.lang.Override
@@ -478,17 +346,17 @@ public final class Monitoring {
       return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <code>.context.EndPointId endpoint_id = 4;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
       return getEndpointId();
     }
 
-    public static final int SERVICE_ID_FIELD_NUMBER = 7;
+    public static final int SERVICE_ID_FIELD_NUMBER = 5;
     private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
     @java.lang.Override
@@ -496,7 +364,7 @@ public final class Monitoring {
       return serviceId_ != null;
     }
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
     @java.lang.Override
@@ -504,17 +372,17 @@ public final class Monitoring {
       return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <code>.context.ServiceId service_id = 5;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
       return getServiceId();
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 8;
+    public static final int SLICE_ID_FIELD_NUMBER = 6;
     private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return Whether the sliceId field is set.
      */
     @java.lang.Override
@@ -522,7 +390,7 @@ public final class Monitoring {
       return sliceId_ != null;
     }
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      * @return The sliceId.
      */
     @java.lang.Override
@@ -530,7 +398,7 @@ public final class Monitoring {
       return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <code>.context.SliceId slice_id = 6;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
@@ -551,29 +419,23 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
       if (!getKpiDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        output.writeMessage(3, kpiIdList_.get(i));
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
       }
       if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(4, kpiSampleType_);
+        output.writeEnum(2, kpiSampleType_);
       }
       if (deviceId_ != null) {
-        output.writeMessage(5, getDeviceId());
+        output.writeMessage(3, getDeviceId());
       }
       if (endpointId_ != null) {
-        output.writeMessage(6, getEndpointId());
+        output.writeMessage(4, getEndpointId());
       }
       if (serviceId_ != null) {
-        output.writeMessage(7, getServiceId());
+        output.writeMessage(5, getServiceId());
       }
       if (sliceId_ != null) {
-        output.writeMessage(8, getSliceId());
+        output.writeMessage(6, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -584,36 +446,28 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
-      }
       if (!getKpiDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, kpiIdList_.get(i));
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
       }
       if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, kpiSampleType_);
+          .computeEnumSize(2, kpiSampleType_);
       }
       if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getDeviceId());
+          .computeMessageSize(3, getDeviceId());
       }
       if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndpointId());
+          .computeMessageSize(4, getEndpointId());
       }
       if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getServiceId());
+          .computeMessageSize(5, getServiceId());
       }
       if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, getSliceId());
+          .computeMessageSize(6, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -630,15 +484,8 @@ public final class Monitoring {
       }
       monitoring.Monitoring.KpiDescriptor other = (monitoring.Monitoring.KpiDescriptor) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
       if (!getKpiDescription()
           .equals(other.getKpiDescription())) return false;
-      if (!getKpiIdListList()
-          .equals(other.getKpiIdListList())) return false;
       if (kpiSampleType_ != other.kpiSampleType_) return false;
       if (hasDeviceId() != other.hasDeviceId()) return false;
       if (hasDeviceId()) {
@@ -671,16 +518,8 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
       hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
       hash = (53 * hash) + getKpiDescription().hashCode();
-      if (getKpiIdListCount() > 0) {
-        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdListList().hashCode();
-      }
       hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
       hash = (53 * hash) + kpiSampleType_;
       if (hasDeviceId()) {
@@ -827,26 +666,13 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiIdListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
         kpiDescription_ = "";
 
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          kpiIdListBuilder_.clear();
-        }
         kpiSampleType_ = 0;
 
         if (deviceIdBuilder_ == null) {
@@ -899,22 +725,7 @@ public final class Monitoring {
       @java.lang.Override
       public monitoring.Monitoring.KpiDescriptor buildPartial() {
         monitoring.Monitoring.KpiDescriptor result = new monitoring.Monitoring.KpiDescriptor(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
         result.kpiDescription_ = kpiDescription_;
-        if (kpiIdListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiIdList_ = kpiIdList_;
-        } else {
-          result.kpiIdList_ = kpiIdListBuilder_.build();
-        }
         result.kpiSampleType_ = kpiSampleType_;
         if (deviceIdBuilder_ == null) {
           result.deviceId_ = deviceId_;
@@ -984,39 +795,10 @@ public final class Monitoring {
 
       public Builder mergeFrom(monitoring.Monitoring.KpiDescriptor other) {
         if (other == monitoring.Monitoring.KpiDescriptor.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
         if (!other.getKpiDescription().isEmpty()) {
           kpiDescription_ = other.kpiDescription_;
           onChanged();
         }
-        if (kpiIdListBuilder_ == null) {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdList_.isEmpty()) {
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiIdListIsMutable();
-              kpiIdList_.addAll(other.kpiIdList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdListBuilder_.isEmpty()) {
-              kpiIdListBuilder_.dispose();
-              kpiIdListBuilder_ = null;
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdListFieldBuilder() : null;
-            } else {
-              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
-            }
-          }
-        }
         if (other.kpiSampleType_ != 0) {
           setKpiSampleTypeValue(other.getKpiSampleTypeValue());
         }
@@ -1060,130 +842,10 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
-      }
 
       private java.lang.Object kpiDescription_ = "";
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @return The kpiDescription.
        */
       public java.lang.String getKpiDescription() {
@@ -1199,7 +861,7 @@ public final class Monitoring {
         }
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @return The bytes for kpiDescription.
        */
       public com.google.protobuf.ByteString
@@ -1216,7 +878,7 @@ public final class Monitoring {
         }
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @param value The kpiDescription to set.
        * @return This builder for chaining.
        */
@@ -1231,7 +893,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @return This builder for chaining.
        */
       public Builder clearKpiDescription() {
@@ -1241,7 +903,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>string kpi_description = 2;</code>
+       * <code>string kpi_description = 1;</code>
        * @param value The bytes for kpiDescription to set.
        * @return This builder for chaining.
        */
@@ -1257,785 +919,545 @@ public final class Monitoring {
         return this;
       }
 
-      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
-          bitField0_ |= 0x00000001;
-         }
+      private int kpiSampleType_ = 0;
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
+       */
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
-
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-        if (kpiIdListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
-        } else {
-          return kpiIdListBuilder_.getMessageList();
-        }
+      public Builder setKpiSampleTypeValue(int value) {
+        
+        kpiSampleType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @return The kpiSampleType.
        */
-      public int getKpiIdListCount() {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.size();
-        } else {
-          return kpiIdListBuilder_.getCount();
+      @java.lang.Override
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @param value The kpiSampleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        
+        kpiSampleType_ = value.getNumber();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);
+      public Builder clearKpiSampleType() {
+        
+        kpiSampleType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 3;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 3;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return kpiIdListBuilder_.getMessage(index);
+          return deviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, value);
+          deviceId_ = value;
           onChanged();
         } else {
-          kpiIdListBuilder_.setMessage(index, value);
+          deviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, builderForValue.build());
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiIdListBuilder_.setMessage(index, builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
           }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(value);
           onChanged();
         } else {
-          kpiIdListBuilder_.addMessage(value);
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, value);
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          kpiIdListBuilder_.addMessage(index, value);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          kpiIdListBuilder_.addMessage(builderForValue.build());
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.DeviceId device_id = 3;</code>
        */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
         }
-        return this;
+        return deviceIdBuilder_;
       }
+
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * @return Whether the endpointId field is set.
        */
-      public Builder addAllKpiIdList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiIdList_);
-          onChanged();
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          kpiIdListBuilder_.addAllMessages(values);
+          return endpointIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public Builder clearKpiIdList() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
           onChanged();
         } else {
-          kpiIdListBuilder_.clear();
+          endpointIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public Builder removeKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.remove(index);
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiIdListBuilder_.remove(index);
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-          int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);  } else {
-          return kpiIdListBuilder_.getMessageOrBuilder(index);
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdListOrBuilderList() {
-        if (kpiIdListBuilder_ != null) {
-          return kpiIdListBuilder_.getMessageOrBuilderList();
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
-        return getKpiIdListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       * <code>.context.EndPointId endpoint_id = 4;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdListBuilderList() {
-        return getKpiIdListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdListFieldBuilder() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiIdList_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
                   getParentForChildren(),
                   isClean());
-          kpiIdList_ = null;
+          endpointId_ = null;
         }
-        return kpiIdListBuilder_;
+        return endpointIdBuilder_;
       }
 
-      private int kpiSampleType_ = 0;
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return The enum numeric value on the wire for kpiSampleType.
+       * <code>.context.ServiceId service_id = 5;</code>
+       * @return Whether the serviceId field is set.
        */
-      @java.lang.Override public int getKpiSampleTypeValue() {
-        return kpiSampleType_;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @param value The enum numeric value on the wire for kpiSampleType to set.
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 5;</code>
+       * @return The serviceId.
        */
-      public Builder setKpiSampleTypeValue(int value) {
-        
-        kpiSampleType_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return The kpiSampleType.
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      @java.lang.Override
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-        @SuppressWarnings("deprecation")
-        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
-        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @param value The kpiSampleType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        kpiSampleType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleType() {
-        
-        kpiSampleType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
           } else {
-            deviceId_ = value;
+            serviceId_ = value;
           }
           onChanged();
         } else {
-          deviceIdBuilder_.mergeFrom(value);
+          serviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
           onChanged();
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
         
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 5;</code>
+       * <code>.context.ServiceId service_id = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
                   getParentForChildren(),
                   isClean());
-          deviceId_ = null;
+          serviceId_ = null;
         }
-        return deviceIdBuilder_;
+        return serviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.EndPointId endpointId_;
+      private context.ContextOuterClass.SliceId sliceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       * @return Whether the endpointId field is set.
+       * <code>.context.SliceId slice_id = 6;</code>
+       * @return Whether the sliceId field is set.
        */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       * @return The endpointId.
+       * <code>.context.SliceId slice_id = 6;</code>
+       * @return The sliceId.
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return endpointIdBuilder_.getMessage();
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointId_ = value;
+          sliceId_ = value;
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          sliceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
           } else {
-            endpointId_ = value;
+            sliceId_ = value;
           }
           onChanged();
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          sliceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
         
         onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+        return getSliceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
         } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * <code>.context.SliceId slice_id = 6;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
                   getParentForChildren(),
                   isClean());
-          endpointId_ = null;
+          sliceId_ = null;
         }
-        return endpointIdBuilder_;
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       * @return The serviceId.
-       */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
-        }
-        return serviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       * @return The sliceId.
-       */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        } else {
-          return sliceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
 
@@ -2079,61 +1501,140 @@ public final class Monitoring {
 
   }
 
-  public interface MonitorKpiRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
+  public interface BundleKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.BundleKpiDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
-    boolean hasKpiId();
+    java.lang.String getKpiDescription();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdListList();
     /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    float getMonitoringWindowS();
-
+    monitoring.Monitoring.KpiId getKpiIdList(int index);
     /**
-     * <pre>
-     * Pending add field to reflect Available Device Protocols
-     * </pre>
-     *
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    float getSamplingRateS();
+    int getKpiIdListCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index);
+
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
+
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return Whether the endpointId field is set.
+     */
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.MonitorKpiRequest}
+   * Protobuf type {@code monitoring.BundleKpiDescriptor}
    */
-  public static final class MonitorKpiRequest extends
+  public static final class BundleKpiDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
-      MonitorKpiRequestOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.BundleKpiDescriptor)
+      BundleKpiDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use MonitorKpiRequest.newBuilder() to construct.
-    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use BundleKpiDescriptor.newBuilder() to construct.
+    private BundleKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private MonitorKpiRequest() {
+    private BundleKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new MonitorKpiRequest();
+      return new BundleKpiDescriptor();
     }
 
     @java.lang.Override
@@ -2141,7 +1642,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private MonitorKpiRequest(
+    private BundleKpiDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2149,6 +1650,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -2160,26 +1662,76 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
+              java.lang.String s = input.readStringRequireUtf8();
+
+              kpiDescription_ = s;
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              kpiIdList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+
+              kpiSampleType_ = rawValue;
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 21: {
+            case 42: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
 
-              monitoringWindowS_ = input.readFloat();
               break;
             }
-            case 29: {
+            case 50: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
 
-              samplingRateS_ = input.readFloat();
               break;
             }
             default: {
@@ -2197,99 +1749,263 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+              monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public java.lang.String getKpiDescription() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        kpiDescription_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public com.google.protobuf.ByteString
+        getKpiDescriptionBytes() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        kpiDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int KPI_ID_LIST_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
     }
-
-    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
-    private float monitoringWindowS_;
     /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public float getMonitoringWindowS() {
-      return monitoringWindowS_;
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
     }
-
-    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
-    private float samplingRateS_;
     /**
-     * <pre>
-     * Pending add field to reflect Available Device Protocols
-     * </pre>
-     *
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public float getSamplingRateS() {
-      return samplingRateS_;
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
     }
-
-    private byte memoizedIsInitialized = -1;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
     @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
     }
-
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
     @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
-      if (monitoringWindowS_ != 0F) {
-        output.writeFloat(2, monitoringWindowS_);
-      }
-      if (samplingRateS_ != 0F) {
-        output.writeFloat(3, samplingRateS_);
-      }
-      unknownFields.writeTo(output);
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
+    }
+
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 3;
+    private int kpiSampleType_;
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    @java.lang.Override public int getKpiSampleTypeValue() {
+      return kpiSampleType_;
+    }
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The kpiSampleType.
+     */
+    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+      @SuppressWarnings("deprecation")
+      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(2, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(3, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(4, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        output.writeMessage(5, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(7, getSliceId());
+      }
+      unknownFields.writeTo(output);
     }
 
     @java.lang.Override
@@ -2298,17 +2014,32 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(2, kpiIdList_.get(i));
       }
-      if (monitoringWindowS_ != 0F) {
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, monitoringWindowS_);
+          .computeEnumSize(3, kpiSampleType_);
       }
-      if (samplingRateS_ != 0F) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingRateS_);
+          .computeMessageSize(4, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -2320,22 +2051,36 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
+      if (!(obj instanceof monitoring.Monitoring.BundleKpiDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
+      monitoring.Monitoring.BundleKpiDescriptor other = (monitoring.Monitoring.BundleKpiDescriptor) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
+      if (!getKpiDescription()
+          .equals(other.getKpiDescription())) return false;
+      if (!getKpiIdListList()
+          .equals(other.getKpiIdListList())) return false;
+      if (kpiSampleType_ != other.kpiSampleType_) return false;
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
       }
-      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
-          != java.lang.Float.floatToIntBits(
-              other.getMonitoringWindowS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingRateS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingRateS())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2347,84 +2092,98 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
+      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getKpiDescription().hashCode();
+      if (getKpiIdListCount() > 0) {
+        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdListList().hashCode();
+      }
+      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + kpiSampleType_;
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
-      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getMonitoringWindowS());
-      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingRateS());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2437,7 +2196,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.BundleKpiDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2453,26 +2212,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.MonitorKpiRequest}
+     * Protobuf type {@code monitoring.BundleKpiDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
-        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.BundleKpiDescriptor)
+        monitoring.Monitoring.BundleKpiDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+                monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
+      // Construct using monitoring.Monitoring.BundleKpiDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2485,38 +2244,63 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiIdListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        monitoringWindowS_ = 0F;
+        kpiDescription_ = "";
 
-        samplingRateS_ = 0F;
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        kpiSampleType_ = 0;
 
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
+      public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest build() {
-        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
+      public monitoring.Monitoring.BundleKpiDescriptor build() {
+        monitoring.Monitoring.BundleKpiDescriptor result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2524,15 +2308,40 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
-        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+      public monitoring.Monitoring.BundleKpiDescriptor buildPartial() {
+        monitoring.Monitoring.BundleKpiDescriptor result = new monitoring.Monitoring.BundleKpiDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        result.kpiDescription_ = kpiDescription_;
+        if (kpiIdListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIdList_ = kpiIdList_;
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          result.kpiIdList_ = kpiIdListBuilder_.build();
+        }
+        result.kpiSampleType_ = kpiSampleType_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
         }
-        result.monitoringWindowS_ = monitoringWindowS_;
-        result.samplingRateS_ = samplingRateS_;
         onBuilt();
         return result;
       }
@@ -2571,24 +2380,60 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
-          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
+        if (other instanceof monitoring.Monitoring.BundleKpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.BundleKpiDescriptor)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
-        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      public Builder mergeFrom(monitoring.Monitoring.BundleKpiDescriptor other) {
+        if (other == monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()) return this;
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
         }
-        if (other.getMonitoringWindowS() != 0F) {
-          setMonitoringWindowS(other.getMonitoringWindowS());
+        if (kpiIdListBuilder_ == null) {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdList_.isEmpty()) {
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdListIsMutable();
+              kpiIdList_.addAll(other.kpiIdList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdListBuilder_.isEmpty()) {
+              kpiIdListBuilder_.dispose();
+              kpiIdListBuilder_ = null;
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdListFieldBuilder() : null;
+            } else {
+              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
+            }
+          }
         }
-        if (other.getSamplingRateS() != 0F) {
-          setSamplingRateS(other.getSamplingRateS());
+        if (other.kpiSampleType_ != 0) {
+          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -2605,11 +2450,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
+        monitoring.Monitoring.BundleKpiDescriptor parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.BundleKpiDescriptor) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2618,377 +2463,1055 @@ public final class Monitoring {
         }
         return this;
       }
+      private int bitField0_;
 
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      private java.lang.Object kpiDescription_ = "";
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>string kpi_description = 1;</code>
+       * @return The kpiDescription.
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      public java.lang.String getKpiDescription() {
+        java.lang.Object ref = kpiDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          kpiDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>string kpi_description = 1;</code>
+       * @return The bytes for kpiDescription.
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+      public com.google.protobuf.ByteString
+          getKpiDescriptionBytes() {
+        java.lang.Object ref = kpiDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          kpiDescription_ = b;
+          return b;
         } else {
-          return kpiIdBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
+      public Builder setKpiDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        kpiDescription_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The bytes for kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
+      public Builder setKpiDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        kpiDescription_ = value;
+        onChanged();
         return this;
       }
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
+
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+        if (kpiIdListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          return kpiIdListBuilder_.getMessageList();
         }
-
-        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          return kpiIdListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addAllKpiIdList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIdList_);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder clearKpiIdList() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder removeKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.remove(index);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+          int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);  } else {
+          return kpiIdListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdListOrBuilderList() {
+        if (kpiIdListBuilder_ != null) {
+          return kpiIdListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
+        return getKpiIdListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdListBuilderList() {
+        return getKpiIdListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
           monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          getKpiIdListFieldBuilder() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
+                  kpiIdList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          kpiId_ = null;
+          kpiIdList_ = null;
         }
-        return kpiIdBuilder_;
+        return kpiIdListBuilder_;
       }
 
-      private float monitoringWindowS_ ;
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return The monitoringWindowS.
-       */
-      @java.lang.Override
-      public float getMonitoringWindowS() {
-        return monitoringWindowS_;
-      }
+      private int kpiSampleType_ = 0;
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @param value The monitoringWindowS to set.
-       * @return This builder for chaining.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
        */
-      public Builder setMonitoringWindowS(float value) {
-        
-        monitoringWindowS_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
       }
       /**
-       * <code>float monitoring_window_s = 2;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
        * @return This builder for chaining.
        */
-      public Builder clearMonitoringWindowS() {
+      public Builder setKpiSampleTypeValue(int value) {
         
-        monitoringWindowS_ = 0F;
+        kpiSampleType_ = value;
         onChanged();
         return this;
       }
-
-      private float samplingRateS_ ;
       /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
-       * @return The samplingRateS.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @return The kpiSampleType.
        */
       @java.lang.Override
-      public float getSamplingRateS() {
-        return samplingRateS_;
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
       }
       /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
-       * @param value The samplingRateS to set.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @param value The kpiSampleType to set.
        * @return This builder for chaining.
        */
-      public Builder setSamplingRateS(float value) {
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
         
-        samplingRateS_ = value;
+        kpiSampleType_ = value.getNumber();
         onChanged();
         return this;
       }
       /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSamplingRateS() {
+      public Builder clearKpiSampleType() {
         
-        samplingRateS_ = 0F;
+        kpiSampleType_ = 0;
         onChanged();
         return this;
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
       }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+        return this;
       }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
 
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
 
-      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
-    }
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
 
-    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
-    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
-    }
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
 
-    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       * @return Whether the endpointId field is set.
+       */
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
 
-    private static final com.google.protobuf.Parser<MonitorKpiRequest>
-        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
-      @java.lang.Override
-      public MonitorKpiRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new MonitorKpiRequest(input, extensionRegistry);
+        return this;
       }
-    };
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
 
-    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
-      return PARSER;
-    }
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
 
-    @java.lang.Override
-    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
-      return PARSER;
-    }
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
 
-    @java.lang.Override
-    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
 
-  }
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
 
-  public interface KpiQueryOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery)
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.BundleKpiDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.BundleKpiDescriptor)
+    private static final monitoring.Monitoring.BundleKpiDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.BundleKpiDescriptor();
+    }
+
+    public static monitoring.Monitoring.BundleKpiDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<BundleKpiDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<BundleKpiDescriptor>() {
+      @java.lang.Override
+      public BundleKpiDescriptor parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new BundleKpiDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<BundleKpiDescriptor> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<BundleKpiDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EditedKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.EditedKpiDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The kpiDescription.
+     */
+    java.lang.String getKpiDescription();
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The bytes for kpiDescription.
+     */
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
     java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdList();
+        getKpiIdListList();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
-    monitoring.Monitoring.KpiId getKpiId(int index);
+    monitoring.Monitoring.KpiId getKpiIdList(int index);
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
-    int getKpiIdCount();
+    int getKpiIdListCount();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
     java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList();
+        getKpiIdListOrBuilderList();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
         int index);
 
     /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
      */
-    float getMonitoringWindowS();
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
 
     /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return Whether the deviceId field is set.
      */
-    float getSamplingRateS();
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
 
     /**
-     * <pre>
-     * used when you want something like "get the last N many samples
-     * </pre>
-     *
-     * <code>uint32 last_n_samples = 4;</code>
-     * @return The lastNSamples.
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return Whether the endpointId field is set.
      */
-    int getLastNSamples();
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
      */
-    boolean hasStartTimestamp();
+    boolean hasServiceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.Timestamp getStartTimestamp();
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder();
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
      */
-    boolean hasEndTimestamp();
+    boolean hasSliceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return The sliceId.
      */
-    context.ContextOuterClass.Timestamp getEndTimestamp();
+    context.ContextOuterClass.SliceId getSliceId();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder();
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiQuery}
+   * Protobuf type {@code monitoring.EditedKpiDescriptor}
    */
-  public static final class KpiQuery extends
+  public static final class EditedKpiDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiQuery)
-      KpiQueryOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.EditedKpiDescriptor)
+      EditedKpiDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiQuery.newBuilder() to construct.
-    private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EditedKpiDescriptor.newBuilder() to construct.
+    private EditedKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiQuery() {
-      kpiId_ = java.util.Collections.emptyList();
+    private EditedKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiQuery();
+      return new EditedKpiDescriptor();
     }
 
     @java.lang.Override
@@ -2996,7 +3519,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiQuery(
+    private EditedKpiDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -3015,52 +3538,88 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 10: {
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              kpiDescription_ = s;
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiId_.add(
+              kpiIdList_.add(
                   input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
               break;
             }
-            case 21: {
+            case 32: {
+              int rawValue = input.readEnum();
 
-              monitoringWindowS_ = input.readFloat();
+              kpiSampleType_ = rawValue;
               break;
             }
-            case 29: {
+            case 42: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
 
-              samplingRateS_ = input.readFloat();
               break;
             }
-            case 32: {
+            case 50: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
 
-              lastNSamples_ = input.readUInt32();
               break;
             }
-            case 42: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (startTimestamp_ != null) {
-                subBuilder = startTimestamp_.toBuilder();
+            case 58: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
               }
-              startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(startTimestamp_);
-                startTimestamp_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 50: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (endTimestamp_ != null) {
-                subBuilder = endTimestamp_.toBuilder();
+            case 66: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
               }
-              endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endTimestamp_);
-                endTimestamp_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -3081,7 +3640,7 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -3089,1280 +3648,1732 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+              monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
+    private volatile java.lang.Object kpiDescription_;
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The kpiDescription.
+     */
+    @java.lang.Override
+    public java.lang.String getKpiDescription() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        kpiDescription_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The bytes for kpiDescription.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getKpiDescriptionBytes() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        kpiDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
+    }
+
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
+    private int kpiSampleType_;
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    @java.lang.Override public int getKpiSampleTypeValue() {
+      return kpiSampleType_;
+    }
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The kpiSampleType.
+     */
+    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+      @SuppressWarnings("deprecation")
+      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-      return kpiId_;
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList() {
-      return kpiId_;
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
      */
     @java.lang.Override
-    public int getKpiIdCount() {
-      return kpiId_.size();
+    public boolean hasSliceId() {
+      return sliceId_ != null;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return The sliceId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId(int index) {
-      return kpiId_.get(index);
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index) {
-      return kpiId_.get(index);
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
-    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
-    private float monitoringWindowS_;
-    /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
-     */
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public float getMonitoringWindowS() {
-      return monitoringWindowS_;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
 
-    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
-    private float samplingRateS_;
-    /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
     @java.lang.Override
-    public float getSamplingRateS() {
-      return samplingRateS_;
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(3, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(4, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(5, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        output.writeMessage(6, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(7, getServiceId());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(8, getSliceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getServiceId());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getSliceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.EditedKpiDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.EditedKpiDescriptor other = (monitoring.Monitoring.EditedKpiDescriptor) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!getKpiDescription()
+          .equals(other.getKpiDescription())) return false;
+      if (!getKpiIdListList()
+          .equals(other.getKpiIdListList())) return false;
+      if (kpiSampleType_ != other.kpiSampleType_) return false;
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getKpiDescription().hashCode();
+      if (getKpiIdListCount() > 0) {
+        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdListList().hashCode();
+      }
+      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + kpiSampleType_;
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-
-    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
-    private int lastNSamples_;
-    /**
-     * <pre>
-     * used when you want something like "get the last N many samples
-     * </pre>
-     *
-     * <code>uint32 last_n_samples = 4;</code>
-     * @return The lastNSamples.
-     */
-    @java.lang.Override
-    public int getLastNSamples() {
-      return lastNSamples_;
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.Timestamp startTimestamp_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
-     */
     @java.lang.Override
-    public boolean hasStartTimestamp() {
-      return startTimestamp_ != null;
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
     }
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getStartTimestamp() {
-      return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+    public static Builder newBuilder(monitoring.Monitoring.EditedKpiDescriptor prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-      return getStartTimestamp();
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
     }
 
-    public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.Timestamp endTimestamp_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndTimestamp() {
-      return endTimestamp_ != null;
-    }
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
-     */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getEndTimestamp() {
-      return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * Protobuf type {@code monitoring.EditedKpiDescriptor}
      */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-      return getEndTimestamp();
-    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.EditedKpiDescriptor)
+        monitoring.Monitoring.EditedKpiDescriptorOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
+      }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
+      }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+      // Construct using monitoring.Monitoring.EditedKpiDescriptor.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < kpiId_.size(); i++) {
-        output.writeMessage(1, kpiId_.get(i));
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      if (monitoringWindowS_ != 0F) {
-        output.writeFloat(2, monitoringWindowS_);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiIdListFieldBuilder();
+        }
       }
-      if (samplingRateS_ != 0F) {
-        output.writeFloat(3, samplingRateS_);
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        kpiDescription_ = "";
+
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        kpiSampleType_ = 0;
+
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+        return this;
       }
-      if (lastNSamples_ != 0) {
-        output.writeUInt32(4, lastNSamples_);
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
       }
-      if (startTimestamp_ != null) {
-        output.writeMessage(5, getStartTimestamp());
+
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance();
       }
-      if (endTimestamp_ != null) {
-        output.writeMessage(6, getEndTimestamp());
+
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor build() {
+        monitoring.Monitoring.EditedKpiDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
       }
-      unknownFields.writeTo(output);
-    }
 
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor buildPartial() {
+        monitoring.Monitoring.EditedKpiDescriptor result = new monitoring.Monitoring.EditedKpiDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.kpiDescription_ = kpiDescription_;
+        if (kpiIdListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIdList_ = kpiIdList_;
+        } else {
+          result.kpiIdList_ = kpiIdListBuilder_.build();
+        }
+        result.kpiSampleType_ = kpiSampleType_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
 
-      size = 0;
-      for (int i = 0; i < kpiId_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiId_.get(i));
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      if (monitoringWindowS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, monitoringWindowS_);
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      if (samplingRateS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingRateS_);
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      if (lastNSamples_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, lastNSamples_);
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      if (startTimestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getStartTimestamp());
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      if (endTimestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndTimestamp());
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.EditedKpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.EditedKpiDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
 
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof monitoring.Monitoring.KpiQuery)) {
-        return super.equals(obj);
+      public Builder mergeFrom(monitoring.Monitoring.EditedKpiDescriptor other) {
+        if (other == monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
+        }
+        if (kpiIdListBuilder_ == null) {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdList_.isEmpty()) {
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdListIsMutable();
+              kpiIdList_.addAll(other.kpiIdList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdListBuilder_.isEmpty()) {
+              kpiIdListBuilder_.dispose();
+              kpiIdListBuilder_ = null;
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdListFieldBuilder() : null;
+            } else {
+              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
+            }
+          }
+        }
+        if (other.kpiSampleType_ != 0) {
+          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-      monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
 
-      if (!getKpiIdList()
-          .equals(other.getKpiIdList())) return false;
-      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
-          != java.lang.Float.floatToIntBits(
-              other.getMonitoringWindowS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingRateS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingRateS())) return false;
-      if (getLastNSamples()
-          != other.getLastNSamples()) return false;
-      if (hasStartTimestamp() != other.hasStartTimestamp()) return false;
-      if (hasStartTimestamp()) {
-        if (!getStartTimestamp()
-            .equals(other.getStartTimestamp())) return false;
-      }
-      if (hasEndTimestamp() != other.hasEndTimestamp()) return false;
-      if (hasEndTimestamp()) {
-        if (!getEndTimestamp()
-            .equals(other.getEndTimestamp())) return false;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
 
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiIdCount() > 0) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdList().hashCode();
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.EditedKpiDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.EditedKpiDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
-      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getMonitoringWindowS());
-      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingRateS());
-      hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
-      hash = (53 * hash) + getLastNSamples();
-      if (hasStartTimestamp()) {
-        hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getStartTimestamp().hashCode();
+      private int bitField0_;
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
-      if (hasEndTimestamp()) {
-        hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getEndTimestamp().hashCode();
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.KpiQuery prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.KpiQuery}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiQuery)
-        monitoring.Monitoring.KpiQueryOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
       }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+        return this;
       }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
 
-      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+        return this;
       }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+        return this;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getKpiIdFieldBuilder();
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
         if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private java.lang.Object kpiDescription_ = "";
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return The kpiDescription.
+       */
+      public java.lang.String getKpiDescription() {
+        java.lang.Object ref = kpiDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          kpiDescription_ = s;
+          return s;
         } else {
-          kpiIdBuilder_.clear();
+          return (java.lang.String) ref;
         }
-        monitoringWindowS_ = 0F;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return The bytes for kpiDescription.
+       */
+      public com.google.protobuf.ByteString
+          getKpiDescriptionBytes() {
+        java.lang.Object ref = kpiDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          kpiDescription_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @param value The kpiDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        kpiDescription_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @param value The bytes for kpiDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        kpiDescription_ = value;
+        onChanged();
+        return this;
+      }
 
-        samplingRateS_ = 0F;
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
 
-        lastNSamples_ = 0;
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
 
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+        if (kpiIdListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        } else {
+          return kpiIdListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);
+        } else {
+          return kpiIdListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, builderForValue.build());
+          onChanged();
         } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
+          kpiIdListBuilder_.setMessage(index, builderForValue.build());
         }
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(value);
+          onChanged();
         } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
+          kpiIdListBuilder_.addMessage(value);
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiQuery.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery build() {
-        monitoring.Monitoring.KpiQuery result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery buildPartial() {
-        monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiIdBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          result.kpiId_ = kpiId_;
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, value);
+          onChanged();
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          kpiIdListBuilder_.addMessage(index, value);
         }
-        result.monitoringWindowS_ = monitoringWindowS_;
-        result.samplingRateS_ = samplingRateS_;
-        result.lastNSamples_ = lastNSamples_;
-        if (startTimestampBuilder_ == null) {
-          result.startTimestamp_ = startTimestamp_;
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(builderForValue.build());
+          onChanged();
         } else {
-          result.startTimestamp_ = startTimestampBuilder_.build();
+          kpiIdListBuilder_.addMessage(builderForValue.build());
         }
-        if (endTimestampBuilder_ == null) {
-          result.endTimestamp_ = endTimestamp_;
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          result.endTimestamp_ = endTimestampBuilder_.build();
+          kpiIdListBuilder_.addMessage(index, builderForValue.build());
         }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiQuery) {
-          return mergeFrom((monitoring.Monitoring.KpiQuery)other);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addAllKpiIdList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIdList_);
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          kpiIdListBuilder_.addAllMessages(values);
         }
+        return this;
       }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
-        if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
-        if (kpiIdBuilder_ == null) {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiId_.isEmpty()) {
-              kpiId_ = other.kpiId_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiIdIsMutable();
-              kpiId_.addAll(other.kpiId_);
-            }
-            onChanged();
-          }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder clearKpiIdList() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiIdBuilder_.isEmpty()) {
-              kpiIdBuilder_.dispose();
-              kpiIdBuilder_ = null;
-              kpiId_ = other.kpiId_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdFieldBuilder() : null;
-            } else {
-              kpiIdBuilder_.addAllMessages(other.kpiId_);
-            }
-          }
-        }
-        if (other.getMonitoringWindowS() != 0F) {
-          setMonitoringWindowS(other.getMonitoringWindowS());
-        }
-        if (other.getSamplingRateS() != 0F) {
-          setSamplingRateS(other.getSamplingRateS());
-        }
-        if (other.getLastNSamples() != 0) {
-          setLastNSamples(other.getLastNSamples());
-        }
-        if (other.hasStartTimestamp()) {
-          mergeStartTimestamp(other.getStartTimestamp());
+          kpiIdListBuilder_.clear();
         }
-        if (other.hasEndTimestamp()) {
-          mergeEndTimestamp(other.getEndTimestamp());
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder removeKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.remove(index);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.remove(index);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().getBuilder(index);
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.KpiQuery parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+          int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);  } else {
+          return kpiIdListBuilder_.getMessageOrBuilder(index);
         }
-        return this;
       }
-      private int bitField0_;
-
-      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
-          bitField0_ |= 0x00000001;
-         }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdListOrBuilderList() {
+        if (kpiIdListBuilder_ != null) {
+          return kpiIdListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
+        return getKpiIdListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-        if (kpiIdBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiId_);
-        } else {
-          return kpiIdBuilder_.getMessageList();
-        }
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public int getKpiIdCount() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.size();
-        } else {
-          return kpiIdBuilder_.getCount();
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdListBuilderList() {
+        return getKpiIdListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdListFieldBuilder() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiIdList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiIdList_ = null;
         }
+        return kpiIdListBuilder_;
       }
+
+      private int kpiSampleType_ = 0;
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
        */
-      public monitoring.Monitoring.KpiId getKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);
-        } else {
-          return kpiIdBuilder_.getMessage(index);
-        }
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, value);
-        }
+      public Builder setKpiSampleTypeValue(int value) {
+        
+        kpiSampleType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The kpiSampleType.
        */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The kpiSampleType to set.
+       * @return This builder for chaining.
        */
-      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(value);
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        
+        kpiSampleType_ = value.getNumber();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(index, value);
-        }
+      public Builder clearKpiSampleType() {
+        
+        kpiSampleType_ = 0;
+        onChanged();
         return this;
       }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return Whether the deviceId field is set.
        */
-      public Builder addKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return The deviceId.
        */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          kpiIdBuilder_.addMessage(index, builderForValue.build());
+          return deviceIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder addAllKpiId(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiId_);
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
           onChanged();
         } else {
-          kpiIdBuilder_.addAllMessages(values);
+          deviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiIdBuilder_.clear();
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder removeKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.remove(index);
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
           onChanged();
         } else {
-          kpiIdBuilder_.remove(index);
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-          int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);  } else {
-          return kpiIdBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdOrBuilderList() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilderList();
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(kpiId_);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
-        return getKpiIdFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdBuilderList() {
-        return getKpiIdFieldBuilder().getBuilderList();
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiId_,
-                  ((bitField0_ & 0x00000001) != 0),
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
                   getParentForChildren(),
                   isClean());
-          kpiId_ = null;
+          deviceId_ = null;
         }
-        return kpiIdBuilder_;
+        return deviceIdBuilder_;
       }
 
-      private float monitoringWindowS_ ;
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return The monitoringWindowS.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return Whether the endpointId field is set.
        */
-      @java.lang.Override
-      public float getMonitoringWindowS() {
-        return monitoringWindowS_;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @param value The monitoringWindowS to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return The endpointId.
        */
-      public Builder setMonitoringWindowS(float value) {
-        
-        monitoringWindowS_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
       }
       /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder clearMonitoringWindowS() {
-        
-        monitoringWindowS_ = 0F;
-        onChanged();
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
-
-      private float samplingRateS_ ;
       /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return The samplingRateS.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      @java.lang.Override
-      public float getSamplingRateS() {
-        return samplingRateS_;
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @param value The samplingRateS to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder setSamplingRateS(float value) {
-        
-        samplingRateS_ = value;
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder clearSamplingRateS() {
-        
-        samplingRateS_ = 0F;
-        onChanged();
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
         return this;
       }
-
-      private int lastNSamples_ ;
       /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @return The lastNSamples.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      @java.lang.Override
-      public int getLastNSamples() {
-        return lastNSamples_;
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @param value The lastNSamples to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder setLastNSamples(int value) {
-        
-        lastNSamples_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
       }
       /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder clearLastNSamples() {
-        
-        lastNSamples_ = 0;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.Timestamp startTimestamp_;
+      private context.ContextOuterClass.ServiceId serviceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> startTimestampBuilder_;
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return Whether the startTimestamp field is set.
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return Whether the serviceId field is set.
        */
-      public boolean hasStartTimestamp() {
-        return startTimestampBuilder_ != null || startTimestamp_ != null;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return The startTimestamp.
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return The serviceId.
        */
-      public context.ContextOuterClass.Timestamp getStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          return startTimestampBuilder_.getMessage();
+          return serviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          startTimestamp_ = value;
+          serviceId_ = value;
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(value);
+          serviceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder setStartTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = builderForValue.build();
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(builderForValue.build());
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
-          if (startTimestamp_ != null) {
-            startTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
           } else {
-            startTimestamp_ = value;
+            serviceId_ = value;
           }
           onChanged();
         } else {
-          startTimestampBuilder_.mergeFrom(value);
+          serviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public Builder clearStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
           onChanged();
         } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
         
         onChanged();
-        return getStartTimestampFieldBuilder().getBuilder();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-        if (startTimestampBuilder_ != null) {
-          return startTimestampBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return startTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.ServiceId service_id = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getStartTimestampFieldBuilder() {
-        if (startTimestampBuilder_ == null) {
-          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getStartTimestamp(),
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
                   getParentForChildren(),
                   isClean());
-          startTimestamp_ = null;
+          serviceId_ = null;
         }
-        return startTimestampBuilder_;
+        return serviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.Timestamp endTimestamp_;
+      private context.ContextOuterClass.SliceId sliceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return Whether the endTimestamp field is set.
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return Whether the sliceId field is set.
        */
-      public boolean hasEndTimestamp() {
-        return endTimestampBuilder_ != null || endTimestamp_ != null;
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return The endTimestamp.
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return The sliceId.
        */
-      public context.ContextOuterClass.Timestamp getEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return endTimestampBuilder_.getMessage();
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endTimestamp_ = value;
+          sliceId_ = value;
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(value);
+          sliceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder setEndTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = builderForValue.build();
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(builderForValue.build());
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
-          if (endTimestamp_ != null) {
-            endTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
           } else {
-            endTimestamp_ = value;
+            sliceId_ = value;
           }
           onChanged();
         } else {
-          endTimestampBuilder_.mergeFrom(value);
+          sliceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public Builder clearEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
         
         onChanged();
-        return getEndTimestampFieldBuilder().getBuilder();
+        return getSliceIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-        if (endTimestampBuilder_ != null) {
-          return endTimestampBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
         } else {
-          return endTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>.context.SliceId slice_id = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getEndTimestampFieldBuilder() {
-        if (endTimestampBuilder_ == null) {
-          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getEndTimestamp(),
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
                   getParentForChildren(),
                   isClean());
-          endTimestamp_ = null;
+          sliceId_ = null;
         }
-        return endTimestampBuilder_;
+        return sliceIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -4377,85 +5388,101 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
+      // @@protoc_insertion_point(builder_scope:monitoring.EditedKpiDescriptor)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
-    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.EditedKpiDescriptor)
+    private static final monitoring.Monitoring.EditedKpiDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.EditedKpiDescriptor();
     }
 
-    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
+    public static monitoring.Monitoring.EditedKpiDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiQuery>
-        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
+    private static final com.google.protobuf.Parser<EditedKpiDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<EditedKpiDescriptor>() {
       @java.lang.Override
-      public KpiQuery parsePartialFrom(
+      public EditedKpiDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiQuery(input, extensionRegistry);
+        return new EditedKpiDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiQuery> parser() {
+    public static com.google.protobuf.Parser<EditedKpiDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
+    public com.google.protobuf.Parser<EditedKpiDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+    public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
+  public interface MonitorKpiRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return Whether the kpiId field is set.
      */
     boolean hasKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return The kpiId.
      */
-    context.ContextOuterClass.Uuid getKpiId();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    float getMonitoringWindowS();
+
+    /**
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    float getSamplingRateS();
   }
   /**
-   * Protobuf type {@code monitoring.KpiId}
+   * Protobuf type {@code monitoring.MonitorKpiRequest}
    */
-  public static final class KpiId extends
+  public static final class MonitorKpiRequest extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
-      KpiIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
+      MonitorKpiRequestOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiId.newBuilder() to construct.
-    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use MonitorKpiRequest.newBuilder() to construct.
+    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiId() {
+    private MonitorKpiRequest() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiId();
+      return new MonitorKpiRequest();
     }
 
     @java.lang.Override
@@ -4463,7 +5490,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiId(
+    private MonitorKpiRequest(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4482,11 +5509,11 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
               if (kpiId_ != null) {
                 subBuilder = kpiId_.toBuilder();
               }
-              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(kpiId_);
                 kpiId_ = subBuilder.buildPartial();
@@ -4494,6 +5521,16 @@ public final class Monitoring {
 
               break;
             }
+            case 21: {
+
+              monitoringWindowS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingRateS_ = input.readFloat();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4515,21 +5552,21 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid kpiId_;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return Whether the kpiId field is set.
      */
     @java.lang.Override
@@ -4537,21 +5574,47 @@ public final class Monitoring {
       return kpiId_ != null;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return The kpiId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getKpiId() {
-      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
       return getKpiId();
     }
 
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    @java.lang.Override
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
+    }
+
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
+    /**
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    @java.lang.Override
+    public float getSamplingRateS() {
+      return samplingRateS_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -4569,6 +5632,12 @@ public final class Monitoring {
       if (kpiId_ != null) {
         output.writeMessage(1, getKpiId());
       }
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -4582,6 +5651,14 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getKpiId());
       }
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingRateS_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -4592,16 +5669,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
+      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
 
       if (hasKpiId() != other.hasKpiId()) return false;
       if (hasKpiId()) {
         if (!getKpiId()
             .equals(other.getKpiId())) return false;
       }
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4617,74 +5700,80 @@ public final class Monitoring {
         hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
         hash = (53 * hash) + getKpiId().hashCode();
       }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -4697,7 +5786,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -4713,26 +5802,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiId}
+     * Protobuf type {@code monitoring.MonitorKpiRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
-        monitoring.Monitoring.KpiIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
+        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiId.newBuilder()
+      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -4756,23 +5845,27 @@ public final class Monitoring {
           kpiId_ = null;
           kpiIdBuilder_ = null;
         }
+        monitoringWindowS_ = 0F;
+
+        samplingRateS_ = 0F;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiId.getDefaultInstance();
+      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId build() {
-        monitoring.Monitoring.KpiId result = buildPartial();
+      public monitoring.Monitoring.MonitorKpiRequest build() {
+        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -4780,13 +5873,15 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId buildPartial() {
-        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
+        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
         if (kpiIdBuilder_ == null) {
           result.kpiId_ = kpiId_;
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
         onBuilt();
         return result;
       }
@@ -4825,19 +5920,25 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiId) {
-          return mergeFrom((monitoring.Monitoring.KpiId)other);
+        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
+          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
-        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
+      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
+        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
         if (other.hasKpiId()) {
           mergeKpiId(other.getKpiId());
         }
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
+        }
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -4853,11 +5954,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiId parsedMessage = null;
+        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -4867,31 +5968,31 @@ public final class Monitoring {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid kpiId_;
+      private monitoring.Monitoring.KpiId kpiId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        * @return Whether the kpiId field is set.
        */
       public boolean hasKpiId() {
         return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        * @return The kpiId.
        */
-      public context.ContextOuterClass.Uuid getKpiId() {
+      public monitoring.Monitoring.KpiId getKpiId() {
         if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
           return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -4905,10 +6006,10 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder setKpiId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
           kpiId_ = builderForValue.build();
           onChanged();
@@ -4919,13 +6020,13 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (kpiId_ != null) {
             kpiId_ =
-              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
           } else {
             kpiId_ = value;
           }
@@ -4937,7 +6038,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder clearKpiId() {
         if (kpiIdBuilder_ == null) {
@@ -4951,33 +6052,33 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
         
         onChanged();
         return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
         if (kpiIdBuilder_ != null) {
           return kpiIdBuilder_.getMessageOrBuilder();
         } else {
           return kpiId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
           getKpiIdFieldBuilder() {
         if (kpiIdBuilder_ == null) {
           kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
                   getKpiId(),
                   getParentForChildren(),
                   isClean());
@@ -4985,6 +6086,80 @@ public final class Monitoring {
         }
         return kpiIdBuilder_;
       }
+
+      private float monitoringWindowS_ ;
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
+       */
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMonitoringWindowS(float value) {
+        
+        monitoringWindowS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingRateS_ ;
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
+      }
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingRateS(float value) {
+        
+        samplingRateS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingRateS() {
+        
+        samplingRateS_ = 0F;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -4998,115 +6173,159 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
+      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
-    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
+    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
     }
 
-    public static monitoring.Monitoring.KpiId getDefaultInstance() {
+    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiId>
-        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
+    private static final com.google.protobuf.Parser<MonitorKpiRequest>
+        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
       @java.lang.Override
-      public KpiId parsePartialFrom(
+      public MonitorKpiRequest parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiId(input, extensionRegistry);
+        return new MonitorKpiRequest(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiId> parser() {
+    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiId> getParserForType() {
+    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
+  public interface KpiQueryOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    boolean hasKpiId();
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdList();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiId getKpiId(int index);
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    int getKpiIdCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index);
 
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return Whether the timestamp field is set.
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
-    boolean hasTimestamp();
+    float getMonitoringWindowS();
+
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return The timestamp.
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
-    context.ContextOuterClass.Timestamp getTimestamp();
+    float getSamplingRateS();
+
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
      */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+    int getLastNSamples();
 
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return Whether the kpiValue field is set.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The startDate.
      */
-    boolean hasKpiValue();
+    java.lang.String getStartDate();
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return The kpiValue.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The bytes for startDate.
      */
-    monitoring.Monitoring.KpiValue getKpiValue();
+    com.google.protobuf.ByteString
+        getStartDateBytes();
+
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The endDate.
      */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+    java.lang.String getEndDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The bytes for endDate.
+     */
+    com.google.protobuf.ByteString
+        getEndDateBytes();
   }
   /**
-   * Protobuf type {@code monitoring.Kpi}
+   * Protobuf type {@code monitoring.KpiQuery}
    */
-  public static final class Kpi extends
+  public static final class KpiQuery extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
-      KpiOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiQuery)
+      KpiQueryOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Kpi.newBuilder() to construct.
-    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiQuery.newBuilder() to construct.
+    private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Kpi() {
+    private KpiQuery() {
+      kpiId_ = java.util.Collections.emptyList();
+      startDate_ = "";
+      endDate_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Kpi();
+      return new KpiQuery();
     }
 
     @java.lang.Override
@@ -5114,7 +6333,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Kpi(
+    private KpiQuery(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -5122,6 +6341,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -5133,42 +6353,39 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
               }
+              kpiId_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 21: {
 
+              monitoringWindowS_ = input.readFloat();
               break;
             }
-            case 18: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
+            case 29: {
 
+              samplingRateS_ = input.readFloat();
               break;
             }
-            case 26: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiValue_ != null) {
-                subBuilder = kpiValue_.toBuilder();
-              }
-              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiValue_);
-                kpiValue_ = subBuilder.buildPartial();
-              }
+            case 32: {
+
+              lastNSamples_ = input.readUInt32();
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              startDate_ = s;
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
 
+              endDate_ = s;
               break;
             }
             default: {
@@ -5186,99 +6403,193 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+              monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+      return kpiId_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList() {
+      return kpiId_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public int getKpiIdCount() {
+      return kpiId_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId(int index) {
+      return kpiId_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index) {
+      return kpiId_.get(index);
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Timestamp timestamp_;
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return Whether the timestamp field is set.
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
     @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
     }
+
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
-     * @return The timestamp.
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    public float getSamplingRateS() {
+      return samplingRateS_;
     }
+
+    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
+    private int lastNSamples_;
     /**
-     * <code>.context.Timestamp timestamp = 2;</code>
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
+    public int getLastNSamples() {
+      return lastNSamples_;
     }
 
-    public static final int KPI_VALUE_FIELD_NUMBER = 3;
-    private monitoring.Monitoring.KpiValue kpiValue_;
+    public static final int START_DATE_FIELD_NUMBER = 5;
+    private volatile java.lang.Object startDate_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return Whether the kpiValue field is set.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The startDate.
      */
     @java.lang.Override
-    public boolean hasKpiValue() {
-      return kpiValue_ != null;
+    public java.lang.String getStartDate() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        startDate_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return The kpiValue.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The bytes for startDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiValue() {
-      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    public com.google.protobuf.ByteString
+        getStartDateBytes() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        startDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int END_DATE_FIELD_NUMBER = 6;
+    private volatile java.lang.Object endDate_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The endDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-      return getKpiValue();
+    public java.lang.String getEndDate() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The bytes for endDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndDateBytes() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -5295,14 +6606,23 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
+      for (int i = 0; i < kpiId_.size(); i++) {
+        output.writeMessage(1, kpiId_.get(i));
       }
-      if (timestamp_ != null) {
-        output.writeMessage(2, getTimestamp());
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
       }
-      if (kpiValue_ != null) {
-        output.writeMessage(3, getKpiValue());
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
+      if (lastNSamples_ != 0) {
+        output.writeUInt32(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, endDate_);
       }
       unknownFields.writeTo(output);
     }
@@ -5313,17 +6633,27 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      for (int i = 0; i < kpiId_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(1, kpiId_.get(i));
+      }
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
       }
-      if (timestamp_ != null) {
+      if (samplingRateS_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getTimestamp());
+          .computeFloatSize(3, samplingRateS_);
       }
-      if (kpiValue_ != null) {
+      if (lastNSamples_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getKpiValue());
+          .computeUInt32Size(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, endDate_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -5335,26 +6665,25 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiQuery)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
+      monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
-      }
-      if (hasKpiValue() != other.hasKpiValue()) return false;
-      if (hasKpiValue()) {
-        if (!getKpiValue()
-            .equals(other.getKpiValue())) return false;
-      }
+      if (!getKpiIdList()
+          .equals(other.getKpiIdList())) return false;
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
+      if (getLastNSamples()
+          != other.getLastNSamples()) return false;
+      if (!getStartDate()
+          .equals(other.getStartDate())) return false;
+      if (!getEndDate()
+          .equals(other.getEndDate())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -5366,86 +6695,90 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
+      if (getKpiIdCount() > 0) {
         hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
-      }
-      if (hasKpiValue()) {
-        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiValue().hashCode();
+        hash = (53 * hash) + getKpiIdList().hashCode();
       }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
+      hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
+      hash = (53 * hash) + getLastNSamples();
+      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getStartDate().hashCode();
+      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndDate().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5458,7 +6791,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiQuery prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5474,26 +6807,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.Kpi}
+     * Protobuf type {@code monitoring.KpiQuery}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
-        monitoring.Monitoring.KpiOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiQuery)
+        monitoring.Monitoring.KpiQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+                monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.Kpi.newBuilder()
+      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5506,46 +6839,45 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiIdFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
         if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          kpiIdBuilder_.clear();
         }
+        monitoringWindowS_ = 0F;
+
+        samplingRateS_ = 0F;
+
+        lastNSamples_ = 0;
+
+        startDate_ = "";
+
+        endDate_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
-        return monitoring.Monitoring.Kpi.getDefaultInstance();
+      public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiQuery.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi build() {
-        monitoring.Monitoring.Kpi result = buildPartial();
+      public monitoring.Monitoring.KpiQuery build() {
+        monitoring.Monitoring.KpiQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5553,23 +6885,23 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi buildPartial() {
-        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
+      public monitoring.Monitoring.KpiQuery buildPartial() {
+        monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
+        int from_bitField0_ = bitField0_;
         if (kpiIdBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
           result.kpiId_ = kpiId_;
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
-        } else {
-          result.timestamp_ = timestampBuilder_.build();
-        }
-        if (kpiValueBuilder_ == null) {
-          result.kpiValue_ = kpiValue_;
-        } else {
-          result.kpiValue_ = kpiValueBuilder_.build();
-        }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
+        result.lastNSamples_ = lastNSamples_;
+        result.startDate_ = startDate_;
+        result.endDate_ = endDate_;
         onBuilt();
         return result;
       }
@@ -5608,24 +6940,58 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.Kpi) {
-          return mergeFrom((monitoring.Monitoring.Kpi)other);
+        if (other instanceof monitoring.Monitoring.KpiQuery) {
+          return mergeFrom((monitoring.Monitoring.KpiQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
-        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
+        if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
+        if (kpiIdBuilder_ == null) {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiId_.isEmpty()) {
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdIsMutable();
+              kpiId_.addAll(other.kpiId_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiIdBuilder_.isEmpty()) {
+              kpiIdBuilder_.dispose();
+              kpiIdBuilder_ = null;
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdFieldBuilder() : null;
+            } else {
+              kpiIdBuilder_.addAllMessages(other.kpiId_);
+            }
+          }
         }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
         }
-        if (other.hasKpiValue()) {
-          mergeKpiValue(other.getKpiValue());
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
+        if (other.getLastNSamples() != 0) {
+          setLastNSamples(other.getLastNSamples());
+        }
+        if (!other.getStartDate().isEmpty()) {
+          startDate_ = other.startDate_;
+          onChanged();
+        }
+        if (!other.getEndDate().isEmpty()) {
+          endDate_ = other.endDate_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -5642,11 +7008,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.Kpi parsedMessage = null;
+        monitoring.Monitoring.KpiQuery parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -5655,119 +7021,241 @@ public final class Monitoring {
         }
         return this;
       }
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+        if (kpiIdBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        } else {
+          return kpiIdBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public int getKpiIdCount() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.size();
+        } else {
+          return kpiIdBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);
+        } else {
+          return kpiIdBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
+      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(value);
+          onChanged();
         } else {
-          return kpiIdBuilder_.getMessage();
+          kpiIdBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiId_ = value;
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, value);
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(value);
+          kpiIdBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiId(
+      public Builder addKpiId(
           monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
+          ensureKpiIdIsMutable();
+          kpiId_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
+          kpiIdBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiIdBuilder_.mergeFrom(value);
+          kpiIdBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addAllKpiId(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiId_);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder clearKpiId() {
         if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiIdBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      public Builder removeKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.remove(index);
+          onChanged();
+        } else {
+          kpiIdBuilder_.remove(index);
+        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+          int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);  } else {
+          return kpiIdBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdOrBuilderList() {
         if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+          return kpiIdBuilder_.getMessageOrBuilderList();
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          return java.util.Collections.unmodifiableList(kpiId_);
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
+        return getKpiIdFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdBuilderList() {
+        return getKpiIdFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
           monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
           getKpiIdFieldBuilder() {
         if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
+                  kpiId_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
           kpiId_ = null;
@@ -5775,242 +7263,301 @@ public final class Monitoring {
         return kpiIdBuilder_;
       }
 
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      private float monitoringWindowS_ ;
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
-       * @return Whether the timestamp field is set.
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
        */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
-       * @return The timestamp.
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        } else {
-          return timestampBuilder_.getMessage();
-        }
+      public Builder setMonitoringWindowS(float value) {
+        
+        monitoringWindowS_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(value);
-        }
-
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private float samplingRateS_ ;
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
+      }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
+       * @return This builder for chaining.
        */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder setSamplingRateS(float value) {
+        
+        samplingRateS_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <code>float sampling_rate_s = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
-          onChanged();
-        } else {
-          timestampBuilder_.mergeFrom(value);
-        }
-
+      public Builder clearSamplingRateS() {
+        
+        samplingRateS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private int lastNSamples_ ;
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return The lastNSamples.
        */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-          onChanged();
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
-
+      @java.lang.Override
+      public int getLastNSamples() {
+        return lastNSamples_;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @param value The lastNSamples to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLastNSamples(int value) {
+        
+        lastNSamples_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+      public Builder clearLastNSamples() {
         
+        lastNSamples_ = 0;
         onChanged();
-        return getTimestampFieldBuilder().getBuilder();
+        return this;
       }
+
+      private java.lang.Object startDate_ = "";
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return The startDate.
        */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
+      public java.lang.String getStartDate() {
+        java.lang.Object ref = startDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          startDate_ = s;
+          return s;
         } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return The bytes for startDate.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          timestamp_ = null;
+      public com.google.protobuf.ByteString
+          getStartDateBytes() {
+        java.lang.Object ref = startDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          startDate_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
-        return timestampBuilder_;
       }
-
-      private monitoring.Monitoring.KpiValue kpiValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       * @return Whether the kpiValue field is set.
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @param value The startDate to set.
+       * @return This builder for chaining.
        */
-      public boolean hasKpiValue() {
-        return kpiValueBuilder_ != null || kpiValue_ != null;
+      public Builder setStartDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        startDate_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       * @return The kpiValue.
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiValue getKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
-        } else {
-          return kpiValueBuilder_.getMessage();
-        }
+      public Builder clearStartDate() {
+        
+        startDate_ = getDefaultInstance().getStartDate();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @param value The bytes for startDate to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiValue_ = value;
-          onChanged();
-        } else {
-          kpiValueBuilder_.setMessage(value);
-        }
-
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object endDate_ = "";
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return The endDate.
        */
-      public Builder setKpiValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = builderForValue.build();
-          onChanged();
+      public java.lang.String getEndDate() {
+        java.lang.Object ref = endDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endDate_ = s;
+          return s;
         } else {
-          kpiValueBuilder_.setMessage(builderForValue.build());
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return The bytes for endDate.
        */
-      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
-          if (kpiValue_ != null) {
-            kpiValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiValue_ = value;
-          }
-          onChanged();
+      public com.google.protobuf.ByteString
+          getEndDateBytes() {
+        java.lang.Object ref = endDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endDate_ = b;
+          return b;
         } else {
-          kpiValueBuilder_.mergeFrom(value);
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @param value The endDate to set.
+       * @return This builder for chaining.
        */
-      public Builder clearKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
-          onChanged();
-        } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
-        }
-
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+      public Builder clearEndDate() {
         
+        endDate_ = getDefaultInstance().getEndDate();
         onChanged();
-        return getKpiValueFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-        if (kpiValueBuilder_ != null) {
-          return kpiValueBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
-        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @param value The bytes for endDate to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiValueFieldBuilder() {
-        if (kpiValueBuilder_ == null) {
-          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiValue_ = null;
-        }
-        return kpiValueBuilder_;
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -6025,130 +7572,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
-    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
+    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
     }
 
-    public static monitoring.Monitoring.Kpi getDefaultInstance() {
+    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Kpi>
-        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
+    private static final com.google.protobuf.Parser<KpiQuery>
+        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
       @java.lang.Override
-      public Kpi parsePartialFrom(
+      public KpiQuery parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Kpi(input, extensionRegistry);
+        return new KpiQuery(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Kpi> parser() {
+    public static com.google.protobuf.Parser<KpiQuery> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Kpi> getParserForType() {
+    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueRangeOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
+  public interface KpiIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return Whether the kpiMinValue field is set.
-     */
-    boolean hasKpiMinValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return The kpiMinValue.
-     */
-    monitoring.Monitoring.KpiValue getKpiMinValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
-
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return Whether the kpiMaxValue field is set.
-     */
-    boolean hasKpiMaxValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return The kpiMaxValue.
-     */
-    monitoring.Monitoring.KpiValue getKpiMaxValue();
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
-
-    /**
-     * <pre>
-     * by default True
-     * </pre>
-     *
-     * <code>bool inRange = 3;</code>
-     * @return The inRange.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
-    boolean getInRange();
-
+    boolean hasKpiId();
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMinValue = 4;</code>
-     * @return The includeMinValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
      */
-    boolean getIncludeMinValue();
-
+    context.ContextOuterClass.Uuid getKpiId();
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMaxValue = 5;</code>
-     * @return The includeMaxValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
      */
-    boolean getIncludeMaxValue();
+    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiValueRange}
+   * Protobuf type {@code monitoring.KpiId}
    */
-  public static final class KpiValueRange extends
+  public static final class KpiId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
-      KpiValueRangeOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
+      KpiIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValueRange.newBuilder() to construct.
-    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiId.newBuilder() to construct.
+    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValueRange() {
+    private KpiId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValueRange();
+      return new KpiId();
     }
 
     @java.lang.Override
@@ -6156,7 +7658,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValueRange(
+    private KpiId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -6175,46 +7677,18 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiMinValue_ != null) {
-                subBuilder = kpiMinValue_.toBuilder();
-              }
-              kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiMinValue_);
-                kpiMinValue_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiMaxValue_ != null) {
-                subBuilder = kpiMaxValue_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
               }
-              kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiMaxValue_);
-                kpiMaxValue_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 24: {
-
-              inRange_ = input.readBool();
-              break;
-            }
-            case 32: {
-
-              includeMinValue_ = input.readBool();
-              break;
-            }
-            case 40: {
-
-              includeMaxValue_ = input.readBool();
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -6236,112 +7710,41 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
-    }
-
-    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiValue kpiMinValue_;
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return Whether the kpiMinValue field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiMinValue() {
-      return kpiMinValue_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return The kpiMinValue.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiMinValue() {
-      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
-      return getKpiMinValue();
-    }
-
-    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
-    private monitoring.Monitoring.KpiValue kpiMaxValue_;
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return Whether the kpiMaxValue field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiMaxValue() {
-      return kpiMaxValue_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return The kpiMaxValue.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiMaxValue() {
-      return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
-    }
-    /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
-      return getKpiMaxValue();
+              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
     }
 
-    public static final int INRANGE_FIELD_NUMBER = 3;
-    private boolean inRange_;
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid kpiId_;
     /**
-     * <pre>
-     * by default True
-     * </pre>
-     *
-     * <code>bool inRange = 3;</code>
-     * @return The inRange.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public boolean getInRange() {
-      return inRange_;
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
-
-    public static final int INCLUDEMINVALUE_FIELD_NUMBER = 4;
-    private boolean includeMinValue_;
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMinValue = 4;</code>
-     * @return The includeMinValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public boolean getIncludeMinValue() {
-      return includeMinValue_;
+    public context.ContextOuterClass.Uuid getKpiId() {
+      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
     }
-
-    public static final int INCLUDEMAXVALUE_FIELD_NUMBER = 5;
-    private boolean includeMaxValue_;
     /**
-     * <pre>
-     * False is outside the interval
-     * </pre>
-     *
-     * <code>bool includeMaxValue = 5;</code>
-     * @return The includeMaxValue.
+     * <code>.context.Uuid kpi_id = 1;</code>
      */
     @java.lang.Override
-    public boolean getIncludeMaxValue() {
-      return includeMaxValue_;
+    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -6358,20 +7761,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiMinValue_ != null) {
-        output.writeMessage(1, getKpiMinValue());
-      }
-      if (kpiMaxValue_ != null) {
-        output.writeMessage(2, getKpiMaxValue());
-      }
-      if (inRange_ != false) {
-        output.writeBool(3, inRange_);
-      }
-      if (includeMinValue_ != false) {
-        output.writeBool(4, includeMinValue_);
-      }
-      if (includeMaxValue_ != false) {
-        output.writeBool(5, includeMaxValue_);
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
       unknownFields.writeTo(output);
     }
@@ -6382,25 +7773,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiMinValue_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiMinValue());
-      }
-      if (kpiMaxValue_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getKpiMaxValue());
-      }
-      if (inRange_ != false) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(3, inRange_);
-      }
-      if (includeMinValue_ != false) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(4, includeMinValue_);
-      }
-      if (includeMaxValue_ != false) {
+      if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(5, includeMaxValue_);
+          .computeMessageSize(1, getKpiId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -6412,27 +7787,16 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj;
+      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
 
-      if (hasKpiMinValue() != other.hasKpiMinValue()) return false;
-      if (hasKpiMinValue()) {
-        if (!getKpiMinValue()
-            .equals(other.getKpiMinValue())) return false;
-      }
-      if (hasKpiMaxValue() != other.hasKpiMaxValue()) return false;
-      if (hasKpiMaxValue()) {
-        if (!getKpiMaxValue()
-            .equals(other.getKpiMaxValue())) return false;
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
       }
-      if (getInRange()
-          != other.getInRange()) return false;
-      if (getIncludeMinValue()
-          != other.getIncludeMinValue()) return false;
-      if (getIncludeMaxValue()
-          != other.getIncludeMaxValue()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6444,91 +7808,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiMinValue()) {
-        hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiMinValue().hashCode();
-      }
-      if (hasKpiMaxValue()) {
-        hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiMaxValue().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
       }
-      hash = (37 * hash) + INRANGE_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-          getInRange());
-      hash = (37 * hash) + INCLUDEMINVALUE_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-          getIncludeMinValue());
-      hash = (37 * hash) + INCLUDEMAXVALUE_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-          getIncludeMaxValue());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -6541,7 +7892,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiValueRange prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -6557,26 +7908,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValueRange}
+     * Protobuf type {@code monitoring.KpiId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiValueRange)
-        monitoring.Monitoring.KpiValueRangeOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
+        monitoring.Monitoring.KpiIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValueRange.newBuilder()
+      // Construct using monitoring.Monitoring.KpiId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -6586,528 +7937,248 @@ public final class Monitoring {
         super(parent);
         maybeForceBuilderInitialization();
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = null;
-        } else {
-          kpiMinValue_ = null;
-          kpiMinValueBuilder_ = null;
-        }
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = null;
-        } else {
-          kpiMaxValue_ = null;
-          kpiMaxValueBuilder_ = null;
-        }
-        inRange_ = false;
-
-        includeMinValue_ = false;
-
-        includeMaxValue_ = false;
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange build() {
-        monitoring.Monitoring.KpiValueRange result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange buildPartial() {
-        monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
-        if (kpiMinValueBuilder_ == null) {
-          result.kpiMinValue_ = kpiMinValue_;
-        } else {
-          result.kpiMinValue_ = kpiMinValueBuilder_.build();
-        }
-        if (kpiMaxValueBuilder_ == null) {
-          result.kpiMaxValue_ = kpiMaxValue_;
-        } else {
-          result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
-        }
-        result.inRange_ = inRange_;
-        result.includeMinValue_ = includeMinValue_;
-        result.includeMaxValue_ = includeMaxValue_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiValueRange) {
-          return mergeFrom((monitoring.Monitoring.KpiValueRange)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiValueRange other) {
-        if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this;
-        if (other.hasKpiMinValue()) {
-          mergeKpiMinValue(other.getKpiMinValue());
-        }
-        if (other.hasKpiMaxValue()) {
-          mergeKpiMaxValue(other.getKpiMaxValue());
-        }
-        if (other.getInRange() != false) {
-          setInRange(other.getInRange());
-        }
-        if (other.getIncludeMinValue() != false) {
-          setIncludeMinValue(other.getIncludeMinValue());
-        }
-        if (other.getIncludeMaxValue() != false) {
-          setIncludeMaxValue(other.getIncludeMaxValue());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.KpiValueRange parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private monitoring.Monitoring.KpiValue kpiMinValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       * @return Whether the kpiMinValue field is set.
-       */
-      public boolean hasKpiMinValue() {
-        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       * @return The kpiMinValue.
-       */
-      public monitoring.Monitoring.KpiValue getKpiMinValue() {
-        if (kpiMinValueBuilder_ == null) {
-          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
-        } else {
-          return kpiMinValueBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMinValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiMinValue_ = value;
-          onChanged();
-        } else {
-          kpiMinValueBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder setKpiMinValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiMinValueBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMinValueBuilder_ == null) {
-          if (kpiMinValue_ != null) {
-            kpiMinValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiMinValue_ = value;
-          }
-          onChanged();
-        } else {
-          kpiMinValueBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public Builder clearKpiMinValue() {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = null;
-          onChanged();
-        } else {
-          kpiMinValue_ = null;
-          kpiMinValueBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
-        
-        onChanged();
-        return getKpiMinValueFieldBuilder().getBuilder();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
-        if (kpiMinValueBuilder_ != null) {
-          return kpiMinValueBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
         } else {
-          return kpiMinValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
+        return this;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiMinValueFieldBuilder() {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiMinValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiMinValue_ = null;
-        }
-        return kpiMinValueBuilder_;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
       }
 
-      private monitoring.Monitoring.KpiValue kpiMaxValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_;
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       * @return Whether the kpiMaxValue field is set.
-       */
-      public boolean hasKpiMaxValue() {
-        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiId.getDefaultInstance();
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       * @return The kpiMaxValue.
-       */
-      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
-        if (kpiMaxValueBuilder_ == null) {
-          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
-        } else {
-          return kpiMaxValueBuilder_.getMessage();
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId build() {
+        monitoring.Monitoring.KpiId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMaxValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiMaxValue_ = value;
-          onChanged();
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId buildPartial() {
+        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
         } else {
-          kpiMaxValueBuilder_.setMessage(value);
+          result.kpiId_ = kpiIdBuilder_.build();
         }
+        onBuilt();
+        return result;
+      }
 
-        return this;
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder setKpiMaxValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = builderForValue.build();
-          onChanged();
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiId) {
+          return mergeFrom((monitoring.Monitoring.KpiId)other);
         } else {
-          kpiMaxValueBuilder_.setMessage(builderForValue.build());
+          super.mergeFrom(other);
+          return this;
         }
+      }
 
+      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
+        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMaxValueBuilder_ == null) {
-          if (kpiMaxValue_ != null) {
-            kpiMaxValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiMaxValue_ = value;
-          }
-          onChanged();
-        } else {
-          kpiMaxValueBuilder_.mergeFrom(value);
-        }
 
-        return this;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      public Builder clearKpiMaxValue() {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = null;
-          onChanged();
-        } else {
-          kpiMaxValue_ = null;
-          kpiMaxValueBuilder_ = null;
-        }
 
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
+
+      private context.ContextOuterClass.Uuid kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
-        
-        onChanged();
-        return getKpiMaxValueFieldBuilder().getBuilder();
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
-        if (kpiMaxValueBuilder_ != null) {
-          return kpiMaxValueBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.Uuid getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
         } else {
-          return kpiMaxValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiMaxValueFieldBuilder() {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiMaxValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiMaxValue_ = null;
+          return kpiIdBuilder_.getMessage();
         }
-        return kpiMaxValueBuilder_;
-      }
-
-      private boolean inRange_ ;
-      /**
-       * <pre>
-       * by default True
-       * </pre>
-       *
-       * <code>bool inRange = 3;</code>
-       * @return The inRange.
-       */
-      @java.lang.Override
-      public boolean getInRange() {
-        return inRange_;
-      }
-      /**
-       * <pre>
-       * by default True
-       * </pre>
-       *
-       * <code>bool inRange = 3;</code>
-       * @param value The inRange to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInRange(boolean value) {
-        
-        inRange_ = value;
-        onChanged();
-        return this;
       }
       /**
-       * <pre>
-       * by default True
-       * </pre>
-       *
-       * <code>bool inRange = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearInRange() {
-        
-        inRange_ = false;
-        onChanged();
+      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
-
-      private boolean includeMinValue_ ;
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMinValue = 4;</code>
-       * @return The includeMinValue.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean getIncludeMinValue() {
-        return includeMinValue_;
+      public Builder setKpiId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMinValue = 4;</code>
-       * @param value The includeMinValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder setIncludeMinValue(boolean value) {
-        
-        includeMinValue_ = value;
-        onChanged();
+      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMinValue = 4;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearIncludeMinValue() {
-        
-        includeMinValue_ = false;
-        onChanged();
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
         return this;
       }
-
-      private boolean includeMaxValue_ ;
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMaxValue = 5;</code>
-       * @return The includeMaxValue.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean getIncludeMaxValue() {
-        return includeMaxValue_;
+      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMaxValue = 5;</code>
-       * @param value The includeMaxValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder setIncludeMaxValue(boolean value) {
-        
-        includeMaxValue_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+        }
       }
       /**
-       * <pre>
-       * False is outside the interval
-       * </pre>
-       *
-       * <code>bool includeMaxValue = 5;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearIncludeMaxValue() {
-        
-        includeMaxValue_ = false;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -7122,155 +8193,113 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
-    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
+    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
     }
 
-    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
+    public static monitoring.Monitoring.KpiId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiValueRange>
-        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
+    private static final com.google.protobuf.Parser<KpiId>
+        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
       @java.lang.Override
-      public KpiValueRange parsePartialFrom(
+      public KpiId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValueRange(input, extensionRegistry);
+        return new KpiId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValueRange> parser() {
+    public static com.google.protobuf.Parser<KpiId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
+    public com.google.protobuf.Parser<KpiId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
+  public interface KpiOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>int32 int32Val = 1;</code>
-     * @return Whether the int32Val field is set.
-     */
-    boolean hasInt32Val();
-    /**
-     * <code>int32 int32Val = 1;</code>
-     * @return The int32Val.
-     */
-    int getInt32Val();
-
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return Whether the uint32Val field is set.
-     */
-    boolean hasUint32Val();
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return The uint32Val.
-     */
-    int getUint32Val();
-
-    /**
-     * <code>int64 int64Val = 3;</code>
-     * @return Whether the int64Val field is set.
-     */
-    boolean hasInt64Val();
-    /**
-     * <code>int64 int64Val = 3;</code>
-     * @return The int64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
-    long getInt64Val();
-
+    boolean hasKpiId();
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return Whether the uint64Val field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
-    boolean hasUint64Val();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return The uint64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    long getUint64Val();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
 
     /**
-     * <code>float floatVal = 5;</code>
-     * @return Whether the floatVal field is set.
+     * <code>string timestamp = 2;</code>
+     * @return The timestamp.
      */
-    boolean hasFloatVal();
+    java.lang.String getTimestamp();
     /**
-     * <code>float floatVal = 5;</code>
-     * @return The floatVal.
+     * <code>string timestamp = 2;</code>
+     * @return The bytes for timestamp.
      */
-    float getFloatVal();
+    com.google.protobuf.ByteString
+        getTimestampBytes();
 
     /**
-     * <code>string stringVal = 6;</code>
-     * @return Whether the stringVal field is set.
-     */
-    boolean hasStringVal();
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return The stringVal.
-     */
-    java.lang.String getStringVal();
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return The bytes for stringVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
-    com.google.protobuf.ByteString
-        getStringValBytes();
-
+    boolean hasKpiValue();
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
-    boolean hasBoolVal();
+    monitoring.Monitoring.KpiValue getKpiValue();
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
      */
-    boolean getBoolVal();
-
-    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiValue}
+   * Protobuf type {@code monitoring.Kpi}
    */
-  public static final class KpiValue extends
+  public static final class Kpi extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
-      KpiValueOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
+      KpiOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValue.newBuilder() to construct.
-    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Kpi.newBuilder() to construct.
+    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValue() {
+    private Kpi() {
+      timestamp_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValue();
+      return new Kpi();
     }
 
     @java.lang.Override
@@ -7278,7 +8307,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValue(
+    private Kpi(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -7296,40 +8325,36 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 8: {
-              valueCase_ = 1;
-              value_ = input.readInt32();
-              break;
-            }
-            case 16: {
-              valueCase_ = 2;
-              value_ = input.readUInt32();
-              break;
-            }
-            case 24: {
-              valueCase_ = 3;
-              value_ = input.readInt64();
-              break;
-            }
-            case 32: {
-              valueCase_ = 4;
-              value_ = input.readUInt64();
-              break;
-            }
-            case 45: {
-              valueCase_ = 5;
-              value_ = input.readFloat();
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
-            case 50: {
+            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
-              valueCase_ = 6;
-              value_ = s;
+
+              timestamp_ = s;
               break;
             }
-            case 56: {
-              valueCase_ = 7;
-              value_ = input.readBool();
+            case 26: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiValue_ != null) {
+                subBuilder = kpiValue_.toBuilder();
+              }
+              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValue_);
+                kpiValue_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -7353,244 +8378,105 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
-    }
-
-    private int valueCase_ = 0;
-    private java.lang.Object value_;
-    public enum ValueCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      INT32VAL(1),
-      UINT32VAL(2),
-      INT64VAL(3),
-      UINT64VAL(4),
-      FLOATVAL(5),
-      STRINGVAL(6),
-      BOOLVAL(7),
-      VALUE_NOT_SET(0);
-      private final int value;
-      private ValueCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ValueCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ValueCase forNumber(int value) {
-        switch (value) {
-          case 1: return INT32VAL;
-          case 2: return UINT32VAL;
-          case 3: return INT64VAL;
-          case 4: return UINT64VAL;
-          case 5: return FLOATVAL;
-          case 6: return STRINGVAL;
-          case 7: return BOOLVAL;
-          case 0: return VALUE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ValueCase
-    getValueCase() {
-      return ValueCase.forNumber(
-          valueCase_);
-    }
-
-    public static final int INT32VAL_FIELD_NUMBER = 1;
-    /**
-     * <code>int32 int32Val = 1;</code>
-     * @return Whether the int32Val field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt32Val() {
-      return valueCase_ == 1;
-    }
-    /**
-     * <code>int32 int32Val = 1;</code>
-     * @return The int32Val.
-     */
-    @java.lang.Override
-    public int getInt32Val() {
-      if (valueCase_ == 1) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int UINT32VAL_FIELD_NUMBER = 2;
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return Whether the uint32Val field is set.
-     */
-    @java.lang.Override
-    public boolean hasUint32Val() {
-      return valueCase_ == 2;
-    }
-    /**
-     * <code>uint32 uint32Val = 2;</code>
-     * @return The uint32Val.
-     */
-    @java.lang.Override
-    public int getUint32Val() {
-      if (valueCase_ == 2) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
+              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
     }
 
-    public static final int INT64VAL_FIELD_NUMBER = 3;
-    /**
-     * <code>int64 int64Val = 3;</code>
-     * @return Whether the int64Val field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt64Val() {
-      return valueCase_ == 3;
-    }
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>int64 int64Val = 3;</code>
-     * @return The int64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public long getInt64Val() {
-      if (valueCase_ == 3) {
-        return (java.lang.Long) value_;
-      }
-      return 0L;
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
-
-    public static final int UINT64VAL_FIELD_NUMBER = 4;
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return Whether the uint64Val field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public boolean hasUint64Val() {
-      return valueCase_ == 4;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>uint64 uint64Val = 4;</code>
-     * @return The uint64Val.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public long getUint64Val() {
-      if (valueCase_ == 4) {
-        return (java.lang.Long) value_;
-      }
-      return 0L;
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
     }
 
-    public static final int FLOATVAL_FIELD_NUMBER = 5;
-    /**
-     * <code>float floatVal = 5;</code>
-     * @return Whether the floatVal field is set.
-     */
-    @java.lang.Override
-    public boolean hasFloatVal() {
-      return valueCase_ == 5;
-    }
+    public static final int TIMESTAMP_FIELD_NUMBER = 2;
+    private volatile java.lang.Object timestamp_;
     /**
-     * <code>float floatVal = 5;</code>
-     * @return The floatVal.
+     * <code>string timestamp = 2;</code>
+     * @return The timestamp.
      */
     @java.lang.Override
-    public float getFloatVal() {
-      if (valueCase_ == 5) {
-        return (java.lang.Float) value_;
-      }
-      return 0F;
-    }
-
-    public static final int STRINGVAL_FIELD_NUMBER = 6;
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return Whether the stringVal field is set.
-     */
-    public boolean hasStringVal() {
-      return valueCase_ == 6;
-    }
-    /**
-     * <code>string stringVal = 6;</code>
-     * @return The stringVal.
-     */
-    public java.lang.String getStringVal() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 6) {
-        ref = value_;
-      }
+    public java.lang.String getTimestamp() {
+      java.lang.Object ref = timestamp_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        if (valueCase_ == 6) {
-          value_ = s;
-        }
+        timestamp_ = s;
         return s;
       }
     }
     /**
-     * <code>string stringVal = 6;</code>
-     * @return The bytes for stringVal.
+     * <code>string timestamp = 2;</code>
+     * @return The bytes for timestamp.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
-        getStringValBytes() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 6) {
-        ref = value_;
-      }
+        getTimestampBytes() {
+      java.lang.Object ref = timestamp_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        if (valueCase_ == 6) {
-          value_ = b;
-        }
+        timestamp_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int BOOLVAL_FIELD_NUMBER = 7;
+    public static final int KPI_VALUE_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiValue kpiValue_;
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
     @java.lang.Override
-    public boolean hasBoolVal() {
-      return valueCase_ == 7;
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
     }
     /**
-     * <code>bool boolVal = 7;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
     @java.lang.Override
-    public boolean getBoolVal() {
-      if (valueCase_ == 7) {
-        return (java.lang.Boolean) value_;
-      }
-      return false;
+    public monitoring.Monitoring.KpiValue getKpiValue() {
+      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+      return getKpiValue();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -7607,32 +8493,14 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (valueCase_ == 1) {
-        output.writeInt32(
-            1, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 2) {
-        output.writeUInt32(
-            2, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 3) {
-        output.writeInt64(
-            3, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 4) {
-        output.writeUInt64(
-            4, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 5) {
-        output.writeFloat(
-            5, (float)((java.lang.Float) value_));
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
-      if (valueCase_ == 6) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, value_);
+      if (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_);
       }
-      if (valueCase_ == 7) {
-        output.writeBool(
-            7, (boolean)((java.lang.Boolean) value_));
+      if (kpiValue_ != null) {
+        output.writeMessage(3, getKpiValue());
       }
       unknownFields.writeTo(output);
     }
@@ -7643,38 +8511,16 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (valueCase_ == 1) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(
-              1, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 2) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(
-              2, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 3) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(
-              3, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 4) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(
-              4, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 5) {
+      if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(
-              5, (float)((java.lang.Float) value_));
+          .computeMessageSize(1, getKpiId());
       }
-      if (valueCase_ == 6) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, value_);
+      if (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_);
       }
-      if (valueCase_ == 7) {
+      if (kpiValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(
-              7, (boolean)((java.lang.Boolean) value_));
+          .computeMessageSize(3, getKpiValue());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -7686,44 +8532,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
+      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
+      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
 
-      if (!getValueCase().equals(other.getValueCase())) return false;
-      switch (valueCase_) {
-        case 1:
-          if (getInt32Val()
-              != other.getInt32Val()) return false;
-          break;
-        case 2:
-          if (getUint32Val()
-              != other.getUint32Val()) return false;
-          break;
-        case 3:
-          if (getInt64Val()
-              != other.getInt64Val()) return false;
-          break;
-        case 4:
-          if (getUint64Val()
-              != other.getUint64Val()) return false;
-          break;
-        case 5:
-          if (java.lang.Float.floatToIntBits(getFloatVal())
-              != java.lang.Float.floatToIntBits(
-                  other.getFloatVal())) return false;
-          break;
-        case 6:
-          if (!getStringVal()
-              .equals(other.getStringVal())) return false;
-          break;
-        case 7:
-          if (getBoolVal()
-              != other.getBoolVal()) return false;
-          break;
-        case 0:
-        default:
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!getTimestamp()
+          .equals(other.getTimestamp())) return false;
+      if (hasKpiValue() != other.hasKpiValue()) return false;
+      if (hasKpiValue()) {
+        if (!getKpiValue()
+            .equals(other.getKpiValue())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -7736,110 +8560,84 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      switch (valueCase_) {
-        case 1:
-          hash = (37 * hash) + INT32VAL_FIELD_NUMBER;
-          hash = (53 * hash) + getInt32Val();
-          break;
-        case 2:
-          hash = (37 * hash) + UINT32VAL_FIELD_NUMBER;
-          hash = (53 * hash) + getUint32Val();
-          break;
-        case 3:
-          hash = (37 * hash) + INT64VAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              getInt64Val());
-          break;
-        case 4:
-          hash = (37 * hash) + UINT64VAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              getUint64Val());
-          break;
-        case 5:
-          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
-          hash = (53 * hash) + java.lang.Float.floatToIntBits(
-              getFloatVal());
-          break;
-        case 6:
-          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
-          hash = (53 * hash) + getStringVal().hashCode();
-          break;
-        case 7:
-          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-              getBoolVal());
-          break;
-        case 0:
-        default:
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp().hashCode();
+      if (hasKpiValue()) {
+        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValue().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
+    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -7852,7 +8650,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -7868,26 +8666,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValue}
+     * Protobuf type {@code monitoring.Kpi}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
-        monitoring.Monitoring.KpiValueOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
+        monitoring.Monitoring.KpiOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
+      // Construct using monitoring.Monitoring.Kpi.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -7905,25 +8703,37 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        valueCase_ = 0;
-        value_ = null;
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        timestamp_ = "";
+
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValue.getDefaultInstance();
+      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+        return monitoring.Monitoring.Kpi.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue build() {
-        monitoring.Monitoring.KpiValue result = buildPartial();
+      public monitoring.Monitoring.Kpi build() {
+        monitoring.Monitoring.Kpi result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -7931,30 +8741,19 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue buildPartial() {
-        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
-        if (valueCase_ == 1) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 2) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 3) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 4) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 5) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 6) {
-          result.value_ = value_;
+      public monitoring.Monitoring.Kpi buildPartial() {
+        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
         }
-        if (valueCase_ == 7) {
-          result.value_ = value_;
+        result.timestamp_ = timestamp_;
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.build();
         }
-        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -7993,50 +8792,25 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiValue) {
-          return mergeFrom((monitoring.Monitoring.KpiValue)other);
+        if (other instanceof monitoring.Monitoring.Kpi) {
+          return mergeFrom((monitoring.Monitoring.Kpi)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
-        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
-        switch (other.getValueCase()) {
-          case INT32VAL: {
-            setInt32Val(other.getInt32Val());
-            break;
-          }
-          case UINT32VAL: {
-            setUint32Val(other.getUint32Val());
-            break;
-          }
-          case INT64VAL: {
-            setInt64Val(other.getInt64Val());
-            break;
-          }
-          case UINT64VAL: {
-            setUint64Val(other.getUint64Val());
-            break;
-          }
-          case FLOATVAL: {
-            setFloatVal(other.getFloatVal());
-            break;
-          }
-          case STRINGVAL: {
-            valueCase_ = 6;
-            value_ = other.value_;
-            onChanged();
-            break;
-          }
-          case BOOLVAL: {
-            setBoolVal(other.getBoolVal());
-            break;
-          }
-          case VALUE_NOT_SET: {
-            break;
-          }
+      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
+        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          onChanged();
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -8053,11 +8827,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiValue parsedMessage = null;
+        monitoring.Monitoring.Kpi parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8066,364 +8840,320 @@ public final class Monitoring {
         }
         return this;
       }
-      private int valueCase_ = 0;
-      private java.lang.Object value_;
-      public ValueCase
-          getValueCase() {
-        return ValueCase.forNumber(
-            valueCase_);
-      }
-
-      public Builder clearValue() {
-        valueCase_ = 0;
-        value_ = null;
-        onChanged();
-        return this;
-      }
-
-
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @return Whether the int32Val field is set.
-       */
-      public boolean hasInt32Val() {
-        return valueCase_ == 1;
-      }
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @return The int32Val.
-       */
-      public int getInt32Val() {
-        if (valueCase_ == 1) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @param value The int32Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt32Val(int value) {
-        valueCase_ = 1;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int32 int32Val = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearInt32Val() {
-        if (valueCase_ == 1) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @return Whether the uint32Val field is set.
-       */
-      public boolean hasUint32Val() {
-        return valueCase_ == 2;
-      }
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @return The uint32Val.
-       */
-      public int getUint32Val() {
-        if (valueCase_ == 2) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @param value The uint32Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint32Val(int value) {
-        valueCase_ = 2;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 uint32Val = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearUint32Val() {
-        if (valueCase_ == 2) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
 
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>int64 int64Val = 3;</code>
-       * @return Whether the int64Val field is set.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public boolean hasInt64Val() {
-        return valueCase_ == 3;
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>int64 int64Val = 3;</code>
-       * @return The int64Val.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public long getInt64Val() {
-        if (valueCase_ == 3) {
-          return (java.lang.Long) value_;
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
         }
-        return 0L;
-      }
-      /**
-       * <code>int64 int64Val = 3;</code>
-       * @param value The int64Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt64Val(long value) {
-        valueCase_ = 3;
-        value_ = value;
-        onChanged();
-        return this;
       }
       /**
-       * <code>int64 int64Val = 3;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearInt64Val() {
-        if (valueCase_ == 3) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
           onChanged();
-        }
-        return this;
-      }
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
 
-      /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @return Whether the uint64Val field is set.
-       */
-      public boolean hasUint64Val() {
-        return valueCase_ == 4;
+        return this;
       }
       /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @return The uint64Val.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public long getUint64Val() {
-        if (valueCase_ == 4) {
-          return (java.lang.Long) value_;
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
         }
-        return 0L;
-      }
-      /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @param value The uint64Val to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint64Val(long value) {
-        valueCase_ = 4;
-        value_ = value;
-        onChanged();
+
         return this;
       }
       /**
-       * <code>uint64 uint64Val = 4;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearUint64Val() {
-        if (valueCase_ == 4) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
           onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
         }
-        return this;
-      }
 
-      /**
-       * <code>float floatVal = 5;</code>
-       * @return Whether the floatVal field is set.
-       */
-      public boolean hasFloatVal() {
-        return valueCase_ == 5;
+        return this;
       }
       /**
-       * <code>float floatVal = 5;</code>
-       * @return The floatVal.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public float getFloatVal() {
-        if (valueCase_ == 5) {
-          return (java.lang.Float) value_;
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
-        return 0F;
+
+        return this;
       }
       /**
-       * <code>float floatVal = 5;</code>
-       * @param value The floatVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setFloatVal(float value) {
-        valueCase_ = 5;
-        value_ = value;
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
         onChanged();
-        return this;
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>float floatVal = 5;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearFloatVal() {
-        if (valueCase_ == 5) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
-        return this;
       }
-
       /**
-       * <code>string stringVal = 6;</code>
-       * @return Whether the stringVal field is set.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean hasStringVal() {
-        return valueCase_ == 6;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
+
+      private java.lang.Object timestamp_ = "";
       /**
-       * <code>string stringVal = 6;</code>
-       * @return The stringVal.
+       * <code>string timestamp = 2;</code>
+       * @return The timestamp.
        */
-      @java.lang.Override
-      public java.lang.String getStringVal() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 6) {
-          ref = value_;
-        }
+      public java.lang.String getTimestamp() {
+        java.lang.Object ref = timestamp_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          if (valueCase_ == 6) {
-            value_ = s;
-          }
+          timestamp_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string stringVal = 6;</code>
-       * @return The bytes for stringVal.
+       * <code>string timestamp = 2;</code>
+       * @return The bytes for timestamp.
        */
-      @java.lang.Override
       public com.google.protobuf.ByteString
-          getStringValBytes() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 6) {
-          ref = value_;
-        }
+          getTimestampBytes() {
+        java.lang.Object ref = timestamp_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          if (valueCase_ == 6) {
-            value_ = b;
-          }
+          timestamp_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string stringVal = 6;</code>
-       * @param value The stringVal to set.
+       * <code>string timestamp = 2;</code>
+       * @param value The timestamp to set.
        * @return This builder for chaining.
        */
-      public Builder setStringVal(
+      public Builder setTimestamp(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  valueCase_ = 6;
-        value_ = value;
+  
+        timestamp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 6;</code>
+       * <code>string timestamp = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearStringVal() {
-        if (valueCase_ == 6) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
+      public Builder clearTimestamp() {
+        
+        timestamp_ = getDefaultInstance().getTimestamp();
+        onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 6;</code>
-       * @param value The bytes for stringVal to set.
+       * <code>string timestamp = 2;</code>
+       * @param value The bytes for timestamp to set.
        * @return This builder for chaining.
        */
-      public Builder setStringValBytes(
+      public Builder setTimestampBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
-        valueCase_ = 6;
-        value_ = value;
+        
+        timestamp_ = value;
         onChanged();
         return this;
       }
 
+      private monitoring.Monitoring.KpiValue kpiValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
       /**
-       * <code>bool boolVal = 7;</code>
-       * @return Whether the boolVal field is set.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return Whether the kpiValue field is set.
        */
-      public boolean hasBoolVal() {
-        return valueCase_ == 7;
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
       }
       /**
-       * <code>bool boolVal = 7;</code>
-       * @return The boolVal.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return The kpiValue.
        */
-      public boolean getBoolVal() {
-        if (valueCase_ == 7) {
-          return (java.lang.Boolean) value_;
+      public monitoring.Monitoring.KpiValue getKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        } else {
+          return kpiValueBuilder_.getMessage();
         }
-        return false;
       }
       /**
-       * <code>bool boolVal = 7;</code>
-       * @param value The boolVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder setBoolVal(boolean value) {
-        valueCase_ = 7;
-        value_ = value;
-        onChanged();
+      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValue_ = value;
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>bool boolVal = 7;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder clearBoolVal() {
-        if (valueCase_ == 7) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setKpiValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (kpiValue_ != null) {
+            kpiValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
           onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
         }
+
         return this;
       }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+        if (kpiValueBuilder_ != null) {
+          return kpiValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiValueFieldBuilder() {
+        if (kpiValueBuilder_ == null) {
+          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiValue_ = null;
+        }
+        return kpiValueBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -8437,95 +9167,100 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
+      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
-    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
+    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
     }
 
-    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
+    public static monitoring.Monitoring.Kpi getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiValue>
-        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
+    private static final com.google.protobuf.Parser<Kpi>
+        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
       @java.lang.Override
-      public KpiValue parsePartialFrom(
+      public Kpi parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValue(input, extensionRegistry);
+        return new Kpi(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValue> parser() {
+    public static com.google.protobuf.Parser<Kpi> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValue> getParserForType() {
+    public com.google.protobuf.Parser<Kpi> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
+  public interface KpiValueRangeOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
      */
-    java.util.List<monitoring.Monitoring.Kpi> 
-        getKpiListList();
+    boolean hasKpiMinValue();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
      */
-    monitoring.Monitoring.Kpi getKpiList(int index);
+    monitoring.Monitoring.KpiValue getKpiMinValue();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
      */
-    int getKpiListCount();
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
+
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList();
+    boolean hasKpiMaxValue();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
      */
-    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
-        int index);
+    monitoring.Monitoring.KpiValue getKpiMaxValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiList}
+   * Protobuf type {@code monitoring.KpiValueRange}
    */
-  public static final class KpiList extends
+  public static final class KpiValueRange extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
-      KpiListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
+      KpiValueRangeOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiList.newBuilder() to construct.
-    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiValueRange.newBuilder() to construct.
+    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiList() {
-      kpiList_ = java.util.Collections.emptyList();
+    private KpiValueRange() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiList();
+      return new KpiValueRange();
     }
 
     @java.lang.Override
@@ -8533,7 +9268,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiList(
+    private KpiValueRange(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -8541,7 +9276,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -8553,12 +9287,29 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
-                mutable_bitField0_ |= 0x00000001;
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiMinValue_ != null) {
+                subBuilder = kpiMinValue_.toBuilder();
               }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
+              kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiMinValue_);
+                kpiMinValue_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiMaxValue_ != null) {
+                subBuilder = kpiMaxValue_.toBuilder();
+              }
+              kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiMaxValue_);
+                kpiMaxValue_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -8576,64 +9327,73 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
+    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiValue kpiMinValue_;
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-      return kpiList_;
+    public boolean hasKpiMinValue() {
+      return kpiMinValue_ != null;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public monitoring.Monitoring.KpiValue getKpiMinValue() {
+      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+      return getKpiMinValue();
     }
+
+    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
+    private monitoring.Monitoring.KpiValue kpiMaxValue_;
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getKpiList(int index) {
-      return kpiList_.get(index);
+    public boolean hasKpiMaxValue() {
+      return kpiMaxValue_ != null;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
-        int index) {
-      return kpiList_.get(index);
+    public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+      return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+      return getKpiMaxValue();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -8650,8 +9410,11 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < kpiList_.size(); i++) {
-        output.writeMessage(1, kpiList_.get(i));
+      if (kpiMinValue_ != null) {
+        output.writeMessage(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        output.writeMessage(2, getKpiMaxValue());
       }
       unknownFields.writeTo(output);
     }
@@ -8662,9 +9425,13 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < kpiList_.size(); i++) {
+      if (kpiMinValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiList_.get(i));
+          .computeMessageSize(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getKpiMaxValue());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -8676,13 +9443,21 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
+      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj;
 
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (hasKpiMinValue() != other.hasKpiMinValue()) return false;
+      if (hasKpiMinValue()) {
+        if (!getKpiMinValue()
+            .equals(other.getKpiMinValue())) return false;
+      }
+      if (hasKpiMaxValue() != other.hasKpiMaxValue()) return false;
+      if (hasKpiMaxValue()) {
+        if (!getKpiMaxValue()
+            .equals(other.getKpiMaxValue())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -8694,78 +9469,82 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiListCount() > 0) {
-        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiListList().hashCode();
+      if (hasKpiMinValue()) {
+        hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMinValue().hashCode();
+      }
+      if (hasKpiMaxValue()) {
+        hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMaxValue().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValueRange parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -8778,7 +9557,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiValueRange prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -8794,26 +9573,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiList}
+     * Protobuf type {@code monitoring.KpiValueRange}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
-        monitoring.Monitoring.KpiListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValueRange)
+        monitoring.Monitoring.KpiValueRangeOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      // Construct using monitoring.Monitoring.KpiValueRange.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -8826,17 +9605,22 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
         } else {
-          kpiListBuilder_.clear();
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+        } else {
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
         }
         return this;
       }
@@ -8844,17 +9628,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiList.getDefaultInstance();
+      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList build() {
-        monitoring.Monitoring.KpiList result = buildPartial();
+      public monitoring.Monitoring.KpiValueRange build() {
+        monitoring.Monitoring.KpiValueRange result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -8862,17 +9646,17 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList buildPartial() {
-        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiList_ = kpiList_;
+      public monitoring.Monitoring.KpiValueRange buildPartial() {
+        monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
+        if (kpiMinValueBuilder_ == null) {
+          result.kpiMinValue_ = kpiMinValue_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.kpiMinValue_ = kpiMinValueBuilder_.build();
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          result.kpiMaxValue_ = kpiMaxValue_;
+        } else {
+          result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
         }
         onBuilt();
         return result;
@@ -8912,41 +9696,21 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiList) {
-          return mergeFrom((monitoring.Monitoring.KpiList)other);
+        if (other instanceof monitoring.Monitoring.KpiValueRange) {
+          return mergeFrom((monitoring.Monitoring.KpiValueRange)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
-        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
-        if (kpiListBuilder_ == null) {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiList_.isEmpty()) {
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
-            } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
-            }
-          }
+      public Builder mergeFrom(monitoring.Monitoring.KpiValueRange other) {
+        if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this;
+        if (other.hasKpiMinValue()) {
+          mergeKpiMinValue(other.getKpiMinValue());
+        }
+        if (other.hasKpiMaxValue()) {
+          mergeKpiMaxValue(other.getKpiMaxValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -8963,11 +9727,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiList parsedMessage = null;
+        monitoring.Monitoring.KpiValueRange parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8976,246 +9740,243 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
-          bitField0_ |= 0x00000001;
-         }
-      }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
-
-      /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-        if (kpiListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiList_);
-        } else {
-          return kpiListBuilder_.getMessageList();
-        }
-      }
+      private monitoring.Monitoring.KpiValue kpiMinValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return Whether the kpiMinValue field is set.
        */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
-        } else {
-          return kpiListBuilder_.getCount();
-        }
+      public boolean hasKpiMinValue() {
+        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return The kpiMinValue.
        */
-      public monitoring.Monitoring.Kpi getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
+      public monitoring.Monitoring.KpiValue getKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
         } else {
-          return kpiListBuilder_.getMessage(index);
+          return kpiMinValueBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
+          kpiMinValue_ = value;
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, value);
+          kpiMinValueBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
+      public Builder setKpiMinValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = builderForValue.build();
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
+          kpiMinValueBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
+          if (kpiMinValue_ != null) {
+            kpiMinValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiMinValue_ = value;
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(value);
+          kpiMinValueBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
+      public Builder clearKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, value);
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
-          onChanged();
+      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
+        
+        onChanged();
+        return getKpiMinValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+        if (kpiMinValueBuilder_ != null) {
+          return kpiMinValueBuilder_.getMessageOrBuilder();
         } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
+          return kpiMinValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
-          onChanged();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiMinValueFieldBuilder() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiMinValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiMinValue_ = null;
+        }
+        return kpiMinValueBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiValue kpiMaxValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_;
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return Whether the kpiMaxValue field is set.
+       */
+      public boolean hasKpiMaxValue() {
+        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return The kpiMaxValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
         } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
+          return kpiMaxValueBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
+      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiMaxValue_ = value;
           onChanged();
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          kpiMaxValueBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setKpiMaxValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = builderForValue.build();
           onChanged();
         } else {
-          kpiListBuilder_.clear();
+          kpiMaxValueBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
+      public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (kpiMaxValue_ != null) {
+            kpiMaxValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiMaxValue_ = value;
+          }
           onChanged();
         } else {
-          kpiListBuilder_.remove(index);
+          kpiMaxValueBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
-       */
-      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
-       */
-      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
-          int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-           getKpiListOrBuilderList() {
-        if (kpiListBuilder_ != null) {
-          return kpiListBuilder_.getMessageOrBuilderList();
+      public Builder clearKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.Kpi.getDefaultInstance());
+      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
+        
+        onChanged();
+        return getKpiMaxValueFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+        if (kpiMaxValueBuilder_ != null) {
+          return kpiMaxValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiMaxValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+        }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
-          getKpiListFieldBuilder() {
-        if (kpiListBuilder_ == null) {
-          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
-                  kpiList_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiMaxValueFieldBuilder() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiMaxValue(),
                   getParentForChildren(),
                   isClean());
-          kpiList_ = null;
+          kpiMaxValue_ = null;
         }
-        return kpiListBuilder_;
+        return kpiMaxValueBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -9230,95 +9991,122 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
-    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
+    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
     }
 
-    public static monitoring.Monitoring.KpiList getDefaultInstance() {
+    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiList>
-        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
+    private static final com.google.protobuf.Parser<KpiValueRange>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
       @java.lang.Override
-      public KpiList parsePartialFrom(
+      public KpiValueRange parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiList(input, extensionRegistry);
+        return new KpiValueRange(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiList> parser() {
+    public static com.google.protobuf.Parser<KpiValueRange> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiList> getParserForType() {
+    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiDescriptorListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
+  public interface KpiValueOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>uint32 intVal = 1;</code>
+     * @return Whether the intVal field is set.
      */
-    java.util.List<monitoring.Monitoring.KpiDescriptor> 
-        getKpiDescriptorListList();
+    boolean hasIntVal();
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>uint32 intVal = 1;</code>
+     * @return The intVal.
      */
-    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
+    int getIntVal();
+
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return Whether the floatVal field is set.
      */
-    int getKpiDescriptorListCount();
+    boolean hasFloatVal();
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return The floatVal.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-        getKpiDescriptorListOrBuilderList();
+    float getFloatVal();
+
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>string stringVal = 3;</code>
+     * @return Whether the stringVal field is set.
      */
-    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-        int index);
+    boolean hasStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The stringVal.
+     */
+    java.lang.String getStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    com.google.protobuf.ByteString
+        getStringValBytes();
+
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
+     */
+    boolean hasBoolVal();
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
+     */
+    boolean getBoolVal();
+
+    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
   }
   /**
-   * Protobuf type {@code monitoring.KpiDescriptorList}
+   * Protobuf type {@code monitoring.KpiValue}
    */
-  public static final class KpiDescriptorList extends
+  public static final class KpiValue extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
-      KpiDescriptorListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
+      KpiValueOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiDescriptorList.newBuilder() to construct.
-    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiValue.newBuilder() to construct.
+    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiDescriptorList() {
-      kpiDescriptorList_ = java.util.Collections.emptyList();
+    private KpiValue() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiDescriptorList();
+      return new KpiValue();
     }
 
     @java.lang.Override
@@ -9326,7 +10114,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiDescriptorList(
+    private KpiValue(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -9334,7 +10122,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -9345,13 +10132,25 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiDescriptorList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry));
+            case 8: {
+              valueCase_ = 1;
+              value_ = input.readUInt32();
+              break;
+            }
+            case 21: {
+              valueCase_ = 2;
+              value_ = input.readFloat();
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+              valueCase_ = 3;
+              value_ = s;
+              break;
+            }
+            case 32: {
+              valueCase_ = 4;
+              value_ = input.readBool();
               break;
             }
             default: {
@@ -9369,64 +10168,181 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+    }
+
+    private int valueCase_ = 0;
+    private java.lang.Object value_;
+    public enum ValueCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      INTVAL(1),
+      FLOATVAL(2),
+      STRINGVAL(3),
+      BOOLVAL(4),
+      VALUE_NOT_SET(0);
+      private final int value;
+      private ValueCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ValueCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ValueCase forNumber(int value) {
+        switch (value) {
+          case 1: return INTVAL;
+          case 2: return FLOATVAL;
+          case 3: return STRINGVAL;
+          case 4: return BOOLVAL;
+          case 0: return VALUE_NOT_SET;
+          default: return null;
         }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ValueCase
+    getValueCase() {
+      return ValueCase.forNumber(
+          valueCase_);
     }
 
+    public static final int INTVAL_FIELD_NUMBER = 1;
+    /**
+     * <code>uint32 intVal = 1;</code>
+     * @return Whether the intVal field is set.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+    public boolean hasIntVal() {
+      return valueCase_ == 1;
     }
-
-    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>uint32 intVal = 1;</code>
+     * @return The intVal.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
-      return kpiDescriptorList_;
+    public int getIntVal() {
+      if (valueCase_ == 1) {
+        return (java.lang.Integer) value_;
+      }
+      return 0;
     }
+
+    public static final int FLOATVAL_FIELD_NUMBER = 2;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return Whether the floatVal field is set.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-        getKpiDescriptorListOrBuilderList() {
-      return kpiDescriptorList_;
+    public boolean hasFloatVal() {
+      return valueCase_ == 2;
     }
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>float floatVal = 2;</code>
+     * @return The floatVal.
      */
     @java.lang.Override
-    public int getKpiDescriptorListCount() {
-      return kpiDescriptorList_.size();
+    public float getFloatVal() {
+      if (valueCase_ == 2) {
+        return (java.lang.Float) value_;
+      }
+      return 0F;
     }
+
+    public static final int STRINGVAL_FIELD_NUMBER = 3;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>string stringVal = 3;</code>
+     * @return Whether the stringVal field is set.
+     */
+    public boolean hasStringVal() {
+      return valueCase_ == 3;
+    }
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The stringVal.
+     */
+    public java.lang.String getStringVal() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 3) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (valueCase_ == 3) {
+          value_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    public com.google.protobuf.ByteString
+        getStringValBytes() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 3) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (valueCase_ == 3) {
+          value_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int BOOLVAL_FIELD_NUMBER = 4;
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
-      return kpiDescriptorList_.get(index);
+    public boolean hasBoolVal() {
+      return valueCase_ == 4;
     }
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-        int index) {
-      return kpiDescriptorList_.get(index);
+    public boolean getBoolVal() {
+      if (valueCase_ == 4) {
+        return (java.lang.Boolean) value_;
+      }
+      return false;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -9443,8 +10359,20 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
-        output.writeMessage(1, kpiDescriptorList_.get(i));
+      if (valueCase_ == 1) {
+        output.writeUInt32(
+            1, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 2) {
+        output.writeFloat(
+            2, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 3) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
+      }
+      if (valueCase_ == 4) {
+        output.writeBool(
+            4, (boolean)((java.lang.Boolean) value_));
       }
       unknownFields.writeTo(output);
     }
@@ -9455,9 +10383,23 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+      if (valueCase_ == 1) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiDescriptorList_.get(i));
+          .computeUInt32Size(
+              1, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 2) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(
+              2, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 3) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
+      }
+      if (valueCase_ == 4) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(
+              4, (boolean)((java.lang.Boolean) value_));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -9469,13 +10411,33 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
+      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
 
-      if (!getKpiDescriptorListList()
-          .equals(other.getKpiDescriptorListList())) return false;
+      if (!getValueCase().equals(other.getValueCase())) return false;
+      switch (valueCase_) {
+        case 1:
+          if (getIntVal()
+              != other.getIntVal()) return false;
+          break;
+        case 2:
+          if (java.lang.Float.floatToIntBits(getFloatVal())
+              != java.lang.Float.floatToIntBits(
+                  other.getFloatVal())) return false;
+          break;
+        case 3:
+          if (!getStringVal()
+              .equals(other.getStringVal())) return false;
+          break;
+        case 4:
+          if (getBoolVal()
+              != other.getBoolVal()) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -9487,78 +10449,96 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiDescriptorListCount() > 0) {
-        hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiDescriptorListList().hashCode();
+      switch (valueCase_) {
+        case 1:
+          hash = (37 * hash) + INTVAL_FIELD_NUMBER;
+          hash = (53 * hash) + getIntVal();
+          break;
+        case 2:
+          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
+          hash = (53 * hash) + java.lang.Float.floatToIntBits(
+              getFloatVal());
+          break;
+        case 3:
+          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
+          hash = (53 * hash) + getStringVal().hashCode();
+          break;
+        case 4:
+          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
+          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+              getBoolVal());
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -9571,7 +10551,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiDescriptorList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -9587,26 +10567,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiDescriptorList}
+     * Protobuf type {@code monitoring.KpiValue}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptorList)
-        monitoring.Monitoring.KpiDescriptorListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
+        monitoring.Monitoring.KpiValueOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
+      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -9619,35 +10599,30 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiDescriptorListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
-        super.clear();
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          kpiDescriptorListBuilder_.clear();
-        }
+        super.clear();
+        valueCase_ = 0;
+        value_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
+      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValue.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList build() {
-        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
+      public monitoring.Monitoring.KpiValue build() {
+        monitoring.Monitoring.KpiValue result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -9655,18 +10630,21 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList buildPartial() {
-        monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiDescriptorListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiDescriptorList_ = kpiDescriptorList_;
-        } else {
-          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build();
+      public monitoring.Monitoring.KpiValue buildPartial() {
+        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
+        if (valueCase_ == 1) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 2) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 3) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 4) {
+          result.value_ = value_;
         }
+        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -9705,40 +10683,37 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiDescriptorList) {
-          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
+        if (other instanceof monitoring.Monitoring.KpiValue) {
+          return mergeFrom((monitoring.Monitoring.KpiValue)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptorList other) {
-        if (other == monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()) return this;
-        if (kpiDescriptorListBuilder_ == null) {
-          if (!other.kpiDescriptorList_.isEmpty()) {
-            if (kpiDescriptorList_.isEmpty()) {
-              kpiDescriptorList_ = other.kpiDescriptorList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiDescriptorListIsMutable();
-              kpiDescriptorList_.addAll(other.kpiDescriptorList_);
-            }
+      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
+        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
+        switch (other.getValueCase()) {
+          case INTVAL: {
+            setIntVal(other.getIntVal());
+            break;
+          }
+          case FLOATVAL: {
+            setFloatVal(other.getFloatVal());
+            break;
+          }
+          case STRINGVAL: {
+            valueCase_ = 3;
+            value_ = other.value_;
             onChanged();
+            break;
           }
-        } else {
-          if (!other.kpiDescriptorList_.isEmpty()) {
-            if (kpiDescriptorListBuilder_.isEmpty()) {
-              kpiDescriptorListBuilder_.dispose();
-              kpiDescriptorListBuilder_ = null;
-              kpiDescriptorList_ = other.kpiDescriptorList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiDescriptorListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiDescriptorListFieldBuilder() : null;
-            } else {
-              kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_);
-            }
+          case BOOLVAL: {
+            setBoolVal(other.getBoolVal());
+            break;
+          }
+          case VALUE_NOT_SET: {
+            break;
           }
         }
         this.mergeUnknownFields(other.unknownFields);
@@ -9756,11 +10731,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
+        monitoring.Monitoring.KpiValue parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -9769,246 +10744,240 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
+      private int valueCase_ = 0;
+      private java.lang.Object value_;
+      public ValueCase
+          getValueCase() {
+        return ValueCase.forNumber(
+            valueCase_);
+      }
 
-      private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiDescriptorListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_);
-          bitField0_ |= 0x00000001;
-         }
+      public Builder clearValue() {
+        valueCase_ = 0;
+        value_ = null;
+        onChanged();
+        return this;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_;
 
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @return Whether the intVal field is set.
        */
-      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
-        if (kpiDescriptorListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
-        } else {
-          return kpiDescriptorListBuilder_.getMessageList();
-        }
+      public boolean hasIntVal() {
+        return valueCase_ == 1;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @return The intVal.
        */
-      public int getKpiDescriptorListCount() {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.size();
-        } else {
-          return kpiDescriptorListBuilder_.getCount();
+      public int getIntVal() {
+        if (valueCase_ == 1) {
+          return (java.lang.Integer) value_;
         }
+        return 0;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @param value The intVal to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.get(index);
-        } else {
-          return kpiDescriptorListBuilder_.getMessage(index);
-        }
+      public Builder setIntVal(int value) {
+        valueCase_ = 1;
+        value_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>uint32 intVal = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.set(index, value);
+      public Builder clearIntVal() {
+        if (valueCase_ == 1) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiDescriptorListBuilder_.setMessage(index, value);
         }
         return this;
       }
+
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @return Whether the floatVal field is set.
        */
-      public Builder setKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      public boolean hasFloatVal() {
+        return valueCase_ == 2;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @return The floatVal.
        */
-      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(value);
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(value);
+      public float getFloatVal() {
+        if (valueCase_ == 2) {
+          return (java.lang.Float) value_;
         }
-        return this;
+        return 0F;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @param value The floatVal to set.
+       * @return This builder for chaining.
        */
-      public Builder addKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(index, value);
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(index, value);
-        }
+      public Builder setFloatVal(float value) {
+        valueCase_ = 2;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float floatVal = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiDescriptorList(
-          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(builderForValue.build());
+      public Builder clearFloatVal() {
+        if (valueCase_ == 2) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
+
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return Whether the stringVal field is set.
        */
-      public Builder addKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public boolean hasStringVal() {
+        return valueCase_ == 3;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return The stringVal.
        */
-      public Builder addAllKpiDescriptorList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiDescriptorList_);
-          onChanged();
+      @java.lang.Override
+      public java.lang.String getStringVal() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 3) {
+          ref = value_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (valueCase_ == 3) {
+            value_ = s;
+          }
+          return s;
         } else {
-          kpiDescriptorListBuilder_.addAllMessages(values);
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return The bytes for stringVal.
        */
-      public Builder clearKpiDescriptorList() {
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getStringValBytes() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 3) {
+          ref = value_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (valueCase_ == 3) {
+            value_ = b;
+          }
+          return b;
         } else {
-          kpiDescriptorListBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @param value The stringVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStringVal(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  valueCase_ = 3;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeKpiDescriptorList(int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.remove(index);
+      public Builder clearStringVal() {
+        if (valueCase_ == 3) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiDescriptorListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>string stringVal = 3;</code>
+       * @param value The bytes for stringVal to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
-          int index) {
-        return getKpiDescriptorListFieldBuilder().getBuilder(index);
+      public Builder setStringValBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        valueCase_ = 3;
+        value_ = value;
+        onChanged();
+        return this;
       }
+
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @return Whether the boolVal field is set.
        */
-      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-          int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.get(index);  } else {
-          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
-        }
+      public boolean hasBoolVal() {
+        return valueCase_ == 4;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @return The boolVal.
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-           getKpiDescriptorListOrBuilderList() {
-        if (kpiDescriptorListBuilder_ != null) {
-          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+      public boolean getBoolVal() {
+        if (valueCase_ == 4) {
+          return (java.lang.Boolean) value_;
         }
+        return false;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
-       */
-      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
-        return getKpiDescriptorListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @param value The boolVal to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
-          int index) {
-        return getKpiDescriptorListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      public Builder setBoolVal(boolean value) {
+        valueCase_ = 4;
+        value_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>bool boolVal = 4;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> 
-           getKpiDescriptorListBuilderList() {
-        return getKpiDescriptorListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> 
-          getKpiDescriptorListFieldBuilder() {
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>(
-                  kpiDescriptorList_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiDescriptorList_ = null;
+      public Builder clearBoolVal() {
+        if (valueCase_ == 4) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
         }
-        return kpiDescriptorListBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -10023,166 +10992,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
-    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
+    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
     }
 
-    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
+    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiDescriptorList>
-        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
+    private static final com.google.protobuf.Parser<KpiValue>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
       @java.lang.Override
-      public KpiDescriptorList parsePartialFrom(
+      public KpiValue parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiDescriptorList(input, extensionRegistry);
+        return new KpiValue(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiDescriptorList> parser() {
+    public static com.google.protobuf.Parser<KpiValue> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() {
+    public com.google.protobuf.Parser<KpiValue> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubsDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor)
+  public interface KpiListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
-     */
-    boolean hasSubsId();
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
-     */
-    monitoring.Monitoring.SubscriptionID getSubsId();
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
-
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>float sampling_duration_s = 3;</code>
-     * @return The samplingDurationS.
-     */
-    float getSamplingDurationS();
-
-    /**
-     * <code>float sampling_interval_s = 4;</code>
-     * @return The samplingIntervalS.
-     */
-    float getSamplingIntervalS();
-
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
-     */
-    boolean hasStartTimestamp();
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.Timestamp getStartTimestamp();
+    java.util.List<monitoring.Monitoring.Kpi> 
+        getKpiListList();
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder();
-
+    monitoring.Monitoring.Kpi getKpiList(int index);
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    boolean hasEndTimestamp();
+    int getKpiListCount();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.Timestamp getEndTimestamp();
+    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder();
+    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code monitoring.SubsDescriptor}
+   * Protobuf type {@code monitoring.KpiList}
    */
-  public static final class SubsDescriptor extends
+  public static final class KpiList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
-      SubsDescriptorOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
+      KpiListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsDescriptor.newBuilder() to construct.
-    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiList.newBuilder() to construct.
+    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsDescriptor() {
+    private KpiList() {
+      kpiList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsDescriptor();
+      return new KpiList();
     }
 
     @java.lang.Override
@@ -10190,7 +11088,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsDescriptor(
+    private KpiList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -10198,6 +11096,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -10209,65 +11108,12 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
-              if (subsId_ != null) {
-                subBuilder = subsId_.toBuilder();
-              }
-              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(subsId_);
-                subsId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 29: {
-
-              samplingDurationS_ = input.readFloat();
-              break;
-            }
-            case 37: {
-
-              samplingIntervalS_ = input.readFloat();
-              break;
-            }
-            case 42: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (startTimestamp_ != null) {
-                subBuilder = startTimestamp_.toBuilder();
-              }
-              startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(startTimestamp_);
-                startTimestamp_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (endTimestamp_ != null) {
-                subBuilder = endTimestamp_.toBuilder();
-              }
-              endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endTimestamp_);
-                endTimestamp_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -10285,171 +11131,64 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
-    }
-
-    public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.SubscriptionID subsId_;
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
-     */
-    @java.lang.Override
-    public boolean hasSubsId() {
-      return subsId_ != null;
-    }
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsId() {
-      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
-    }
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-      return getSubsId();
-    }
-
-    public static final int KPI_ID_FIELD_NUMBER = 2;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 2;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 3;
-    private float samplingDurationS_;
-    /**
-     * <code>float sampling_duration_s = 3;</code>
-     * @return The samplingDurationS.
-     */
-    @java.lang.Override
-    public float getSamplingDurationS() {
-      return samplingDurationS_;
-    }
-
-    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 4;
-    private float samplingIntervalS_;
-    /**
-     * <code>float sampling_interval_s = 4;</code>
-     * @return The samplingIntervalS.
-     */
-    @java.lang.Override
-    public float getSamplingIntervalS() {
-      return samplingIntervalS_;
+              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.Timestamp startTimestamp_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return Whether the startTimestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasStartTimestamp() {
-      return startTimestamp_ != null;
-    }
+    public static final int KPI_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
-     * @return The startTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getStartTimestamp() {
-      return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+      return kpiList_;
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-      return getStartTimestamp();
+    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
     }
-
-    public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.Timestamp endTimestamp_;
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return Whether the endTimestamp field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public boolean hasEndTimestamp() {
-      return endTimestamp_ != null;
+    public int getKpiListCount() {
+      return kpiList_.size();
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
-     * @return The endTimestamp.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Timestamp getEndTimestamp() {
-      return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+    public monitoring.Monitoring.Kpi getKpiList(int index) {
+      return kpiList_.get(index);
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-      return getEndTimestamp();
+    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index) {
+      return kpiList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -10466,23 +11205,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (subsId_ != null) {
-        output.writeMessage(1, getSubsId());
-      }
-      if (kpiId_ != null) {
-        output.writeMessage(2, getKpiId());
-      }
-      if (samplingDurationS_ != 0F) {
-        output.writeFloat(3, samplingDurationS_);
-      }
-      if (samplingIntervalS_ != 0F) {
-        output.writeFloat(4, samplingIntervalS_);
-      }
-      if (startTimestamp_ != null) {
-        output.writeMessage(5, getStartTimestamp());
-      }
-      if (endTimestamp_ != null) {
-        output.writeMessage(6, getEndTimestamp());
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(1, kpiList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -10493,29 +11217,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (subsId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSubsId());
-      }
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getKpiId());
-      }
-      if (samplingDurationS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingDurationS_);
-      }
-      if (samplingIntervalS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(4, samplingIntervalS_);
-      }
-      if (startTimestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getStartTimestamp());
-      }
-      if (endTimestamp_ != null) {
+      for (int i = 0; i < kpiList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndTimestamp());
+          .computeMessageSize(1, kpiList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -10527,37 +11231,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
+      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
 
-      if (hasSubsId() != other.hasSubsId()) return false;
-      if (hasSubsId()) {
-        if (!getSubsId()
-            .equals(other.getSubsId())) return false;
-      }
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
-      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingDurationS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingIntervalS())) return false;
-      if (hasStartTimestamp() != other.hasStartTimestamp()) return false;
-      if (hasStartTimestamp()) {
-        if (!getStartTimestamp()
-            .equals(other.getStartTimestamp())) return false;
-      }
-      if (hasEndTimestamp() != other.hasEndTimestamp()) return false;
-      if (hasEndTimestamp()) {
-        if (!getEndTimestamp()
-            .equals(other.getEndTimestamp())) return false;
-      }
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10569,96 +11249,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSubsId()) {
-        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsId().hashCode();
-      }
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
-      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingDurationS());
-      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingIntervalS());
-      if (hasStartTimestamp()) {
-        hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getStartTimestamp().hashCode();
-      }
-      if (hasEndTimestamp()) {
-        hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getEndTimestamp().hashCode();
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -10671,7 +11333,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsDescriptor prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -10686,823 +11348,429 @@ public final class Monitoring {
       Builder builder = new Builder(parent);
       return builder;
     }
-    /**
-     * Protobuf type {@code monitoring.SubsDescriptor}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor)
-        monitoring.Monitoring.SubsDescriptorOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
-      }
-
-      // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        samplingDurationS_ = 0F;
-
-        samplingIntervalS_ = 0F;
-
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
-        } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
-        }
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
-        } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor build() {
-        monitoring.Monitoring.SubsDescriptor result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor buildPartial() {
-        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
-        if (subsIdBuilder_ == null) {
-          result.subsId_ = subsId_;
-        } else {
-          result.subsId_ = subsIdBuilder_.build();
-        }
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        result.samplingDurationS_ = samplingDurationS_;
-        result.samplingIntervalS_ = samplingIntervalS_;
-        if (startTimestampBuilder_ == null) {
-          result.startTimestamp_ = startTimestamp_;
-        } else {
-          result.startTimestamp_ = startTimestampBuilder_.build();
-        }
-        if (endTimestampBuilder_ == null) {
-          result.endTimestamp_ = endTimestamp_;
-        } else {
-          result.endTimestamp_ = endTimestampBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsDescriptor) {
-          return mergeFrom((monitoring.Monitoring.SubsDescriptor)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.SubsDescriptor other) {
-        if (other == monitoring.Monitoring.SubsDescriptor.getDefaultInstance()) return this;
-        if (other.hasSubsId()) {
-          mergeSubsId(other.getSubsId());
-        }
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
-        if (other.getSamplingDurationS() != 0F) {
-          setSamplingDurationS(other.getSamplingDurationS());
-        }
-        if (other.getSamplingIntervalS() != 0F) {
-          setSamplingIntervalS(other.getSamplingIntervalS());
-        }
-        if (other.hasStartTimestamp()) {
-          mergeStartTimestamp(other.getStartTimestamp());
-        }
-        if (other.hasEndTimestamp()) {
-          mergeEndTimestamp(other.getEndTimestamp());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.SubsDescriptor parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private monitoring.Monitoring.SubscriptionID subsId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return Whether the subsId field is set.
-       */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return The subsId.
-       */
-      public monitoring.Monitoring.SubscriptionID getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
-        } else {
-          return subsIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          subsId_ = value;
-          onChanged();
-        } else {
-          subsIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder setSubsId(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
-          onChanged();
-        } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+    /**
+     * Protobuf type {@code monitoring.KpiList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
+        monitoring.Monitoring.KpiListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
-          } else {
-            subsId_ = value;
-          }
-          onChanged();
-        } else {
-          subsIdBuilder_.mergeFrom(value);
-        }
 
-        return this;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-          onChanged();
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
 
-        return this;
+      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
-        
-        onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
-        } else {
-          return subsId_ == null ?
-              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
         }
       }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  getSubsId(),
-                  getParentForChildren(),
-                  isClean());
-          subsId_ = null;
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiListBuilder_.clear();
         }
-        return subsIdBuilder_;
+        return this;
       }
 
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
 
-        return this;
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiList.getDefaultInstance();
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList build() {
+        monitoring.Monitoring.KpiList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList buildPartial() {
+        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
           }
-          onChanged();
+          result.kpiList_ = kpiList_;
         } else {
-          kpiIdBuilder_.mergeFrom(value);
+          result.kpiList_ = kpiListBuilder_.build();
         }
-
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
 
-        return this;
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-
-      private float samplingDurationS_ ;
-      /**
-       * <code>float sampling_duration_s = 3;</code>
-       * @return The samplingDurationS.
-       */
       @java.lang.Override
-      public float getSamplingDurationS() {
-        return samplingDurationS_;
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      /**
-       * <code>float sampling_duration_s = 3;</code>
-       * @param value The samplingDurationS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingDurationS(float value) {
-        
-        samplingDurationS_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>float sampling_duration_s = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSamplingDurationS() {
-        
-        samplingDurationS_ = 0F;
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiList) {
+          return mergeFrom((monitoring.Monitoring.KpiList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
+        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiListFieldBuilder() : null;
+            } else {
+              kpiListBuilder_.addAllMessages(other.kpiList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
 
-      private float samplingIntervalS_ ;
-      /**
-       * <code>float sampling_interval_s = 4;</code>
-       * @return The samplingIntervalS.
-       */
       @java.lang.Override
-      public float getSamplingIntervalS() {
-        return samplingIntervalS_;
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>float sampling_interval_s = 4;</code>
-       * @param value The samplingIntervalS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingIntervalS(float value) {
-        
-        samplingIntervalS_ = value;
-        onChanged();
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
+
       /**
-       * <code>float sampling_interval_s = 4;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearSamplingIntervalS() {
-        
-        samplingIntervalS_ = 0F;
-        onChanged();
-        return this;
+      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
       }
-
-      private context.ContextOuterClass.Timestamp startTimestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> startTimestampBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return Whether the startTimestamp field is set.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public boolean hasStartTimestamp() {
-        return startTimestampBuilder_ != null || startTimestamp_ != null;
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       * @return The startTimestamp.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp getStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+      public monitoring.Monitoring.Kpi getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
         } else {
-          return startTimestampBuilder_.getMessage();
+          return kpiListBuilder_.getMessage(index);
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          startTimestamp_ = value;
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(value);
+          kpiListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setStartTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = builderForValue.build();
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          startTimestampBuilder_.setMessage(builderForValue.build());
+          kpiListBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (startTimestampBuilder_ == null) {
-          if (startTimestamp_ != null) {
-            startTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
-          } else {
-            startTimestamp_ = value;
+      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
           onChanged();
         } else {
-          startTimestampBuilder_.mergeFrom(value);
+          kpiListBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
           onChanged();
         } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
+          kpiListBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       */
-      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
-        
-        onChanged();
-        return getStartTimestampFieldBuilder().getBuilder();
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       */
-      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-        if (startTimestampBuilder_ != null) {
-          return startTimestampBuilder_.getMessageOrBuilder();
-        } else {
-          return startTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
-        }
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getStartTimestampFieldBuilder() {
-        if (startTimestampBuilder_ == null) {
-          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getStartTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          startTimestamp_ = null;
-        }
-        return startTimestampBuilder_;
-      }
-
-      private context.ContextOuterClass.Timestamp endTimestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
-      /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return Whether the endTimestamp field is set.
-       */
-      public boolean hasEndTimestamp() {
-        return endTimestampBuilder_ != null || endTimestamp_ != null;
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return The endTimestamp.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp getEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+      public Builder addKpiList(
+          monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
         } else {
-          return endTimestampBuilder_.getMessage();
+          kpiListBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endTimestamp_ = value;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(value);
+          kpiListBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setEndTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = builderForValue.build();
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(builderForValue.build());
+          kpiListBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
-          if (endTimestamp_ != null) {
-            endTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
-          } else {
-            endTimestamp_ = value;
-          }
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          endTimestampBuilder_.mergeFrom(value);
+          kpiListBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
           onChanged();
         } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
+          kpiListBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
-        
-        onChanged();
-        return getEndTimestampFieldBuilder().getBuilder();
+      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-        if (endTimestampBuilder_ != null) {
-          return endTimestampBuilder_.getMessageOrBuilder();
+      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
         } else {
-          return endTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+          return java.util.Collections.unmodifiableList(kpiList_);
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getEndTimestampFieldBuilder() {
-        if (endTimestampBuilder_ == null) {
-          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getEndTimestamp(),
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          endTimestamp_ = null;
+          kpiList_ = null;
         }
-        return endTimestampBuilder_;
+        return kpiListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -11517,85 +11785,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
-    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
+    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
     }
 
-    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
+    public static monitoring.Monitoring.KpiList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
+    private static final com.google.protobuf.Parser<KpiList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
       @java.lang.Override
-      public SubsDescriptor parsePartialFrom(
+      public KpiList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsDescriptor(input, extensionRegistry);
+        return new KpiList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
+    public static com.google.protobuf.Parser<KpiList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsDescriptor> getParserForType() {
+    public com.google.protobuf.Parser<KpiList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubscriptionIDOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID)
+  public interface KpiDescriptorListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    boolean hasSubsId();
+    java.util.List<monitoring.Monitoring.KpiDescriptor> 
+        getKpiDescriptorListList();
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return The subsId.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    context.ContextOuterClass.Uuid getSubsId();
+    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
+    int getKpiDescriptorListCount();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code monitoring.SubscriptionID}
+   * Protobuf type {@code monitoring.KpiDescriptorList}
    */
-  public static final class SubscriptionID extends
+  public static final class KpiDescriptorList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
-      SubscriptionIDOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
+      KpiDescriptorListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubscriptionID.newBuilder() to construct.
-    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiDescriptorList.newBuilder() to construct.
+    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubscriptionID() {
+    private KpiDescriptorList() {
+      kpiDescriptorList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubscriptionID();
+      return new KpiDescriptorList();
     }
 
     @java.lang.Override
@@ -11603,7 +11881,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubscriptionID(
+    private KpiDescriptorList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -11611,6 +11889,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -11622,16 +11901,12 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (subsId_ != null) {
-                subBuilder = subsId_.toBuilder();
-              }
-              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(subsId_);
-                subsId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              kpiDescriptorList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11649,47 +11924,64 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
     }
 
-    public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid subsId_;
+    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public boolean hasSubsId() {
-      return subsId_ != null;
+    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+      return kpiDescriptorList_;
     }
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
-     * @return The subsId.
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getSubsId() {
-      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList() {
+      return kpiDescriptorList_;
     }
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
-      return getSubsId();
+    public int getKpiDescriptorListCount() {
+      return kpiDescriptorList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+      return kpiDescriptorList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index) {
+      return kpiDescriptorList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11706,8 +11998,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (subsId_ != null) {
-        output.writeMessage(1, getSubsId());
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+        output.writeMessage(1, kpiDescriptorList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11718,9 +12010,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (subsId_ != null) {
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSubsId());
+          .computeMessageSize(1, kpiDescriptorList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11732,16 +12024,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
+      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
 
-      if (hasSubsId() != other.hasSubsId()) return false;
-      if (hasSubsId()) {
-        if (!getSubsId()
-            .equals(other.getSubsId())) return false;
-      }
+      if (!getKpiDescriptorListList()
+          .equals(other.getKpiDescriptorListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11753,78 +12042,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSubsId()) {
-        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsId().hashCode();
+      if (getKpiDescriptorListCount() > 0) {
+        hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiDescriptorListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -11837,7 +12126,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubscriptionID prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiDescriptorList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -11853,26 +12142,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubscriptionID}
+     * Protobuf type {@code monitoring.KpiDescriptorList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubscriptionID)
-        monitoring.Monitoring.SubscriptionIDOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptorList)
+        monitoring.Monitoring.KpiDescriptorListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubscriptionID.newBuilder()
+      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -11885,16 +12174,17 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiDescriptorListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
+          kpiDescriptorListBuilder_.clear();
         }
         return this;
       }
@@ -11902,17 +12192,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
+      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID build() {
-        monitoring.Monitoring.SubscriptionID result = buildPartial();
+      public monitoring.Monitoring.KpiDescriptorList build() {
+        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -11920,12 +12210,17 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID buildPartial() {
-        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
-        if (subsIdBuilder_ == null) {
-          result.subsId_ = subsId_;
+      public monitoring.Monitoring.KpiDescriptorList buildPartial() {
+        monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiDescriptorListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiDescriptorList_ = kpiDescriptorList_;
         } else {
-          result.subsId_ = subsIdBuilder_.build();
+          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -11965,18 +12260,41 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubscriptionID) {
-          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
+        if (other instanceof monitoring.Monitoring.KpiDescriptorList) {
+          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) {
-        if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this;
-        if (other.hasSubsId()) {
-          mergeSubsId(other.getSubsId());
+      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptorList other) {
+        if (other == monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()) return this;
+        if (kpiDescriptorListBuilder_ == null) {
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorList_.isEmpty()) {
+              kpiDescriptorList_ = other.kpiDescriptorList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiDescriptorListIsMutable();
+              kpiDescriptorList_.addAll(other.kpiDescriptorList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorListBuilder_.isEmpty()) {
+              kpiDescriptorListBuilder_.dispose();
+              kpiDescriptorListBuilder_ = null;
+              kpiDescriptorList_ = other.kpiDescriptorList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiDescriptorListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiDescriptorListFieldBuilder() : null;
+            } else {
+              kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -11993,11 +12311,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubscriptionID parsedMessage = null;
+        monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -12006,124 +12324,246 @@ public final class Monitoring {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiDescriptorListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_;
 
-      private context.ContextOuterClass.Uuid subsId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
-       * @return Whether the subsId field is set.
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
+      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        } else {
+          return kpiDescriptorListBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
-       * @return The subsId.
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+      public int getKpiDescriptorListCount() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.size();
         } else {
-          return subsIdBuilder_.getMessage();
+          return kpiDescriptorListBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
-        if (subsIdBuilder_ == null) {
+      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);
+        } else {
+          return kpiDescriptorListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          subsId_ = value;
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, value);
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(value);
+          kpiDescriptorListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder setSubsId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addAllKpiDescriptorList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiDescriptorList_);
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
+          kpiDescriptorListBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
-          } else {
-            subsId_ = value;
-          }
+      public Builder clearKpiDescriptorList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          subsIdBuilder_.mergeFrom(value);
+          kpiDescriptorListBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
+      public Builder removeKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.remove(index);
           onChanged();
         } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
+          kpiDescriptorListBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
-        
-        onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
+      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+          int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);  } else {
+          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+           getKpiDescriptorListOrBuilderList() {
+        if (kpiDescriptorListBuilder_ != null) {
+          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
         } else {
-          return subsId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
         }
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getSubsId(),
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> 
+           getKpiDescriptorListBuilderList() {
+        return getKpiDescriptorListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> 
+          getKpiDescriptorListFieldBuilder() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>(
+                  kpiDescriptorList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          subsId_ = null;
+          kpiDescriptorList_ = null;
         }
-        return subsIdBuilder_;
+        return kpiDescriptorListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -12138,110 +12578,139 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
-    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
+    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
     }
 
-    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
+    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubscriptionID>
-        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
+    private static final com.google.protobuf.Parser<KpiDescriptorList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
       @java.lang.Override
-      public SubscriptionID parsePartialFrom(
+      public KpiDescriptorList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubscriptionID(input, extensionRegistry);
+        return new KpiDescriptorList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubscriptionID> parser() {
+    public static com.google.protobuf.Parser<KpiDescriptorList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubscriptionID> getParserForType() {
+    public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubsResponseOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse)
+  public interface SubsDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
-    boolean hasSubsId();
+    boolean hasKpiId();
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
-    monitoring.Monitoring.SubscriptionID getSubsId();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
 
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
      */
-    java.util.List<monitoring.Monitoring.KpiList> 
-        getKpiListList();
+    float getSamplingDurationS();
+
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
      */
-    monitoring.Monitoring.KpiList getKpiList(int index);
+    float getSamplingIntervalS();
+
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The startDate.
      */
-    int getKpiListCount();
+    java.lang.String getStartDate();
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The bytes for startDate.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-        getKpiListOrBuilderList();
+    com.google.protobuf.ByteString
+        getStartDateBytes();
+
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The endDate.
      */
-    monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
-        int index);
+    java.lang.String getEndDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The bytes for endDate.
+     */
+    com.google.protobuf.ByteString
+        getEndDateBytes();
   }
   /**
-   * Protobuf type {@code monitoring.SubsResponse}
+   * Protobuf type {@code monitoring.SubsDescriptor}
    */
-  public static final class SubsResponse extends
+  public static final class SubsDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
-      SubsResponseOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
+      SubsDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsResponse.newBuilder() to construct.
-    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubsDescriptor.newBuilder() to construct.
+    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsResponse() {
-      kpiList_ = java.util.Collections.emptyList();
+    private SubsDescriptor() {
+      startDate_ = "";
+      endDate_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsResponse();
+      return new SubsDescriptor();
     }
 
     @java.lang.Override
@@ -12249,7 +12718,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsResponse(
+    private SubsDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -12257,7 +12726,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -12269,25 +12737,38 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
-              if (subsId_ != null) {
-                subBuilder = subsId_.toBuilder();
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
               }
-              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(subsId_);
-                subsId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry));
+            case 21: {
+
+              samplingDurationS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingIntervalS_ = input.readFloat();
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              startDate_ = s;
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endDate_ = s;
               break;
             }
             default: {
@@ -12305,90 +12786,161 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+              monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
     }
 
-    public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.SubscriptionID subsId_;
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public boolean hasSubsId() {
-      return subsId_ != null;
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsId() {
-      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-      return getSubsId();
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 2;
-    private java.util.List<monitoring.Monitoring.KpiList> kpiList_;
+    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 2;
+    private float samplingDurationS_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
-      return kpiList_;
+    public float getSamplingDurationS() {
+      return samplingDurationS_;
     }
+
+    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 3;
+    private float samplingIntervalS_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public float getSamplingIntervalS() {
+      return samplingIntervalS_;
     }
+
+    public static final int START_DATE_FIELD_NUMBER = 4;
+    private volatile java.lang.Object startDate_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The startDate.
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public java.lang.String getStartDate() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        startDate_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The bytes for startDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getKpiList(int index) {
-      return kpiList_.get(index);
+    public com.google.protobuf.ByteString
+        getStartDateBytes() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        startDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int END_DATE_FIELD_NUMBER = 5;
+    private volatile java.lang.Object endDate_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The endDate.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
-        int index) {
-      return kpiList_.get(index);
+    public java.lang.String getEndDate() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The bytes for endDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndDateBytes() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -12405,11 +12957,20 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (subsId_ != null) {
-        output.writeMessage(1, getSubsId());
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
-      for (int i = 0; i < kpiList_.size(); i++) {
-        output.writeMessage(2, kpiList_.get(i));
+      if (samplingDurationS_ != 0F) {
+        output.writeFloat(2, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        output.writeFloat(3, samplingIntervalS_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, endDate_);
       }
       unknownFields.writeTo(output);
     }
@@ -12420,13 +12981,23 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (subsId_ != null) {
+      if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSubsId());
+          .computeMessageSize(1, getKpiId());
       }
-      for (int i = 0; i < kpiList_.size(); i++) {
+      if (samplingDurationS_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, kpiList_.get(i));
+          .computeFloatSize(2, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingIntervalS_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, endDate_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -12438,18 +13009,26 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsResponse)) {
+      if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj;
+      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
 
-      if (hasSubsId() != other.hasSubsId()) return false;
-      if (hasSubsId()) {
-        if (!getSubsId()
-            .equals(other.getSubsId())) return false;
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
       }
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingDurationS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingIntervalS())) return false;
+      if (!getStartDate()
+          .equals(other.getStartDate())) return false;
+      if (!getEndDate()
+          .equals(other.getEndDate())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12461,82 +13040,88 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSubsId()) {
-        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsId().hashCode();
-      }
-      if (getKpiListCount() > 0) {
-        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiListList().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
       }
+      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingDurationS());
+      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingIntervalS());
+      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getStartDate().hashCode();
+      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndDate().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -12549,7 +13134,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsResponse prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubsDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -12565,26 +13150,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubsResponse}
+     * Protobuf type {@code monitoring.SubsDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsResponse)
-        monitoring.Monitoring.SubsResponseOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor)
+        monitoring.Monitoring.SubsDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
+      // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -12597,65 +13182,60 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
         } else {
-          kpiListBuilder_.clear();
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
+        samplingDurationS_ = 0F;
+
+        samplingIntervalS_ = 0F;
+
+        startDate_ = "";
+
+        endDate_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsResponse build() {
-        monitoring.Monitoring.SubsResponse result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
+      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsResponse buildPartial() {
-        monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
-        int from_bitField0_ = bitField0_;
-        if (subsIdBuilder_ == null) {
-          result.subsId_ = subsId_;
-        } else {
-          result.subsId_ = subsIdBuilder_.build();
+      public monitoring.Monitoring.SubsDescriptor build() {
+        monitoring.Monitoring.SubsDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        if (kpiListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiList_ = kpiList_;
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor buildPartial() {
+        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.kpiId_ = kpiIdBuilder_.build();
         }
+        result.samplingDurationS_ = samplingDurationS_;
+        result.samplingIntervalS_ = samplingIntervalS_;
+        result.startDate_ = startDate_;
+        result.endDate_ = endDate_;
         onBuilt();
         return result;
       }
@@ -12694,44 +13274,32 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsResponse) {
-          return mergeFrom((monitoring.Monitoring.SubsResponse)other);
+        if (other instanceof monitoring.Monitoring.SubsDescriptor) {
+          return mergeFrom((monitoring.Monitoring.SubsDescriptor)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) {
-        if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this;
-        if (other.hasSubsId()) {
-          mergeSubsId(other.getSubsId());
+      public Builder mergeFrom(monitoring.Monitoring.SubsDescriptor other) {
+        if (other == monitoring.Monitoring.SubsDescriptor.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
         }
-        if (kpiListBuilder_ == null) {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiList_.isEmpty()) {
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
-            } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
-            }
-          }
+        if (other.getSamplingDurationS() != 0F) {
+          setSamplingDurationS(other.getSamplingDurationS());
+        }
+        if (other.getSamplingIntervalS() != 0F) {
+          setSamplingIntervalS(other.getSamplingIntervalS());
+        }
+        if (!other.getStartDate().isEmpty()) {
+          startDate_ = other.startDate_;
+          onChanged();
+        }
+        if (!other.getEndDate().isEmpty()) {
+          endDate_ = other.endDate_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -12748,11 +13316,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubsResponse parsedMessage = null;
+        monitoring.Monitoring.SubsDescriptor parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -12761,365 +13329,378 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
 
-      private monitoring.Monitoring.SubscriptionID subsId_;
+      private monitoring.Monitoring.KpiId kpiId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return Whether the subsId field is set.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return The subsId.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public monitoring.Monitoring.SubscriptionID getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
-          return subsIdBuilder_.getMessage();
+          return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          subsId_ = value;
+          kpiId_ = value;
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(value);
+          kpiIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setSubsId(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
+          kpiIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
           } else {
-            subsId_ = value;
+            kpiId_ = value;
           }
           onChanged();
         } else {
-          subsIdBuilder_.mergeFrom(value);
+          kpiIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
           onChanged();
         } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
         
         onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
         } else {
-          return subsId_ == null ?
-              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
       /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  getSubsId(),
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
                   getParentForChildren(),
                   isClean());
-          subsId_ = null;
+          kpiId_ = null;
         }
-        return subsIdBuilder_;
-      }
-
-      private java.util.List<monitoring.Monitoring.KpiList> kpiList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_);
-          bitField0_ |= 0x00000001;
-         }
+        return kpiIdBuilder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_;
-
-      /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
-        if (kpiListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiList_);
-        } else {
-          return kpiListBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
-       */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
-        } else {
-          return kpiListBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
-       */
-      public monitoring.Monitoring.KpiList getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
-        } else {
-          return kpiListBuilder_.getMessage(index);
-        }
-      }
+      private float samplingDurationS_ ;
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_duration_s = 2;</code>
+       * @return The samplingDurationS.
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
-          onChanged();
-        } else {
-          kpiListBuilder_.setMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public float getSamplingDurationS() {
+        return samplingDurationS_;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_duration_s = 2;</code>
+       * @param value The samplingDurationS to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder setSamplingDurationS(float value) {
+        
+        samplingDurationS_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_duration_s = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(value);
-        }
+      public Builder clearSamplingDurationS() {
+        
+        samplingDurationS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private float samplingIntervalS_ ;
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_interval_s = 3;</code>
+       * @return The samplingIntervalS.
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public float getSamplingIntervalS() {
+        return samplingIntervalS_;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_interval_s = 3;</code>
+       * @param value The samplingIntervalS to set.
+       * @return This builder for chaining.
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
-        }
+      public Builder setSamplingIntervalS(float value) {
+        
+        samplingIntervalS_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>float sampling_interval_s = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder clearSamplingIntervalS() {
+        
+        samplingIntervalS_ = 0F;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object startDate_ = "";
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return The startDate.
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
-          onChanged();
+      public java.lang.String getStartDate() {
+        java.lang.Object ref = startDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          startDate_ = s;
+          return s;
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return The bytes for startDate.
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public com.google.protobuf.ByteString
+          getStartDateBytes() {
+        java.lang.Object ref = startDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          startDate_ = b;
+          return b;
         } else {
-          kpiListBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @param value The startDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        startDate_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
-          onChanged();
-        } else {
-          kpiListBuilder_.remove(index);
-        }
+      public Builder clearStartDate() {
+        
+        startDate_ = getDefaultInstance().getStartDate();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @param value The bytes for startDate to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiList.Builder getKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
+        return this;
       }
+
+      private java.lang.Object endDate_ = "";
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return The endDate.
        */
-      public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
-          int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
+      public java.lang.String getEndDate() {
+        java.lang.Object ref = endDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endDate_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return The bytes for endDate.
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-           getKpiListOrBuilderList() {
-        if (kpiListBuilder_ != null) {
-          return kpiListBuilder_.getMessageOrBuilderList();
+      public com.google.protobuf.ByteString
+          getEndDateBytes() {
+        java.lang.Object ref = endDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endDate_ = b;
+          return b;
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @param value The endDate to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiList.getDefaultInstance());
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder(
-          int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiList.getDefaultInstance());
+      public Builder clearEndDate() {
+        
+        endDate_ = getDefaultInstance().getEndDate();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @param value The bytes for endDate to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<monitoring.Monitoring.KpiList.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> 
-          getKpiListFieldBuilder() {
-        if (kpiListBuilder_ == null) {
-          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder>(
-                  kpiList_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiList_ = null;
-        }
-        return kpiListBuilder_;
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -13134,95 +13715,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
     }
-
-    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
-    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
+    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
     }
 
-    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
+    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsResponse>
-        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
+    private static final com.google.protobuf.Parser<SubsDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
       @java.lang.Override
-      public SubsResponse parsePartialFrom(
+      public SubsDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsResponse(input, extensionRegistry);
+        return new SubsDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsResponse> parser() {
+    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
+    public com.google.protobuf.Parser<SubsDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubsIDListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList)
+  public interface SubscriptionIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    java.util.List<monitoring.Monitoring.SubscriptionID> 
-        getSubsListList();
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    monitoring.Monitoring.SubscriptionID getSubsList(int index);
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
-    int getSubsListCount();
+    boolean hasSubsId();
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
      */
-    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-        getSubsListOrBuilderList();
+    context.ContextOuterClass.Uuid getSubsId();
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
      */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
-        int index);
+    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.SubsIDList}
+   * Protobuf type {@code monitoring.SubscriptionID}
    */
-  public static final class SubsIDList extends
+  public static final class SubscriptionID extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
-      SubsIDListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
+      SubscriptionIDOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsIDList.newBuilder() to construct.
-    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubscriptionID.newBuilder() to construct.
+    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsIDList() {
-      subsList_ = java.util.Collections.emptyList();
+    private SubscriptionID() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsIDList();
+      return new SubscriptionID();
     }
 
     @java.lang.Override
@@ -13230,7 +13801,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsIDList(
+    private SubscriptionID(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -13238,7 +13809,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -13250,12 +13820,16 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
               }
-              subsList_.add(
-                  input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry));
+              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -13273,64 +13847,47 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          subsList_ = java.util.Collections.unmodifiableList(subsList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
     }
 
-    public static final int SUBS_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
-      return subsList_;
-    }
-    /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-        getSubsListOrBuilderList() {
-      return subsList_;
-    }
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid subsId_;
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
     @java.lang.Override
-    public int getSubsListCount() {
-      return subsList_.size();
+    public boolean hasSubsId() {
+      return subsId_ != null;
     }
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
-      return subsList_.get(index);
+    public context.ContextOuterClass.Uuid getSubsId() {
+      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
     }
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.context.Uuid subs_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
-        int index) {
-      return subsList_.get(index);
+    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -13347,8 +13904,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < subsList_.size(); i++) {
-        output.writeMessage(1, subsList_.get(i));
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
       }
       unknownFields.writeTo(output);
     }
@@ -13359,9 +13916,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < subsList_.size(); i++) {
+      if (subsId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, subsList_.get(i));
+          .computeMessageSize(1, getSubsId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -13373,13 +13930,16 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsIDList)) {
+      if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
+      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
 
-      if (!getSubsListList()
-          .equals(other.getSubsListList())) return false;
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -13391,78 +13951,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSubsListCount() > 0) {
-        hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsListList().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubscriptionID parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -13475,7 +14035,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsIDList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubscriptionID prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -13491,26 +14051,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubsIDList}
+     * Protobuf type {@code monitoring.SubscriptionID}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsIDList)
-        monitoring.Monitoring.SubsIDListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubscriptionID)
+        monitoring.Monitoring.SubscriptionIDOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
+      // Construct using monitoring.Monitoring.SubscriptionID.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -13523,17 +14083,16 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSubsListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsListBuilder_ == null) {
-          subsList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
         } else {
-          subsListBuilder_.clear();
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
         return this;
       }
@@ -13541,17 +14100,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsIDList.getDefaultInstance();
+      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsIDList build() {
-        monitoring.Monitoring.SubsIDList result = buildPartial();
+      public monitoring.Monitoring.SubscriptionID build() {
+        monitoring.Monitoring.SubscriptionID result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -13559,17 +14118,12 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsIDList buildPartial() {
-        monitoring.Monitoring.SubsIDList result = new monitoring.Monitoring.SubsIDList(this);
-        int from_bitField0_ = bitField0_;
-        if (subsListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            subsList_ = java.util.Collections.unmodifiableList(subsList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.subsList_ = subsList_;
+      public monitoring.Monitoring.SubscriptionID buildPartial() {
+        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
         } else {
-          result.subsList_ = subsListBuilder_.build();
+          result.subsId_ = subsIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -13606,44 +14160,21 @@ public final class Monitoring {
           com.google.protobuf.Descriptors.FieldDescriptor field,
           java.lang.Object value) {
         return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsIDList) {
-          return mergeFrom((monitoring.Monitoring.SubsIDList)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.SubsIDList other) {
-        if (other == monitoring.Monitoring.SubsIDList.getDefaultInstance()) return this;
-        if (subsListBuilder_ == null) {
-          if (!other.subsList_.isEmpty()) {
-            if (subsList_.isEmpty()) {
-              subsList_ = other.subsList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSubsListIsMutable();
-              subsList_.addAll(other.subsList_);
-            }
-            onChanged();
-          }
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubscriptionID) {
+          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
         } else {
-          if (!other.subsList_.isEmpty()) {
-            if (subsListBuilder_.isEmpty()) {
-              subsListBuilder_.dispose();
-              subsListBuilder_ = null;
-              subsList_ = other.subsList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              subsListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubsListFieldBuilder() : null;
-            } else {
-              subsListBuilder_.addAllMessages(other.subsList_);
-            }
-          }
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) {
+        if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -13660,11 +14191,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubsIDList parsedMessage = null;
+        monitoring.Monitoring.SubscriptionID parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -13673,246 +14204,124 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ =
-        java.util.Collections.emptyList();
-      private void ensureSubsListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_;
 
+      private context.ContextOuterClass.Uuid subsId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
-        if (subsListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subsList_);
-        } else {
-          return subsListBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return Whether the subsId field is set.
        */
-      public int getSubsListCount() {
-        if (subsListBuilder_ == null) {
-          return subsList_.size();
-        } else {
-          return subsListBuilder_.getCount();
-        }
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return The subsId.
        */
-      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
-        if (subsListBuilder_ == null) {
-          return subsList_.get(index);
+      public context.ContextOuterClass.Uuid getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
         } else {
-          return subsListBuilder_.getMessage(index);
+          return subsIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder setSubsList(
-          int index, monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
+      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubsListIsMutable();
-          subsList_.set(index, value);
-          onChanged();
-        } else {
-          subsListBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder setSubsList(
-          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.set(index, builderForValue.build());
+          subsId_ = value;
           onChanged();
         } else {
-          subsListBuilder_.setMessage(index, builderForValue.build());
+          subsIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubsListIsMutable();
-          subsList_.add(value);
+      public Builder setSubsId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
           onChanged();
         } else {
-          subsListBuilder_.addMessage(value);
+          subsIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder addSubsList(
-          int index, monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
           }
-          ensureSubsListIsMutable();
-          subsList_.add(index, value);
-          onChanged();
-        } else {
-          subsListBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          subsListBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(
-          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          subsListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addAllSubsList(
-          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subsList_);
-          onChanged();
-        } else {
-          subsListBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder clearSubsList() {
-        if (subsListBuilder_ == null) {
-          subsList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          subsListBuilder_.clear();
+          subsIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder removeSubsList(int index) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.remove(index);
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
           onChanged();
         } else {
-          subsListBuilder_.remove(index);
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
-          int index) {
-        return getSubsListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
-          int index) {
-        if (subsListBuilder_ == null) {
-          return subsList_.get(index);  } else {
-          return subsListBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-           getSubsListOrBuilderList() {
-        if (subsListBuilder_ != null) {
-          return subsListBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(subsList_);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() {
-        return getSubsListFieldBuilder().addBuilder(
-            monitoring.Monitoring.SubscriptionID.getDefaultInstance());
+      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder(
-          int index) {
-        return getSubsListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.SubscriptionID.getDefaultInstance());
+      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+        }
       }
       /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> 
-           getSubsListBuilderList() {
-        return getSubsListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsListFieldBuilder() {
-        if (subsListBuilder_ == null) {
-          subsListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  subsList_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getSubsId(),
                   getParentForChildren(),
                   isClean());
-          subsList_ = null;
+          subsId_ = null;
         }
-        return subsListBuilder_;
+        return subsIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -13927,176 +14336,110 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
-    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
+    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
     }
 
-    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
+    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsIDList>
-        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
+    private static final com.google.protobuf.Parser<SubscriptionID>
+        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
       @java.lang.Override
-      public SubsIDList parsePartialFrom(
+      public SubscriptionID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsIDList(input, extensionRegistry);
+        return new SubscriptionID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsIDList> parser() {
+    public static com.google.protobuf.Parser<SubscriptionID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
+    public com.google.protobuf.Parser<SubscriptionID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface AlarmDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
+  public interface SubsResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
-    boolean hasAlarmId();
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return The alarmId.
-     */
-    monitoring.Monitoring.AlarmID getAlarmId();
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     */
-    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder();
-
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The alarmDescription.
-     */
-    java.lang.String getAlarmDescription();
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The bytes for alarmDescription.
-     */
-    com.google.protobuf.ByteString
-        getAlarmDescriptionBytes();
-
-    /**
-     * <code>string name = 3;</code>
-     * @return The name.
-     */
-    java.lang.String getName();
-    /**
-     * <code>string name = 3;</code>
-     * @return The bytes for name.
-     */
-    com.google.protobuf.ByteString
-        getNameBytes();
-
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    monitoring.Monitoring.KpiId getKpiId(int index);
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
-    int getKpiIdCount();
+    boolean hasSubsId();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList();
+    monitoring.Monitoring.SubscriptionID getSubsId();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index);
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
 
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    java.util.List<monitoring.Monitoring.KpiValueRange> 
-        getKpiValueRangeList();
+    java.util.List<monitoring.Monitoring.KpiList> 
+        getKpiListList();
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    monitoring.Monitoring.KpiValueRange getKpiValueRange(int index);
+    monitoring.Monitoring.KpiList getKpiList(int index);
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    int getKpiValueRangeCount();
+    int getKpiListCount();
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
-        getKpiValueRangeOrBuilderList();
+    java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList();
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
-    monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+    monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
         int index);
-
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return Whether the timestamp field is set.
-     */
-    boolean hasTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return The timestamp.
-     */
-    context.ContextOuterClass.Timestamp getTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.AlarmDescriptor}
+   * Protobuf type {@code monitoring.SubsResponse}
    */
-  public static final class AlarmDescriptor extends
+  public static final class SubsResponse extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
-      AlarmDescriptorOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
+      SubsResponseOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use AlarmDescriptor.newBuilder() to construct.
-    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubsResponse.newBuilder() to construct.
+    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private AlarmDescriptor() {
-      alarmDescription_ = "";
-      name_ = "";
-      kpiId_ = java.util.Collections.emptyList();
-      kpiValueRange_ = java.util.Collections.emptyList();
+    private SubsResponse() {
+      kpiList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new AlarmDescriptor();
+      return new SubsResponse();
     }
 
     @java.lang.Override
@@ -14104,7 +14447,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private AlarmDescriptor(
+    private SubsResponse(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -14124,59 +14467,25 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.AlarmID.Builder subBuilder = null;
-              if (alarmId_ != null) {
-                subBuilder = alarmId_.toBuilder();
+              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
               }
-              alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
+              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(alarmId_);
-                alarmId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              alarmDescription_ = s;
-              break;
-            }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              name_ = s;
-              break;
-            }
-            case 34: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiId_.add(
-                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                kpiValueRange_ = new java.util.ArrayList<monitoring.Monitoring.KpiValueRange>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              kpiValueRange_.add(
-                  input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry));
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
-
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -14195,234 +14504,89 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
-    }
-
-    public static final int ALARM_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.AlarmID alarmId_;
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
-    @java.lang.Override
-    public boolean hasAlarmId() {
-      return alarmId_ != null;
-    }
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     * @return The alarmId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmID getAlarmId() {
-      return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
-    }
-    /**
-     * <code>.monitoring.AlarmID alarm_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
-      return getAlarmId();
-    }
-
-    public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 2;
-    private volatile java.lang.Object alarmDescription_;
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The alarmDescription.
-     */
-    @java.lang.Override
-    public java.lang.String getAlarmDescription() {
-      java.lang.Object ref = alarmDescription_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        alarmDescription_ = s;
-        return s;
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
     }
-    /**
-     * <code>string alarm_description = 2;</code>
-     * @return The bytes for alarmDescription.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getAlarmDescriptionBytes() {
-      java.lang.Object ref = alarmDescription_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        alarmDescription_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
     }
 
-    public static final int NAME_FIELD_NUMBER = 3;
-    private volatile java.lang.Object name_;
-    /**
-     * <code>string name = 3;</code>
-     * @return The name.
-     */
-    @java.lang.Override
-    public java.lang.String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        name_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string name = 3;</code>
-     * @return The bytes for name.
-     */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 4;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-      return kpiId_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList() {
-      return kpiId_;
-    }
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.SubscriptionID subsId_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
     @java.lang.Override
-    public int getKpiIdCount() {
-      return kpiId_.size();
+    public boolean hasSubsId() {
+      return subsId_ != null;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId(int index) {
-      return kpiId_.get(index);
+    public monitoring.Monitoring.SubscriptionID getSubsId() {
+      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index) {
-      return kpiId_.get(index);
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
     }
 
-    public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 5;
-    private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_;
+    public static final int KPI_LIST_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.KpiList> kpiList_;
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() {
-      return kpiValueRange_;
+    public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+      return kpiList_;
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
-        getKpiValueRangeOrBuilderList() {
-      return kpiValueRange_;
+    public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public int getKpiValueRangeCount() {
-      return kpiValueRange_.size();
+    public int getKpiListCount() {
+      return kpiList_.size();
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) {
-      return kpiValueRange_.get(index);
+    public monitoring.Monitoring.KpiList getKpiList(int index) {
+      return kpiList_.get(index);
     }
     /**
-     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+    public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
         int index) {
-      return kpiValueRange_.get(index);
-    }
-
-    public static final int TIMESTAMP_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.Timestamp timestamp_;
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return Whether the timestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 6;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
+      return kpiList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -14439,23 +14603,11 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (alarmId_ != null) {
-        output.writeMessage(1, getAlarmId());
-      }
-      if (!getAlarmDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, alarmDescription_);
-      }
-      if (!getNameBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);
-      }
-      for (int i = 0; i < kpiId_.size(); i++) {
-        output.writeMessage(4, kpiId_.get(i));
-      }
-      for (int i = 0; i < kpiValueRange_.size(); i++) {
-        output.writeMessage(5, kpiValueRange_.get(i));
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
       }
-      if (timestamp_ != null) {
-        output.writeMessage(6, getTimestamp());
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(2, kpiList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -14466,27 +14618,13 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (alarmId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getAlarmId());
-      }
-      if (!getAlarmDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, alarmDescription_);
-      }
-      if (!getNameBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);
-      }
-      for (int i = 0; i < kpiId_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, kpiId_.get(i));
-      }
-      for (int i = 0; i < kpiValueRange_.size(); i++) {
+      if (subsId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, kpiValueRange_.get(i));
+          .computeMessageSize(1, getSubsId());
       }
-      if (timestamp_ != null) {
+      for (int i = 0; i < kpiList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getTimestamp());
+          .computeMessageSize(2, kpiList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -14498,29 +14636,18 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
+      if (!(obj instanceof monitoring.Monitoring.SubsResponse)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj;
+      monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj;
 
-      if (hasAlarmId() != other.hasAlarmId()) return false;
-      if (hasAlarmId()) {
-        if (!getAlarmId()
-            .equals(other.getAlarmId())) return false;
-      }
-      if (!getAlarmDescription()
-          .equals(other.getAlarmDescription())) return false;
-      if (!getName()
-          .equals(other.getName())) return false;
-      if (!getKpiIdList()
-          .equals(other.getKpiIdList())) return false;
-      if (!getKpiValueRangeList()
-          .equals(other.getKpiValueRangeList())) return false;
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
       }
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -14532,94 +14659,82 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasAlarmId()) {
-        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getAlarmId().hashCode();
-      }
-      hash = (37 * hash) + ALARM_DESCRIPTION_FIELD_NUMBER;
-      hash = (53 * hash) + getAlarmDescription().hashCode();
-      hash = (37 * hash) + NAME_FIELD_NUMBER;
-      hash = (53 * hash) + getName().hashCode();
-      if (getKpiIdCount() > 0) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdList().hashCode();
-      }
-      if (getKpiValueRangeCount() > 0) {
-        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiValueRangeList().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
       }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -14632,7 +14747,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmDescriptor prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubsResponse prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -14648,26 +14763,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.AlarmDescriptor}
+     * Protobuf type {@code monitoring.SubsResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmDescriptor)
-        monitoring.Monitoring.AlarmDescriptorOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsResponse)
+        monitoring.Monitoring.SubsResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
+      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -14680,40 +14795,23 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiIdFieldBuilder();
-          getKpiValueRangeFieldBuilder();
+          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
-        } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
-        }
-        alarmDescription_ = "";
-
-        name_ = "";
-
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          kpiIdBuilder_.clear();
-        }
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRange_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
         } else {
-          kpiValueRangeBuilder_.clear();
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
+          kpiListBuilder_.clear();
         }
         return this;
       }
@@ -14721,17 +14819,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
+      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor build() {
-        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
+      public monitoring.Monitoring.SubsResponse build() {
+        monitoring.Monitoring.SubsResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -14739,38 +14837,22 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor buildPartial() {
-        monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
+      public monitoring.Monitoring.SubsResponse buildPartial() {
+        monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
         int from_bitField0_ = bitField0_;
-        if (alarmIdBuilder_ == null) {
-          result.alarmId_ = alarmId_;
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
         } else {
-          result.alarmId_ = alarmIdBuilder_.build();
+          result.subsId_ = subsIdBuilder_.build();
         }
-        result.alarmDescription_ = alarmDescription_;
-        result.name_ = name_;
-        if (kpiIdBuilder_ == null) {
+        if (kpiListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        if (kpiValueRangeBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.kpiValueRange_ = kpiValueRange_;
-        } else {
-          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
-        }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
+          result.kpiList_ = kpiList_;
         } else {
-          result.timestamp_ = timestampBuilder_.build();
+          result.kpiList_ = kpiListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -14810,82 +14892,45 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmDescriptor) {
-          return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other);
+        if (other instanceof monitoring.Monitoring.SubsResponse) {
+          return mergeFrom((monitoring.Monitoring.SubsResponse)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmDescriptor other) {
-        if (other == monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()) return this;
-        if (other.hasAlarmId()) {
-          mergeAlarmId(other.getAlarmId());
-        }
-        if (!other.getAlarmDescription().isEmpty()) {
-          alarmDescription_ = other.alarmDescription_;
-          onChanged();
-        }
-        if (!other.getName().isEmpty()) {
-          name_ = other.name_;
-          onChanged();
+      public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) {
+        if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
         }
-        if (kpiIdBuilder_ == null) {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiId_.isEmpty()) {
-              kpiId_ = other.kpiId_;
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureKpiIdIsMutable();
-              kpiId_.addAll(other.kpiId_);
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
             }
             onChanged();
           }
         } else {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiIdBuilder_.isEmpty()) {
-              kpiIdBuilder_.dispose();
-              kpiIdBuilder_ = null;
-              kpiId_ = other.kpiId_;
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdFieldBuilder() : null;
-            } else {
-              kpiIdBuilder_.addAllMessages(other.kpiId_);
-            }
-          }
-        }
-        if (kpiValueRangeBuilder_ == null) {
-          if (!other.kpiValueRange_.isEmpty()) {
-            if (kpiValueRange_.isEmpty()) {
-              kpiValueRange_ = other.kpiValueRange_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureKpiValueRangeIsMutable();
-              kpiValueRange_.addAll(other.kpiValueRange_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiValueRange_.isEmpty()) {
-            if (kpiValueRangeBuilder_.isEmpty()) {
-              kpiValueRangeBuilder_.dispose();
-              kpiValueRangeBuilder_ = null;
-              kpiValueRange_ = other.kpiValueRange_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              kpiValueRangeBuilder_ = 
+              kpiListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiValueRangeFieldBuilder() : null;
+                   getKpiListFieldBuilder() : null;
             } else {
-              kpiValueRangeBuilder_.addAllMessages(other.kpiValueRange_);
+              kpiListBuilder_.addAllMessages(other.kpiList_);
             }
           }
         }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -14901,11 +14946,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
+        monitoring.Monitoring.SubsResponse parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -14916,1495 +14961,2430 @@ public final class Monitoring {
       }
       private int bitField0_;
 
-      private monitoring.Monitoring.AlarmID alarmId_;
+      private monitoring.Monitoring.SubscriptionID subsId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
-       * @return Whether the alarmId field is set.
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return Whether the subsId field is set.
        */
-      public boolean hasAlarmId() {
-        return alarmIdBuilder_ != null || alarmId_ != null;
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return The subsId.
+       */
+      public monitoring.Monitoring.SubscriptionID getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        } else {
+          return subsIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
+          }
+          onChanged();
+        } else {
+          subsIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  getSubsId(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
+      }
+
+      private java.util.List<monitoring.Monitoring.KpiList> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
-       * @return The alarmId.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public monitoring.Monitoring.AlarmID getAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+      public monitoring.Monitoring.KpiList getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
         } else {
-          return alarmIdBuilder_.getMessage();
+          return kpiListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setAlarmId(monitoring.Monitoring.AlarmID value) {
-        if (alarmIdBuilder_ == null) {
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          alarmId_ = value;
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(value);
+          kpiListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setAlarmId(
-          monitoring.Monitoring.AlarmID.Builder builderForValue) {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = builderForValue.build();
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(builderForValue.build());
+          kpiListBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder mergeAlarmId(monitoring.Monitoring.AlarmID value) {
-        if (alarmIdBuilder_ == null) {
-          if (alarmId_ != null) {
-            alarmId_ =
-              monitoring.Monitoring.AlarmID.newBuilder(alarmId_).mergeFrom(value).buildPartial();
-          } else {
-            alarmId_ = value;
+      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
           onChanged();
         } else {
-          alarmIdBuilder_.mergeFrom(value);
+          kpiListBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder clearAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
           onChanged();
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          kpiListBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
-       */
-      public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
-        
-        onChanged();
-        return getAlarmIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
-        if (alarmIdBuilder_ != null) {
-          return alarmIdBuilder_.getMessageOrBuilder();
+      public Builder addKpiList(
+          monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
         } else {
-          return alarmId_ == null ?
-              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+          kpiListBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
-          getAlarmIdFieldBuilder() {
-        if (alarmIdBuilder_ == null) {
-          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
-                  getAlarmId(),
-                  getParentForChildren(),
-                  isClean());
-          alarmId_ = null;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, builderForValue.build());
         }
-        return alarmIdBuilder_;
+        return this;
       }
-
-      private java.lang.Object alarmDescription_ = "";
       /**
-       * <code>string alarm_description = 2;</code>
-       * @return The alarmDescription.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public java.lang.String getAlarmDescription() {
-        java.lang.Object ref = alarmDescription_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          alarmDescription_ = s;
-          return s;
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          kpiListBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>string alarm_description = 2;</code>
-       * @return The bytes for alarmDescription.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getAlarmDescriptionBytes() {
-        java.lang.Object ref = alarmDescription_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          alarmDescription_ = b;
-          return b;
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          kpiListBuilder_.clear();
         }
-      }
-      /**
-       * <code>string alarm_description = 2;</code>
-       * @param value The alarmDescription to set.
-       * @return This builder for chaining.
-       */
-      public Builder setAlarmDescription(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        alarmDescription_ = value;
-        onChanged();
         return this;
       }
       /**
-       * <code>string alarm_description = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder clearAlarmDescription() {
-        
-        alarmDescription_ = getDefaultInstance().getAlarmDescription();
-        onChanged();
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
+          onChanged();
+        } else {
+          kpiListBuilder_.remove(index);
+        }
         return this;
       }
       /**
-       * <code>string alarm_description = 2;</code>
-       * @param value The bytes for alarmDescription to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setAlarmDescriptionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        alarmDescription_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.KpiList.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
       }
-
-      private java.lang.Object name_ = "";
       /**
-       * <code>string name = 3;</code>
-       * @return The name.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public java.lang.String getName() {
-        java.lang.Object ref = name_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          name_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
+      public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>string name = 3;</code>
-       * @return The bytes for name.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getNameBytes() {
-        java.lang.Object ref = name_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          name_ = b;
-          return b;
+      public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          return java.util.Collections.unmodifiableList(kpiList_);
         }
       }
       /**
-       * <code>string name = 3;</code>
-       * @param value The name to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        name_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiList.getDefaultInstance());
       }
       /**
-       * <code>string name = 3;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder clearName() {
-        
-        name_ = getDefaultInstance().getName();
-        onChanged();
-        return this;
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiList.getDefaultInstance());
       }
       /**
-       * <code>string name = 3;</code>
-       * @param value The bytes for name to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
+      public java.util.List<monitoring.Monitoring.KpiList.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiList_ = null;
+        }
+        return kpiListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
+    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
+    }
+
+    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsResponse>
+        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
+      @java.lang.Override
+      public SubsResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsResponse(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsResponse> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
   }
-  checkByteStringIsUtf8(value);
-        
-        name_ = value;
-        onChanged();
-        return this;
+
+  public interface SubsIDListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.SubscriptionID> 
+        getSubsListList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionID getSubsList(int index);
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    int getSubsListCount();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.SubsIDList}
+   */
+  public static final class SubsIDList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
+      SubsIDListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsIDList.newBuilder() to construct.
+    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsIDList() {
+      subsList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubsIDList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubsIDList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              subsList_.add(
+                  input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          subsList_ = java.util.Collections.unmodifiableList(subsList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+    }
+
+    public static final int SUBS_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getSubsListCount() {
+      return subsList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+      return subsList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index) {
+      return subsList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
-      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
-          bitField0_ |= 0x00000001;
-         }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < subsList_.size(); i++) {
+        output.writeMessage(1, subsList_.get(i));
       }
+      unknownFields.writeTo(output);
+    }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-        if (kpiIdBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiId_);
-        } else {
-          return kpiIdBuilder_.getMessageList();
-        }
+      size = 0;
+      for (int i = 0; i < subsList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, subsList_.get(i));
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public int getKpiIdCount() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.size();
-        } else {
-          return kpiIdBuilder_.getCount();
-        }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId getKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);
-        } else {
-          return kpiIdBuilder_.getMessage(index);
-        }
+      if (!(obj instanceof monitoring.Monitoring.SubsIDList)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, value);
-        }
-        return this;
+      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
+
+      if (!getSubsListList()
+          .equals(other.getSubsListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getSubsListCount() > 0) {
+        hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsListList().hashCode();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(value);
-        }
-        return this;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.SubsIDList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.SubsIDList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsIDList)
+        monitoring.Monitoring.SubsIDListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(index, value);
-        }
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(builderForValue.build());
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getSubsListFieldBuilder();
         }
-        return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, builderForValue.build());
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiIdBuilder_.addMessage(index, builderForValue.build());
+          subsListBuilder_.clear();
         }
         return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder addAllKpiId(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiId_);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addAllMessages(values);
-        }
-        return this;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          kpiIdBuilder_.clear();
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsIDList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList build() {
+        monitoring.Monitoring.SubsIDList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public Builder removeKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.remove(index);
-          onChanged();
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList buildPartial() {
+        monitoring.Monitoring.SubsIDList result = new monitoring.Monitoring.SubsIDList(this);
+        int from_bitField0_ = bitField0_;
+        if (subsListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            subsList_ = java.util.Collections.unmodifiableList(subsList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.subsList_ = subsList_;
         } else {
-          kpiIdBuilder_.remove(index);
+          result.subsList_ = subsListBuilder_.build();
         }
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().getBuilder(index);
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-          int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);  } else {
-          return kpiIdBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdOrBuilderList() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilderList();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubsIDList) {
+          return mergeFrom((monitoring.Monitoring.SubsIDList)other);
         } else {
-          return java.util.Collections.unmodifiableList(kpiId_);
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
-        return getKpiIdFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+
+      public Builder mergeFrom(monitoring.Monitoring.SubsIDList other) {
+        if (other == monitoring.Monitoring.SubsIDList.getDefaultInstance()) return this;
+        if (subsListBuilder_ == null) {
+          if (!other.subsList_.isEmpty()) {
+            if (subsList_.isEmpty()) {
+              subsList_ = other.subsList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSubsListIsMutable();
+              subsList_.addAll(other.subsList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subsList_.isEmpty()) {
+            if (subsListBuilder_.isEmpty()) {
+              subsListBuilder_.dispose();
+              subsListBuilder_ = null;
+              subsList_ = other.subsList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              subsListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubsListFieldBuilder() : null;
+            } else {
+              subsListBuilder_.addAllMessages(other.subsList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdBuilderList() {
-        return getKpiIdFieldBuilder().getBuilderList();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiId_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubsIDList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return kpiIdBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_ =
+      private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ =
         java.util.Collections.emptyList();
-      private void ensureKpiValueRangeIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          kpiValueRange_ = new java.util.ArrayList<monitoring.Monitoring.KpiValueRange>(kpiValueRange_);
-          bitField0_ |= 0x00000002;
+      private void ensureSubsListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_;
 
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() {
-        if (kpiValueRangeBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiValueRange_);
+      public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+        if (subsListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subsList_);
         } else {
-          return kpiValueRangeBuilder_.getMessageList();
+          return subsListBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public int getKpiValueRangeCount() {
-        if (kpiValueRangeBuilder_ == null) {
-          return kpiValueRange_.size();
+      public int getSubsListCount() {
+        if (subsListBuilder_ == null) {
+          return subsList_.size();
         } else {
-          return kpiValueRangeBuilder_.getCount();
+          return subsListBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) {
-        if (kpiValueRangeBuilder_ == null) {
-          return kpiValueRange_.get(index);
+      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);
         } else {
-          return kpiValueRangeBuilder_.getMessage(index);
+          return subsListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.set(index, value);
+          ensureSubsListIsMutable();
+          subsList_.set(index, value);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.setMessage(index, value);
+          subsListBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.set(index, builderForValue.build());
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiValueRangeBuilder_.setMessage(index, builderForValue.build());
+          subsListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
+      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(value);
+          ensureSubsListIsMutable();
+          subsList_.add(value);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(value);
+          subsListBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(index, value);
+          ensureSubsListIsMutable();
+          subsList_.add(index, value);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(index, value);
+          subsListBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(
-          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(builderForValue.build());
+      public Builder addSubsList(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(builderForValue.build());
+          subsListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiValueRange(
-          int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.add(index, builderForValue.build());
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addMessage(index, builderForValue.build());
+          subsListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addAllKpiValueRange(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiValueRange> values) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
+      public Builder addAllSubsList(
+          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiValueRange_);
+              values, subsList_);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.addAllMessages(values);
+          subsListBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearKpiValueRange() {
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRange_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder clearSubsList() {
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.clear();
+          subsListBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder removeKpiValueRange(int index) {
-        if (kpiValueRangeBuilder_ == null) {
-          ensureKpiValueRangeIsMutable();
-          kpiValueRange_.remove(index);
+      public Builder removeSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.remove(index);
           onChanged();
         } else {
-          kpiValueRangeBuilder_.remove(index);
+          subsListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder(
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
           int index) {
-        return getKpiValueRangeFieldBuilder().getBuilder(index);
+        return getSubsListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
           int index) {
-        if (kpiValueRangeBuilder_ == null) {
-          return kpiValueRange_.get(index);  } else {
-          return kpiValueRangeBuilder_.getMessageOrBuilder(index);
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);  } else {
+          return subsListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
-           getKpiValueRangeOrBuilderList() {
-        if (kpiValueRangeBuilder_ != null) {
-          return kpiValueRangeBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+           getSubsListOrBuilderList() {
+        if (subsListBuilder_ != null) {
+          return subsListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(kpiValueRange_);
+          return java.util.Collections.unmodifiableList(subsList_);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder() {
-        return getKpiValueRangeFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiValueRange.getDefaultInstance());
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() {
+        return getSubsListFieldBuilder().addBuilder(
+            monitoring.Monitoring.SubscriptionID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder(
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder(
           int index) {
-        return getKpiValueRangeFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiValueRange.getDefaultInstance());
+        return getSubsListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.SubscriptionID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiValueRange.Builder> 
-           getKpiValueRangeBuilderList() {
-        return getKpiValueRangeFieldBuilder().getBuilderList();
+      public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> 
+           getSubsListBuilderList() {
+        return getSubsListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsListFieldBuilder() {
+        if (subsListBuilder_ == null) {
+          subsListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  subsList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subsList_ = null;
+        }
+        return subsListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
+    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
+    }
+
+    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsIDList>
+        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
+      @java.lang.Override
+      public SubsIDList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsIDList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsIDList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AlarmDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The alarmDescription.
+     */
+    java.lang.String getAlarmDescription();
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The bytes for alarmDescription.
+     */
+    com.google.protobuf.ByteString
+        getAlarmDescriptionBytes();
+
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return Whether the kpiValueRange field is set.
+     */
+    boolean hasKpiValueRange();
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return The kpiValueRange.
+     */
+    monitoring.Monitoring.KpiValueRange getKpiValueRange();
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     */
+    monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder();
+
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The timestamp.
+     */
+    java.lang.String getTimestamp();
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The bytes for timestamp.
+     */
+    com.google.protobuf.ByteString
+        getTimestampBytes();
+  }
+  /**
+   * Protobuf type {@code monitoring.AlarmDescriptor}
+   */
+  public static final class AlarmDescriptor extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
+      AlarmDescriptorOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AlarmDescriptor.newBuilder() to construct.
+    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AlarmDescriptor() {
+      alarmDescription_ = "";
+      name_ = "";
+      timestamp_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AlarmDescriptor();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AlarmDescriptor(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> 
-          getKpiValueRangeFieldBuilder() {
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder>(
-                  kpiValueRange_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiValueRange_ = null;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              alarmDescription_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 34: {
+              monitoring.Monitoring.KpiValueRange.Builder subBuilder = null;
+              if (kpiValueRange_ != null) {
+                subBuilder = kpiValueRange_.toBuilder();
+              }
+              kpiValueRange_ = input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValueRange_);
+                kpiValueRange_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              timestamp_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
         }
-        return kpiValueRangeBuilder_;
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+    }
 
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       * @return Whether the timestamp field is set.
-       */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+    }
+
+    public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object alarmDescription_;
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The alarmDescription.
+     */
+    @java.lang.Override
+    public java.lang.String getAlarmDescription() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        alarmDescription_ = s;
+        return s;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       * @return The timestamp.
-       */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        } else {
-          return timestampBuilder_.getMessage();
-        }
+    }
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The bytes for alarmDescription.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getAlarmDescriptionBytes() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        alarmDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(value);
-        }
+    }
 
-        return this;
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
-          onChanged();
-        } else {
-          timestampBuilder_.mergeFrom(value);
-        }
+    }
 
-        return this;
+    public static final int KPI_ID_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 4;
+    private monitoring.Monitoring.KpiValueRange kpiValueRange_;
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return Whether the kpiValueRange field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValueRange() {
+      return kpiValueRange_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return The kpiValueRange.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
+      return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+    }
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
+      return getKpiValueRange();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 5;
+    private volatile java.lang.Object timestamp_;
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public java.lang.String getTimestamp() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        timestamp_ = s;
+        return s;
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-          onChanged();
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
+    }
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The bytes for timestamp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTimestampBytes() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        timestamp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
-        
-        onChanged();
-        return getTimestampFieldBuilder().getBuilder();
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, alarmDescription_);
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
-        } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
       }
-      /**
-       * <code>.context.Timestamp timestamp = 6;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          timestamp_ = null;
-        }
-        return timestampBuilder_;
+      if (kpiId_ != null) {
+        output.writeMessage(3, getKpiId());
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+      if (kpiValueRange_ != null) {
+        output.writeMessage(4, getKpiValueRange());
       }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      if (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timestamp_);
       }
-
-
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
+      unknownFields.writeTo(output);
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
-    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
-    }
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-    public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() {
-      return DEFAULT_INSTANCE;
+      size = 0;
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, alarmDescription_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getKpiId());
+      }
+      if (kpiValueRange_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getKpiValueRange());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timestamp_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
     }
 
-    private static final com.google.protobuf.Parser<AlarmDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
-      @java.lang.Override
-      public AlarmDescriptor parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmDescriptor(input, extensionRegistry);
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-    };
+      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj;
 
-    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
-      return PARSER;
+      if (!getAlarmDescription()
+          .equals(other.getAlarmDescription())) return false;
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (hasKpiValueRange() != other.hasKpiValueRange()) return false;
+      if (hasKpiValueRange()) {
+        if (!getKpiValueRange()
+            .equals(other.getKpiValueRange())) return false;
+      }
+      if (!getTimestamp()
+          .equals(other.getTimestamp())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
-      return PARSER;
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ALARM_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getAlarmDescription().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      if (hasKpiValueRange()) {
+        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValueRange().hashCode();
+      }
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
     }
 
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
     }
-
-  }
-
-  public interface AlarmIDOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
-    boolean hasAlarmId();
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return The alarmId.
-     */
-    context.ContextOuterClass.Uuid getAlarmId();
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     */
-    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
-  }
-  /**
-   * Protobuf type {@code monitoring.AlarmID}
-   */
-  public static final class AlarmID extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
-      AlarmIDOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use AlarmID.newBuilder() to construct.
-    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
     }
-    private AlarmID() {
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
     }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new AlarmID();
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
     }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
     }
-    private AlarmID(
-        com.google.protobuf.CodedInputStream input,
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (alarmId_ != null) {
-                subBuilder = alarmId_.toBuilder();
-              }
-              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(alarmId_);
-                alarmId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.AlarmDescriptor prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-
-    public static final int ALARM_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid alarmId_;
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
-     */
     @java.lang.Override
-    public boolean hasAlarmId() {
-      return alarmId_ != null;
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
     }
-    /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return The alarmId.
-     */
+
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getAlarmId() {
-      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
     }
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
+     * Protobuf type {@code monitoring.AlarmDescriptor}
      */
-    @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
-      return getAlarmId();
-    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmDescriptor)
+        monitoring.Monitoring.AlarmDescriptorOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+      }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+      }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (alarmId_ != null) {
-        output.writeMessage(1, getAlarmId());
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      unknownFields.writeTo(output);
-    }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        alarmDescription_ = "";
 
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+        name_ = "";
 
-      size = 0;
-      if (alarmId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getAlarmId());
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
+        } else {
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
+        }
+        timestamp_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor build() {
+        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor buildPartial() {
+        monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
+        result.alarmDescription_ = alarmDescription_;
+        result.name_ = name_;
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        if (kpiValueRangeBuilder_ == null) {
+          result.kpiValueRange_ = kpiValueRange_;
+        } else {
+          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
+        }
+        result.timestamp_ = timestamp_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.AlarmDescriptor) {
+          return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.AlarmDescriptor other) {
+        if (other == monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()) return this;
+        if (!other.getAlarmDescription().isEmpty()) {
+          alarmDescription_ = other.alarmDescription_;
+          onChanged();
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.hasKpiValueRange()) {
+          mergeKpiValueRange(other.getKpiValueRange());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
 
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      private java.lang.Object alarmDescription_ = "";
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return The alarmDescription.
+       */
+      public java.lang.String getAlarmDescription() {
+        java.lang.Object ref = alarmDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          alarmDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
-        return super.equals(obj);
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return The bytes for alarmDescription.
+       */
+      public com.google.protobuf.ByteString
+          getAlarmDescriptionBytes() {
+        java.lang.Object ref = alarmDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          alarmDescription_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
       }
-      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
-
-      if (hasAlarmId() != other.hasAlarmId()) return false;
-      if (hasAlarmId()) {
-        if (!getAlarmId()
-            .equals(other.getAlarmId())) return false;
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @param value The alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        alarmDescription_ = value;
+        onChanged();
+        return this;
       }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlarmDescription() {
+        
+        alarmDescription_ = getDefaultInstance().getAlarmDescription();
+        onChanged();
+        return this;
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasAlarmId()) {
-        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getAlarmId().hashCode();
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @param value The bytes for alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        alarmDescription_ = value;
+        onChanged();
+        return this;
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmID parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
 
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.AlarmID}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmID)
-        monitoring.Monitoring.AlarmIDOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
       }
-
-      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
       }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          kpiIdBuilder_.setMessage(value);
         }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
-      }
 
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmID.getDefaultInstance();
+        return this;
       }
-
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmID build() {
-        monitoring.Monitoring.AlarmID result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
         }
-        return result;
-      }
 
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmID buildPartial() {
-        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
-        if (alarmIdBuilder_ == null) {
-          result.alarmId_ = alarmId_;
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
         } else {
-          result.alarmId_ = alarmIdBuilder_.build();
+          kpiIdBuilder_.mergeFrom(value);
         }
-        onBuilt();
-        return result;
-      }
 
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmID) {
-          return mergeFrom((monitoring.Monitoring.AlarmID)other);
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
-      }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
-        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
-        if (other.hasAlarmId()) {
-          mergeAlarmId(other.getAlarmId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.AlarmID parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
-        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid alarmId_;
+      private monitoring.Monitoring.KpiValueRange kpiValueRange_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
-       * @return Whether the alarmId field is set.
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return Whether the kpiValueRange field is set.
        */
-      public boolean hasAlarmId() {
-        return alarmIdBuilder_ != null || alarmId_ != null;
+      public boolean hasKpiValueRange() {
+        return kpiValueRangeBuilder_ != null || kpiValueRange_ != null;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
-       * @return The alarmId.
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return The kpiValueRange.
        */
-      public context.ContextOuterClass.Uuid getAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+      public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
         } else {
-          return alarmIdBuilder_.getMessage();
+          return kpiValueRangeBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
-        if (alarmIdBuilder_ == null) {
+      public Builder setKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          alarmId_ = value;
+          kpiValueRange_ = value;
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(value);
+          kpiValueRangeBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder setAlarmId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = builderForValue.build();
+      public Builder setKpiValueRange(
+          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = builderForValue.build();
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(builderForValue.build());
+          kpiValueRangeBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
-        if (alarmIdBuilder_ == null) {
-          if (alarmId_ != null) {
-            alarmId_ =
-              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+      public Builder mergeKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (kpiValueRange_ != null) {
+            kpiValueRange_ =
+              monitoring.Monitoring.KpiValueRange.newBuilder(kpiValueRange_).mergeFrom(value).buildPartial();
           } else {
-            alarmId_ = value;
+            kpiValueRange_ = value;
           }
           onChanged();
         } else {
-          alarmIdBuilder_.mergeFrom(value);
+          kpiValueRangeBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public Builder clearAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+      public Builder clearKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
           onChanged();
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
+      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder() {
         
         onChanged();
-        return getAlarmIdFieldBuilder().getBuilder();
+        return getKpiValueRangeFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
-        if (alarmIdBuilder_ != null) {
-          return alarmIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
+        if (kpiValueRangeBuilder_ != null) {
+          return kpiValueRangeBuilder_.getMessageOrBuilder();
         } else {
-          return alarmId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+          return kpiValueRange_ == null ?
+              monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
         }
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getAlarmIdFieldBuilder() {
-        if (alarmIdBuilder_ == null) {
-          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getAlarmId(),
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> 
+          getKpiValueRangeFieldBuilder() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRangeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder>(
+                  getKpiValueRange(),
                   getParentForChildren(),
                   isClean());
-          alarmId_ = null;
+          kpiValueRange_ = null;
         }
-        return alarmIdBuilder_;
+        return kpiValueRangeBuilder_;
+      }
+
+      private java.lang.Object timestamp_ = "";
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return The timestamp.
+       */
+      public java.lang.String getTimestamp() {
+        java.lang.Object ref = timestamp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          timestamp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return The bytes for timestamp.
+       */
+      public com.google.protobuf.ByteString
+          getTimestampBytes() {
+        java.lang.Object ref = timestamp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          timestamp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestamp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTimestamp() {
+        
+        timestamp_ = getDefaultInstance().getTimestamp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @param value The bytes for timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestampBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -16419,97 +17399,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
-    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
+    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
     }
 
-    public static monitoring.Monitoring.AlarmID getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<AlarmID>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
+    private static final com.google.protobuf.Parser<AlarmDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
       @java.lang.Override
-      public AlarmID parsePartialFrom(
+      public AlarmDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmID(input, extensionRegistry);
+        return new AlarmDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<AlarmID> parser() {
+    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmID> getParserForType() {
+    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface AlarmSubscriptionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmSubscription)
+  public interface AlarmIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return Whether the alarmID field is set.
-     */
-    boolean hasAlarmID();
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return The alarmID.
-     */
-    monitoring.Monitoring.AlarmID getAlarmID();
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
-    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder();
-
+    boolean hasAlarmId();
     /**
-     * <code>float subscription_timeout_s = 2;</code>
-     * @return The subscriptionTimeoutS.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
-    float getSubscriptionTimeoutS();
-
+    context.ContextOuterClass.Uuid getAlarmId();
     /**
-     * <code>float subscription_frequency_ms = 3;</code>
-     * @return The subscriptionFrequencyMs.
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
-    float getSubscriptionFrequencyMs();
+    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.AlarmSubscription}
+   * Protobuf type {@code monitoring.AlarmID}
    */
-  public static final class AlarmSubscription extends
+  public static final class AlarmID extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmSubscription)
-      AlarmSubscriptionOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
+      AlarmIDOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use AlarmSubscription.newBuilder() to construct.
-    private AlarmSubscription(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmID.newBuilder() to construct.
+    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private AlarmSubscription() {
+    private AlarmID() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new AlarmSubscription();
+      return new AlarmID();
     }
 
     @java.lang.Override
@@ -16517,7 +17485,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private AlarmSubscription(
+    private AlarmID(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -16536,28 +17504,18 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.AlarmID.Builder subBuilder = null;
-              if (alarmID_ != null) {
-                subBuilder = alarmID_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (alarmId_ != null) {
+                subBuilder = alarmId_.toBuilder();
               }
-              alarmID_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
+              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(alarmID_);
-                alarmID_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(alarmId_);
+                alarmId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 21: {
-
-              subscriptionTimeoutS_ = input.readFloat();
-              break;
-            }
-            case 29: {
-
-              subscriptionFrequencyMs_ = input.readFloat();
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -16579,63 +17537,41 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class);
+              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
     }
 
-    public static final int ALARMID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.AlarmID alarmID_;
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return Whether the alarmID field is set.
-     */
-    @java.lang.Override
-    public boolean hasAlarmID() {
-      return alarmID_ != null;
-    }
-    /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
-     * @return The alarmID.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.AlarmID getAlarmID() {
-      return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
-    }
+    public static final int ALARM_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid alarmId_;
     /**
-     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() {
-      return getAlarmID();
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
     }
-
-    public static final int SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER = 2;
-    private float subscriptionTimeoutS_;
     /**
-     * <code>float subscription_timeout_s = 2;</code>
-     * @return The subscriptionTimeoutS.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
     @java.lang.Override
-    public float getSubscriptionTimeoutS() {
-      return subscriptionTimeoutS_;
+    public context.ContextOuterClass.Uuid getAlarmId() {
+      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
     }
-
-    public static final int SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER = 3;
-    private float subscriptionFrequencyMs_;
     /**
-     * <code>float subscription_frequency_ms = 3;</code>
-     * @return The subscriptionFrequencyMs.
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
     @java.lang.Override
-    public float getSubscriptionFrequencyMs() {
-      return subscriptionFrequencyMs_;
+    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -16652,14 +17588,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (alarmID_ != null) {
-        output.writeMessage(1, getAlarmID());
-      }
-      if (subscriptionTimeoutS_ != 0F) {
-        output.writeFloat(2, subscriptionTimeoutS_);
-      }
-      if (subscriptionFrequencyMs_ != 0F) {
-        output.writeFloat(3, subscriptionFrequencyMs_);
+      if (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
       }
       unknownFields.writeTo(output);
     }
@@ -16670,17 +17600,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (alarmID_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getAlarmID());
-      }
-      if (subscriptionTimeoutS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, subscriptionTimeoutS_);
-      }
-      if (subscriptionFrequencyMs_ != 0F) {
+      if (alarmId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, subscriptionFrequencyMs_);
+          .computeMessageSize(1, getAlarmId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -16692,22 +17614,16 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmSubscription)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.AlarmSubscription other = (monitoring.Monitoring.AlarmSubscription) obj;
+      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
 
-      if (hasAlarmID() != other.hasAlarmID()) return false;
-      if (hasAlarmID()) {
-        if (!getAlarmID()
-            .equals(other.getAlarmID())) return false;
+      if (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
       }
-      if (java.lang.Float.floatToIntBits(getSubscriptionTimeoutS())
-          != java.lang.Float.floatToIntBits(
-              other.getSubscriptionTimeoutS())) return false;
-      if (java.lang.Float.floatToIntBits(getSubscriptionFrequencyMs())
-          != java.lang.Float.floatToIntBits(
-              other.getSubscriptionFrequencyMs())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -16719,84 +17635,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasAlarmID()) {
-        hash = (37 * hash) + ALARMID_FIELD_NUMBER;
-        hash = (53 * hash) + getAlarmID().hashCode();
+      if (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
       }
-      hash = (37 * hash) + SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSubscriptionTimeoutS());
-      hash = (37 * hash) + SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSubscriptionFrequencyMs());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmID parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmSubscription parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -16809,7 +17719,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmSubscription prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -16825,26 +17735,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.AlarmSubscription}
+     * Protobuf type {@code monitoring.AlarmID}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmSubscription)
-        monitoring.Monitoring.AlarmSubscriptionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmID)
+        monitoring.Monitoring.AlarmIDOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class);
+                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.AlarmSubscription.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -16862,33 +17772,29 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (alarmIDBuilder_ == null) {
-          alarmID_ = null;
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
         } else {
-          alarmID_ = null;
-          alarmIDBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
-        subscriptionTimeoutS_ = 0F;
-
-        subscriptionFrequencyMs_ = 0F;
-
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmSubscription.getDefaultInstance();
+      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmID.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmSubscription build() {
-        monitoring.Monitoring.AlarmSubscription result = buildPartial();
+      public monitoring.Monitoring.AlarmID build() {
+        monitoring.Monitoring.AlarmID result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -16896,15 +17802,13 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmSubscription buildPartial() {
-        monitoring.Monitoring.AlarmSubscription result = new monitoring.Monitoring.AlarmSubscription(this);
-        if (alarmIDBuilder_ == null) {
-          result.alarmID_ = alarmID_;
+      public monitoring.Monitoring.AlarmID buildPartial() {
+        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
         } else {
-          result.alarmID_ = alarmIDBuilder_.build();
+          result.alarmId_ = alarmIdBuilder_.build();
         }
-        result.subscriptionTimeoutS_ = subscriptionTimeoutS_;
-        result.subscriptionFrequencyMs_ = subscriptionFrequencyMs_;
         onBuilt();
         return result;
       }
@@ -16943,24 +17847,18 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmSubscription) {
-          return mergeFrom((monitoring.Monitoring.AlarmSubscription)other);
+        if (other instanceof monitoring.Monitoring.AlarmID) {
+          return mergeFrom((monitoring.Monitoring.AlarmID)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmSubscription other) {
-        if (other == monitoring.Monitoring.AlarmSubscription.getDefaultInstance()) return this;
-        if (other.hasAlarmID()) {
-          mergeAlarmID(other.getAlarmID());
-        }
-        if (other.getSubscriptionTimeoutS() != 0F) {
-          setSubscriptionTimeoutS(other.getSubscriptionTimeoutS());
-        }
-        if (other.getSubscriptionFrequencyMs() != 0F) {
-          setSubscriptionFrequencyMs(other.getSubscriptionFrequencyMs());
+      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
+        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -16977,11 +17875,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.AlarmSubscription parsedMessage = null;
+        monitoring.Monitoring.AlarmID parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmSubscription) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -16991,185 +17889,123 @@ public final class Monitoring {
         return this;
       }
 
-      private monitoring.Monitoring.AlarmID alarmID_;
+      private context.ContextOuterClass.Uuid alarmId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIDBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
-       * @return Whether the alarmID field is set.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
        */
-      public boolean hasAlarmID() {
-        return alarmIDBuilder_ != null || alarmID_ != null;
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
-       * @return The alarmID.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return The alarmId.
        */
-      public monitoring.Monitoring.AlarmID getAlarmID() {
-        if (alarmIDBuilder_ == null) {
-          return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
+      public context.ContextOuterClass.Uuid getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         } else {
-          return alarmIDBuilder_.getMessage();
+          return alarmIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setAlarmID(monitoring.Monitoring.AlarmID value) {
-        if (alarmIDBuilder_ == null) {
+      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          alarmID_ = value;
+          alarmId_ = value;
           onChanged();
         } else {
-          alarmIDBuilder_.setMessage(value);
+          alarmIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setAlarmID(
-          monitoring.Monitoring.AlarmID.Builder builderForValue) {
-        if (alarmIDBuilder_ == null) {
-          alarmID_ = builderForValue.build();
+      public Builder setAlarmId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
           onChanged();
         } else {
-          alarmIDBuilder_.setMessage(builderForValue.build());
+          alarmIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder mergeAlarmID(monitoring.Monitoring.AlarmID value) {
-        if (alarmIDBuilder_ == null) {
-          if (alarmID_ != null) {
-            alarmID_ =
-              monitoring.Monitoring.AlarmID.newBuilder(alarmID_).mergeFrom(value).buildPartial();
+      public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
+          if (alarmId_ != null) {
+            alarmId_ =
+              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
           } else {
-            alarmID_ = value;
+            alarmId_ = value;
           }
           onChanged();
         } else {
-          alarmIDBuilder_.mergeFrom(value);
+          alarmIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder clearAlarmID() {
-        if (alarmIDBuilder_ == null) {
-          alarmID_ = null;
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
           onChanged();
         } else {
-          alarmID_ = null;
-          alarmIDBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.AlarmID.Builder getAlarmIDBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
         
         onChanged();
-        return getAlarmIDFieldBuilder().getBuilder();
+        return getAlarmIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() {
-        if (alarmIDBuilder_ != null) {
-          return alarmIDBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
         } else {
-          return alarmID_ == null ?
-              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
+          return alarmId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         }
       }
       /**
-       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
-          getAlarmIDFieldBuilder() {
-        if (alarmIDBuilder_ == null) {
-          alarmIDBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
-                  getAlarmID(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getAlarmIdFieldBuilder() {
+        if (alarmIdBuilder_ == null) {
+          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getAlarmId(),
                   getParentForChildren(),
                   isClean());
-          alarmID_ = null;
+          alarmId_ = null;
         }
-        return alarmIDBuilder_;
-      }
-
-      private float subscriptionTimeoutS_ ;
-      /**
-       * <code>float subscription_timeout_s = 2;</code>
-       * @return The subscriptionTimeoutS.
-       */
-      @java.lang.Override
-      public float getSubscriptionTimeoutS() {
-        return subscriptionTimeoutS_;
-      }
-      /**
-       * <code>float subscription_timeout_s = 2;</code>
-       * @param value The subscriptionTimeoutS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSubscriptionTimeoutS(float value) {
-        
-        subscriptionTimeoutS_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>float subscription_timeout_s = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSubscriptionTimeoutS() {
-        
-        subscriptionTimeoutS_ = 0F;
-        onChanged();
-        return this;
-      }
-
-      private float subscriptionFrequencyMs_ ;
-      /**
-       * <code>float subscription_frequency_ms = 3;</code>
-       * @return The subscriptionFrequencyMs.
-       */
-      @java.lang.Override
-      public float getSubscriptionFrequencyMs() {
-        return subscriptionFrequencyMs_;
-      }
-      /**
-       * <code>float subscription_frequency_ms = 3;</code>
-       * @param value The subscriptionFrequencyMs to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSubscriptionFrequencyMs(float value) {
-        
-        subscriptionFrequencyMs_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>float subscription_frequency_ms = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSubscriptionFrequencyMs() {
-        
-        subscriptionFrequencyMs_ = 0F;
-        onChanged();
-        return this;
+        return alarmIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -17184,41 +18020,41 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmSubscription)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmSubscription)
-    private static final monitoring.Monitoring.AlarmSubscription DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
+    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmSubscription();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
     }
 
-    public static monitoring.Monitoring.AlarmSubscription getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmID getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<AlarmSubscription>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmSubscription>() {
+    private static final com.google.protobuf.Parser<AlarmID>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
       @java.lang.Override
-      public AlarmSubscription parsePartialFrom(
+      public AlarmID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmSubscription(input, extensionRegistry);
+        return new AlarmID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<AlarmSubscription> parser() {
+    public static com.google.protobuf.Parser<AlarmID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmSubscription> getParserForType() {
+    public com.google.protobuf.Parser<AlarmID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -17269,21 +18105,6 @@ public final class Monitoring {
      * <code>.monitoring.KpiValue kpi_value = 3;</code>
      */
     monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
-
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return Whether the timestamp field is set.
-     */
-    boolean hasTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return The timestamp.
-     */
-    context.ContextOuterClass.Timestamp getTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
    * Protobuf type {@code monitoring.AlarmResponse}
@@ -17363,19 +18184,6 @@ public final class Monitoring {
 
               break;
             }
-            case 34: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -17498,32 +18306,6 @@ public final class Monitoring {
       return getKpiValue();
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.Timestamp timestamp_;
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return Whether the timestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
-    }
-
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -17547,9 +18329,6 @@ public final class Monitoring {
       if (kpiValue_ != null) {
         output.writeMessage(3, getKpiValue());
       }
-      if (timestamp_ != null) {
-        output.writeMessage(4, getTimestamp());
-      }
       unknownFields.writeTo(output);
     }
 
@@ -17570,10 +18349,6 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(3, getKpiValue());
       }
-      if (timestamp_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getTimestamp());
-      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -17601,11 +18376,6 @@ public final class Monitoring {
         if (!getKpiValue()
             .equals(other.getKpiValue())) return false;
       }
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
-      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -17627,10 +18397,6 @@ public final class Monitoring {
         hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
         hash = (53 * hash) + getKpiValue().hashCode();
       }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
-      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -17778,12 +18544,6 @@ public final class Monitoring {
           kpiValue_ = null;
           kpiValueBuilder_ = null;
         }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
         return this;
       }
 
@@ -17821,11 +18581,6 @@ public final class Monitoring {
         } else {
           result.kpiValue_ = kpiValueBuilder_.build();
         }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
-        } else {
-          result.timestamp_ = timestampBuilder_.build();
-        }
         onBuilt();
         return result;
       }
@@ -17884,9 +18639,6 @@ public final class Monitoring {
         if (other.hasKpiValue()) {
           mergeKpiValue(other.getKpiValue());
         }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -18229,125 +18981,6 @@ public final class Monitoring {
         }
         return kpiValueBuilder_;
       }
-
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       * @return Whether the timestamp field is set.
-       */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       * @return The timestamp.
-       */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        } else {
-          return timestampBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
-          onChanged();
-        } else {
-          timestampBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
-          onChanged();
-        } else {
-          timestampBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-          onChanged();
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
-        
-        onChanged();
-        return getTimestampFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
-        } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        }
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          timestamp_ = null;
-        }
-        return timestampBuilder_;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -19199,6 +19832,16 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_KpiDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_BundleKpiDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_EditedKpiDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_MonitorKpiRequest_descriptor;
   private static final 
@@ -19269,11 +19912,6 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_AlarmID_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_monitoring_AlarmSubscription_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_monitoring_AlarmSubscription_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_AlarmResponse_descriptor;
   private static final 
@@ -19294,95 +19932,97 @@ public final class Monitoring {
   static {
     java.lang.String[] descriptorData = {
       "\n\020monitoring.proto\022\nmonitoring\032\rcontext." +
-      "proto\032\026kpi_sample_types.proto\"\311\002\n\rKpiDes" +
+      "proto\032\026kpi_sample_types.proto\"\376\001\n\rKpiDes" +
+      "criptor\022\027\n\017kpi_description\030\001 \001(\t\0228\n\017kpi_" +
+      "sample_type\030\002 \001(\0162\037.kpi_sample_types.Kpi" +
+      "SampleType\022$\n\tdevice_id\030\003 \001(\0132\021.context." +
+      "DeviceId\022(\n\013endpoint_id\030\004 \001(\0132\023.context." +
+      "EndPointId\022&\n\nservice_id\030\005 \001(\0132\022.context" +
+      ".ServiceId\022\"\n\010slice_id\030\006 \001(\0132\020.context.S" +
+      "liceId\"\254\002\n\023BundleKpiDescriptor\022\027\n\017kpi_de" +
+      "scription\030\001 \001(\t\022&\n\013kpi_id_list\030\002 \003(\0132\021.m" +
+      "onitoring.KpiId\0228\n\017kpi_sample_type\030\003 \001(\016" +
+      "2\037.kpi_sample_types.KpiSampleType\022$\n\tdev" +
+      "ice_id\030\004 \001(\0132\021.context.DeviceId\022(\n\013endpo" +
+      "int_id\030\005 \001(\0132\023.context.EndPointId\022&\n\nser" +
+      "vice_id\030\006 \001(\0132\022.context.ServiceId\022\"\n\010sli" +
+      "ce_id\030\007 \001(\0132\020.context.SliceId\"\317\002\n\023Edited" +
+      "KpiDescriptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitori" +
+      "ng.KpiId\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi" +
+      "_id_list\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi" +
+      "_sample_type\030\004 \001(\0162\037.kpi_sample_types.Kp" +
+      "iSampleType\022$\n\tdevice_id\030\005 \001(\0132\021.context" +
+      ".DeviceId\022(\n\013endpoint_id\030\006 \001(\0132\023.context" +
+      ".EndPointId\022&\n\nservice_id\030\007 \001(\0132\022.contex" +
+      "t.ServiceId\022\"\n\010slice_id\030\010 \001(\0132\020.context." +
+      "SliceId\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001" +
+      " \001(\0132\021.monitoring.KpiId\022\033\n\023monitoring_wi" +
+      "ndow_s\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\241\001" +
+      "\n\010KpiQuery\022!\n\006kpi_id\030\001 \003(\0132\021.monitoring." +
+      "KpiId\022\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sa" +
+      "mpling_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 " +
+      "\001(\r\022\022\n\nstart_date\030\005 \001(\t\022\020\n\010end_date\030\006 \001(" +
+      "\t\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context.Uui" +
+      "d\"d\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kp" +
+      "iId\022\021\n\ttimestamp\030\002 \001(\t\022\'\n\tkpi_value\030\003 \001(" +
+      "\0132\024.monitoring.KpiValue\"e\n\rKpiValueRange" +
+      "\022)\n\013kpiMinValue\030\001 \001(\0132\024.monitoring.KpiVa" +
+      "lue\022)\n\013kpiMaxValue\030\002 \001(\0132\024.monitoring.Kp" +
+      "iValue\"a\n\010KpiValue\022\020\n\006intVal\030\001 \001(\rH\000\022\022\n\010" +
+      "floatVal\030\002 \001(\002H\000\022\023\n\tstringVal\030\003 \001(\tH\000\022\021\n" +
+      "\007boolVal\030\004 \001(\010H\000B\007\n\005value\",\n\007KpiList\022!\n\010" +
+      "kpi_list\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDe" +
+      "scriptorList\0226\n\023kpi_descriptor_list\030\001 \003(" +
+      "\0132\031.monitoring.KpiDescriptor\"\223\001\n\016SubsDes" +
       "criptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kpi" +
-      "Id\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi_id_li" +
-      "st\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi_sampl" +
-      "e_type\030\004 \001(\0162\037.kpi_sample_types.KpiSampl" +
-      "eType\022$\n\tdevice_id\030\005 \001(\0132\021.context.Devic" +
-      "eId\022(\n\013endpoint_id\030\006 \001(\0132\023.context.EndPo" +
-      "intId\022&\n\nservice_id\030\007 \001(\0132\022.context.Serv" +
-      "iceId\022\"\n\010slice_id\030\010 \001(\0132\020.context.SliceI" +
-      "d\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001 \001(\0132\021" +
-      ".monitoring.KpiId\022\033\n\023monitoring_window_s" +
-      "\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\323\001\n\010KpiQ" +
-      "uery\022!\n\006kpi_id\030\001 \003(\0132\021.monitoring.KpiId\022" +
-      "\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sampling" +
-      "_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 \001(\r\022+\n" +
-      "\017start_timestamp\030\005 \001(\0132\022.context.Timesta" +
-      "mp\022)\n\rend_timestamp\030\006 \001(\0132\022.context.Time" +
-      "stamp\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context" +
-      ".Uuid\"x\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitorin" +
-      "g.KpiId\022%\n\ttimestamp\030\002 \001(\0132\022.context.Tim" +
-      "estamp\022\'\n\tkpi_value\030\003 \001(\0132\024.monitoring.K" +
-      "piValue\"\250\001\n\rKpiValueRange\022)\n\013kpiMinValue" +
-      "\030\001 \001(\0132\024.monitoring.KpiValue\022)\n\013kpiMaxVa" +
-      "lue\030\002 \001(\0132\024.monitoring.KpiValue\022\017\n\007inRan" +
-      "ge\030\003 \001(\010\022\027\n\017includeMinValue\030\004 \001(\010\022\027\n\017inc" +
-      "ludeMaxValue\030\005 \001(\010\"\241\001\n\010KpiValue\022\022\n\010int32" +
-      "Val\030\001 \001(\005H\000\022\023\n\tuint32Val\030\002 \001(\rH\000\022\022\n\010int6" +
-      "4Val\030\003 \001(\003H\000\022\023\n\tuint64Val\030\004 \001(\004H\000\022\022\n\010flo" +
-      "atVal\030\005 \001(\002H\000\022\023\n\tstringVal\030\006 \001(\tH\000\022\021\n\007bo" +
-      "olVal\030\007 \001(\010H\000B\007\n\005value\",\n\007KpiList\022!\n\010kpi" +
-      "_list\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDescr" +
-      "iptorList\0226\n\023kpi_descriptor_list\030\001 \003(\0132\031" +
-      ".monitoring.KpiDescriptor\"\362\001\n\016SubsDescri" +
-      "ptor\022+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subsc" +
-      "riptionID\022!\n\006kpi_id\030\002 \001(\0132\021.monitoring.K" +
-      "piId\022\033\n\023sampling_duration_s\030\003 \001(\002\022\033\n\023sam" +
-      "pling_interval_s\030\004 \001(\002\022+\n\017start_timestam" +
-      "p\030\005 \001(\0132\022.context.Timestamp\022)\n\rend_times" +
-      "tamp\030\006 \001(\0132\022.context.Timestamp\"0\n\016Subscr" +
-      "iptionID\022\036\n\007subs_id\030\001 \001(\0132\r.context.Uuid" +
-      "\"b\n\014SubsResponse\022+\n\007subs_id\030\001 \001(\0132\032.moni" +
-      "toring.SubscriptionID\022%\n\010kpi_list\030\002 \003(\0132" +
-      "\023.monitoring.KpiList\";\n\nSubsIDList\022-\n\tsu" +
-      "bs_list\030\001 \003(\0132\032.monitoring.SubscriptionI" +
-      "D\"\337\001\n\017AlarmDescriptor\022%\n\010alarm_id\030\001 \001(\0132" +
-      "\023.monitoring.AlarmID\022\031\n\021alarm_descriptio" +
-      "n\030\002 \001(\t\022\014\n\004name\030\003 \001(\t\022!\n\006kpi_id\030\004 \003(\0132\021." +
-      "monitoring.KpiId\0222\n\017kpi_value_range\030\005 \003(" +
-      "\0132\031.monitoring.KpiValueRange\022%\n\ttimestam" +
-      "p\030\006 \001(\0132\022.context.Timestamp\"*\n\007AlarmID\022\037" +
-      "\n\010alarm_id\030\001 \001(\0132\r.context.Uuid\"|\n\021Alarm" +
-      "Subscription\022$\n\007alarmID\030\001 \001(\0132\023.monitori" +
-      "ng.AlarmID\022\036\n\026subscription_timeout_s\030\002 \001" +
-      "(\002\022!\n\031subscription_frequency_ms\030\003 \001(\002\"\224\001" +
-      "\n\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.moni" +
-      "toring.AlarmID\022\014\n\004text\030\002 \001(\t\022\'\n\tkpi_valu" +
-      "e\030\003 \001(\0132\024.monitoring.KpiValue\022%\n\ttimesta" +
-      "mp\030\004 \001(\0132\022.context.Timestamp\"6\n\013AlarmIDL" +
-      "ist\022\'\n\nalarm_list\030\001 \003(\0132\023.monitoring.Ala" +
-      "rmID2\233\t\n\021MonitoringService\0228\n\006SetKpi\022\031.m" +
-      "onitoring.KpiDescriptor\032\021.monitoring.Kpi" +
-      "Id\"\000\0220\n\tDeleteKpi\022\021.monitoring.KpiId\032\016.c" +
-      "ontext.Empty\"\000\022B\n\020GetKpiDescriptor\022\021.mon" +
-      "itoring.KpiId\032\031.monitoring.KpiDescriptor" +
-      "\"\000\022G\n\024GetKpiDescriptorList\022\016.context.Emp" +
-      "ty\032\035.monitoring.KpiDescriptorList\"\000\022/\n\nI" +
-      "ncludeKpi\022\017.monitoring.Kpi\032\016.context.Emp" +
-      "ty\"\000\022=\n\nMonitorKpi\022\035.monitoring.MonitorK" +
-      "piRequest\032\016.context.Empty\"\000\022;\n\014QueryKpiD" +
-      "ata\022\024.monitoring.KpiQuery\032\023.monitoring.K" +
-      "piList\"\000\022I\n\022SetKpiSubscription\022\032.monitor" +
-      "ing.SubsDescriptor\032\023.monitoring.KpiList\"" +
-      "\0000\001\022M\n\021GetSubsDescriptor\022\032.monitoring.Su" +
-      "bscriptionID\032\032.monitoring.SubsDescriptor" +
-      "\"\000\022<\n\020GetSubscriptions\022\016.context.Empty\032\026" +
-      ".monitoring.SubsIDList\"\000\022B\n\022DeleteSubscr" +
-      "iption\022\032.monitoring.SubscriptionID\032\016.con" +
-      "text.Empty\"\000\022A\n\013SetKpiAlarm\022\033.monitoring" +
-      ".AlarmDescriptor\032\023.monitoring.AlarmID\"\000\022" +
-      "6\n\tGetAlarms\022\016.context.Empty\032\027.monitorin" +
-      "g.AlarmIDList\"\000\022H\n\022GetAlarmDescriptor\022\023." +
-      "monitoring.AlarmID\032\033.monitoring.AlarmDes" +
-      "criptor\"\000\022V\n\026GetAlarmResponseStream\022\035.mo" +
-      "nitoring.AlarmSubscription\032\031.monitoring." +
-      "AlarmResponse\"\0000\001\0224\n\013DeleteAlarm\022\023.monit" +
-      "oring.AlarmID\032\016.context.Empty\"\000\0226\n\014GetSt" +
-      "reamKpi\022\021.monitoring.KpiId\032\017.monitoring." +
-      "Kpi\"\0000\001\0229\n\rGetInstantKpi\022\021.monitoring.Kp" +
-      "iId\032\023.monitoring.KpiList\"\000b\006proto3"
+      "Id\022\033\n\023sampling_duration_s\030\002 \001(\002\022\033\n\023sampl" +
+      "ing_interval_s\030\003 \001(\002\022\022\n\nstart_date\030\004 \001(\t" +
+      "\022\020\n\010end_date\030\005 \001(\t\"0\n\016SubscriptionID\022\036\n\007" +
+      "subs_id\030\001 \001(\0132\r.context.Uuid\"b\n\014SubsResp" +
+      "onse\022+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subsc" +
+      "riptionID\022%\n\010kpi_list\030\002 \003(\0132\023.monitoring" +
+      ".KpiList\";\n\nSubsIDList\022-\n\tsubs_list\030\001 \003(" +
+      "\0132\032.monitoring.SubscriptionID\"\244\001\n\017AlarmD" +
+      "escriptor\022\031\n\021alarm_description\030\001 \001(\t\022\014\n\004" +
+      "name\030\002 \001(\t\022!\n\006kpi_id\030\003 \001(\0132\021.monitoring." +
+      "KpiId\0222\n\017kpi_value_range\030\004 \001(\0132\031.monitor" +
+      "ing.KpiValueRange\022\021\n\ttimestamp\030\005 \001(\t\"*\n\007" +
+      "AlarmID\022\037\n\010alarm_id\030\001 \001(\0132\r.context.Uuid" +
+      "\"m\n\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.mo" +
+      "nitoring.AlarmID\022\014\n\004text\030\002 \001(\t\022\'\n\tkpi_va" +
+      "lue\030\003 \001(\0132\024.monitoring.KpiValue\"6\n\013Alarm" +
+      "IDList\022\'\n\nalarm_list\030\001 \003(\0132\023.monitoring." +
+      "AlarmID2\271\t\n\021MonitoringService\022;\n\tCreateK" +
+      "pi\022\031.monitoring.KpiDescriptor\032\021.monitori" +
+      "ng.KpiId\"\000\022F\n\021EditKpiDescriptor\022\037.monito" +
+      "ring.EditedKpiDescriptor\032\016.context.Empty" +
+      "\"\000\0220\n\tDeleteKpi\022\021.monitoring.KpiId\032\016.con" +
+      "text.Empty\"\000\022G\n\024GetKpiDescriptorList\022\016.c" +
+      "ontext.Empty\032\035.monitoring.KpiDescriptorL" +
+      "ist\"\000\022G\n\017CreateBundleKpi\022\037.monitoring.Bu" +
+      "ndleKpiDescriptor\032\021.monitoring.KpiId\"\000\022B" +
+      "\n\020GetKpiDescriptor\022\021.monitoring.KpiId\032\031." +
+      "monitoring.KpiDescriptor\"\000\022/\n\nIncludeKpi" +
+      "\022\017.monitoring.Kpi\032\016.context.Empty\"\000\022=\n\nM" +
+      "onitorKpi\022\035.monitoring.MonitorKpiRequest" +
+      "\032\016.context.Empty\"\000\022;\n\014QueryKpiData\022\024.mon" +
+      "itoring.KpiQuery\032\023.monitoring.KpiList\"\000\022" +
+      "C\n\014SubscribeKpi\022\032.monitoring.SubsDescrip" +
+      "tor\032\023.monitoring.KpiList\"\0000\001\022M\n\021GetSubsD" +
+      "escriptor\022\032.monitoring.SubscriptionID\032\032." +
+      "monitoring.SubsDescriptor\"\000\022<\n\020GetSubscr" +
+      "iptions\022\016.context.Empty\032\026.monitoring.Sub" +
+      "sIDList\"\000\022C\n\023EditKpiSubscription\022\032.monit" +
+      "oring.SubsDescriptor\032\016.context.Empty\"\000\022D" +
+      "\n\016CreateKpiAlarm\022\033.monitoring.AlarmDescr" +
+      "iptor\032\023.monitoring.AlarmID\"\000\022=\n\014EditKpiA" +
+      "larm\022\033.monitoring.AlarmDescriptor\032\016.cont" +
+      "ext.Empty\"\000\0226\n\tGetAlarms\022\016.context.Empty" +
+      "\032\027.monitoring.AlarmIDList\"\000\022H\n\022GetAlarmD" +
+      "escriptor\022\023.monitoring.AlarmID\032\033.monitor" +
+      "ing.AlarmDescriptor\"\000\022L\n\026GetAlarmRespons" +
+      "eStream\022\023.monitoring.AlarmID\032\031.monitorin" +
+      "g.AlarmResponse\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -19395,105 +20035,111 @@ public final class Monitoring {
     internal_static_monitoring_KpiDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptor_descriptor,
+        new java.lang.String[] { "KpiDescription", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+    internal_static_monitoring_BundleKpiDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_BundleKpiDescriptor_descriptor,
+        new java.lang.String[] { "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+    internal_static_monitoring_EditedKpiDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_EditedKpiDescriptor_descriptor,
         new java.lang.String[] { "KpiId", "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
     internal_static_monitoring_MonitorKpiRequest_descriptor =
-      getDescriptor().getMessageTypes().get(1);
+      getDescriptor().getMessageTypes().get(3);
     internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_MonitorKpiRequest_descriptor,
         new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", });
     internal_static_monitoring_KpiQuery_descriptor =
-      getDescriptor().getMessageTypes().get(2);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_monitoring_KpiQuery_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiQuery_descriptor,
-        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartTimestamp", "EndTimestamp", });
+        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartDate", "EndDate", });
     internal_static_monitoring_KpiId_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(5);
     internal_static_monitoring_KpiId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiId_descriptor,
         new java.lang.String[] { "KpiId", });
     internal_static_monitoring_Kpi_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(6);
     internal_static_monitoring_Kpi_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_Kpi_descriptor,
         new java.lang.String[] { "KpiId", "Timestamp", "KpiValue", });
     internal_static_monitoring_KpiValueRange_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(7);
     internal_static_monitoring_KpiValueRange_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValueRange_descriptor,
-        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", "InRange", "IncludeMinValue", "IncludeMaxValue", });
+        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", });
     internal_static_monitoring_KpiValue_descriptor =
-      getDescriptor().getMessageTypes().get(6);
+      getDescriptor().getMessageTypes().get(8);
     internal_static_monitoring_KpiValue_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValue_descriptor,
-        new java.lang.String[] { "Int32Val", "Uint32Val", "Int64Val", "Uint64Val", "FloatVal", "StringVal", "BoolVal", "Value", });
+        new java.lang.String[] { "IntVal", "FloatVal", "StringVal", "BoolVal", "Value", });
     internal_static_monitoring_KpiList_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(9);
     internal_static_monitoring_KpiList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiList_descriptor,
         new java.lang.String[] { "KpiList", });
     internal_static_monitoring_KpiDescriptorList_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(10);
     internal_static_monitoring_KpiDescriptorList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptorList_descriptor,
         new java.lang.String[] { "KpiDescriptorList", });
     internal_static_monitoring_SubsDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(9);
+      getDescriptor().getMessageTypes().get(11);
     internal_static_monitoring_SubsDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsDescriptor_descriptor,
-        new java.lang.String[] { "SubsId", "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartTimestamp", "EndTimestamp", });
+        new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartDate", "EndDate", });
     internal_static_monitoring_SubscriptionID_descriptor =
-      getDescriptor().getMessageTypes().get(10);
+      getDescriptor().getMessageTypes().get(12);
     internal_static_monitoring_SubscriptionID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubscriptionID_descriptor,
         new java.lang.String[] { "SubsId", });
     internal_static_monitoring_SubsResponse_descriptor =
-      getDescriptor().getMessageTypes().get(11);
+      getDescriptor().getMessageTypes().get(13);
     internal_static_monitoring_SubsResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsResponse_descriptor,
         new java.lang.String[] { "SubsId", "KpiList", });
     internal_static_monitoring_SubsIDList_descriptor =
-      getDescriptor().getMessageTypes().get(12);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_monitoring_SubsIDList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsIDList_descriptor,
         new java.lang.String[] { "SubsList", });
     internal_static_monitoring_AlarmDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(15);
     internal_static_monitoring_AlarmDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmDescriptor_descriptor,
-        new java.lang.String[] { "AlarmId", "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
+        new java.lang.String[] { "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
     internal_static_monitoring_AlarmID_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_monitoring_AlarmID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmID_descriptor,
         new java.lang.String[] { "AlarmId", });
-    internal_static_monitoring_AlarmSubscription_descriptor =
-      getDescriptor().getMessageTypes().get(15);
-    internal_static_monitoring_AlarmSubscription_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_monitoring_AlarmSubscription_descriptor,
-        new java.lang.String[] { "AlarmID", "SubscriptionTimeoutS", "SubscriptionFrequencyMs", });
     internal_static_monitoring_AlarmResponse_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(17);
     internal_static_monitoring_AlarmResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmResponse_descriptor,
-        new java.lang.String[] { "AlarmId", "Text", "KpiValue", "Timestamp", });
+        new java.lang.String[] { "AlarmId", "Text", "KpiValue", });
     internal_static_monitoring_AlarmIDList_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(18);
     internal_static_monitoring_AlarmIDList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmIDList_descriptor,
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
index 6372600680d57d0b351e7dd67b88c84f9d8e8cff..f826e1167d1ed56567fc470ba70cc09003617eda 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
@@ -8,14 +8,18 @@ comments = "Source: monitoring.proto")
 public interface MonitoringService extends MutinyService {
 
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request);
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request);
     
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request);
+    
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request);
@@ -26,24 +30,20 @@ public interface MonitoringService extends MutinyService {
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request);
-    
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request);
-    
-    
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request);
     
     
 
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
index 21f7f48acd6b6870584133dc3d665f681e78cf5e..c7f776e7bd0c56cabc7009e7b7bdb208669fb441 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
@@ -16,25 +16,25 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
        try {
-         return delegate.setKpi(request);
+         return delegate.createKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
        try {
-         return delegate.deleteKpi(request);
+         return delegate.editKpiDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.getKpiDescriptor(request);
+         return delegate.deleteKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
@@ -48,116 +48,115 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
        try {
-         return delegate.includeKpi(request);
+         return delegate.createBundleKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.monitorKpi(request);
+         return delegate.getKpiDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
        try {
-         return delegate.queryKpiData(request);
+         return delegate.includeKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
        try {
-         return delegate.getSubsDescriptor(request);
+         return delegate.monitorKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
        try {
-         return delegate.getSubscriptions(request);
+         return delegate.queryKpiData(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
        try {
-         return delegate.deleteSubscription(request);
+         return delegate.getSubsDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
        try {
-         return delegate.setKpiAlarm(request);
+         return delegate.getSubscriptions(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
        try {
-         return delegate.getAlarms(request);
+         return delegate.editKpiSubscription(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
        try {
-         return delegate.getAlarmDescriptor(request);
+         return delegate.createKpiAlarm(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
        try {
-         return delegate.deleteAlarm(request);
+         return delegate.editKpiAlarm(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
        try {
-         return delegate.getInstantKpi(request);
+         return delegate.getAlarms(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
-
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.setKpiSubscription(request);
+         return delegate.getAlarmDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
        try {
-         return delegate.getAlarmResponseStream(request);
+         return delegate.subscribeKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.getStreamKpi(request);
+         return delegate.getAlarmResponseStream(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
index 6b6dc38645931ad94287b4151019c3b42a1c098d..35c98e8ff2c240e749e602c4d097c3bef81c8203 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
@@ -21,22 +21,30 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
-       return stub.setKpi(request);
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+       return stub.createKpi(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
-       return stub.deleteKpi(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+       return stub.editKpiDescriptor(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
-       return stub.getKpiDescriptor(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+       return stub.deleteKpi(request);
     }
     @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
        return stub.getKpiDescriptorList(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+       return stub.createBundleKpi(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+       return stub.getKpiDescriptor(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
        return stub.includeKpi(request);
     }
@@ -57,12 +65,16 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.getSubscriptions(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
-       return stub.deleteSubscription(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.editKpiSubscription(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.createKpiAlarm(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-       return stub.setKpiAlarm(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.editKpiAlarm(request);
     }
     @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
@@ -72,28 +84,15 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
        return stub.getAlarmDescriptor(request);
     }
-    @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
-       return stub.deleteAlarm(request);
-    }
-    @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getInstantKpi(request);
-    }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
-       return stub.setKpiSubscription(request);
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.subscribeKpi(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
        return stub.getAlarmResponseStream(request);
     }
 
-    @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getStreamKpi(request);
-    }
-
 }
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
index fe92a7814166b65b12db5d50bb4baaf525c59146..d4ae3510a2f622b195854e4c7d197b8e3ff4d5fd 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -15,96 +15,96 @@ public final class MonitoringServiceGrpc {
 
   // Static method descriptors that strictly reflect the proto.
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
-      monitoring.Monitoring.KpiId> getSetKpiMethod;
+      monitoring.Monitoring.KpiId> getCreateKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "SetKpi",
+      fullMethodName = SERVICE_NAME + '/' + "CreateKpi",
       requestType = monitoring.Monitoring.KpiDescriptor.class,
       responseType = monitoring.Monitoring.KpiId.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
-      monitoring.Monitoring.KpiId> getSetKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getSetKpiMethod;
-    if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) {
+      monitoring.Monitoring.KpiId> getCreateKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getCreateKpiMethod;
+    if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) {
-          MonitoringServiceGrpc.getSetKpiMethod = getSetKpiMethod =
+        if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
+          MonitoringServiceGrpc.getCreateKpiMethod = getCreateKpiMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpi"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpi"))
               .build();
         }
       }
     }
-    return getSetKpiMethod;
+    return getCreateKpiMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      context.ContextOuterClass.Empty> getDeleteKpiMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "DeleteKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiDescriptor",
+      requestType = monitoring.Monitoring.EditedKpiDescriptor.class,
       responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
-    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
+    if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
-          MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder()
+        if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiDescriptorMethod = getEditKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiDescriptor"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+                  monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiDescriptor"))
               .build();
         }
       }
     }
-    return getDeleteKpiMethod;
+    return getEditKpiDescriptorMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+      context.ContextOuterClass.Empty> getDeleteKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor",
+      fullMethodName = SERVICE_NAME + '/' + "DeleteKpi",
       requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.KpiDescriptor.class,
+      responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
-    if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
+    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
-          MonitoringServiceGrpc.getGetKpiDescriptorMethod = getGetKpiDescriptorMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>newBuilder()
+        if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+          MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiId.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor"))
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi"))
               .build();
         }
       }
     }
-    return getGetKpiDescriptorMethod;
+    return getDeleteKpiMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
@@ -138,6 +138,68 @@ public final class MonitoringServiceGrpc {
     return getGetKpiDescriptorListMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "CreateBundleKpi",
+      requestType = monitoring.Monitoring.BundleKpiDescriptor.class,
+      responseType = monitoring.Monitoring.KpiId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
+    if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
+          MonitoringServiceGrpc.getCreateBundleKpiMethod = getCreateBundleKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateBundleKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateBundleKpi"))
+              .build();
+        }
+      }
+    }
+    return getCreateBundleKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = monitoring.Monitoring.KpiDescriptor.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+    if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetKpiDescriptorMethod = getGetKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getGetKpiDescriptorMethod;
+  }
+
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.Kpi,
       context.ContextOuterClass.Empty> getIncludeKpiMethod;
 
@@ -232,34 +294,34 @@ public final class MonitoringServiceGrpc {
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod;
+      monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "SetKpiSubscription",
+      fullMethodName = SERVICE_NAME + '/' + "SubscribeKpi",
       requestType = monitoring.Monitoring.SubsDescriptor.class,
       responseType = monitoring.Monitoring.KpiList.class,
       methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod;
-    if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) {
+      monitoring.Monitoring.KpiList> getSubscribeKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
+    if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) {
-          MonitoringServiceGrpc.getSetKpiSubscriptionMethod = getSetKpiSubscriptionMethod =
+        if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
+          MonitoringServiceGrpc.getSubscribeKpiMethod = getSubscribeKpiMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiSubscription"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SubscribeKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiList.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiSubscription"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SubscribeKpi"))
               .build();
         }
       }
     }
-    return getSetKpiSubscriptionMethod;
+    return getSubscribeKpiMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
@@ -324,66 +386,97 @@ public final class MonitoringServiceGrpc {
     return getGetSubscriptionsMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
-      context.ContextOuterClass.Empty> getDeleteSubscriptionMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "DeleteSubscription",
-      requestType = monitoring.Monitoring.SubscriptionID.class,
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiSubscription",
+      requestType = monitoring.Monitoring.SubsDescriptor.class,
       responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
-      context.ContextOuterClass.Empty> getDeleteSubscriptionMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty> getDeleteSubscriptionMethod;
-    if ((getDeleteSubscriptionMethod = MonitoringServiceGrpc.getDeleteSubscriptionMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
+    if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getDeleteSubscriptionMethod = MonitoringServiceGrpc.getDeleteSubscriptionMethod) == null) {
-          MonitoringServiceGrpc.getDeleteSubscriptionMethod = getDeleteSubscriptionMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>newBuilder()
+        if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiSubscriptionMethod = getEditKpiSubscriptionMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteSubscription"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiSubscription"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.SubscriptionID.getDefaultInstance()))
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteSubscription"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiSubscription"))
               .build();
         }
       }
     }
-    return getDeleteSubscriptionMethod;
+    return getEditKpiSubscriptionMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod;
+      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "SetKpiAlarm",
+      fullMethodName = SERVICE_NAME + '/' + "CreateKpiAlarm",
       requestType = monitoring.Monitoring.AlarmDescriptor.class,
       responseType = monitoring.Monitoring.AlarmID.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod;
-    if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) {
+      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
+    if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) {
-          MonitoringServiceGrpc.getSetKpiAlarmMethod = getSetKpiAlarmMethod =
+        if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getCreateKpiAlarmMethod = getCreateKpiAlarmMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiAlarm"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpiAlarm"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmID.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiAlarm"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpiAlarm"))
               .build();
         }
       }
     }
-    return getSetKpiAlarmMethod;
+    return getCreateKpiAlarmMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiAlarm",
+      requestType = monitoring.Monitoring.AlarmDescriptor.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
+    if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiAlarmMethod = getEditKpiAlarmMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiAlarm"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiAlarm"))
+              .build();
+        }
+      }
+    }
+    return getEditKpiAlarmMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
@@ -448,27 +541,27 @@ public final class MonitoringServiceGrpc {
     return getGetAlarmDescriptorMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription,
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
       monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "GetAlarmResponseStream",
-      requestType = monitoring.Monitoring.AlarmSubscription.class,
+      requestType = monitoring.Monitoring.AlarmID.class,
       responseType = monitoring.Monitoring.AlarmResponse.class,
       methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription,
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
       monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
     if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
         if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
           MonitoringServiceGrpc.getGetAlarmResponseStreamMethod = getGetAlarmResponseStreamMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse>newBuilder()
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarmResponseStream"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.AlarmSubscription.getDefaultInstance()))
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmResponse.getDefaultInstance()))
               .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmResponseStream"))
@@ -479,99 +572,6 @@ public final class MonitoringServiceGrpc {
     return getGetAlarmResponseStreamMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
-      context.ContextOuterClass.Empty> getDeleteAlarmMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "DeleteAlarm",
-      requestType = monitoring.Monitoring.AlarmID.class,
-      responseType = context.ContextOuterClass.Empty.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
-      context.ContextOuterClass.Empty> getDeleteAlarmMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty> getDeleteAlarmMethod;
-    if ((getDeleteAlarmMethod = MonitoringServiceGrpc.getDeleteAlarmMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getDeleteAlarmMethod = MonitoringServiceGrpc.getDeleteAlarmMethod) == null) {
-          MonitoringServiceGrpc.getDeleteAlarmMethod = getDeleteAlarmMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteAlarm"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteAlarm"))
-              .build();
-        }
-      }
-    }
-    return getDeleteAlarmMethod;
-  }
-
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetStreamKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.Kpi.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetStreamKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
-    if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetStreamKpiMethod = getGetStreamKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetStreamKpi"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.Kpi.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetStreamKpi"))
-              .build();
-        }
-      }
-    }
-    return getGetStreamKpiMethod;
-  }
-
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiList> getGetInstantKpiMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetInstantKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.KpiList.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiList> getGetInstantKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiList> getGetInstantKpiMethod;
-    if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetInstantKpiMethod = getGetInstantKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiList>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInstantKpi"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiList.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetInstantKpi"))
-              .build();
-        }
-      }
-    }
-    return getGetInstantKpiMethod;
-  }
-
   /**
    * Creates a new async stub that supports all call types for the service
    */
@@ -622,23 +622,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpi(monitoring.Monitoring.KpiDescriptor request,
+    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiMethod(), responseObserver);
     }
 
     /**
      */
-    public void deleteKpi(monitoring.Monitoring.KpiId request,
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiDescriptorMethod(), responseObserver);
     }
 
     /**
      */
-    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
     }
 
     /**
@@ -648,6 +648,20 @@ public final class MonitoringServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorListMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateBundleKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
+    }
+
     /**
      */
     public void includeKpi(monitoring.Monitoring.Kpi request,
@@ -671,9 +685,9 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiSubscriptionMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSubscribeKpiMethod(), responseObserver);
     }
 
     /**
@@ -692,16 +706,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void deleteSubscription(monitoring.Monitoring.SubscriptionID request,
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteSubscriptionMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiSubscriptionMethod(), responseObserver);
     }
 
     /**
      */
-    public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiAlarmMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiAlarmMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiAlarmMethod(), responseObserver);
     }
 
     /**
@@ -720,55 +741,34 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request,
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmResponseStreamMethod(), responseObserver);
     }
 
-    /**
-     */
-    public void deleteAlarm(monitoring.Monitoring.AlarmID request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteAlarmMethod(), responseObserver);
-    }
-
-    /**
-     */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetStreamKpiMethod(), responseObserver);
-    }
-
-    /**
-     */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInstantKpiMethod(), responseObserver);
-    }
-
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
       return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
           .addMethod(
-            getSetKpiMethod(),
+            getCreateKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.KpiDescriptor,
                 monitoring.Monitoring.KpiId>(
-                  this, METHODID_SET_KPI)))
+                  this, METHODID_CREATE_KPI)))
           .addMethod(
-            getDeleteKpiMethod(),
+            getEditKpiDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.EditedKpiDescriptor,
                 context.ContextOuterClass.Empty>(
-                  this, METHODID_DELETE_KPI)))
+                  this, METHODID_EDIT_KPI_DESCRIPTOR)))
           .addMethod(
-            getGetKpiDescriptorMethod(),
+            getDeleteKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.KpiDescriptor>(
-                  this, METHODID_GET_KPI_DESCRIPTOR)))
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_DELETE_KPI)))
           .addMethod(
             getGetKpiDescriptorListMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -776,6 +776,20 @@ public final class MonitoringServiceGrpc {
                 context.ContextOuterClass.Empty,
                 monitoring.Monitoring.KpiDescriptorList>(
                   this, METHODID_GET_KPI_DESCRIPTOR_LIST)))
+          .addMethod(
+            getCreateBundleKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.BundleKpiDescriptor,
+                monitoring.Monitoring.KpiId>(
+                  this, METHODID_CREATE_BUNDLE_KPI)))
+          .addMethod(
+            getGetKpiDescriptorMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.KpiDescriptor>(
+                  this, METHODID_GET_KPI_DESCRIPTOR)))
           .addMethod(
             getIncludeKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -798,12 +812,12 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.KpiList>(
                   this, METHODID_QUERY_KPI_DATA)))
           .addMethod(
-            getSetKpiSubscriptionMethod(),
+            getSubscribeKpiMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
                 monitoring.Monitoring.SubsDescriptor,
                 monitoring.Monitoring.KpiList>(
-                  this, METHODID_SET_KPI_SUBSCRIPTION)))
+                  this, METHODID_SUBSCRIBE_KPI)))
           .addMethod(
             getGetSubsDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -819,19 +833,26 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.SubsIDList>(
                   this, METHODID_GET_SUBSCRIPTIONS)))
           .addMethod(
-            getDeleteSubscriptionMethod(),
+            getEditKpiSubscriptionMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.SubscriptionID,
+                monitoring.Monitoring.SubsDescriptor,
                 context.ContextOuterClass.Empty>(
-                  this, METHODID_DELETE_SUBSCRIPTION)))
+                  this, METHODID_EDIT_KPI_SUBSCRIPTION)))
           .addMethod(
-            getSetKpiAlarmMethod(),
+            getCreateKpiAlarmMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.AlarmDescriptor,
                 monitoring.Monitoring.AlarmID>(
-                  this, METHODID_SET_KPI_ALARM)))
+                  this, METHODID_CREATE_KPI_ALARM)))
+          .addMethod(
+            getEditKpiAlarmMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmDescriptor,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_EDIT_KPI_ALARM)))
           .addMethod(
             getGetAlarmsMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -850,30 +871,9 @@ public final class MonitoringServiceGrpc {
             getGetAlarmResponseStreamMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
-                monitoring.Monitoring.AlarmSubscription,
+                monitoring.Monitoring.AlarmID,
                 monitoring.Monitoring.AlarmResponse>(
                   this, METHODID_GET_ALARM_RESPONSE_STREAM)))
-          .addMethod(
-            getDeleteAlarmMethod(),
-            io.grpc.stub.ServerCalls.asyncUnaryCall(
-              new MethodHandlers<
-                monitoring.Monitoring.AlarmID,
-                context.ContextOuterClass.Empty>(
-                  this, METHODID_DELETE_ALARM)))
-          .addMethod(
-            getGetStreamKpiMethod(),
-            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
-              new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.Kpi>(
-                  this, METHODID_GET_STREAM_KPI)))
-          .addMethod(
-            getGetInstantKpiMethod(),
-            io.grpc.stub.ServerCalls.asyncUnaryCall(
-              new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.KpiList>(
-                  this, METHODID_GET_INSTANT_KPI)))
           .build();
     }
   }
@@ -894,26 +894,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpi(monitoring.Monitoring.KpiDescriptor request,
+    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getSetKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void deleteKpi(monitoring.Monitoring.KpiId request,
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -924,6 +924,22 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
     /**
      */
     public void includeKpi(monitoring.Monitoring.Kpi request,
@@ -950,10 +966,10 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
-          getChannel().newCall(getSetKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getSubscribeKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -974,18 +990,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void deleteSubscription(monitoring.Monitoring.SubscriptionID request,
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -1006,35 +1030,11 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request,
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
           getChannel().newCall(getGetAlarmResponseStreamMethod(), getCallOptions()), request, responseObserver);
     }
-
-    /**
-     */
-    public void deleteAlarm(monitoring.Monitoring.AlarmID request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getDeleteAlarmMethod(), getCallOptions()), request, responseObserver);
-    }
-
-    /**
-     */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
-          getChannel().newCall(getGetStreamKpiMethod(), getCallOptions()), request, responseObserver);
-    }
-
-    /**
-     */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request, responseObserver);
-    }
   }
 
   /**
@@ -1053,23 +1053,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public monitoring.Monitoring.KpiId setKpi(monitoring.Monitoring.KpiDescriptor request) {
+    public monitoring.Monitoring.KpiId createKpi(monitoring.Monitoring.KpiDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getSetKpiMethod(), getCallOptions(), request);
+          getChannel(), getCreateKpiMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public context.ContextOuterClass.Empty deleteKpi(monitoring.Monitoring.KpiId request) {
+    public context.ContextOuterClass.Empty editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getDeleteKpiMethod(), getCallOptions(), request);
+          getChannel(), getEditKpiDescriptorMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+    public context.ContextOuterClass.Empty deleteKpi(monitoring.Monitoring.KpiId request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request);
+          getChannel(), getDeleteKpiMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1079,6 +1079,20 @@ public final class MonitoringServiceGrpc {
           getChannel(), getGetKpiDescriptorListMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public monitoring.Monitoring.KpiId createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getCreateBundleKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public context.ContextOuterClass.Empty includeKpi(monitoring.Monitoring.Kpi request) {
@@ -1102,10 +1116,10 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public java.util.Iterator<monitoring.Monitoring.KpiList> setKpiSubscription(
+    public java.util.Iterator<monitoring.Monitoring.KpiList> subscribeKpi(
         monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
-          getChannel(), getSetKpiSubscriptionMethod(), getCallOptions(), request);
+          getChannel(), getSubscribeKpiMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1124,16 +1138,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public context.ContextOuterClass.Empty deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+    public context.ContextOuterClass.Empty editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getDeleteSubscriptionMethod(), getCallOptions(), request);
+          getChannel(), getEditKpiSubscriptionMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public monitoring.Monitoring.AlarmID setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+    public monitoring.Monitoring.AlarmID createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getSetKpiAlarmMethod(), getCallOptions(), request);
+          getChannel(), getCreateKpiAlarmMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getEditKpiAlarmMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1153,32 +1174,10 @@ public final class MonitoringServiceGrpc {
     /**
      */
     public java.util.Iterator<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(
-        monitoring.Monitoring.AlarmSubscription request) {
+        monitoring.Monitoring.AlarmID request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
           getChannel(), getGetAlarmResponseStreamMethod(), getCallOptions(), request);
     }
-
-    /**
-     */
-    public context.ContextOuterClass.Empty deleteAlarm(monitoring.Monitoring.AlarmID request) {
-      return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getDeleteAlarmMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public java.util.Iterator<monitoring.Monitoring.Kpi> getStreamKpi(
-        monitoring.Monitoring.KpiId request) {
-      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
-          getChannel(), getGetStreamKpiMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public monitoring.Monitoring.KpiList getInstantKpi(monitoring.Monitoring.KpiId request) {
-      return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetInstantKpiMethod(), getCallOptions(), request);
-    }
   }
 
   /**
@@ -1197,26 +1196,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> setKpi(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createKpi(
         monitoring.Monitoring.KpiDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getSetKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
-        monitoring.Monitoring.KpiId request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiDescriptor(
+        monitoring.Monitoring.EditedKpiDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
         monitoring.Monitoring.KpiId request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request);
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
     }
 
     /**
@@ -1227,6 +1226,22 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createBundleKpi(
+        monitoring.Monitoring.BundleKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request);
+    }
+
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> includeKpi(
@@ -1269,71 +1284,63 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteSubscription(
-        monitoring.Monitoring.SubscriptionID request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiSubscription(
+        monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request);
+          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> setKpiAlarm(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> createKpiAlarm(
         monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request);
+          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmIDList> getAlarms(
-        context.ContextOuterClass.Empty request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiAlarm(
+        monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request);
+          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(
-        monitoring.Monitoring.AlarmID request) {
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmIDList> getAlarms(
+        context.ContextOuterClass.Empty request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request);
+          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteAlarm(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(
         monitoring.Monitoring.AlarmID request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getDeleteAlarmMethod(), getCallOptions()), request);
-    }
-
-    /**
-     */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiList> getInstantKpi(
-        monitoring.Monitoring.KpiId request) {
-      return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request);
     }
   }
 
-  private static final int METHODID_SET_KPI = 0;
-  private static final int METHODID_DELETE_KPI = 1;
-  private static final int METHODID_GET_KPI_DESCRIPTOR = 2;
+  private static final int METHODID_CREATE_KPI = 0;
+  private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+  private static final int METHODID_DELETE_KPI = 2;
   private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
-  private static final int METHODID_INCLUDE_KPI = 4;
-  private static final int METHODID_MONITOR_KPI = 5;
-  private static final int METHODID_QUERY_KPI_DATA = 6;
-  private static final int METHODID_SET_KPI_SUBSCRIPTION = 7;
-  private static final int METHODID_GET_SUBS_DESCRIPTOR = 8;
-  private static final int METHODID_GET_SUBSCRIPTIONS = 9;
-  private static final int METHODID_DELETE_SUBSCRIPTION = 10;
-  private static final int METHODID_SET_KPI_ALARM = 11;
-  private static final int METHODID_GET_ALARMS = 12;
-  private static final int METHODID_GET_ALARM_DESCRIPTOR = 13;
-  private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 14;
-  private static final int METHODID_DELETE_ALARM = 15;
-  private static final int METHODID_GET_STREAM_KPI = 16;
-  private static final int METHODID_GET_INSTANT_KPI = 17;
+  private static final int METHODID_CREATE_BUNDLE_KPI = 4;
+  private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
+  private static final int METHODID_INCLUDE_KPI = 6;
+  private static final int METHODID_MONITOR_KPI = 7;
+  private static final int METHODID_QUERY_KPI_DATA = 8;
+  private static final int METHODID_SUBSCRIBE_KPI = 9;
+  private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
+  private static final int METHODID_GET_SUBSCRIPTIONS = 11;
+  private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
+  private static final int METHODID_CREATE_KPI_ALARM = 13;
+  private static final int METHODID_EDIT_KPI_ALARM = 14;
+  private static final int METHODID_GET_ALARMS = 15;
+  private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
+  private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -1352,22 +1359,30 @@ public final class MonitoringServiceGrpc {
     @java.lang.SuppressWarnings("unchecked")
     public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
       switch (methodId) {
-        case METHODID_SET_KPI:
-          serviceImpl.setKpi((monitoring.Monitoring.KpiDescriptor) request,
+        case METHODID_CREATE_KPI:
+          serviceImpl.createKpi((monitoring.Monitoring.KpiDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
           break;
+        case METHODID_EDIT_KPI_DESCRIPTOR:
+          serviceImpl.editKpiDescriptor((monitoring.Monitoring.EditedKpiDescriptor) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
         case METHODID_DELETE_KPI:
           serviceImpl.deleteKpi((monitoring.Monitoring.KpiId) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
-        case METHODID_GET_KPI_DESCRIPTOR:
-          serviceImpl.getKpiDescriptor((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver);
-          break;
         case METHODID_GET_KPI_DESCRIPTOR_LIST:
           serviceImpl.getKpiDescriptorList((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver);
           break;
+        case METHODID_CREATE_BUNDLE_KPI:
+          serviceImpl.createBundleKpi((monitoring.Monitoring.BundleKpiDescriptor) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
+          break;
+        case METHODID_GET_KPI_DESCRIPTOR:
+          serviceImpl.getKpiDescriptor((monitoring.Monitoring.KpiId) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver);
+          break;
         case METHODID_INCLUDE_KPI:
           serviceImpl.includeKpi((monitoring.Monitoring.Kpi) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
@@ -1380,8 +1395,8 @@ public final class MonitoringServiceGrpc {
           serviceImpl.queryKpiData((monitoring.Monitoring.KpiQuery) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
           break;
-        case METHODID_SET_KPI_SUBSCRIPTION:
-          serviceImpl.setKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
+        case METHODID_SUBSCRIBE_KPI:
+          serviceImpl.subscribeKpi((monitoring.Monitoring.SubsDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
           break;
         case METHODID_GET_SUBS_DESCRIPTOR:
@@ -1392,14 +1407,18 @@ public final class MonitoringServiceGrpc {
           serviceImpl.getSubscriptions((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList>) responseObserver);
           break;
-        case METHODID_DELETE_SUBSCRIPTION:
-          serviceImpl.deleteSubscription((monitoring.Monitoring.SubscriptionID) request,
+        case METHODID_EDIT_KPI_SUBSCRIPTION:
+          serviceImpl.editKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
-        case METHODID_SET_KPI_ALARM:
-          serviceImpl.setKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
+        case METHODID_CREATE_KPI_ALARM:
+          serviceImpl.createKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver);
           break;
+        case METHODID_EDIT_KPI_ALARM:
+          serviceImpl.editKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
         case METHODID_GET_ALARMS:
           serviceImpl.getAlarms((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList>) responseObserver);
@@ -1409,21 +1428,9 @@ public final class MonitoringServiceGrpc {
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver);
           break;
         case METHODID_GET_ALARM_RESPONSE_STREAM:
-          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmSubscription) request,
+          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmID) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver);
           break;
-        case METHODID_DELETE_ALARM:
-          serviceImpl.deleteAlarm((monitoring.Monitoring.AlarmID) request,
-              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
-          break;
-        case METHODID_GET_STREAM_KPI:
-          serviceImpl.getStreamKpi((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver);
-          break;
-        case METHODID_GET_INSTANT_KPI:
-          serviceImpl.getInstantKpi((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
-          break;
         default:
           throw new AssertionError();
       }
@@ -1485,24 +1492,24 @@ public final class MonitoringServiceGrpc {
         if (result == null) {
           serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
               .setSchemaDescriptor(new MonitoringServiceFileDescriptorSupplier())
-              .addMethod(getSetKpiMethod())
+              .addMethod(getCreateKpiMethod())
+              .addMethod(getEditKpiDescriptorMethod())
               .addMethod(getDeleteKpiMethod())
-              .addMethod(getGetKpiDescriptorMethod())
               .addMethod(getGetKpiDescriptorListMethod())
+              .addMethod(getCreateBundleKpiMethod())
+              .addMethod(getGetKpiDescriptorMethod())
               .addMethod(getIncludeKpiMethod())
               .addMethod(getMonitorKpiMethod())
               .addMethod(getQueryKpiDataMethod())
-              .addMethod(getSetKpiSubscriptionMethod())
+              .addMethod(getSubscribeKpiMethod())
               .addMethod(getGetSubsDescriptorMethod())
               .addMethod(getGetSubscriptionsMethod())
-              .addMethod(getDeleteSubscriptionMethod())
-              .addMethod(getSetKpiAlarmMethod())
+              .addMethod(getEditKpiSubscriptionMethod())
+              .addMethod(getCreateKpiAlarmMethod())
+              .addMethod(getEditKpiAlarmMethod())
               .addMethod(getGetAlarmsMethod())
               .addMethod(getGetAlarmDescriptorMethod())
               .addMethod(getGetAlarmResponseStreamMethod())
-              .addMethod(getDeleteAlarmMethod())
-              .addMethod(getGetStreamKpiMethod())
-              .addMethod(getGetInstantKpiMethod())
               .build();
         }
       }
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java b/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
index d663b38c923a2b5401642db4e697e16be4720f05..46f442b743ee176a83a416fe13711beda6baf937 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
@@ -36,18 +36,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpi);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpi);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteKpi);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiDescriptor);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteKpi);
         }
 
         
@@ -56,6 +56,16 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createBundleKpi);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::includeKpi);
         }
@@ -81,13 +91,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteSubscription);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiSubscription);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpiAlarm);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpiAlarm);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiAlarm);
         }
 
         
@@ -101,30 +116,15 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteAlarm);
-        }
-
-        
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getInstantKpi);
-        }
-
-        
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::setKpiSubscription);
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::subscribeKpi);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getAlarmResponseStream);
         }
 
-        
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getStreamKpi);
-        }
-
     }
 
     
@@ -143,17 +143,17 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
 
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -163,98 +163,98 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
             return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getSetKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getCreateKpiMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.KpiDescriptor,
                                             monitoring.Monitoring.KpiId>(
-                                            this, METHODID_SET_KPI, compression)))
+                                            this, METHODID_CREATE_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getEditKpiDescriptorMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.EditedKpiDescriptor,
                                             context.ContextOuterClass.Empty>(
-                                            this, METHODID_DELETE_KPI, compression)))
+                                            this, METHODID_EDIT_KPI_DESCRIPTOR, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
+                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.KpiDescriptor>(
-                                            this, METHODID_GET_KPI_DESCRIPTOR, compression)))
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_DELETE_KPI, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetKpiDescriptorListMethod(),
                             asyncUnaryCall(
@@ -262,6 +262,20 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             context.ContextOuterClass.Empty,
                                             monitoring.Monitoring.KpiDescriptorList>(
                                             this, METHODID_GET_KPI_DESCRIPTOR_LIST, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getCreateBundleKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.BundleKpiDescriptor,
+                                            monitoring.Monitoring.KpiId>(
+                                            this, METHODID_CREATE_BUNDLE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.KpiDescriptor>(
+                                            this, METHODID_GET_KPI_DESCRIPTOR, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getIncludeKpiMethod(),
                             asyncUnaryCall(
@@ -284,12 +298,12 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.KpiList>(
                                             this, METHODID_QUERY_KPI_DATA, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getSetKpiSubscriptionMethod(),
+                            monitoring.MonitoringServiceGrpc.getSubscribeKpiMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.SubsDescriptor,
                                             monitoring.Monitoring.KpiList>(
-                                            this, METHODID_SET_KPI_SUBSCRIPTION, compression)))
+                                            this, METHODID_SUBSCRIBE_KPI, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetSubsDescriptorMethod(),
                             asyncUnaryCall(
@@ -305,19 +319,26 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.SubsIDList>(
                                             this, METHODID_GET_SUBSCRIPTIONS, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getDeleteSubscriptionMethod(),
+                            monitoring.MonitoringServiceGrpc.getEditKpiSubscriptionMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.SubscriptionID,
+                                            monitoring.Monitoring.SubsDescriptor,
                                             context.ContextOuterClass.Empty>(
-                                            this, METHODID_DELETE_SUBSCRIPTION, compression)))
+                                            this, METHODID_EDIT_KPI_SUBSCRIPTION, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getSetKpiAlarmMethod(),
+                            monitoring.MonitoringServiceGrpc.getCreateKpiAlarmMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.AlarmDescriptor,
                                             monitoring.Monitoring.AlarmID>(
-                                            this, METHODID_SET_KPI_ALARM, compression)))
+                                            this, METHODID_CREATE_KPI_ALARM, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getEditKpiAlarmMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmDescriptor,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_EDIT_KPI_ALARM, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetAlarmsMethod(),
                             asyncUnaryCall(
@@ -336,52 +357,31 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             monitoring.MonitoringServiceGrpc.getGetAlarmResponseStreamMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.AlarmSubscription,
+                                            monitoring.Monitoring.AlarmID,
                                             monitoring.Monitoring.AlarmResponse>(
                                             this, METHODID_GET_ALARM_RESPONSE_STREAM, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getDeleteAlarmMethod(),
-                            asyncUnaryCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.AlarmID,
-                                            context.ContextOuterClass.Empty>(
-                                            this, METHODID_DELETE_ALARM, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetStreamKpiMethod(),
-                            asyncServerStreamingCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.Kpi>(
-                                            this, METHODID_GET_STREAM_KPI, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetInstantKpiMethod(),
-                            asyncUnaryCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.KpiList>(
-                                            this, METHODID_GET_INSTANT_KPI, compression)))
                     .build();
         }
     }
 
-    private static final int METHODID_SET_KPI = 0;
-    private static final int METHODID_DELETE_KPI = 1;
-    private static final int METHODID_GET_KPI_DESCRIPTOR = 2;
+    private static final int METHODID_CREATE_KPI = 0;
+    private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+    private static final int METHODID_DELETE_KPI = 2;
     private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
-    private static final int METHODID_INCLUDE_KPI = 4;
-    private static final int METHODID_MONITOR_KPI = 5;
-    private static final int METHODID_QUERY_KPI_DATA = 6;
-    private static final int METHODID_SET_KPI_SUBSCRIPTION = 7;
-    private static final int METHODID_GET_SUBS_DESCRIPTOR = 8;
-    private static final int METHODID_GET_SUBSCRIPTIONS = 9;
-    private static final int METHODID_DELETE_SUBSCRIPTION = 10;
-    private static final int METHODID_SET_KPI_ALARM = 11;
-    private static final int METHODID_GET_ALARMS = 12;
-    private static final int METHODID_GET_ALARM_DESCRIPTOR = 13;
-    private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 14;
-    private static final int METHODID_DELETE_ALARM = 15;
-    private static final int METHODID_GET_STREAM_KPI = 16;
-    private static final int METHODID_GET_INSTANT_KPI = 17;
+    private static final int METHODID_CREATE_BUNDLE_KPI = 4;
+    private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
+    private static final int METHODID_INCLUDE_KPI = 6;
+    private static final int METHODID_MONITOR_KPI = 7;
+    private static final int METHODID_QUERY_KPI_DATA = 8;
+    private static final int METHODID_SUBSCRIBE_KPI = 9;
+    private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
+    private static final int METHODID_GET_SUBSCRIPTIONS = 11;
+    private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
+    private static final int METHODID_CREATE_KPI_ALARM = 13;
+    private static final int METHODID_EDIT_KPI_ALARM = 14;
+    private static final int METHODID_GET_ALARMS = 15;
+    private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
+    private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
 
     private static final class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -402,23 +402,23 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         @java.lang.SuppressWarnings("unchecked")
         public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
             switch (methodId) {
-                case METHODID_SET_KPI:
+                case METHODID_CREATE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
                             compression,
-                            serviceImpl::setKpi);
+                            serviceImpl::createKpi);
                     break;
-                case METHODID_DELETE_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                case METHODID_EDIT_KPI_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.EditedKpiDescriptor) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
                             compression,
-                            serviceImpl::deleteKpi);
+                            serviceImpl::editKpiDescriptor);
                     break;
-                case METHODID_GET_KPI_DESCRIPTOR:
+                case METHODID_DELETE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
                             compression,
-                            serviceImpl::getKpiDescriptor);
+                            serviceImpl::deleteKpi);
                     break;
                 case METHODID_GET_KPI_DESCRIPTOR_LIST:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
@@ -426,6 +426,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::getKpiDescriptorList);
                     break;
+                case METHODID_CREATE_BUNDLE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.BundleKpiDescriptor) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
+                            compression,
+                            serviceImpl::createBundleKpi);
+                    break;
+                case METHODID_GET_KPI_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver,
+                            compression,
+                            serviceImpl::getKpiDescriptor);
+                    break;
                 case METHODID_INCLUDE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.Kpi) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
@@ -444,11 +456,11 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::queryKpiData);
                     break;
-                case METHODID_SET_KPI_SUBSCRIPTION:
+                case METHODID_SUBSCRIBE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.SubsDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
                             compression,
-                            serviceImpl::setKpiSubscription);
+                            serviceImpl::subscribeKpi);
                     break;
                 case METHODID_GET_SUBS_DESCRIPTOR:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
@@ -462,17 +474,23 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::getSubscriptions);
                     break;
-                case METHODID_DELETE_SUBSCRIPTION:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
+                case METHODID_EDIT_KPI_SUBSCRIPTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubsDescriptor) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
                             compression,
-                            serviceImpl::deleteSubscription);
+                            serviceImpl::editKpiSubscription);
                     break;
-                case METHODID_SET_KPI_ALARM:
+                case METHODID_CREATE_KPI_ALARM:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver,
                             compression,
-                            serviceImpl::setKpiAlarm);
+                            serviceImpl::createKpiAlarm);
+                    break;
+                case METHODID_EDIT_KPI_ALARM:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::editKpiAlarm);
                     break;
                 case METHODID_GET_ALARMS:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
@@ -487,29 +505,11 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             serviceImpl::getAlarmDescriptor);
                     break;
                 case METHODID_GET_ALARM_RESPONSE_STREAM:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmSubscription) request,
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmID) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver,
                             compression,
                             serviceImpl::getAlarmResponseStream);
                     break;
-                case METHODID_DELETE_ALARM:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmID) request,
-                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
-                            compression,
-                            serviceImpl::deleteAlarm);
-                    break;
-                case METHODID_GET_STREAM_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
-                            compression,
-                            serviceImpl::getStreamKpi);
-                    break;
-                case METHODID_GET_INSTANT_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
-                            compression,
-                            serviceImpl::getInstantKpi);
-                    break;
                 default:
                     throw new java.lang.AssertionError();
             }
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
new file mode 100644
index 0000000000000000000000000000000000000000..680929bc031df90594a743eb96316d3c99508cef
--- /dev/null
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -0,0 +1,89 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+  annotations:
+    app.quarkus.io/commit-id: 7d24cfdf286fcca1ff04620ee026933bedd8960e
+    app.quarkus.io/build-timestamp: 2022-08-04 - 22:13:18 +0000
+  labels:
+    app.kubernetes.io/name: policyservice
+    app: policyservice
+  name: policyservice
+spec:
+  ports:
+    - name: http
+      port: 8080
+      targetPort: 8080
+    - name: grpc
+      port: 6060
+      targetPort: 6060
+  selector:
+    app.kubernetes.io/name: policyservice
+  type: ClusterIP
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  annotations:
+    app.quarkus.io/commit-id: 7d24cfdf286fcca1ff04620ee026933bedd8960e
+    app.quarkus.io/build-timestamp: 2022-08-04 - 22:13:18 +0000
+  labels:
+    app: policyservice
+    app.kubernetes.io/name: policyservice
+  name: policyservice
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app.kubernetes.io/name: policyservice
+  template:
+    metadata:
+      annotations:
+        app.quarkus.io/commit-id: 7d24cfdf286fcca1ff04620ee026933bedd8960e
+        app.quarkus.io/build-timestamp: 2022-08-04 - 22:13:18 +0000
+      labels:
+        app: policyservice
+        app.kubernetes.io/name: policyservice
+    spec:
+      containers:
+        - env:
+            - name: KUBERNETES_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: CONTEXT_SERVICE_HOST
+              value: contextservice
+            - name: SERVICE_SERVICE_HOST
+              value: serviceservice
+            - name: MONITORING_SERVICE_HOST
+              value: monitoringservice
+          image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0
+          imagePullPolicy: Always
+          livenessProbe:
+            failureThreshold: 3
+            httpGet:
+              path: /q/health/live
+              port: 8080
+              scheme: HTTP
+            initialDelaySeconds: 2
+            periodSeconds: 10
+            successThreshold: 1
+            timeoutSeconds: 10
+          name: policyservice
+          ports:
+            - containerPort: 8080
+              name: http
+              protocol: TCP
+            - containerPort: 6060
+              name: grpc
+              protocol: TCP
+          readinessProbe:
+            failureThreshold: 3
+            httpGet:
+              path: /q/health/ready
+              port: 8080
+              scheme: HTTP
+            initialDelaySeconds: 2
+            periodSeconds: 10
+            successThreshold: 1
+            timeoutSeconds: 10
diff --git a/src/service/service/path_computation_element/PathComputationElement.py b/src/service/service/path_computation_element/PathComputationElement.py
index 80316ac8965ebdbed99264127465488a946f6782..41a4c5d57722cb59ab3d3e505f9f79e68952ad5d 100644
--- a/src/service/service/path_computation_element/PathComputationElement.py
+++ b/src/service/service/path_computation_element/PathComputationElement.py
@@ -31,10 +31,10 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.INFO)
 
 SUB_SERVICE_TYPES = {
-    DeviceTypeEnum.EMULATED_PACKET_ROUTER.value   : ServiceTypeEnum.SERVICETYPE_L3NM,
-    DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value: ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
-    DeviceTypeEnum.PACKET_ROUTER.value            : ServiceTypeEnum.SERVICETYPE_L3NM,
-    DeviceTypeEnum.OPEN_LINE_SYSTEM.value         : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
+    DeviceTypeEnum.EMULATED_PACKET_ROUTER.value      : ServiceTypeEnum.SERVICETYPE_L3NM,
+    DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM.value: ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
+    DeviceTypeEnum.PACKET_ROUTER.value               : ServiceTypeEnum.SERVICETYPE_L3NM,
+    DeviceTypeEnum.OPTICAL_LINE_SYSTEM.value         : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
 }
 DEFAULT_SUB_SERVICE_TYPE = ServiceTypeEnum.SERVICETYPE_UNKNOWN
 
diff --git a/src/service/tests/ServiceHandler_L3NM_EMU.py b/src/service/tests/ServiceHandler_L3NM_EMU.py
index 45df80e4265018e802be587285fce318fc6b0736..0ac5fbf24cf1937104646374f60ab9487ee1c84d 100644
--- a/src/service/tests/ServiceHandler_L3NM_EMU.py
+++ b/src/service/tests/ServiceHandler_L3NM_EMU.py
@@ -14,7 +14,7 @@
 
 from typing import Dict, List, Tuple
 from common.tools.object_factory.ConfigRule import json_config_rule_set
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import json_constraint
 from common.tools.object_factory.Device import (
     json_device_emulated_packet_router_disabled, json_device_emulated_tapi_disabled, json_device_id)
 from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_id
@@ -101,8 +101,8 @@ SERVICE_R1_R3_UUID         = 'SVC:{:s}/{:s}-{:s}/{:s}'.format(
     DEVICE_R3_UUID, ENDPOINT_ID_R3_EP100['endpoint_uuid']['uuid'])
 SERVICE_R1_R3_ENDPOINT_IDS = [ENDPOINT_ID_R1_EP100, ENDPOINT_ID_R3_EP100]
 SERVICE_R1_R3_CONSTRAINTS  = [
-    json_constraint_custom('latency_ms', 15.2),
-    json_constraint_custom('jitter_us', 1.2),
+    json_constraint('latency_ms', 15.2),
+    json_constraint('jitter_us', 1.2),
 ]
 SERVICE_R1_R3_CONFIG_RULES = [
     json_config_rule_set(
diff --git a/src/service/tests/ServiceHandler_L3NM_OC.py b/src/service/tests/ServiceHandler_L3NM_OC.py
index 717536f6d1ee60564752f3107cd366796e3a36e2..0797a4af5505e78e2af49cefc29970f9c8ff11e7 100644
--- a/src/service/tests/ServiceHandler_L3NM_OC.py
+++ b/src/service/tests/ServiceHandler_L3NM_OC.py
@@ -15,7 +15,7 @@
 import uuid
 from typing import Dict, List, Tuple
 from common.tools.object_factory.ConfigRule import json_config_rule_set
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import json_constraint
 from common.tools.object_factory.Device import (
     json_device_connect_rules, json_device_emulated_packet_router_disabled, json_device_emulated_tapi_disabled,
     json_device_id)
@@ -115,8 +115,8 @@ SERVICE_R1_R2_UUID         = 'SVC:{:s}/{:s}-{:s}/{:s}'.format(
     DEVICE_R2_UUID, ENDPOINT_ID_R2_EP100['endpoint_uuid']['uuid'])
 SERVICE_R1_R2_ENDPOINT_IDS = [ENDPOINT_ID_R1_EP100, ENDPOINT_ID_R2_EP100]
 SERVICE_R1_R2_CONSTRAINTS  = [
-    json_constraint_custom('latency_ms', 15.2),
-    json_constraint_custom('jitter_us', 1.2),
+    json_constraint('latency_ms', 15.2),
+    json_constraint('jitter_us', 1.2),
 ]
 SERVICE_R1_R2_CONFIG_RULES = [
     json_config_rule_set(
diff --git a/src/slice/requirements.in b/src/slice/requirements.in
index 0a2c39895c9a1f642470bcc26cb67bd8dfb169b1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/slice/requirements.in
+++ b/src/slice/requirements.in
@@ -1 +0,0 @@
-#deepdiff==5.8.*
diff --git a/src/slice/service/SliceServiceServicerImpl.py b/src/slice/service/SliceServiceServicerImpl.py
index 30c2310b0136674ce3fa23c26b3c0812bbf3448a..275a201148940df10afcf446b57ab42e6c6a528c 100644
--- a/src/slice/service/SliceServiceServicerImpl.py
+++ b/src/slice/service/SliceServiceServicerImpl.py
@@ -12,16 +12,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import grpc, logging #, deepdiff
+import grpc, json, logging
 from common.proto.context_pb2 import (
-    Empty, Service, ServiceId, ServiceStatusEnum, ServiceTypeEnum, Slice, SliceId, SliceStatusEnum)
+    ConfigActionEnum, Empty, Service, ServiceStatusEnum, ServiceTypeEnum, Slice, SliceId, SliceStatusEnum)
 from common.proto.slice_pb2_grpc import SliceServiceServicer
 from common.rpc_method_wrapper.Decorator import create_metrics, safe_and_metered_rpc_method
-from common.tools.grpc.ConfigRules import copy_config_rules
-from common.tools.grpc.Constraints import copy_constraints
-from common.tools.grpc.EndPointIds import copy_endpoint_ids
-from common.tools.grpc.ServiceIds import update_service_ids
-from common.tools.grpc.Tools import grpc_message_to_json
 from context.client.ContextClient import ContextClient
 from interdomain.client.InterdomainClient import InterdomainClient
 from service.client.ServiceClient import ServiceClient
@@ -39,73 +34,66 @@ class SliceServiceServicerImpl(SliceServiceServicer):
 
     def create_update(self, request : Slice) -> SliceId:
         context_client = ContextClient()
-        try:
-            _slice = context_client.GetSlice(request.slice_id)
-            json_current_slice = grpc_message_to_json(_slice)
-        except:
-            json_current_slice = {}
-            slice_request = Slice()
-            slice_request.slice_id.CopyFrom(request.slice_id)
-            slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
-            context_client.SetSlice(slice_request)
-            _slice = context_client.GetSlice(request.slice_id)
-        slice_request = Slice()
-        slice_request.CopyFrom(_slice)
-
-        #LOGGER.info('json_current_slice = {:s}'.format(str(json_current_slice)))
-        #json_updated_slice = grpc_message_to_json(request)
-        #LOGGER.info('json_updated_slice = {:s}'.format(str(json_updated_slice)))
-        #changes = deepdiff.DeepDiff(json_current_slice, json_updated_slice)
-        #LOGGER.info('changes = {:s}'.format(str(changes)))
+
+        slice_id = context_client.SetSlice(request)
+        if len(request.slice_endpoint_ids) != 2: return slice_id
 
         domains = set()
         for slice_endpoint_id in request.slice_endpoint_ids:
             device_uuid = slice_endpoint_id.device_id.device_uuid.uuid
-            device_parts = device_uuid.split('@')
-            domain_uuid = '' if len(device_parts) == 1 else device_parts[1]
-            domains.add(domain_uuid)
-        LOGGER.info('domains = {:s}'.format(str(domains)))
-        is_multi_domain = len(domains) > 1
-        LOGGER.info('is_multi_domain = {:s}'.format(str(is_multi_domain)))
+            domains.add(device_uuid.split('@')[1])
 
+        is_multi_domain = len(domains) == 2
         if is_multi_domain:
             interdomain_client = InterdomainClient()
             slice_id = interdomain_client.RequestSlice(request)
         else:
-            service_id = ServiceId()
-            context_uuid = service_id.context_id.context_uuid.uuid = request.slice_id.context_id.context_uuid.uuid
-            slice_uuid = service_uuid = service_id.service_uuid.uuid = request.slice_id.slice_uuid.uuid
-
-            service_client = ServiceClient()
-            try:
-                _service = context_client.GetService(service_id)
-            except:
-                service_request = Service()
-                service_request.service_id.CopyFrom(service_id)
-                service_request.service_type = ServiceTypeEnum.SERVICETYPE_L2NM
-                service_request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
-                service_reply = service_client.CreateService(service_request)
-                if service_reply != service_request.service_id: # pylint: disable=no-member
-                    raise Exception('Service creation failed. Wrong Service Id was returned')
-                _service = context_client.GetService(service_id)
+            # pylint: disable=no-member
             service_request = Service()
-            service_request.CopyFrom(_service)
+            service_request.service_id.context_id.context_uuid.uuid = request.slice_id.context_id.context_uuid.uuid
+            service_request.service_id.service_uuid.uuid = request.slice_id.slice_uuid.uuid
+            service_request.service_type = ServiceTypeEnum.SERVICETYPE_L3NM
+            service_request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
 
-            copy_endpoint_ids(request.slice_endpoint_ids, service_request.service_endpoint_ids)
-            copy_constraints(request.slice_constraints, service_request.service_constraints)
-            copy_config_rules(request.slice_config.config_rules, service_request.service_config.config_rules)
+            service_client = ServiceClient()
+            service_reply = service_client.CreateService(service_request)
+            if service_reply != service_request.service_id: # pylint: disable=no-member
+                raise Exception('Service creation failed. Wrong Service Id was returned')
+
+            config_rule = service_request.service_config.config_rules.add()
+            config_rule.action = ConfigActionEnum.CONFIGACTION_SET
+            config_rule.custom.resource_key = '/settings'
+            config_rule.custom.resource_value = json.dumps(
+                {'mtu': 1512, 'address_families': ['IPV4'], 'bgp_as': 65000, 'bgp_route_target': '65000:333'},
+                sort_keys=True)
+
+            for slice_endpoint_id in request.slice_endpoint_ids:
+                device_uuid = slice_endpoint_id.device_id.device_uuid.uuid
+                endpoint_uuid = slice_endpoint_id.endpoint_uuid.uuid
+
+                endpoint_id = service_request.service_endpoint_ids.add()
+                endpoint_id.device_id.device_uuid.uuid = device_uuid
+                endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+
+                config_rule = service_request.service_config.config_rules.add()
+                config_rule.action = ConfigActionEnum.CONFIGACTION_SET
+                config_rule.custom.resource_key = '/device[{:s}]/endpoint[{:s}]/settings'.format(
+                    device_uuid, endpoint_uuid)
+                config_rule.custom.resource_value = json.dumps(
+                    {'router_id': '0.0.0.0', 'route_distinguisher': '0:0', 'sub_interface_index': 0, 'vlan_id': 0,
+                     'address_ip': '0.0.0.0', 'address_prefix': 0},
+                    sort_keys=True)
 
             service_reply = service_client.UpdateService(service_request)
             if service_reply != service_request.service_id: # pylint: disable=no-member
                 raise Exception('Service update failed. Wrong Service Id was returned')
 
-            copy_endpoint_ids(request.slice_endpoint_ids, slice_request.slice_endpoint_ids)
-            copy_constraints(request.slice_constraints, slice_request.slice_constraints)
-            copy_config_rules(request.slice_config.config_rules, slice_request.slice_config.config_rules)
-
-            update_service_ids(slice_request.slice_service_ids, context_uuid, service_uuid)
-            context_client.SetSlice(slice_request)
-            slice_id = slice_request.slice_id
+            reply = Slice()
+            reply.CopyFrom(request)
+            slice_service_id = reply.slice_service_ids.add()
+            slice_service_id.CopyFrom(service_reply)
+            context_client.SetSlice(reply)
+            slice_id = reply.slice_id
 
         slice_ = context_client.GetSlice(slice_id)
         slice_active = Slice()
@@ -144,41 +132,4 @@ class SliceServiceServicerImpl(SliceServiceServicer):
 
     @safe_and_metered_rpc_method(METRICS, LOGGER)
     def DeleteSlice(self, request : SliceId, context : grpc.ServicerContext) -> Empty:
-        context_client = ContextClient()
-        try:
-            _slice = context_client.GetSlice(request)
-        except:
-            return Empty()
-
-        domains = set()
-        for slice_endpoint_id in _slice.slice_endpoint_ids:
-            device_uuid = slice_endpoint_id.device_id.device_uuid.uuid
-            device_parts = device_uuid.split('@')
-            domain_uuid = '' if len(device_parts) == 1 else device_parts[1]
-            domains.add(domain_uuid)
-        LOGGER.info('domains = {:s}'.format(str(domains)))
-        is_multi_domain = len(domains) > 1
-        LOGGER.info('is_multi_domain = {:s}'.format(str(is_multi_domain)))
-
-        if is_multi_domain:
-            interdomain_client = InterdomainClient()
-            #slice_id = interdomain_client.DeleteSlice(request)
-            raise NotImplementedError('Delete inter-domain slice')
-        else:
-            current_slice = Slice()
-            current_slice.CopyFrom(_slice)
-            current_slice.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_DEINIT
-            context_client.SetSlice(current_slice)
-
-            service_client = ServiceClient()
-            for service_id in _slice.slice_service_ids:
-                current_slice = Slice()
-                current_slice.slice_id.CopyFrom(_slice.slice_id)
-                slice_service_id = current_slice.slice_service_ids.add()
-                slice_service_id.CopyFrom(service_id)
-                context_client.UnsetSlice(current_slice)
-
-                service_client.DeleteService(service_id)
-
-        context_client.RemoveSlice(request)
         return Empty()
diff --git a/src/slice/service/__main__.py b/src/slice/service/__main__.py
index a59c54b4b1b56865871d331409c1a7f60629aec6..f77d86bffe9b722f414be4f85adcaf0ef2cc4a8e 100644
--- a/src/slice/service/__main__.py
+++ b/src/slice/service/__main__.py
@@ -29,7 +29,7 @@ def main():
     global LOGGER # pylint: disable=global-statement
 
     log_level = get_log_level()
-    logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s")
+    logging.basicConfig(level=log_level)
     LOGGER = logging.getLogger(__name__)
 
     wait_for_environment_variables([
diff --git a/src/tests/oeccpsc22/tests/test_functional_create_interdomain_slice.py b/src/tests/oeccpsc22/tests/test_functional_create_interdomain_slice.py
index b31e868741a7996494d1f7763a3f7e237ca216a1..e6f6ccbc96152eb7e3a33317293261e28c89d713 100644
--- a/src/tests/oeccpsc22/tests/test_functional_create_interdomain_slice.py
+++ b/src/tests/oeccpsc22/tests/test_functional_create_interdomain_slice.py
@@ -27,7 +27,7 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
+DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM.value
 
 
 @pytest.fixture(scope='session')
diff --git a/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py b/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py
index 45296d107bcdb14472f05c677ba0c75113fd94cc..40a954868620564aef7d60c5ec0023ea0a32337b 100644
--- a/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py
+++ b/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py
@@ -27,7 +27,7 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
+DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM.value
 
 
 @pytest.fixture(scope='session')
diff --git a/src/tests/ofc22/descriptors_emulated.json b/src/tests/ofc22/descriptors_emulated.json
index 0f6f75e16c641439035f833efa05ee60529070f7..eb22506238e03a161f0e2b8aaeadf5fd31cf547b 100644
--- a/src/tests/ofc22/descriptors_emulated.json
+++ b/src/tests/ofc22/descriptors_emulated.json
@@ -18,9 +18,9 @@
             "device_id": {"device_uuid": {"uuid": "R1-EMU"}},
             "device_type": "emu-packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"},
-                {"action": 1, "resource_key": "_connect/port", "resource_value": "0"},
-                {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -30,9 +30,9 @@
             "device_id": {"device_uuid": {"uuid": "R2-EMU"}},
             "device_type": "emu-packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"},
-                {"action": 1, "resource_key": "_connect/port", "resource_value": "0"},
-                {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -42,9 +42,9 @@
             "device_id": {"device_uuid": {"uuid": "R3-EMU"}},
             "device_type": "emu-packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"},
-                {"action": 1, "resource_key": "_connect/port", "resource_value": "0"},
-                {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -54,9 +54,9 @@
             "device_id": {"device_uuid": {"uuid": "R4-EMU"}},
             "device_type": "emu-packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"},
-                {"action": 1, "resource_key": "_connect/port", "resource_value": "0"},
-                {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -64,11 +64,11 @@
         },
         {
             "device_id": {"device_uuid": {"uuid": "O1-OLS"}},
-            "device_type": "emu-open-line-system",
+            "device_type": "emu-optical-line-system",
             "device_config": {"config_rules": [
-                {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"},
-                {"action": 1, "resource_key": "_connect/port", "resource_value": "0"},
-                {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"aade6001-f00b-5e2f-a357-6a0a9d3de870\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"eb287d83-f05e-53ec-ab5a-adf6bd2b5418\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"0ef74f99-1acc-57bd-ab9d-4b958b06c513\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"50296d99-58cc-5ce7-82f5-fc8ee4eec2ec\"}]}"}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"aade6001-f00b-5e2f-a357-6a0a9d3de870\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"eb287d83-f05e-53ec-ab5a-adf6bd2b5418\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"0ef74f99-1acc-57bd-ab9d-4b958b06c513\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"50296d99-58cc-5ce7-82f5-fc8ee4eec2ec\"}]}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -105,4 +105,4 @@
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/src/tests/ofc22/run_test_01_bootstrap.sh b/src/tests/ofc22/run_test_01_bootstrap.sh
index ef23c28eb0af1158bd31dd9f35f330e7225bdd07..be30b15189786de3fd2f593a1584c73890e9e4fe 100755
--- a/src/tests/ofc22/run_test_01_bootstrap.sh
+++ b/src/tests/ofc22/run_test_01_bootstrap.sh
@@ -13,8 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# make sure to source the following scripts:
-# - my_deploy.sh
-# - tfs_runtime_env_vars.sh
-
 pytest --verbose src/tests/ofc22/tests/test_functional_bootstrap.py
diff --git a/src/tests/ofc22/tests/Objects.py b/src/tests/ofc22/tests/Objects.py
index d2fb32ebb20b7bcdda9ac12b7a7390c46e6fb1d1..66a0e023e280db7e8f9835987f7742e72796c5fa 100644
--- a/src/tests/ofc22/tests/Objects.py
+++ b/src/tests/ofc22/tests/Objects.py
@@ -228,4 +228,4 @@ DEVICES = [
     (DEVICE_O1, DEVICE_O1_CONNECT_RULES),
 ]
 
-LINKS = [LINK_R1_O1, LINK_R2_O1, LINK_R3_O1, LINK_R4_O1]
\ No newline at end of file
+LINKS = [LINK_R1_O1, LINK_R2_O1, LINK_R3_O1, LINK_R4_O1]
diff --git a/src/tests/ofc22/tests/test_functional_create_service.py b/src/tests/ofc22/tests/test_functional_create_service.py
index a76cc444e0327768c62375980fb5baa82d4ce521..a630501815194deb5f49a07bd9f7e6c1b5d03dcd 100644
--- a/src/tests/ofc22/tests/test_functional_create_service.py
+++ b/src/tests/ofc22/tests/test_functional_create_service.py
@@ -32,7 +32,7 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
+DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM.value
 
 
 @pytest.fixture(scope='session')
diff --git a/src/tests/ofc22/tests/test_functional_delete_service.py b/src/tests/ofc22/tests/test_functional_delete_service.py
index fed2300c6508d9bcfe19acc1a36a09797ccafee8..222dee5adc0839df9b9a6cac1dcdd08ecb2ec195 100644
--- a/src/tests/ofc22/tests/test_functional_delete_service.py
+++ b/src/tests/ofc22/tests/test_functional_delete_service.py
@@ -33,7 +33,7 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
+DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM.value
 
 
 @pytest.fixture(scope='session')
diff --git a/src/webui/service/static/topology_icons/Acknowledgements.txt b/src/webui/service/static/topology_icons/Acknowledgements.txt
index 1ddf1e1d03d8dbc8695e1a7850f5c911cae7e28e..c646efdec0d79148f9bd066116d6ca3985f6f909 100644
--- a/src/webui/service/static/topology_icons/Acknowledgements.txt
+++ b/src/webui/service/static/topology_icons/Acknowledgements.txt
@@ -8,5 +8,5 @@ https://symbols.getvecta.com/stencil_241/45_atm-switch.6a7362c1df.png => emu-pac
 https://symbols.getvecta.com/stencil_240/204_router.7b208c1133.png => packet-router.png
 https://symbols.getvecta.com/stencil_241/224_router.be30fb87e7.png => emu-packet-router.png
 
-https://symbols.getvecta.com/stencil_240/269_virtual-layer-switch.ed10fdede6.png => open-line-system.png
-https://symbols.getvecta.com/stencil_241/281_virtual-layer-switch.29420aff2f.png => emu-open-line-system.png
+https://symbols.getvecta.com/stencil_240/269_virtual-layer-switch.ed10fdede6.png => optical-line-system.png
+https://symbols.getvecta.com/stencil_241/281_virtual-layer-switch.29420aff2f.png => emu-optical-line-system.png
diff --git a/src/webui/service/static/topology_icons/emu-optical-line-system.png b/src/webui/service/static/topology_icons/emu-optical-line-system.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5c30d679170c6e080dee3cc5239bf7ecaefe743
Binary files /dev/null and b/src/webui/service/static/topology_icons/emu-optical-line-system.png differ
diff --git a/src/webui/service/static/topology_icons/optical-line-system.png b/src/webui/service/static/topology_icons/optical-line-system.png
new file mode 100644
index 0000000000000000000000000000000000000000..b51f094216755ed9fc5c7a7e8957bab88090c954
Binary files /dev/null and b/src/webui/service/static/topology_icons/optical-line-system.png differ
diff --git a/tutorial/1-2-install-microk8s.md b/tutorial/1-2-install-microk8s.md
index 327c6af9e477b4edd9b769371f79b32933746af6..09e0b41a36a9b6c88883377be6c0737157f7afba 100644
--- a/tutorial/1-2-install-microk8s.md
+++ b/tutorial/1-2-install-microk8s.md
@@ -70,16 +70,7 @@ sudo ufw default allow routed
 ```bash
 sudo usermod -a -G docker $USER
 sudo usermod -a -G microk8s $USER
-sudo chown -f -R $USER $HOME/.kube
-sudo reboot
-```
-
-In case that the .kube file is not automatically provisioned into your home folder, you may follow the steps below:
-
-```bash
-mkdir -p $HOME/.kube
-sudo chown -f -R $USER $HOME/.kube
-microk8s config > $HOME/.kube/config
+sudo chown -f -R $USER ~/.kube
 sudo reboot
 ```
 
diff --git a/tutorial/2-1-python-environment.md b/tutorial/2-1-python-environment.md
index e03e3daff118f8c1f1268d85a215527aab0358b4..4a818e9e7c0a2d4b4ef21ed48d04c84b339046fc 100644
--- a/tutorial/2-1-python-environment.md
+++ b/tutorial/2-1-python-environment.md
@@ -32,13 +32,6 @@ eval "$(pyenv init -)"
 eval "$(pyenv virtualenv-init -)"
 ```
 
-In case .bashrc is not linked properly to your profile, you may need to append the following line into your local .profile file:
-
-```bash
-# Open ~/.profile and append this line:
-+source "$HOME"/.bashrc
-```
-
 
 ## 2.1.4. Restart the VM
 Restart the VM for all the changes to take effect.
@@ -65,13 +58,6 @@ pyenv virtualenv 3.9.13 tfs
 pyenv local 3.9.13/envs/tfs
 ```
 
-In case that the correct pyenv does not get automatically activated when you change to the tfs-ctrl/ folder, then execute the following command:
-
-```bash
-cd ~/tfs-ctrl
-pyenv activate 3.9.13/envs/tfs
-```
-
 After completing these commands, you should see in your prompt that now you're within the virtual environment
 `3.9.13/envs/tfs` on folder `~/tfs-ctrl`:
 ```
diff --git a/tutorial/2-2-ofc22.md b/tutorial/2-2-ofc22.md
index 651b7777d56dda7c125ba79697f3df78e4fba7ce..5a0547d640267ebd45030d10ce8673d984c6b137 100644
--- a/tutorial/2-2-ofc22.md
+++ b/tutorial/2-2-ofc22.md
@@ -49,18 +49,6 @@ Notes:
 
 ## 2.2.5. Test execution
 
-Before executing the tests, the environment variables need to be prepared. First, make sure to load your deployment variables by:
-
-```
-source my_deploy.sh
-```
-
-Then, you also need to load the environment variables to support the execution of the tests by:
-
-```
-source tfs_runtime_env_vars.sh
-```
-
 To execute this functional test, four main steps needs to be carried out:
 1. Device bootstrapping
 2. L3VPN Service creation