diff --git a/.gitignore b/.gitignore index 71b77da25c4d53db49b24642d88062906e7db219..56f7580de26e47f75f8bf16346b35f35e229491d 100644 --- a/.gitignore +++ b/.gitignore @@ -130,6 +130,9 @@ venv.bak/ # VSCode project settings .vscode/ +# Visual Studio project settings +/.vs + # Rope project settings .ropeproject diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ffbf9e9f5f02bd0514d4584f6f2ad32761b6264f..3de792462d28b2d42e71b0329aefce2c2928984e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -41,3 +41,4 @@ 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 172889c07acdc2347b2dee2ddee8bf3061fdc53a..f80974573dfa83ef2c2139d6855a46a16e149746 100755 --- a/deploy.sh +++ b/deploy.sh @@ -86,33 +86,76 @@ 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" - else + 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 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'..." - TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}.log" - docker tag "$IMAGE_NAME" "$IMAGE_URL" > "$TAG_LOG" + 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" - PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log" - docker push "$IMAGE_URL" > "$PUSH_LOG" + PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log" + docker push "$IMAGE_URL" > "$PUSH_LOG" + fi 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 - sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_URL#g" "$MANIFEST" - sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" "$MANIFEST" + 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 else # Registry is not set - sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_NAME#g" "$MANIFEST" - sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" "$MANIFEST" + 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 fi echo " Deploying '$COMPONENT' component to Kubernetes..." diff --git a/manifests/pathcompservice.yaml b/manifests/pathcompservice.yaml index b5316e22f1eefd4177ae33f4fc89da256f65bff8..d5939cb154443139be88d8e0ac23c281a3b18c4d 100644 --- a/manifests/pathcompservice.yaml +++ b/manifests/pathcompservice.yaml @@ -27,8 +27,8 @@ spec: spec: terminationGracePeriodSeconds: 5 containers: - - name: server - image: registry.gitlab.com/teraflow-h2020/controller/pathcomp:latest + - name: frontend + image: registry.gitlab.com/teraflow-h2020/controller/pathcomp-frontend:latest imagePullPolicy: Always ports: - containerPort: 10020 @@ -48,6 +48,28 @@ 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 @@ -62,3 +84,7 @@ spec: protocol: TCP port: 10020 targetPort: 10020 + - name: http + protocol: TCP + port: 8081 + targetPort: 8081 diff --git a/proto/context.proto b/proto/context.proto index 866876175f108c056f7e35c6457a1bf48a226a9c..ab7dd5e699a9816daf3e3a180fffc6bfde0a8103 100644 --- a/proto/context.proto +++ b/proto/context.proto @@ -51,6 +51,7 @@ 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 ) {} @@ -58,6 +59,7 @@ 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/pathcomp.proto b/proto/pathcomp.proto index 9eb650fb9981b4b84f31b63796eec0c7a8e780b6..08f33efe99b6a25c568c8be14f1355b3d4521909 100644 --- a/proto/pathcomp.proto +++ b/proto/pathcomp.proto @@ -28,11 +28,16 @@ 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/report_coverage_slice.sh b/report_coverage_slice.sh new file mode 100755 index 0000000000000000000000000000000000000000..f783ec069329a9efe100154a2702a72a93e0ad8a --- /dev/null +++ b/report_coverage_slice.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +./report_coverage_all.sh | grep --color -E -i "^slice/.*$|$" diff --git a/scripts/run_tests_locally-pathcomp.sh b/scripts/run_tests_locally-pathcomp-frontend.sh similarity index 95% rename from scripts/run_tests_locally-pathcomp.sh rename to scripts/run_tests_locally-pathcomp-frontend.sh index f56f47a8b592939243a2ec5d9fd95d89046582d1..1bcf5e7f3792622622f9e59978fddbf11c54e492 100755 --- a/scripts/run_tests_locally-pathcomp.sh +++ b/scripts/run_tests_locally-pathcomp-frontend.sh @@ -25,4 +25,4 @@ RCFILE=$PROJECTDIR/coverage/.coveragerc #-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 + pathcomp/frontend/tests/test_unitary.py diff --git a/scripts/show_logs_pathcomp_backend.sh b/scripts/show_logs_pathcomp_backend.sh new file mode 100755 index 0000000000000000000000000000000000000000..cee99ee4bd19de9b7cd4e45eb651e809397ccaeb --- /dev/null +++ b/scripts/show_logs_pathcomp_backend.sh @@ -0,0 +1,27 @@ +#!/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. + +######################################################################################################################## +# Define your deployment settings here +######################################################################################################################## + +# If not already set, set the name of the Kubernetes namespace to deploy to. +export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"} + +######################################################################################################################## +# Automated steps start here +######################################################################################################################## + +kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/pathcompservice -c backend diff --git a/scripts/show_logs_pathcomp_frontend.sh b/scripts/show_logs_pathcomp_frontend.sh new file mode 100755 index 0000000000000000000000000000000000000000..32f92b59d53b5804e9f1a0b145576667cfa21131 --- /dev/null +++ b/scripts/show_logs_pathcomp_frontend.sh @@ -0,0 +1,27 @@ +#!/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. + +######################################################################################################################## +# Define your deployment settings here +######################################################################################################################## + +# If not already set, set the name of the Kubernetes namespace to deploy to. +export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"} + +######################################################################################################################## +# Automated steps start here +######################################################################################################################## + +kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/pathcompservice -c frontend diff --git a/src/common/DeviceTypes.py b/src/common/DeviceTypes.py index bf871a2d5afa6a73f1c9dd39431c64a7f31bbd7e..4d67ff6615227f0d9e7d82e2f69b39d72011a75c 100644 --- a/src/common/DeviceTypes.py +++ b/src/common/DeviceTypes.py @@ -15,12 +15,14 @@ from enum import Enum class DeviceTypeEnum(Enum): - 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' + 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' diff --git a/src/common/tools/object_factory/Constraint.py b/src/common/tools/object_factory/Constraint.py index df290d4285330f1965608d710d9d48ca49131521..757531daf65b60c5f5b6c90ee67ef00488f91590 100644 --- a/src/common/tools/object_factory/Constraint.py +++ b/src/common/tools/object_factory/Constraint.py @@ -15,6 +15,19 @@ import json from typing import Any, Dict, Union -def json_constraint(constraint_type : str, constraint_value : Union[str, Dict[str, Any]]): +def json_constraint_custom(constraint_type : str, constraint_value : Union[str, Dict[str, Any]]) -> Dict: 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 32baff9ae5cfb9a9a41d1d06bfec7df5fd5c0e4a..4a590134dd7b455c92b62fc5e4aa9fece0f874b4 100644 --- a/src/common/tools/object_factory/Device.py +++ b/src/common/tools/object_factory/Device.py @@ -20,7 +20,8 @@ from common.tools.object_factory.ConfigRule import json_config_rule_set DEVICE_DISABLED = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED -DEVICE_EMUOLS_TYPE = DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM.value +DEVICE_EMUDC_TYPE = DeviceTypeEnum.EMULATED_DATACENTER.value +DEVICE_EMUOLS_TYPE = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value DEVICE_EMUPR_TYPE = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value DEVICE_EMU_DRIVERS = [DeviceDriverEnum.DEVICEDRIVER_UNDEFINED] DEVICE_EMU_ADDRESS = '127.0.0.1' @@ -29,7 +30,7 @@ DEVICE_EMU_PORT = '0' DEVICE_PR_TYPE = DeviceTypeEnum.PACKET_ROUTER.value DEVICE_PR_DRIVERS = [DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG] -DEVICE_TAPI_TYPE = DeviceTypeEnum.OPTICAL_LINE_SYSTEM.value +DEVICE_TAPI_TYPE = DeviceTypeEnum.OPEN_LINE_SYSTEM.value DEVICE_TAPI_DRIVERS = [DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API] # check which enum type and value assign to microwave device @@ -71,6 +72,14 @@ 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/common/tools/service/ConstraintsChecker.py b/src/common/tools/service/ConstraintsChecker.py new file mode 100644 index 0000000000000000000000000000000000000000..864cf3ed1b45c68a4628c1196b86de6e9df0edfd --- /dev/null +++ b/src/common/tools/service/ConstraintsChecker.py @@ -0,0 +1,38 @@ +import grpc, logging +from typing import Dict, List, Set, Tuple +from common.Checkers import chk_string +from common.exceptions.ServiceException import ServiceException +from service.proto.context_pb2 import Constraint + +def check_constraint( + logger : logging.Logger, constraint_number : int, parent_name : str, constraint : Constraint, + add_constraints : Dict[str, Dict[str, Set[str]]]) -> Tuple[str, str]: + + try: + constraint_type = chk_string('constraint[#{}].constraint_type'.format(constraint_number), + constraint.constraint_type, + allow_empty=False) + constraint_value = chk_string('constraint[#{}].constraint_value'.format(constraint_number), + constraint.constraint_value, + allow_empty=False) + except Exception as e: + logger.exception('Invalid arguments:') + raise ServiceException(grpc.StatusCode.INVALID_ARGUMENT, str(e)) + + if constraint_type in add_constraints: + msg = 'Duplicated ConstraintType({}) in {}.' + msg = msg.format(constraint_type, parent_name) + raise ServiceException(grpc.StatusCode.INVALID_ARGUMENT, msg) + + add_constraints[constraint_type] = constraint_value + return constraint_type, constraint_value + +def check_constraints(logger : logging.Logger, parent_name : str, constraints): + add_constraints : Dict[str, str] = {} + constraint_tuples : List[Tuple[str, str]] = [] + for constraint_number,constraint in enumerate(constraints): + _parent_name = 'Constraint(#{}) of {}'.format(constraint_number, parent_name) + constraint_type, constraint_value = check_constraint( + logger, constraint_number, _parent_name, constraint, add_constraints) + constraint_tuples.append((constraint_type, constraint_value)) + return constraint_tuples diff --git a/src/common/tools/service/SliceCheckers.py b/src/common/tools/service/SliceCheckers.py new file mode 100644 index 0000000000000000000000000000000000000000..bac9766b8595c64f9f8d68954707cc5f1efc68e0 --- /dev/null +++ b/src/common/tools/service/SliceCheckers.py @@ -0,0 +1,18 @@ +import grpc +from common.database.api.Database import Database +from common.database.api.context.slice.Slice import Slice +from common.exceptions.ServiceException import ServiceException + +def check_slice_exists(database : Database, context_id : str, slice_id : str) -> Slice: + db_context = database.context(context_id).create() + if db_context.slices.contains(slice_id): return db_context.slice(slice_id) + msg = 'Context({})/Slice({}) does not exist in the database.' + msg = msg.format(context_id, slice_id) + raise ServiceException(grpc.StatusCode.NOT_FOUND, msg) + +def check_slice_not_exists(database : Database, context_id : str, slice_id : str): + db_context = database.context(context_id).create() + if not db_context.slices.contains(slice_id): return + msg = 'Context({})/Slice({}) already exists in the database.' + msg = msg.format(context_id, slice_id) + raise ServiceException(grpc.StatusCode.ALREADY_EXISTS, msg) diff --git a/src/context/client/ContextClient.py b/src/context/client/ContextClient.py index 6e8cbac6a28c1b24d1999b0d8db1240905b10f2c..da907341f799def94694817242c106a913e03327 100644 --- a/src/context/client/ContextClient.py +++ b/src/context/client/ContextClient.py @@ -250,6 +250,13 @@ 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))) @@ -292,6 +299,13 @@ 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 53754caf4f9d2621ed8a6fdfd325d42f77f44a4f..dfd0c8773b6a7d2dea7bafa12c12018d62b7cdb8 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) + logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s") 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 bb2a37467ce3ad451bd29f824a5092ec1ad43cee..a5f90788e4783edf1eba76cf6fe461aaa96476e6 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([db_parent_pk, config_name], separator=':') + str_config_key = key_to_str([config_name, db_parent_pk], 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 a35ec250d8a62a8a2534e9f27ddecac801db6eff..449dcedeeaf10686ece58607d3a5fa4f4bf6a070 100644 --- a/src/context/service/database/ConstraintModel.py +++ b/src/context/service/database/ConstraintModel.py @@ -54,24 +54,13 @@ 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 - return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'region': self.region}} + json_endpoint_id = EndPointModel(self.database, self.endpoint_fk).dump_id() + return {'endpoint_location': {'endpoint_id': json_endpoint_id, 'location': {'region': self.region}}} class ConstraintEndpointLocationGpsPositionModel(Model): # pylint: disable=abstract-method endpoint_fk = ForeignKeyField(EndPointModel) @@ -80,14 +69,16 @@ class ConstraintEndpointLocationGpsPositionModel(Model): # pylint: disable=abstr def dump(self) -> Dict: # pylint: disable=arguments-differ gps_position = {'latitude': self.latitude, 'longitude': self.longitude} - return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'gps_position': gps_position}} + json_endpoint_id = EndPointModel(self.database, self.endpoint_fk).dump_id() + return {'endpoint_location': {'endpoint_id': json_endpoint_id, 'location': {'gps_position': gps_position}}} class ConstraintEndpointPriorityModel(Model): # pylint: disable=abstract-method endpoint_fk = ForeignKeyField(EndPointModel) - priority = FloatField(required=True) + priority = IntegerField(required=True, min_value=0) def dump(self) -> Dict: # pylint: disable=arguments-differ - return {'endpoint_priority': {'endpoint_id': dump_endpoint_id(self), 'priority': self.priority}} + json_endpoint_id = EndPointModel(self.database, self.endpoint_fk).dump_id() + return {'endpoint_priority': {'endpoint_id': json_endpoint_id, 'priority': self.priority}} class ConstraintSlaAvailabilityModel(Model): # pylint: disable=abstract-method num_disjoint_paths = IntegerField(required=True, min_value=1) @@ -240,7 +231,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([db_parent_pk, constraints_name], separator=':') + str_constraints_key = key_to_str([constraints_name, db_parent_pk], 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 4c8f957ecb70765cbd36032fca7bfacc27f9b5ae..71c97bf9ffc65942993dbdd966925f27aafad9ec 100644 --- a/src/context/service/grpc_server/ContextServiceServicerImpl.py +++ b/src/context/service/grpc_server/ContextServiceServicerImpl.py @@ -61,6 +61,7 @@ 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) @@ -277,8 +278,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_result = update_config(self.database, device_uuid, 'running', config_rules) - db_running_config = running_config_result[0][0] + running_config_rules = update_config(self.database, device_uuid, 'device', config_rules) + db_running_config = running_config_rules[0][0] result : Tuple[DeviceModel, bool] = update_or_create_object(self.database, DeviceModel, device_uuid, { 'device_uuid' : device_uuid, @@ -319,7 +320,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 + db_endpoint, endpoint_updated = result # pylint: disable=unused-variable set_kpi_sample_types(self.database, db_endpoint, endpoint.kpi_sample_types) @@ -483,12 +484,12 @@ class ContextServiceServicerImpl(ContextServiceServicer): str_service_key = key_to_str([context_uuid, service_uuid]) constraints_result = set_constraints( - self.database, str_service_key, 'constraints', request.service_constraints) + self.database, str_service_key, 'service', request.service_constraints) db_constraints = constraints_result[0][0] config_rules = grpc_config_rules_to_raw(request.service_config.config_rules) - running_config_result = update_config(self.database, str_service_key, 'running', config_rules) - db_running_config = running_config_result[0][0] + running_config_rules = update_config(self.database, str_service_key, 'service', config_rules) + db_running_config = running_config_rules[0][0] result : Tuple[ServiceModel, bool] = update_or_create_object(self.database, ServiceModel, str_service_key, { 'context_fk' : db_context, @@ -592,12 +593,12 @@ class ContextServiceServicerImpl(ContextServiceServicer): str_slice_key = key_to_str([context_uuid, slice_uuid]) constraints_result = set_constraints( - self.database, str_slice_key, 'constraints', request.slice_constraints) + self.database, str_slice_key, 'slice', request.slice_constraints) db_constraints = constraints_result[0][0] config_rules = grpc_config_rules_to_raw(request.slice_config.config_rules) - running_config_result = update_config(self.database, str_slice_key, 'running', config_rules) - db_running_config = running_config_result[0][0] + running_config_rules = update_config(self.database, str_slice_key, 'slice', config_rules) + db_running_config = running_config_rules[0][0] result : Tuple[SliceModel, bool] = update_or_create_object(self.database, SliceModel, str_slice_key, { 'context_fk' : db_context, @@ -656,6 +657,55 @@ 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 519a0093ac2733125487ed9daf0c61e0821910d5..140cbff686eaf5b430f23ee987a9335ecb04c0f5 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 +from common.tools.object_factory.Constraint import json_constraint_custom 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('latency_ms', '15.2'), - json_constraint('jitter_us', '1.2'), + json_constraint_custom('latency[ms]', '15.2'), + json_constraint_custom('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('latency_ms', '5.8'), - json_constraint('jitter_us', '0.1'), + json_constraint_custom('latency[ms]', '5.8'), + json_constraint_custom('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('latency_ms', '23.1'), - json_constraint('jitter_us', '3.4'), + json_constraint_custom('latency[ms]', '23.1'), + json_constraint_custom('jitter[us]', '3.4'), ] SERVICE_R2_R3_RULES = [ json_config_rule_set('svc/rsrc1/value', 'value7'), diff --git a/src/device/service/database/ContextModel.py b/src/device/service/database/ContextModel.py index 0ca13269c52d02ea663e10be986ab28d12d8f144..a609e1ba9189f5359064e6628cba6c08d353770e 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=True) -> 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=False) -> 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 a099c8adfd8bb64d94c8326c90094f39d7fe9b6b..f9e9c0b1a26fdf8faca7e1cbe0a64b582bdd4d5d 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 40912f50b98f1d5fc9555d87a4855a12ab8e0c07..6188a385da391af74272eee3be1e467c15f97702 100644 --- a/src/device/service/drivers/__init__.py +++ b/src/device/service/drivers/__init__.py @@ -29,7 +29,7 @@ DRIVERS = [ { # Emulated OLS/Packet Router, specifying Undefined/OpenConfig/TAPI Driver => use EmulatedDriver FilterFieldEnum.DEVICE_TYPE: [ - DeviceTypeEnum.EMULATED_OPTICAL_LINE_SYSTEM, + DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_PACKET_ROUTER, ], FilterFieldEnum.DRIVER : [ @@ -49,7 +49,7 @@ DRIVERS = [ (TransportApiDriver, [ { # Real OLS, specifying TAPI Driver => use TransportApiDriver - FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.OPTICAL_LINE_SYSTEM, + FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.OPEN_LINE_SYSTEM, FilterFieldEnum.DRIVER : ORM_DeviceDriverEnum.TRANSPORT_API, } ]), diff --git a/src/pathcomp/.gitignore b/src/pathcomp/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..48a680bf0f45eb556108c349bc45be896f4219aa --- /dev/null +++ b/src/pathcomp/.gitignore @@ -0,0 +1 @@ +backend/wireshark diff --git a/src/pathcomp/.gitlab-ci.yml b/src/pathcomp/.gitlab-ci.yml index fd52da6fb7bf8dc556b92e4db080c9927bb58a5d..a45e735e4c07299c4853abdff5b6c39963a87a78 100644 --- a/src/pathcomp/.gitlab-ci.yml +++ b/src/pathcomp/.gitlab-ci.yml @@ -21,9 +21,14 @@ build pathcomp: before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - - 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" + # 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" after_script: - docker images --filter="dangling=true" --quiet | xargs -r docker rmi rules: @@ -32,14 +37,18 @@ build pathcomp: - changes: - src/common/**/*.py - proto/*.proto - - src/$IMAGE_NAME/**/*.{py,in,yml} - - src/$IMAGE_NAME/Dockerfile - - src/$IMAGE_NAME/tests/*.py + - 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 - manifests/${IMAGE_NAME}service.yaml - .gitlab-ci.yml # Apply unit test to the component -unit test pathcomp: +unit test pathcomp-backend: variables: IMAGE_NAME: 'pathcomp' # name of the microservice IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) @@ -49,18 +58,22 @@ unit test 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 -d bridge teraflowbridge; 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 + - 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:$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 + - 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 - sleep 5 - docker ps -a - - 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" + - 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" coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' after_script: - - docker rm -f $IMAGE_NAME + - docker logs ${IMAGE_NAME}-backend + - 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)' @@ -68,16 +81,71 @@ unit test pathcomp: - changes: - src/common/**/*.py - proto/*.proto - - src/$IMAGE_NAME/**/*.{py,in,yml} - - src/$IMAGE_NAME/Dockerfile - - src/$IMAGE_NAME/tests/*.py - - src/$IMAGE_NAME/tests/Dockerfile + - 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 - manifests/${IMAGE_NAME}service.yaml - .gitlab-ci.yml artifacts: when: always reports: - junit: src/$IMAGE_NAME/tests/${IMAGE_NAME}_report.xml + junit: src/$IMAGE_NAME/frontend/tests/${IMAGE_NAME}-frontend_report.xml # Deployment of the service in Kubernetes Cluster deploy pathcomp: @@ -86,7 +154,8 @@ deploy pathcomp: IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) stage: deploy needs: - - unit test pathcomp + - unit test pathcomp-backend + - unit test pathcomp-frontend # - integ_test execute script: - 'sed -i "s/$IMAGE_NAME:.*/$IMAGE_NAME:$IMAGE_TAG/" manifests/${IMAGE_NAME}service.yaml' diff --git a/src/pathcomp/backend/Dockerfile b/src/pathcomp/backend/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..b351d4715d99ee8a9b518a0cfc827c17cf2bba49 --- /dev/null +++ b/src/pathcomp/backend/Dockerfile @@ -0,0 +1,74 @@ +# 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. + +# Multi-stage Docker image build + +# Stage 1 +FROM ubuntu:20.04 AS builder +ARG DEBIAN_FRONTEND=noninteractive + +# Install build software +RUN apt-get update -y && apt-get install build-essential curl gcovr libglib2.0-dev -y +RUN apt-get install valgrind -y + +# mkdir +RUN mkdir -p /var/teraflow + +# Define working directory +WORKDIR /var/teraflow + +# Copy every file in working directory +COPY src/pathcomp/backend/. ./ + +# Build release version and move it to bin folder +RUN make release +RUN mkdir /var/teraflow/bin +RUN mv pathComp /var/teraflow/bin + +# Build code coverage version +RUN make clean +RUN make coverage +#RUN make debug + +EXPOSE 8081 + +# builder defines coverage version of pathcomp by default +# coverage entrypoint: +ENTRYPOINT [ "./pathComp-cvr", "config/pathcomp.conf", "screen_only" ] +# debug entrypoint: +#ENTRYPOINT [ "./pathComp-dbg", "config/pathcomp.conf", "screen_only" ] +# debug entrypoint with memory tracking: +#ENTRYPOINT [ "valgrind", "--leak-check=full", "--show-leak-kinds=all", "--track-origins=yes", "--show-error-list=yes", "./pathComp-dbg", "config/pathcomp.conf", "screen_only" ] + + +# Stage 2 +FROM ubuntu:20.04 AS release +ARG DEBIAN_FRONTEND=noninteractive + +# Install build software +RUN apt-get update -y && apt-get install curl libglib2.0-bin -y + +# mkdir +RUN mkdir -p /var/teraflow/config + +# Define working directory +WORKDIR /var/teraflow + +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --from=builder /var/teraflow/bin/pathComp . +COPY --from=builder /var/teraflow/config/pathcomp.conf ./config +COPY --from=builder /var/teraflow/tests/. ./tests + +# release entrypoint: +ENTRYPOINT [ "./pathComp", "config/pathcomp.conf", "screen_only" ] diff --git a/src/pathcomp/backend/Dockerfile-gdb b/src/pathcomp/backend/Dockerfile-gdb new file mode 100644 index 0000000000000000000000000000000000000000..dcf2dbd2fefb22618677b746d1a6cc82a5412e13 --- /dev/null +++ b/src/pathcomp/backend/Dockerfile-gdb @@ -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. + +# Multi-stage Docker image build + +# Stage 1 +FROM ubuntu:20.04 AS builder +ARG DEBIAN_FRONTEND=noninteractive + +# Install build software +RUN apt-get update -y && apt-get install build-essential libglib2.0-dev -y +RUN apt-get install gdb gdbserver -y + +# mkdir +RUN mkdir -p /var/teraflow + +# Define working directory +WORKDIR /var/teraflow + +# Copy every file in working directory +COPY src/pathcomp/backend/. ./ +RUN make + +EXPOSE 8081 + +ENTRYPOINT [ "gdb", "--args", "./pathComp", "config/pathcomp.conf", "screen_only" ] diff --git a/src/pathcomp/backend/Makefile b/src/pathcomp/backend/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f4fc1996bb32e87515bb6a1145213cd4e74a4f3b --- /dev/null +++ b/src/pathcomp/backend/Makefile @@ -0,0 +1,70 @@ +# +# # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es +# +# 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. +# +# Author: CTTC/CERCA PONS RU Ricardo MartÃnez (ricardo.martinez@cttc.es) + +CC = gcc +CFLAGS = -I. -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ +LDLIBS = -lm +LDFLAGS = + +all: pathComp + +release: CFLAGS += -O6 -Wall -DPOSIX_SOURCE +release: pathComp + +debug: CFLAGS += -O0 -ggdb -g -DDEBUG +debug: LDFLAGS += -g +debug: pathComp-dbg + +coverage: CFLAGS += -O0 -ggdb -g -DDEBUG -fprofile-arcs -ftest-coverage -DGCOV +coverage: LDFLAGS += -g -lgcov --coverage -fprofile-arcs -ftest-coverage -DGCOV +coverage: pathComp-cvr + +pathComp: pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_sp.o pathComp_RESTapi.o + gcc -o pathComp pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_sp.o pathComp_RESTapi.o \ + -L/usr/lib/x86_64-linux-gnu/ -lglib-2.0 -luuid $(LDFLAGS) $(LDLIBS) + +pathComp-dbg: pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_sp.o pathComp_RESTapi.o + gcc -o pathComp-dbg pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_sp.o pathComp_RESTapi.o \ + -L/usr/lib/x86_64-linux-gnu/ -lglib-2.0 -luuid $(LDFLAGS) $(LDLIBS) + +pathComp-cvr: pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_sp.o pathComp_RESTapi.o + gcc -o pathComp-cvr pathComp.o pathComp_log.o pathComp_cjson.o pathComp_tools.o pathComp_ksp.o pathComp_sp.o pathComp_RESTapi.o \ + -L/usr/lib/x86_64-linux-gnu/ -lglib-2.0 -luuid $(LDFLAGS) $(LDLIBS) + +pathComp_log.o: pathComp_log.h pathComp_log.c + $(CC) $(CFLAGS) -c pathComp_log.c -o pathComp_log.o + +pathComp_cjson.o: pathComp_log.h pathComp_cjson.h pathComp_cjson.c + $(CC) $(CFLAGS) -c pathComp_cjson.c -o pathComp_cjson.o + +pathComp_tools.o: pathComp_log.h pathComp_tools.h pathComp_tools.c + $(CC) $(CFLAGS) -c pathComp_tools.c -o pathComp_tools.o + +pathComp_ksp.o: pathComp_log.h pathComp_tools.h pathComp_ksp.h pathComp_ksp.c + $(CC) $(CFLAGS) -c pathComp_ksp.c -o pathComp_ksp.o + +pathComp_sp.o: pathComp_log.h pathComp_tools.h pathComp_sp.h pathComp_sp.c + $(CC) $(CFLAGS) -c pathComp_sp.c -o pathComp_sp.o + +pathComp_RESTapi.o: pathComp_tools.h pathComp_log.h pathComp_cjson.h pathComp_ksp.h pathComp_sp.h pathComp_RESTapi.h pathComp_RESTapi.c + $(CC) $(CFLAGS) -c pathComp_RESTapi.c -o pathComp_RESTapi.o + +pathComp.o: pathComp_log.h pathComp_RESTapi.h pathComp.c pathComp.h + $(CC) $(CFLAGS) -c pathComp.c -o pathComp.o + +clean: + rm -f *.o *.gcno *.gcda *.gcov *.log pathComp pathComp-dbg pathComp-cvr diff --git a/src/pathcomp/backend/config/pathcomp.conf b/src/pathcomp/backend/config/pathcomp.conf new file mode 100644 index 0000000000000000000000000000000000000000..cd4e677e97fd7c70b74e687fa13e776d47b4d8fb --- /dev/null +++ b/src/pathcomp/backend/config/pathcomp.conf @@ -0,0 +1,2 @@ +PATHCOMP_IP_ADDR 0.0.0.0 +RESTAPI 1 \ No newline at end of file diff --git a/src/pathcomp/backend/pathComp.c b/src/pathcomp/backend/pathComp.c new file mode 100644 index 0000000000000000000000000000000000000000..2a719c92481557424925b09e940dcf73ba09595c --- /dev/null +++ b/src/pathcomp/backend/pathComp.c @@ -0,0 +1,191 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo MartÃnez (ricardo.martinez@cttc.es) + */ +///////////////////////////////////////////////////////////////////////////////////////// + +#include <stdio.h> +#include <stdlib.h> +#include <ctype.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <string.h> +#include <unistd.h> +#include <netdb.h> +#include <glib.h> +#include <sys/time.h> + +#ifdef GCOV +// Instrumentation to report code coverage live +// Ref: https://www.osadl.org/fileadmin/dam/interface/docbook/howtos/coverage.pdf +#include <signal.h> + +// Code coverage flush method; used to update code coverage reports while the server is running +void __gcov_flush(void); /* check in gcc sources gcc/gcov-io.h for the prototype */ + +void my_gcov_handler(int signum) +{ + printf("signal received: running __gcov_flush()\n"); + __gcov_flush(); /* dump coverage data on receiving SIGUSR1 */ +} +#endif + +#include "pathComp_log.h" +#include "pathComp_RESTapi.h" +#include "pathComp.h" + +// External Variables +FILE *logfile = NULL; + +// PATH COMP IP address API Client +struct in_addr pathComp_IpAddr; + +// REST API ENABLED +int RESTAPI_ENABLED = 0; + +GMainLoop * loop = NULL; + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp.c + * @brief Read the pathComp.conf file @ /etc/pathComp/ + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void read_pathComp_config_file(FILE *fp) +{ + DEBUG_PC ("Processing pathComp.conf"); + + char buff[128], ip[128]; + + // READ PATH COMP SERVER IP + memset (&pathComp_IpAddr, (int)0, sizeof (struct in_addr)); + fscanf(fp, "%s %s ", buff, ip); + pathComp_IpAddr.s_addr = inet_addr(ip); + DEBUG_PC("pathComp_IpAddr: %s", inet_ntoa (pathComp_IpAddr)); + memset (buff, 0, sizeof (buff)); + + // Read REST API + fscanf (fp, "%s %d ", buff, &RESTAPI_ENABLED); + if (RESTAPI_ENABLED) DEBUG_PC ("REST API: ON"); + if (RESTAPI_ENABLED == 0) DEBUG_PC ("REST API: OFF"); + + memset (buff, 0, sizeof (buff)); + DEBUG_PC ("CommandLine: %s", buff); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp.c + * @brief Main function for pathComp server + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +int main(int argc, char *argv[]) +{ + #ifdef GCOV + struct sigaction new_action, old_action; + /* setup signal hander */ + new_action.sa_handler = my_gcov_handler; + sigemptyset(&new_action.sa_mask); + new_action.sa_flags = 0; + sigaction(SIGUSR1, NULL, &old_action); + if (old_action.sa_handler != SIG_IGN) + sigaction (SIGUSR1, &new_action, NULL); + #endif + + DEBUG_PC ("********************************************************************"); + DEBUG_PC ("********************************************************************"); + DEBUG_PC (" ---------------------- Path Computation Server---------------------"); + DEBUG_PC ("********************************************************************"); + DEBUG_PC ("********************************************************************"); + + // processing input parameters + if (argc == 1) + { + DEBUG_PC ("Arguments are missing ..."); + exit (-1); + } + + // argv[1] specifies the folder and the configuration file + gchar configFile[50]; + strcpy (configFile, argv[1]); + DEBUG_PC ("Path Computation Server Config File is: %s", configFile); + + // argv[2] specifies the folder and the log file + gchar log[50]; + strcpy (log, argv[2]); + gint screen = strcmp(log, "screen_only"); + if (screen == 0) { + DEBUG_PC("All logs shown through stdout, i.e.,screen"); + logfile = NULL; + } + else { + DEBUG_PC("PATH COMP log File: %s", log); + // open the log file + logfile = fopen(log, "w"); + DEBUG_PC("log file is opened"); + } + + // Read the pathComp.conf file + FILE *pathComp_config = NULL; + pathComp_config = fopen (configFile, "r"); + if (pathComp_config == NULL) + { + DEBUG_PC ("File error\n"); + exit (-1); + } + DEBUG_PC ("pathComp_config.conf is opened"); + + // Check if flag -d for daemonize + if (argc > 3) + { + gchar options[10]; + strcpy (options, argv[3]); + gint ret = strcmp (options, "-d"); + if (ret == 0) daemon(0,0); + } + + // Process the config file + read_pathComp_config_file (pathComp_config); + + DEBUG_PC ("\n ---- PATH COMP MAIN LOOP ------"); + /** Creates a new GMainLoop structure */ + loop = g_main_loop_new (NULL, FALSE); + + // Iff RESTAPI_ENABLED is ON + if (RESTAPI_ENABLED) + { + RESTapi_init(PATH_COMP_PORT); + } + + /** execute loop */ + g_main_loop_run (loop); + + /** decrease the one reference of loop when it is finished */ + g_main_loop_unref(loop); + loop = NULL; + return 0; +} diff --git a/src/pathcomp/backend/pathComp.h b/src/pathcomp/backend/pathComp.h new file mode 100644 index 0000000000000000000000000000000000000000..76b97fd606854f8aee5ecd4536ca9f2da906f9aa --- /dev/null +++ b/src/pathcomp/backend/pathComp.h @@ -0,0 +1,38 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + +#ifndef _PATHCOMP_H +#define _PATHCOMP_H + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib-2.0/glib/gtypes.h> + +/////////////////////////////////////////////////// +// IP addressing of peer functional entities +/////////////////////////////////////////////////// +extern struct in_addr pathComp_IpAddr; + +// TCP Port for the REST API communication with the PATH COMP process +#define PATH_COMP_PORT 8081 + +// External Variables +extern GMainLoop * loop; + +#endif \ No newline at end of file diff --git a/src/pathcomp/backend/pathComp_RESTapi.c b/src/pathcomp/backend/pathComp_RESTapi.c new file mode 100644 index 0000000000000000000000000000000000000000..709d3dc004027e7eb4e847f73ae1bae25653316e --- /dev/null +++ b/src/pathcomp/backend/pathComp_RESTapi.c @@ -0,0 +1,2001 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo MartÃnez (ricardo.martinez@cttc.es) + */ +///////////////////////////////////////////////////////////////////////////////////////// +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <unistd.h> +#include <netdb.h> +#include <glib.h> +#include <sys/time.h> +#include <ctype.h> +#include <strings.h> +#include <time.h> +#include <fcntl.h> +#include <uuid/uuid.h> +#include <string.h> + +#include "pathComp_log.h" +#include "pathComp_tools.h" +#include "pathComp_cjson.h" +#include "pathComp_ksp.h" +#include "pathComp_sp.h" +#include "pathComp_RESTapi.h" + +#define ISspace(x) isspace((int)(x)) + +#define SERVER_STRING "Server: PATHCOMP/0.1.0\r\n" + +// List of Clients connected to the PATH COMP +GList *RESTapi_tcp_client_list = NULL; + +// Id for CLient HTTP (REST API) Connection +guint CLIENT_ID = 0; +guint32 paId_req = 0; + +// Global variables +struct linkList_t* linkList; +struct deviceList_t* deviceList; +struct serviceList_t* serviceList; + +gchar algId[MAX_ALG_ID_LENGTH]; +gboolean syncPath = FALSE; + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Seek a connected tcp client by its fd in the RESTapi_tcp_client_list + * + * @param data + * @param userdata + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint find_rl_client_by_fd (gconstpointer data, gconstpointer userdata) +{ + /** check values */ + g_assert(data != NULL); + g_assert(userdata != NULL); + + struct pathComp_client *client = (struct pathComp_client*)data; + gint fd = *(gint *)userdata; + + if (client->fd == fd) + return 0; + return -1; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to send a message to the corresponding channel + * + * @param source + * @param buf + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint rapi_send_message (GIOChannel *channel, char *buf) { + gsize nbytes, buffersize; + + //DEBUG_PC ("Msg prepared to be sent REST API RESPONSE "); + gint len = strlen ((const char*) buf); + //DEBUG_PC ("Targeted Length of the buffer: %d", len); + + buffersize = g_io_channel_get_buffer_size (channel); + //DEBUG_PC ("GIOChannel with Buffer Size: %d", (gint)buffersize); + + gsize newBufferSize = MAX_GIO_CHANNEL_BUFFER_SIZE; + g_io_channel_set_buffer_size (channel, newBufferSize); + + buffersize = g_io_channel_get_buffer_size (channel); + //DEBUG_PC ("GIOChannel with Buffer Size: %d", (gint)buffersize); + + /** Send message. */ + GError *error = NULL; + + char *ptr = buf; + gint nleft = strlen ((const char *)buf); + + while (nleft > 0) { + g_io_channel_write_chars (channel, (void *)ptr, nleft, &nbytes, &error); + if (error) { + DEBUG_PC ("Error sending the message to TCP Client"); + return (-1); + } + + //DEBUG_PC ("Sent %d bytes", (gint)nbytes); + nleft = nleft - nbytes; + //DEBUG_PC ("Remaining to be sent %d", nleft); + ptr += nbytes; + } + DEBUG_PC("RESPONSE MSG SENT"); + return 0; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to return when something goes wrong when processing the REST API Command + * + * @param source + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void RESTapi_unimplemented (GIOChannel *source) +{ + gint ret = 0; + guchar buftmp[1024]; + char *buf = g_malloc0 (sizeof (char) * 2048000); + sprintf((char *)buf, "HTTP/1.1 400 Bad request\r\n"); + + sprintf((char *)buftmp, SERVER_STRING); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "Content-Type: text/plain\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "<HTML><HEAD><TITLE>Method Not Implemented\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "</TITLE></HEAD>\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "<BODY><P>HTTP request method not supported.\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "</BODY></HTML>\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + ret = rapi_send_message (source, buf); + g_free (buf); + (void)ret; + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to put in the buffer the date according to RFC 1123 + * + * @param date + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void rapi_add_date_header (char *date) +{ + static const char *DAYS[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; + static const char *MONTHS[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + + time_t t = time(NULL); + struct tm *tm = NULL; + struct tm sys; + gmtime_r(&t, &sys); + tm = &sys; + + sprintf((char *)date, "DATE: %s, %02d %s %4d %02d:%02d:%02d GMT\r\n", DAYS[tm->tm_wday], tm->tm_mday, + MONTHS[tm->tm_mon], 1900 + tm->tm_year, + tm->tm_hour, tm->tm_min, tm->tm_sec); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to add DeviceId and EndpointId forming the computed path + * + * @param pathObj + * @param p + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void add_comp_path_deviceId_endpointId_json(cJSON* pathObj, struct path_t* p, struct compRouteOutput_t* oElem) { + g_assert(p); + g_assert(pathObj); + + // add array for the devideId and endpointIds + cJSON* devicesArray = cJSON_CreateArray(); + cJSON_AddItemToObject(pathObj, "devices", devicesArray); + + // Add the source endpoint + cJSON* sEndPointIdObj; + cJSON_AddItemToArray(devicesArray, sEndPointIdObj = cJSON_CreateObject()); + // Add the topology Id Object containing the topology uuid and context uuid + cJSON* stopIdObj; + cJSON_AddItemToObject(sEndPointIdObj, "topology_id", stopIdObj = cJSON_CreateObject()); + cJSON_AddItemToObject(stopIdObj, "contextId", cJSON_CreateString(oElem->service_endpoints_id[0].topology_id.contextId)); + cJSON_AddItemToObject(stopIdObj, "topology_uuid", cJSON_CreateString(oElem->service_endpoints_id[0].topology_id.topology_uuid)); + + // Add the device Id (uuid) + cJSON_AddItemToObject(sEndPointIdObj, "device_id", cJSON_CreateString(oElem->service_endpoints_id[0].device_uuid)); + // Add the endpoint Id (uuid) + cJSON_AddItemToObject(sEndPointIdObj, "endpoint_uuid", cJSON_CreateString(oElem->service_endpoints_id[0].endpoint_uuid)); + + + for (gint i = 0; i < p->numPathLinks; i++) { + struct pathLink_t* pL = &(p->pathLinks[i]); + cJSON* dElemObj; // Device Element Object of the array + cJSON_AddItemToArray(devicesArray, dElemObj = cJSON_CreateObject()); + + // Add the topologyId with the topologyuuid and contextId + cJSON* tIdObj; + cJSON_AddItemToObject(dElemObj, "topology_id", tIdObj = cJSON_CreateObject()); + cJSON_AddItemToObject(tIdObj, "contextId", cJSON_CreateString(pL->topologyId.contextId)); + cJSON_AddItemToObject(tIdObj, "topology_uuid", cJSON_CreateString(pL->topologyId.topology_uuid)); + + // Add Device Id + cJSON_AddItemToObject(dElemObj, "device_id", cJSON_CreateString(pL->aDeviceId)); + + // Add endpoint Id + cJSON_AddItemToObject(dElemObj, "endpoint_uuid", cJSON_CreateString(pL->aEndPointId)); + } + + // Add the sink endpoint + cJSON* sinkEndPointIdObj; + cJSON_AddItemToArray(devicesArray, sinkEndPointIdObj = cJSON_CreateObject()); + // Add the topology Id Object containing the topology uuid and context uuid + cJSON* sinkTopIdObj; + cJSON_AddItemToObject(sinkEndPointIdObj, "topology_id", sinkTopIdObj = cJSON_CreateObject()); + cJSON_AddItemToObject(sinkTopIdObj, "contextId", cJSON_CreateString(oElem->service_endpoints_id[1].topology_id.contextId)); + cJSON_AddItemToObject(sinkTopIdObj, "topology_uuid", cJSON_CreateString(oElem->service_endpoints_id[1].topology_id.topology_uuid)); + + // Add the device Id (uuid) + cJSON_AddItemToObject(sinkEndPointIdObj, "device_id", cJSON_CreateString(oElem->service_endpoints_id[1].device_uuid)); + // Add the endpoint Id (uuid) + cJSON_AddItemToObject(sinkEndPointIdObj, "endpoint_uuid", cJSON_CreateString(oElem->service_endpoints_id[1].endpoint_uuid)); + + return; +} + + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to add the links forming the computed path + * + * @param pathObj + * @param p + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void add_comp_path_link_json(cJSON* pathObj, struct path_t* p) { + g_assert(p); + g_assert(pathObj); + + // Add array for the links + cJSON* linkArray = cJSON_CreateArray(); + cJSON_AddItemToObject(pathObj, "link", linkArray); + + for (gint i = 0; i < p->numPathLinks; i++) { + struct pathLink_t* pL = &(p->pathLinks[i]); + cJSON* lElemObj; // Link Element Object of the array + cJSON_AddItemToArray(linkArray, lElemObj = cJSON_CreateObject()); + + // Add link Id + cJSON_AddItemToObject(lElemObj, "link_Id", cJSON_CreateString(pL->linkId)); + + // Add link topologies + cJSON* linkTopoArray = cJSON_CreateArray(); + cJSON_AddItemToObject(lElemObj, "topology", linkTopoArray); + + for (gint j = 0; j < pL->numLinkTopologies; j++) { + struct linkTopology_t* linkTopo = &(pL->linkTopologies[j]); + cJSON* lTopoElemObj; + cJSON_AddItemToArray(linkTopoArray, lTopoElemObj = cJSON_CreateObject()); + cJSON_AddItemToObject(lTopoElemObj, "topology_uuid", cJSON_CreateString(linkTopo->topologyId)); + } + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Compose the JSON Body of the succesfully network connectivity service + * + * @param body + * @param length + * @param compRouteOutputList + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void rapi_response_json_contents (char *body, gint *length, struct compRouteOutputList_t *compRouteOutputList) +{ + char *buftmp; + cJSON *root = cJSON_CreateObject(); + DEBUG_PC ("Creating the JSON body of the response"); + + // Create response-list array + cJSON *responseListArray = cJSON_CreateArray(); + cJSON_AddItemToObject(root, "response-list", responseListArray); + + // Add computed routes to the response-list + for (gint i = 0; i < compRouteOutputList->numCompRouteConnList; i++) { + struct compRouteOutput_t *oElem = &(compRouteOutputList->compRouteConnection[i]); // reference to output element from the list of computed routes + cJSON *oElemObj; + cJSON_AddItemToArray (responseListArray, oElemObj = cJSON_CreateObject()); + + // Add the service Id Object + cJSON* servIdObj; + cJSON_AddItemToObject(oElemObj, "serviceId", servIdObj = cJSON_CreateObject()); + cJSON_AddItemToObject(servIdObj, "contextId", cJSON_CreateString(oElem->serviceId.contextId)); + cJSON_AddItemToObject(servIdObj, "service_uuid", cJSON_CreateString(oElem->serviceId.service_uuid)); + + // Add the service endpoints ids array + cJSON* sEndpointIdsArray = cJSON_CreateArray(); + cJSON_AddItemToObject(oElemObj, "service_endpoints_ids", sEndpointIdsArray); + + for (gint j = 0; j < oElem->num_service_endpoints_id; j++) { + //DEBUG_PC("parsing service endpoints ids"); + //DEBUG_PC("endpoint: %s [%s]", oElem->service_endpoints_id[j].device_uuid, oElem->service_endpoints_id[j].endpoint_uuid); + //struct service_endpoints_id_t* sEndPointId = &(oElem->service_endpoints_id[j]); + cJSON* sEndPointIdObj; + cJSON_AddItemToArray(sEndpointIdsArray, sEndPointIdObj = cJSON_CreateObject()); + // Add the topology Id Object containing the topology uuid and context uuid + cJSON* topIdObj; + cJSON_AddItemToObject(sEndPointIdObj, "topology_id", topIdObj = cJSON_CreateObject()); + cJSON_AddItemToObject(topIdObj, "contextId", cJSON_CreateString(oElem->service_endpoints_id[j].topology_id.contextId)); + cJSON_AddItemToObject(topIdObj, "topology_uuid", cJSON_CreateString(oElem->service_endpoints_id[j].topology_id.topology_uuid)); + + // Add the device Id (uuid) + cJSON_AddItemToObject(sEndPointIdObj, "device_id", cJSON_CreateString(oElem->service_endpoints_id[j].device_uuid)); + // Add the endpoint Id (uuid) + cJSON_AddItemToObject(sEndPointIdObj, "endpoint_uuid", cJSON_CreateString(oElem->service_endpoints_id[j].endpoint_uuid)); + } + // Add no path issue + if (oElem->noPathIssue == NO_PATH_CONS_ISSUE) { // Error on finding the route, e.g., no feasible path + DEBUG_PC("NO PATH FOUND, AN ISSUE OCCURRED: %d", oElem->noPathIssue); + cJSON* noPathObj; + cJSON_AddItemToObject(oElemObj, "noPath", noPathObj = cJSON_CreateObject()); + char str[5]; + sprintf(str, "%d", oElem->noPathIssue); + cJSON_AddItemToObject(noPathObj, "issue", cJSON_CreateString(str)); + continue; + } + + // Create the array to parse the computed path from the oElemObj + cJSON* pathArray = cJSON_CreateArray(); + cJSON_AddItemToObject(oElemObj, "path", pathArray); + for (gint k = 0; k < oElem->numPaths; k++) { + struct path_t* p = &(oElem->paths[k]); + cJSON* pathObj; + cJSON_AddItemToArray(pathArray, pathObj = cJSON_CreateObject()); + + // Add path capacity + cJSON* pathCapObj; + cJSON_AddItemToObject(pathObj, "path-capacity", pathCapObj = cJSON_CreateObject()); + cJSON* totalSizeObj; + cJSON_AddItemToObject(pathCapObj, "total-size", totalSizeObj = cJSON_CreateObject()); + cJSON_AddItemToObject(totalSizeObj, "value", cJSON_CreateNumber(p->path_capacity.value)); + cJSON_AddItemToObject(totalSizeObj, "unit", cJSON_CreateNumber(p->path_capacity.unit)); + + // Add path latency + cJSON* pathLatObj; + char lat[16]; + sprintf(lat, "%lf", p->path_latency.fixed_latency); + cJSON_AddItemToObject(pathObj, "path-latency", pathLatObj= cJSON_CreateObject()); + cJSON_AddItemToObject(pathLatObj, "fixed-latency-characteristic", cJSON_CreateString(lat)); + + // Add path cost + cJSON* pathCostObj; + cJSON_AddItemToObject(pathObj, "path-cost", pathCostObj = cJSON_CreateObject()); + cJSON_AddItemToObject(pathCostObj, "cost-name", cJSON_CreateString(p->path_cost.cost_name)); + char value[16]; + sprintf(value, "%lf", p->path_cost.cost_value); + cJSON_AddItemToObject(pathCostObj, "cost-value", cJSON_CreateString(value)); + char algorithm[16]; + sprintf(algorithm, "%lf", p->path_cost.cost_algorithm); + cJSON_AddItemToObject(pathCostObj, "cost-algorithm", cJSON_CreateString(algorithm)); + + // Add the links + //add_comp_path_link_json(pathObj, p); + // Add deviceId, endpointId + add_comp_path_deviceId_endpointId_json(pathObj, p, oElem); + } + } + + //DEBUG_PC ("JSON Body Response DONE"); + buftmp = (char *)cJSON_Print(root); + strcat (body, (const char*) buftmp); + *length = strlen ((const char*)body); + //DEBUG_PC ("JSON Body (length: %d)", *length); + //DEBUG_PC ("%s", body); + cJSON_Delete (root); + g_free(buftmp); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to return response OK via REST API with the computed serviceId + * + * @param source + * @param httpCode + * @param compRouteOutputList + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void rapi_response_ok (GIOChannel *source, gint httpCode, struct compRouteOutputList_t *compRouteOutputList) { + + gint ret = 0; + + //DEBUG_PC ("Creating the JSON Body and sending the response of the computed Route List"); + + char buftmp[1024]; + char *buf = g_malloc0 (sizeof (char) * 2048000); + // Create the Body of the Response + char * msgBody = g_malloc0 (sizeof (char) * 2048000); + gint length = 0; + + // If path computation was requested, the resulting computation is returned in the msg body + if (compRouteOutputList != NULL) { + rapi_response_json_contents(msgBody, &length, compRouteOutputList); + } + // no path computation was requested, then a basic msg is just added + else { + cJSON* root = cJSON_CreateObject(); + char status[3]; + sprintf(status, "OK"); + cJSON_AddItemToObject(root, "Status", cJSON_CreateString(status)); + msgBody = (char*)cJSON_Print(root); + length = strlen((const char*)msgBody); + cJSON_Delete(root); + } + + sprintf((char *)buf, "HTTP/1.1 200 OK\r\n"); + + sprintf((char *)buftmp, SERVER_STRING); + strcat ((char *)buf, (const char *)buftmp); + + sprintf ((char *)buftmp, "Content-Type: application/json\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + // Add the length of the JSON enconding to the Content_Length + char buff_length[16]; + sprintf(buff_length, "%d", length); + + sprintf ((char *)buftmp, "Content-Length: "); + strcat ((char *)buftmp, (const char *)buff_length); + strcat ((char *)buftmp, "\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + // Add DATE header + rapi_add_date_header ((char *)buftmp); + strcat ((char *)buf, (const char *)buftmp); + sprintf((char *)buftmp, "\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + strcat((char*)buf, (const char*)msgBody); + + //DEBUG_PC ("%s", buf); + ret = rapi_send_message (source, buf); + g_free (buf); + memset (buftmp, '\0', sizeof ( buftmp)); + g_free (msgBody); + (void)ret; + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to return response OK via REST API + * + * @param source + * @param error + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void rapi_response (GIOChannel *source, gint error) +{ + int ret = 0; + guchar buftmp[1024]; + char * buf = g_malloc0 (sizeof (char) * 2048000); + if (error == HTTP_RETURN_CODE_BAD_REQUEST) + sprintf((char *)buf, "HTTP/1.1 400 BAD REQUEST\r\n"); + else if (error == HTTP_RETURN_CODE_UNAUTHORIZED) + sprintf((char *)buf, "HTTP/1.1 401 UNAUTHORIZED\r\n"); + else if (error == HTTP_RETURN_CODE_FORBIDDEN) + sprintf((char *)buf, "HTTP/1.1 403 FORBIDDEN\r\n"); + else if (error == HTTP_RETURN_CODE_NOT_FOUND) + sprintf((char *)buf, "HTTP/1.1 404 NOT FOUND\r\n"); + + sprintf((char *)buftmp, SERVER_STRING); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "Content-Type: text/plain\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "Content-Length: 0/plain\r\n"); + strcat ((char *)buf, (const char *)buftmp); + + // Add DATE header + rapi_add_date_header ((char *)buftmp); + strcat ((char *)buf, (const char *)buftmp); + + sprintf((char *)buftmp, "\r\n"); + strcat ((char *)buf, (const char *)buftmp); + // Print the prepared message + DEBUG_PC ("%s", buf); + + // Send the message + ret = rapi_send_message (source, buf); + g_free (buf); + (void)ret; + + return; +} + + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to parse the array of Endpoint Ids + * + * @param endPointArray + * @param s + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parse_service_endPointsIds_array(cJSON* endPointIdArray, struct service_t* s) { + + for (gint i = 0; i < cJSON_GetArraySize(endPointIdArray); i++) { + s->num_service_endpoints_id++; + struct service_endpoints_id_t* serviceEndPointId = &(s->service_endpoints_id[i]); + + cJSON* item = cJSON_GetArrayItem(endPointIdArray, i); + + // Get the topology Id Object + cJSON* topologyIdObj = cJSON_GetObjectItem(item, "topology_id"); + if (cJSON_IsObject(topologyIdObj)) { + // Get the context Id (UUID) from the topologyIdObj + cJSON* contextIdObj = cJSON_GetObjectItem(topologyIdObj, "contextId"); + if (cJSON_IsString(contextIdObj)) { + duplicate_string(serviceEndPointId->topology_id.contextId, contextIdObj->valuestring); + //DEBUG_PC("Service EndPoint [%d]-- ContextId: %s (uuid string format)", i + 1, serviceEndPointId->topology_id.contextId); + } + // Get the topologyId (UUID) from the topologyIdObj + cJSON* topologyUuidObj = cJSON_GetObjectItem(topologyIdObj, "topology_uuid"); + if (cJSON_IsString(topologyUuidObj)) { + duplicate_string(serviceEndPointId->topology_id.topology_uuid, topologyUuidObj->valuestring); + //DEBUG_PC("Service Endpoint (%d) -- TopologyId: %s (uuid string format)", i + 1, serviceEndPointId->topology_id.topology_uuid); + } + } + // Get the deviceId (UUID) + cJSON* deviceIdObj = cJSON_GetObjectItem(item, "device_id"); + if (cJSON_IsString(deviceIdObj)) { + duplicate_string(serviceEndPointId->device_uuid, deviceIdObj->valuestring); + DEBUG_PC("[%d] - DeviceId: %s", i + 1, serviceEndPointId->device_uuid); + } + // Get the endpointId (UUID) + cJSON* endPointIdObj = cJSON_GetObjectItem(item, "endpoint_uuid"); + if (cJSON_IsString(endPointIdObj)) { + duplicate_string(serviceEndPointId->endpoint_uuid, endPointIdObj->valuestring); + DEBUG_PC("[%d] EndPointId: %s", i + 1, serviceEndPointId->endpoint_uuid); + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to parse the array with the required service constraints + * + * @param constraintArray + * @param s + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parse_service_constraints(cJSON* constraintArray, struct service_t* s) { + + for (gint i = 0; i < cJSON_GetArraySize(constraintArray); i++) { + + s->num_service_constraints++; + + struct constraint_t* constraint = &(s->constraints[i]); + + cJSON* item = cJSON_GetArrayItem(constraintArray, i); + + // Get the constraint type + cJSON* typeObj = cJSON_GetObjectItem(item, "constraint_type"); + if (cJSON_IsString(typeObj)) { + duplicate_string(constraint->constraint_type, typeObj->valuestring); + } + // Get the constraint value + cJSON* valueObj = cJSON_GetObjectItem(item, "constraint_value"); + if (cJSON_IsString(valueObj)) { + duplicate_string(constraint->constraint_value, valueObj->valuestring); + } + DEBUG_PC("Service Reqs [%d] -- Type: %s | Value: %s", i+1, constraint->constraint_type, constraint->constraint_value); + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to parse the array with the different + * network services + * + * @param serviceArray + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parsing_json_serviceList_array(cJSON* serviceArray) { + + for (gint i = 0; i < cJSON_GetArraySize(serviceArray); i++) + { + serviceList->numServiceList++; + struct service_t* service = &(serviceList->services[i]); + + cJSON* item = cJSON_GetArrayItem(serviceArray, i); + + // Get the algorithm Id + cJSON* algIdItem = cJSON_GetObjectItem(item, "algId"); + if (cJSON_IsString(algIdItem)) + { + duplicate_string(service->algId, algIdItem->valuestring); + DEBUG_PC ("algId: %s", service->algId); + // assumed that all the services request the same algId + duplicate_string(algId, service->algId); + } + + // Get the syncPaths + cJSON* synchPathObj = cJSON_GetObjectItemCaseSensitive(item, "syncPaths"); + if (cJSON_IsBool(synchPathObj)) + { + // Check Synchronization of multiple Paths to attain e.g. global concurrent optimization + if (cJSON_IsTrue(synchPathObj)) + { + syncPath = TRUE; + DEBUG_PC("Path Synchronization is required"); + } + if (cJSON_IsFalse(synchPathObj)) + { + syncPath = FALSE; + DEBUG_PC("No Path Synchronization"); + } + } + + // Get service Id in terms of contextId and service uuids + cJSON* serviceIdObj = cJSON_GetObjectItem(item, "serviceId"); + if (cJSON_IsObject(serviceIdObj)) { + // Get context Id uuid + cJSON* contextIdObj = cJSON_GetObjectItem(serviceIdObj, "contextId"); + if (cJSON_IsString(contextIdObj)) { + // convert the string in contextId->valuestring in uuid binary format + duplicate_string(service->serviceId.contextId, contextIdObj->valuestring); + DEBUG_PC("ContextId: %s (uuid string format)", service->serviceId.contextId); + } + // Get service Id uuid + cJSON* serviceUuidObj = cJSON_GetObjectItem(serviceIdObj, "service_uuid"); + if (cJSON_IsString(serviceUuidObj)) { + duplicate_string(service->serviceId.service_uuid, serviceUuidObj->valuestring); + DEBUG_PC("Service UUID: %s (uuid string format)", service->serviceId.service_uuid); + } + } + + // Get de service type + cJSON* serviceTypeObj = cJSON_GetObjectItem(item, "serviceType"); + if (cJSON_IsNumber(serviceTypeObj)) + { + service->service_type = (guint)(serviceTypeObj->valuedouble); + print_service_type(service->service_type); + } + + // Get the endPoints array of the service + cJSON* endPointIdsArray = cJSON_GetObjectItem(item, "service_endpoints_ids"); + if (cJSON_IsArray(endPointIdsArray)) { + parse_service_endPointsIds_array(endPointIdsArray, service); + } + + // Get the service constraints + cJSON* constraintArray = cJSON_GetObjectItem(item, "service_constraints"); + if (cJSON_IsArray(constraintArray)) { + parse_service_constraints(constraintArray, service); + } + + // Get the maximum number of paths to be computed (kPaths) + cJSON* kPathsObj = cJSON_GetObjectItemCaseSensitive(item, "kPaths"); + if (cJSON_IsNumber(kPathsObj)){ + service->kPaths = (guint)(kPathsObj->valuedouble); + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function parsing the capacity attributes in the endpoint + * + * @param capacity + * @param c + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parse_capacity_object(cJSON* capacity, struct capacity_t* c) { + + cJSON* totalSizeObj = cJSON_GetObjectItem(capacity, "total-size"); + if (cJSON_IsObject(totalSizeObj)) { + //Get the capacity value + cJSON* valueObj = cJSON_GetObjectItem(totalSizeObj, "value"); + if (cJSON_IsNumber(valueObj)) { + memcpy(&c->value, &valueObj->valuedouble, sizeof (gdouble)); + } + // Get the Units + cJSON* unitObj = cJSON_GetObjectItem(totalSizeObj, "unit"); + if (cJSON_IsNumber(unitObj)) { + c->unit = (guint)(unitObj->valuedouble); + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function parsing the device endpoints + * + * @param endPointsArray + * @param d + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parse_json_device_endpoints_array(cJSON* endPointsArray, struct device_t* d) { + + for (gint i = 0; i < cJSON_GetArraySize(endPointsArray); i++) { + d->numEndPoints++; + struct endPoint_t* endpoint = &(d->endPoints[i]); + + cJSON* item = cJSON_GetArrayItem(endPointsArray, i); + + // Get the Endpoint Identifier: topology, context, device and endpointId + cJSON* endPointIdObj = cJSON_GetObjectItem(item, "endpoint_id"); + if (cJSON_IsObject(endPointIdObj)) { + // Get the topology Id Object + cJSON* topologyIdObj = cJSON_GetObjectItem(endPointIdObj, "topology_id"); + if (cJSON_IsObject(topologyIdObj)) { + // Get the context Id (UUID) from the topologyIdObj + cJSON* contextIdObj = cJSON_GetObjectItem(topologyIdObj, "contextId"); + if (cJSON_IsString(contextIdObj)) { + duplicate_string(endpoint->endPointId.topology_id.contextId, contextIdObj->valuestring); + //DEBUG_PC("Device EndPoint (%d)-- ContextId: %s (uuid string format)", i + 1, endpoint->endPointId.topology_id.contextId); + } + // Get the topologyId (UUID) from the topologyIdObj + cJSON* topologyUuidObj = cJSON_GetObjectItem(topologyIdObj, "topology_uuid"); + if (cJSON_IsString(topologyUuidObj)) { + duplicate_string(endpoint->endPointId.topology_id.topology_uuid, topologyUuidObj->valuestring); + //DEBUG_PC("Device Endpoint (%d) -- TopologyId: %s (uuid string format)", i + 1, endpoint->endPointId.topology_id.topology_uuid); + } + } + // Get the deviceId + cJSON* deviceIdObj = cJSON_GetObjectItem(endPointIdObj, "device_id"); + if (cJSON_IsString(deviceIdObj)) { + duplicate_string(endpoint->endPointId.device_id, deviceIdObj->valuestring); + //DEBUG_PC("Device Endpoint (%d) -- Device Id: %s (uuid)", i + 1, endpoint->endPointId.device_id); + } + // Get the endpoint_uuid + cJSON* endPointUuidObj = cJSON_GetObjectItem(endPointIdObj, "endpoint_uuid"); + if (cJSON_IsString(endPointUuidObj)) { + duplicate_string(endpoint->endPointId.endpoint_uuid, endPointUuidObj->valuestring); + //DEBUG_PC("Device Endpoint (%d) -- EndPoint Uuid: %s (uuid)", i + 1, endpoint->endPointId.endpoint_uuid); + } + } + // Get the EndPoint Type + cJSON* endPointTypeObj = cJSON_GetObjectItem(item, "endpoint_type"); + if (cJSON_IsString(endPointTypeObj)) { + duplicate_string(endpoint->endpointType, endPointTypeObj->valuestring); + //DEBUG_PC("Device Endpoint (%d) -- EndPoint Type: %s", i + 1, endpoint->endpointType); + } + // Link Port Direction + cJSON* linkPortDirectionObj = cJSON_GetObjectItem(item, "link_port_direction"); + if (cJSON_IsNumber(linkPortDirectionObj)) { + endpoint->link_port_direction = (guint)(linkPortDirectionObj->valuedouble); + print_link_port_direction(endpoint->link_port_direction); + } + // EndPoint Termination Direction + cJSON* terminationDirectionObj = cJSON_GetObjectItem(item, "termination-direction"); + if (cJSON_IsNumber(terminationDirectionObj)) { + endpoint->termination_direction = (guint)(terminationDirectionObj->valuedouble); + print_termination_direction(endpoint->termination_direction); + } + // Endpoint Termination State + cJSON* terminationStateObj = cJSON_GetObjectItem(item, "termination-state"); + if (cJSON_IsNumber(terminationStateObj)) { + endpoint->termination_state = (guint)(terminationStateObj->valuedouble); + print_termination_state(endpoint->termination_state); + } + // total potential capacity + cJSON* totalPotentialCapacityObj = cJSON_GetObjectItem(item, "total-potential-capacity"); + if (cJSON_IsObject(totalPotentialCapacityObj)) + { + parse_capacity_object(totalPotentialCapacityObj, &endpoint->potential_capacity); + //DEBUG_PC("Device Endpoint (%d) -- Potential Capacity: %f", i + 1, endpoint->potential_capacity.value); + print_capacity_unit(endpoint->potential_capacity.unit); + } + // total available capacity + cJSON* availableCapacityObj = cJSON_GetObjectItem(item, "available-capacity"); + if (cJSON_IsObject(availableCapacityObj)) + { + parse_capacity_object(availableCapacityObj, &endpoint->available_capacity); + //DEBUG_PC("Device Endpoint (%d) -- Available Capacity: %f", i + 1, endpoint->available_capacity.value); + print_capacity_unit(endpoint->available_capacity.unit); + } + // inter-domain plug-in + cJSON* interDomainPlugInObj = cJSON_GetObjectItem(item, "inter-domain-plug-in"); + if (cJSON_IsObject(interDomainPlugInObj)) { + // Get the local + cJSON* idInterDomainLocal = cJSON_GetObjectItem(interDomainPlugInObj, "plug-id-inter-domain-local-id"); + if (cJSON_IsString(idInterDomainLocal)) { + duplicate_string(endpoint->inter_domain_plug_in.inter_domain_plug_in_local_id, idInterDomainLocal->valuestring); + //DEBUG_PC("Inter-Domain Local Id: %s", endpoint->inter_domain_plug_in.inter_domain_plug_in_local_id); + } + // Get the remote + cJSON* idInterDomainRemote = cJSON_GetObjectItem(interDomainPlugInObj, "plug-id-inter-domain-remote-id"); + if (cJSON_IsString(idInterDomainRemote)) { + duplicate_string(endpoint->inter_domain_plug_in.inter_domain_plug_in_remote_id, idInterDomainRemote->valuestring); + //DEBUG_PC("Inter-Domain Remote Id: %s", endpoint->inter_domain_plug_in.inter_domain_plug_in_remote_id); + } + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to parse the set/list of devices forming the context/topology + * + * @param deviceArray + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parsing_json_deviceList_array(cJSON* deviceArray) { + DEBUG_PC(""); + DEBUG_PC("========= PARSING DEVICE LIST ============"); + for (gint i = 0; i < cJSON_GetArraySize(deviceArray); i++) { + deviceList->numDevices++; + struct device_t* d = &(deviceList->devices[i]); + cJSON* item = cJSON_GetArrayItem(deviceArray, i); + + // Get the device UUID + cJSON* deviceUuidObj = cJSON_GetObjectItem(item, "device_Id"); + if (cJSON_IsString(deviceUuidObj)) { + duplicate_string(d->deviceId, deviceUuidObj->valuestring); + DEBUG_PC("Device (%d) -- Id: %s (uuid string format)", i + 1, d->deviceId); + } + + // Get the device Type + cJSON* deviceTypeObj = cJSON_GetObjectItem(item, "device_type"); + if (cJSON_IsString(deviceTypeObj)) { + duplicate_string(d->deviceType, deviceTypeObj->valuestring); + //DEBUG_PC(" Device Type: %s ---", d->deviceType); + } + DEBUG_PC("DeviceId: %s, Device Type: %s", d->deviceId, d->deviceType); + + // get the device endPoints + cJSON* deviceEndpointsArray = cJSON_GetObjectItem(item, "device_endpoints"); + if (cJSON_IsArray(deviceEndpointsArray)) { + parse_json_device_endpoints_array(deviceEndpointsArray, d); + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to parse the JSON objects the endPoint of a link + * + * @param endPointsLinkObj + * @param l + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parse_json_link_endpoints_array(cJSON *endPointsLinkObj, struct link_t* l) { + + for (gint i = 0; i < cJSON_GetArraySize(endPointsLinkObj); i++) { + //DEBUG_PC("link: %s has %d endPointIds", l->linkId, l->numLinkEndPointIds); + l->numLinkEndPointIds++; + struct link_endpointId_t* endPointLink = &(l->linkEndPointId[i]); + + cJSON* item = cJSON_GetArrayItem(endPointsLinkObj, i); + + // Get endPoint attributes (topologyId, deviceId, endpoint_uuid) + cJSON* endPointIdObj = cJSON_GetObjectItem(item, "endpoint_id"); + if (cJSON_IsObject(endPointIdObj)) { + // Get the topology Id Object + cJSON* topologyIdObj = cJSON_GetObjectItem(endPointIdObj, "topology_id"); + if (cJSON_IsObject(topologyIdObj)) { + // Get the context Id (UUID) from the topologyIdObj + cJSON* contextIdObj = cJSON_GetObjectItem(topologyIdObj, "contextId"); + if (cJSON_IsString(contextIdObj)) { + duplicate_string(endPointLink->topology_id.contextId, contextIdObj->valuestring); + //DEBUG_PC("Link EndPoint (%d)-- ContextId: %s (uuid string format)", i + 1, endPointLink->topology_id.contextId); + } + // Get the topologyId (UUID) from the topologyIdObj + cJSON* topologyUuidObj = cJSON_GetObjectItem(topologyIdObj, "topology_uuid"); + if (cJSON_IsString(topologyUuidObj)) { + duplicate_string(endPointLink->topology_id.topology_uuid, topologyUuidObj->valuestring); + //DEBUG_PC("Link Endpoint (%d) -- TopologyId: %s (uuid string format)", i + 1, endPointLink->topology_id.topology_uuid); + } + } + // Get the deviceId + cJSON* deviceIdObj = cJSON_GetObjectItem(endPointIdObj, "device_id"); + if (cJSON_IsString(deviceIdObj)) { + duplicate_string(endPointLink->deviceId, deviceIdObj->valuestring); + DEBUG_PC(" Link Endpoint[%d] -- DeviceId: %s", i + 1, endPointLink->deviceId); + } + // Get the endpoint_uuid + cJSON* endPointUuidObj = cJSON_GetObjectItem(endPointIdObj, "endpoint_uuid"); + if (cJSON_IsString(endPointUuidObj)) { + duplicate_string(endPointLink->endPointId, endPointUuidObj->valuestring); + //DEBUG_PC("Link Endpoint (%d) -- EndPoint Uuid: %s (uuid)", i + 1, endPointLink->endPointId); + } + } + } + //DEBUG_PC("link id: %s has %d endpoints", l->linkId, l->numLinkEndPointIds); + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to parse the JSON objects describing the set of links + * + * @param linkListArray + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void parsing_json_linkList_array(cJSON* linkListArray) { + + DEBUG_PC(""); + DEBUG_PC("======= PARSING OF THE LINK LIST ARRAY =========="); + for (gint i = 0; i < cJSON_GetArraySize(linkListArray); i++) { + linkList->numLinks++; + struct link_t* l = &(linkList->links[i]); + //l->numLinkEndPointIds = 0; + + cJSON* item = cJSON_GetArrayItem(linkListArray, i); + // Get the link Id (uuid) + cJSON* linkIdObj = cJSON_GetObjectItem(item, "link_Id"); + if (cJSON_IsString(linkIdObj)) { + duplicate_string(l->linkId, linkIdObj->valuestring); + DEBUG_PC(" * Link (%d) -- Id: %s (uuid)", i + 1, l->linkId); + } + // Get the link endpoints (assumed to be p2p) + cJSON* endPointsLinkObj = cJSON_GetObjectItem(item, "link_endpoint_ids"); + if (cJSON_IsArray(endPointsLinkObj)) { + //DEBUG_PC("number linkEndPointIds: %d", l->numLinkEndPointIds); + parse_json_link_endpoints_array(endPointsLinkObj, l); + } + // get the fowarding direction + cJSON* fwdDirObj = cJSON_GetObjectItem(item, "forwarding_direction"); + if (cJSON_IsNumber(fwdDirObj)) { + l->forwarding_direction = (guint)(fwdDirObj->valuedouble); + print_link_forwarding_direction(l->forwarding_direction); + } + // total potential capacity + cJSON* totalPotentialCapacityObj = cJSON_GetObjectItem(item, "total-potential-capacity"); + if (cJSON_IsObject(totalPotentialCapacityObj)) + { + parse_capacity_object(totalPotentialCapacityObj, &l->potential_capacity); + //DEBUG_PC("Link (%d) -- Potential Capacity: %f", i + 1, l->potential_capacity.value); + print_capacity_unit(l->potential_capacity.unit); + } + // total available capacity + cJSON* availableCapacityObj = cJSON_GetObjectItem(item, "available-capacity"); + if (cJSON_IsObject(availableCapacityObj)) + { + parse_capacity_object(availableCapacityObj, &l->available_capacity); + //DEBUG_PC("Link (%d) -- Available Capacity: %f", i + 1, l->available_capacity.value); + print_capacity_unit(l->available_capacity.unit); + } + // Cost Characteristics + cJSON* costCharacObj = cJSON_GetObjectItem(item, "cost-characteristics"); + if (cJSON_IsObject(costCharacObj)) { + // Cost Name + cJSON* costNameObj = cJSON_GetObjectItem(costCharacObj, "cost-name"); + if (cJSON_IsString(costNameObj)) { + duplicate_string(l->cost_characteristics.cost_name, costNameObj->valuestring); + //DEBUG_PC("Link (%d) -- Cost Name: %s", i + 1, l->cost_characteristics.cost_name); + } + // Cost value + cJSON* costValueObj = cJSON_GetObjectItem(costCharacObj, "cost-value"); + if (cJSON_IsString(costValueObj)) { + char* endpr; + l->cost_characteristics.cost_value = (gdouble)(strtod(costValueObj->valuestring, &endpr)); + //DEBUG_PC("Link (%d) -- Cost Value: %f", i + 1, l->cost_characteristics.cost_value); + } + // Cost Algorithm + cJSON* costAlgObj = cJSON_GetObjectItem(costCharacObj, "cost-algorithm"); + if (cJSON_IsString(costAlgObj)) { + char* endpr; + l->cost_characteristics.cost_algorithm = (gdouble)(strtod(costAlgObj->valuestring, &endpr)); + //DEBUG_PC("Link (%d) -- Cost Algorithm: %f", i + 1, l->cost_characteristics.cost_algorithm); + } + } + // Latency Characteristics + cJSON* latencyCharacObj = cJSON_GetObjectItem(item, "latency-characteristics"); + if (cJSON_IsObject(latencyCharacObj)) { + cJSON* fixedLatencyCharacObj = cJSON_GetObjectItem(latencyCharacObj, "fixed-latency-characteristic"); + if (cJSON_IsString(fixedLatencyCharacObj)) { + char* endpr; + l->latency_characteristics.fixed_latency = (gdouble)(strtod(fixedLatencyCharacObj->valuestring, &endpr)); + //DEBUG_PC("Link (%d) -- Latency: %f", i + 1, l->latency_characteristics.fixed_latency); + } + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to generate the reverse (unidirecitonal) link from those being learnt + * from the received context + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + //////////////////////////////////////////////////////////////////////////////////////// +void generate_reverse_linkList() { + DEBUG_PC(""); + DEBUG_PC("CREATION OF REVERSE LINKS"); + gint numLinks = linkList->numLinks; + + for (gint i = 0; i < numLinks; i++) { + struct link_t* refLink = &(linkList->links[i]); + struct link_t* newLink = &(linkList->links[numLinks + i]); + linkList->numLinks++; + // Copy the linkId + appending "_rev" + duplicate_string(newLink->linkId, refLink->linkId); + strcat(newLink->linkId, "_rev"); + + //DEBUG_PC("refLink: %s // newLink: %s", refLink->linkId, newLink->linkId); + + // Assumption: p2p links. The newLink endpoints are the reversed ones form the reference Link (refLink) + // i.e., refLink A->B, then newLink B->A + //DEBUG_PC("ref: %s has %d endpoints", refLink->linkId, refLink->numLinkEndPointIds); +#if 1 + if (refLink->numLinkEndPointIds != 2) { + DEBUG_PC("To construct the new Link from ref: %s, 2 EndPoints are a MUST", refLink->linkId); + exit(-1); + } +#endif + DEBUG_PC(" * Link[%d] -- Id: %s", numLinks + i, newLink->linkId); + + //DEBUG_PC("Number of Endpoints in Link: %d", refLink->numLinkEndPointIds); + for (gint j = refLink->numLinkEndPointIds - 1, m = 0; j >= 0; j--, m++) { + struct link_endpointId_t* refEndPId = &(refLink->linkEndPointId[j]); + struct link_endpointId_t* newEndPId = &(newLink->linkEndPointId[m]); + // Duplicate the topologyId information, i.e., contextId and topology_uuid + duplicate_string(newEndPId->topology_id.contextId, refEndPId->topology_id.contextId); + duplicate_string(newEndPId->topology_id.topology_uuid, refEndPId->topology_id.topology_uuid); + //duplicate the deviceId and endPoint_uuid + duplicate_string(newEndPId->deviceId, refEndPId->deviceId); + duplicate_string(newEndPId->endPointId, refEndPId->endPointId); + DEBUG_PC("refLink Endpoint[%d]: %s(%s)", j, refEndPId->deviceId, refEndPId->endPointId); + //DEBUG_PC("newLink Endpoint[%d]: %s(%s)", m, newEndPId->deviceId, newEndPId->endPointId); + newLink->numLinkEndPointIds++; + } + + // duplicate forwarding direction + newLink->forwarding_direction = refLink->forwarding_direction; + + // duplicate capacity attributes + memcpy(&newLink->potential_capacity.value, &refLink->potential_capacity.value, sizeof(gdouble)); + newLink->potential_capacity.unit = refLink->potential_capacity.unit; + + memcpy(&newLink->available_capacity.value, &refLink->available_capacity.value, sizeof(gdouble)); + newLink->available_capacity.unit = refLink->available_capacity.unit; + + // duplicate cost characteristics + memcpy(&newLink->cost_characteristics.cost_value, &refLink->cost_characteristics.cost_value, sizeof(gdouble)); + memcpy(&newLink->cost_characteristics.cost_algorithm, &refLink->cost_characteristics.cost_algorithm, sizeof(gdouble)); + duplicate_string(newLink->cost_characteristics.cost_name, refLink->cost_characteristics.cost_name); + + // duplicate latency characteristics + memcpy(&newLink->latency_characteristics.fixed_latency, &refLink->latency_characteristics.fixed_latency, sizeof(gdouble)); + } + DEBUG_PC("Terminating Reverse Links [total: %d]", linkList->numLinks); + return; +} + + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to parse the JSON object/s for the PATH COMP request (i.e. service + * requests, device and links) + * + * @param root + * @param source + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void parsing_json_obj_pathComp_request(cJSON * root, GIOChannel * source) +{ + //DEBUG_PC("**"); + if (deviceList == NULL){ + DEBUG_PC ("Device List does not exist ... STOP"); + exit(-1); + } + + if (linkList == NULL) { + DEBUG_PC("Link List does not exist ... STOP") + } + + if (serviceList == NULL) + { + DEBUG_PC ("Service List does not exist ... STOP"); + exit(-1); + } + + // Set of services to seek their path and resource selection + cJSON* serviceListArray = cJSON_GetObjectItem(root, "serviceList"); + if (cJSON_IsArray(serviceListArray)) { + parsing_json_serviceList_array(serviceListArray); + } + + // Get the deviceList + cJSON* deviceListArray = cJSON_GetObjectItem(root, "deviceList"); + if (cJSON_IsArray(deviceListArray)) { + parsing_json_deviceList_array(deviceListArray); + } + + // Get the linkList + cJSON* linkListArray = cJSON_GetObjectItem(root, "linkList"); + if (cJSON_IsArray(linkListArray)) { + parsing_json_linkList_array(linkListArray); + + // In the context information, if solely the list of links are passed for a single direction, + // the reverse direction MUST be created sythetically + generate_reverse_linkList(); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used parse the JSON object/s + * + * @param data + * @param source + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint parsing_json_obj (guchar *data, GIOChannel *source) { + cJSON * root = cJSON_Parse((const char *)data); + char * print = cJSON_Print(root); + + DEBUG_PC("STARTING PARSING JSON CONTENTS"); + parsing_json_obj_pathComp_request (root, source); + // Release the root JSON object variable + cJSON_free (root); + g_free(print); + return 0; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Create new tcp client connected to PATH COMP + * + * @param channel_client, GIOChannel + * @param fd + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct pathComp_client * RESTapi_client_create (GIOChannel * channel_client, gint fd) { + /** check values */ + g_assert(channel_client != NULL); + + struct pathComp_client* client = g_malloc0 (sizeof (struct pathComp_client)); + if (client == NULL ) + { + DEBUG_PC ("Malloc for the client failed"); + exit(-1); + } + + /** Make client input/output buffer. */ + client->channel = channel_client; + client->obuf = stream_new(MAXLENGTH); + client->ibuf = stream_new(MAXLENGTH); + client->fd = fd; + + // Clients connected to the PATH COMP SERVER + CLIENT_ID++; + client->type = CLIENT_ID; + + //DEBUG_PC ("Client Id: %u is created (%p)", client->type, client); + //DEBUG_PC ("Client ibuf: %p || obuf: %p", client->ibuf, client->obuf); + + // Add the tcp client to the list + RESTapi_tcp_client_list = g_list_append (RESTapi_tcp_client_list, client); + //DEBUG_PC ("Num of TCP Clients: %d", g_list_length (RESTapi_tcp_client_list)); + return client; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Close the tcp client, removing from the rapi_tcp_client_list + * + * @param client + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void RESTapi_client_close (struct pathComp_client* client) +{ + //DEBUG_PC("Closing the client (Id: %d) %p", client->type, client); + //DEBUG_PC("Client ibuf: %p || obuf: %p", client->ibuf, client->obuf); + + if (client->ibuf != NULL) + { + //DEBUG_PC("Client ibuf: %p", client->ibuf); + stream_free(client->ibuf); + client->ibuf = NULL; + } + if (client->obuf != NULL) + { + //DEBUG_PC("Client obuf: %p", client->obuf); + stream_free(client->obuf); + client->obuf = NULL; + } + // Remove from the list + RESTapi_tcp_client_list = g_list_remove (RESTapi_tcp_client_list, client); + //DEBUG_PC ("TCP Client List: %d", g_list_length(RESTapi_tcp_client_list)); + + g_free (client); + client = NULL; + DEBUG_PC ("client has been removed ..."); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Close operations over the passed tcp channel + * + * @param source + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void RESTapi_close_operations (GIOChannel * source) +{ + gint fd = g_io_channel_unix_get_fd (source); + + //DEBUG_PC ("Stop all the operations over the fd: %d", fd); + g_io_channel_flush(source, NULL); + GError *error = NULL; + g_io_channel_shutdown (source, TRUE, &error); + if(error) + { + DEBUG_PC ("An error occurred ..."); + } + g_io_channel_unref (source); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Remove the client and close operations over the TCP connection + * + * @param client + * @param source + * @param fd + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void RESTapi_stop (struct pathComp_client* client, GIOChannel * source, gint fd) +{ + + DEBUG_PC("Client Socket: %d is Stopped", fd); + // remove client + RESTapi_client_close(client); + // Stop operations over that channel + RESTapi_close_operations(source); + close (fd); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used read the different lines ending up in \r\n + * + * @param s + * @param buf + * @param size + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint RESTapi_get_line (GIOChannel *channel, gchar *buf, gint size) +{ + gint i = 0; + //DEBUG_PC ("\n"); + //DEBUG_PC ("----- Read REST API Line(\r\n) ------"); + gint n = 0; + guchar c = '\0'; // END OF FILE + gboolean cr = FALSE; + while (i < size - 1) + { + n = read_channel (channel, &c, 1); + if (n == -1) + { + //DEBUG_PC ("Close the channel and eliminate the client"); + return -1; + } + if (n > 0) + { + //DEBUG_PC ("%c", c); + buf[i] = c; + i++; + if (c == '\r') + { + cr = TRUE; + } + if ((c == '\n') && (cr == TRUE)) + { + break; + } + } + else + { + c = '\n'; + buf[i] = c; + i++; + break; + } + } + buf[i] = '\0'; + //DEBUG_PC ("Line (size: %d) buf: %s", i, buf); + return i; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used read the HTTP method + * + * @param buf + * @param j + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +guint RESTapi_get_method (gchar *buf, gint *j) +{ + guint RestApiMethod = 0; + gchar method[255]; + gint i = 0; + while (!ISspace(buf[*j]) && (i < sizeof(method) - 1)) + { + method[i] = buf[*j]; + i++; + *j = *j + 1; + } + method[i] = '\0'; + DEBUG_PC ("REST API METHOD: %s", method); + + // Check that the methods are GET, POST or PUT + if (strcasecmp((const char *)method, "GET") && strcasecmp((const char *)method, "POST") && + strcasecmp ((const char *)method, "HTTP/1.1") && strcasecmp ((const char *)method, "PUT")) + { + DEBUG_PC ("The method: %s is not currently supported ...", method); + return RestApiMethod; + } + // Method selector + if (strncmp ((const char*)method, "GET", 3) == 0) + { + RestApiMethod = REST_API_METHOD_GET; + } + else if (strncmp ((const char*)method, "POST", 4) == 0) + { + RestApiMethod = REST_API_METHOD_POST; + } + else if (strncmp ((const char *)method, "HTTP/1.1", 8) == 0) + { + RestApiMethod = REST_API_METHOD_HTTP; + } + else if (strncmp ((const char *)method, "PUT", 3) == 0) + { + RestApiMethod = REST_API_METHOD_PUT; + } + + return RestApiMethod; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used read the url + * + * @param buf + * @param j + * @param url + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint get_url (gchar *buf, gint *j, gchar *url) +{ + // Skip space char + while (ISspace(buf[*j]) && (*j < strlen(buf))) { + *j = *j + 1; + } + + //DEBUG_PC ("buf[%d]: %c", *j, buf[*j]); + int result = isspace (buf[*j]); + *buf = *buf + *j; + gint numChar = 0; + gint initChar = *j; + result = 0; + while (result == 0) { + *j = *j + 1; + result = isspace (buf[*j]); + numChar++; + } + //DEBUG_PC ("numChar: %d", numChar); + memcpy (url, buf + initChar, numChar); + url[numChar] = '\0'; + //DEBUG_PC ("url: %s", url); + return numChar; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used read the version + * + * @param buf + * @param j + * @param version + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint get_version (gchar *buf, gint *j, gchar *version) { + // Skip space char + while (ISspace(buf[*j]) && (*j < strlen(buf))) + { + *j = *j + 1; + } + //DEBUG_PC ("buf[%d]: %c", *j, buf[*j]); + int result = isspace (buf[*j]); + *buf = *buf + *j; + gint numChar = 0; + gint initChar = *j; + result = 0; + while (result == 0) { + *j = *j + 1; + result = isspace (buf[*j]); + numChar++; + } + //DEBUG_PC ("numChar: %d", numChar); + memcpy (version, buf + initChar, numChar); + version[numChar] = '\0'; + //DEBUG_PC ("version: %s", version); + return numChar; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to trigger the route computation for the network connectivity service + * List and retrieve the result + * + * @param compRouteList + * @param raId + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint triggering_routeComp (struct compRouteOutputList_t *compRouteList, gchar *algId) { + g_assert (compRouteList); + gint httpCode = HTTP_RETURN_CODE_OK; + DEBUG_PC("Requested Algorithm: %s", algId); + //////////////////// Algorithm Selector (RAId)////////////////////////////////////// + // KSP algorithm + if (strncmp ((const char*)algId, "KSP", 3) == 0) + { + DEBUG_PC ("Alg Id: KSP"); + httpCode = pathComp_ksp_alg(compRouteList); + } + // simple SP algorithm + else if (strncmp((const char*)algId, "SP", 2) == 0) { + DEBUG_PC("Alg Id: SP"); + httpCode = pathComp_sp_alg(compRouteList); + } +#if 0 + // Infrastructure Abstraction (InA) + else if (strncmp ((const char*)raId, "InA", 3) == 0) + { + //DEBUG_PC ("RA: InA"); + httpCode = ra_InA_alg (compRouteList); + } + // Global Concurrent Optimization (GCO): Resoration / Re-Allocation / Re-Optimization + else if (strncmp ((const char*)raId, "GCO", 3) == 0) + { + //DEBUG_PC ("RA: GCO"); + httpCode = ra_GCO_alg (compRouteList); + } +#endif + return httpCode; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to process the REST API commands + * + * @param source + * @param cond + * @param data + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gboolean RESTapi_activity(GIOChannel *source, GIOCondition cond, gpointer data) +{ + /** some checks */ + g_assert(source != NULL); + g_assert(data != NULL); + + gchar buf[1024]; + gchar version[255]; + gchar http_result[255]; + gint body_length = 0; + + struct pathComp_client *client = (struct pathComp_client*)(data); + DEBUG_PC (" ************************************************************************** "); + DEBUG_PC (" REST API ACTIVITY Triggered "); + DEBUG_PC (" ************************************************************************** "); + + gint fd = g_io_channel_unix_get_fd (source); + DEBUG_PC ("fd: %d, cond: %d", fd, cond); + + if (cond != G_IO_IN) + { + DEBUG_PC ("Something happening with the channel and fd ... (cond: %d)", cond); + RESTapi_stop(client, source, fd); + return FALSE; + } + /** Clear input buffer. */ + stream_reset (client->ibuf); + + // get line + gint nbytes = RESTapi_get_line (source, buf, sizeof (buf)); + if (nbytes == -1) + { + DEBUG_PC ("nbytes -1 ... CLOSE CLIENT FD and eliminate CLIENT"); + RESTapi_stop(client, source, fd); + return FALSE; + } + + if ((buf[0] == '\n') && (nbytes == 1)) + { + //DEBUG_PC (" -- buf[0] = newline --"); + RESTapi_stop(client, source, fd); + return FALSE; + } + + gint i = 0, j = 0; + // Get the REST Method + guint RestApiMethod = RESTapi_get_method (buf, &j); + if (RestApiMethod == 0) { + DEBUG_PC ("The method is NOT supported ..."); + RESTapi_unimplemented (source); + RESTapi_stop(client, source, fd); + return FALSE; + } + + // get the REST url + gchar url[255]; + i = get_url (buf, &j, url); + url[i] = '\0'; + + // GET - used for checking status of pathComp ... used url /pathComp/api/v1/health + if (RestApiMethod == REST_API_METHOD_GET) { + if (strncmp((const char*)url, "/health", 7) != 0) { + DEBUG_PC("unknown url [%s] for GET method -- Heatlh function", url); + RESTapi_stop(client, source, fd); + exit(-1); + } + else { + DEBUG_PC("Sending API Response OK to health requests"); + rapi_response_ok(source, HTTP_RETURN_CODE_OK, NULL); + return TRUE; + } + } + + // for method POST, PUT check that the url is "/pathComp" + if (RestApiMethod == REST_API_METHOD_POST) { + if (strncmp((const char*)url, "/pathComp/api/v1/compRoute", 26) != 0) + { + DEBUG_PC("Unknown url: %s", url); + RESTapi_stop(client, source, fd); + exit(-1); + } + } + + // get the version + i = get_version (buf, &j, version); + version[i] = '\0'; + + // Assume HTTP/1.1, then there is Host Header + memset(buf, '\0', sizeof(buf)); + nbytes = RESTapi_get_line(source, buf, sizeof (buf)); + if (nbytes == -1) + { + DEBUG_PC ("nbytes -1 ... then close the fd and eliminate associated client"); + RESTapi_stop(client, source, fd); + return FALSE; + } + + //DEBUG_PC ("Header: %s", buf); + + // Headers --- The Header Fields ends up with a void line (i.e., \r\n) + while ((nbytes > 0) && (strcmp ("\r\n", (const char *)buf) != 0)) + { + /* read & discard headers */ + memset(buf, '\0', sizeof(buf)); + nbytes = RESTapi_get_line (source, buf, sizeof (buf)); + if (nbytes == -1) + { + DEBUG_PC ("nbytes -1 ... then close the fd and eliminate associated client"); + RESTapi_stop(client, source, fd); + return FALSE; + } + //DEBUG_PC ("Header: %s", buf); + if (strncmp ((const char *)buf, "Content-Length:", 15) == 0) + { + //DEBUG_PC ("Header Content-Length Found"); + gchar str[20]; + + gint i = 15, k = 0; // "Content-Length:" We skip the first 16 characters to directly retrieve the length in bytes of the Body of Request + gchar contentLength[255]; + memset (contentLength, '\0', sizeof (contentLength)); + while (buf[i] != '\r') + { + //DEBUG_PC ("%c", buf[i]); + str[k] = buf[i]; + k++, i++; + } + str[k] = '\0'; + j = 0, i = 0; + while (ISspace(str[j]) && (j < strlen(str))) + { + j++; + } + while (j < strlen(str)) + { + contentLength[i] = str[j]; + i++; j++; + } + contentLength[i] = '\0'; + body_length = atoi (contentLength); + //DEBUG_PC ("Body length: %d (%s) in Bytes", body_length, contentLength); + } + } + //DEBUG_PC("Read Entire HTTP Header"); + if (body_length == 0) + { + DEBUG_PC ("--- NO REST API Body length (length = %d) ---", body_length); + return TRUE; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Processing Body of the Request + ///////////////////////////////////////////////////////////////////////////////////////////////////////////// + //DEBUG_PC ("REST API Request - Body -"); + nbytes = read_channel (source, (guchar *)(client->ibuf->data + client->ibuf->putp), body_length); + if ((nbytes < 0) && (body_length > 0)) + { + DEBUG_PC ("nbytes: %d; body_length: %d", nbytes, body_length); + exit (-1); + } + + client->ibuf->putp += nbytes; + client->ibuf->endp += nbytes; + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Parsing the contents of the Request + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // build the device list + deviceList = create_device_list(); + // build the link list + linkList = create_link_list(); + // Create the network connectivity service list + serviceList = create_service_list(); + + // Process the json contents and store relevant information at Device, Link, + // and network connectivity service + gint ret = parsing_json_obj (client->ibuf->data, source); + if (ret == -1) { + DEBUG_PC ("Something wrong with the JSON Objects ... "); + RESTapi_stop(client, source, fd); + return FALSE; + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Trigger the path computation + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //DEBUG_PC ("Triggering the computation"); + struct compRouteOutputList_t *compRouteOutputList = create_route_list (); + gint httpCode = triggering_routeComp (compRouteOutputList, algId); + + // Send the response to the REST API Client + if (httpCode != HTTP_RETURN_CODE_OK) + { + DEBUG_PC ("HTTP CODE: %d -- NO OK", httpCode); + rapi_response (source, httpCode); + } + else + { + DEBUG_PC ("HTTP CODE: %d -- OK", httpCode); + rapi_response_ok (source, httpCode, compRouteOutputList); + } + + // Release the variables + g_free (compRouteOutputList); + g_free(linkList); + g_free(deviceList); + g_free(serviceList); + return TRUE; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Function used to accept a new connection and add the client to list of clients + * + * @param source, GIOChannel + * @param cond, GIOCondition + * @param data, gpointer + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gboolean RESTapi_tcp_new_connection(GIOChannel *source, GIOCondition cond, gpointer data) +{ + DEBUG_PC (" ****** New TCP Connection (REST API) ******"); + /** get size of client_addre structure */ + struct sockaddr_in client_addr; + socklen_t client = sizeof(client_addr); + + if ((cond == G_IO_HUP) || (cond == G_IO_ERR) || (G_IO_NVAL)) + { + //DEBUG_PC ("Something happening with the channel and fd ... cond: %d", cond); + // Find the associated client (by the fd) and remove from PATH COMP client list. + // Stop all the operations over that PATH COMP client bound channel + struct pathComp_client *pathComp_client = NULL; + gint fd = g_io_channel_unix_get_fd (source); + GList *found = g_list_find_custom (RESTapi_tcp_client_list, &fd, find_rl_client_by_fd); + if (found != NULL) + { + pathComp_client = (struct pathComp_client*)(found->data); + // remove client + RESTapi_client_close(pathComp_client); + // Stop operations over that channel + RESTapi_close_operations(source); + close (fd); + return FALSE; + } + } + if (cond == G_IO_IN) + { + gint new = accept(g_io_channel_unix_get_fd(source), (struct sockaddr*)&client_addr, &client); + if (new < 0) + { + //DEBUG_PC ("Unable to accept new connection"); + return FALSE; + } + + /** new channel */ + GIOChannel * new_channel = g_io_channel_unix_new (new); + //DEBUG_PC ("TCP Connection (REST API) is UP; (socket: %d)", new); + + /** create pathComp client */ + struct pathComp_client *new_client = RESTapi_client_create (new_channel, new); + + /** + * force binary encoding with NULL + */ + GError *error = NULL; + if ( g_io_channel_set_encoding (new_channel, NULL, &error) != G_IO_STATUS_NORMAL) + { + DEBUG_PC ("Error: %s", error->message); + exit (-1); + } + g_io_channel_set_close_on_unref (new_channel, TRUE); + // On unbuffered channels, it is safe to mix read + // & write calls from the new and old APIs. + g_io_channel_set_buffered (new_channel, FALSE); + if (g_io_channel_set_flags (new_channel, G_IO_FLAG_NONBLOCK, &error) != G_IO_STATUS_NORMAL ) + { + DEBUG_PC ("Error: %s", error->message); + exit (-1); + } + //Adds the new channel into the main event loop. + g_io_add_watch (new_channel, G_IO_IN, RESTapi_activity, new_client); + } + return TRUE; +} + +/////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief enabling the reuse of the addr for the Server TCP + * + * @param sock + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void RESTapi_tcp_enable_reuseaddr (gint sock) +{ + gint tmp = 1; + if (sock < 0) + { + DEBUG_PC (" socket: %d !!!",sock); + exit (-1); + } + if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, (gchar *)&tmp, sizeof (tmp)) == -1) + { + DEBUG_PC ("bad setsockopt ..."); + exit (-1); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_RESTapi.c + * @brief Main function for the creating / maintaining TCP session for the REST API + * + * @ port + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void RESTapi_init(gint port) +{ + DEBUG_PC ("REST API PORT (listening): %d", port); + + // File Descriptor - FD - for the socket + gint s = socket (AF_INET, SOCK_STREAM, 0); + if (s == -1) + { + DEBUG_PC ("Socket creation: FAILED!!"); + exit (-1); + } + DEBUG_PC (" CREATED TCP Connection [@fd: %d]", s); + + // Re-bind + RESTapi_tcp_enable_reuseaddr(s); + struct sockaddr_in addr; + memset (&addr, 0, sizeof (addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons ((u_short)port); + addr.sin_addr.s_addr = INADDR_ANY; + + // Associate IP address and Port to the created socket + if (bind (s, (struct sockaddr *)&addr, sizeof(addr)) == -1) + { + close (s); + DEBUG_PC ("Socket bind: FAILED!!"); + exit (-1); + } + DEBUG_PC ("Bind to Fd: %d DONE!!", s); + + /** Set up queue for incoming connections */ + if (listen (s, 10) == -1) + { + close (s); + DEBUG_PC ("Socket listen: FAILED!!"); + exit (-1); + } + + //DEBUG_PC ("Listen (up to 10) to Fd: %d Done", s); + + /** Create NEW channel to handle the socket operations*/ + GIOChannel *channel = g_io_channel_unix_new (s); + gsize buffersize = g_io_channel_get_buffer_size (channel); + //DEBUG_PC ("GIOChannel with Buffer Size: %d", (gint)buffersize); + + gsize newBufferSize = MAX_GIO_CHANNEL_BUFFER_SIZE; + g_io_channel_set_buffer_size (channel, newBufferSize); + buffersize = g_io_channel_get_buffer_size (channel); + + //DEBUG_PC ("GIOChannel with Buffer Size: %d", (gint)buffersize); + //DEBUG_PC ("Channel associated to fd: %d is created", s); + + // Adds the new channel into the main event loop. + g_io_add_watch (channel, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, RESTapi_tcp_new_connection, NULL); + return; +} \ No newline at end of file diff --git a/src/pathcomp/backend/pathComp_RESTapi.h b/src/pathcomp/backend/pathComp_RESTapi.h new file mode 100644 index 0000000000000000000000000000000000000000..80e63da7c13c353592931be9d72f53e30a8aca5b --- /dev/null +++ b/src/pathcomp/backend/pathComp_RESTapi.h @@ -0,0 +1,68 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + +#ifndef _PATH_COMP_REST_API_H +#define _PATH_COMP_REST_API_H + + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib-2.0/glib/gtypes.h> + + +#define MAX_GIO_CHANNEL_BUFFER_SIZE 131072 + +// HTTP RETURN CODES +#define HTTP_RETURN_CODE_OK 200 +#define HTTP_RETURN_CODE_CREATED 201 +#define HTTP_RETURN_CODE_BAD_REQUEST 400 +#define HTTP_RETURN_CODE_UNAUTHORIZED 401 +#define HTTP_RETURN_CODE_FORBIDDEN 403 +#define HTTP_RETURN_CODE_NOT_FOUND 404 +#define HTTP_RETURN_CODE_NOT_ACCEPTABLE 406 + +// REST API METHODS (SIMPLY INT ENCODING) +#define REST_API_METHOD_GET 1 +#define REST_API_METHOD_POST 2 +#define REST_API_METHOD_HTTP 3 +#define REST_API_METHOD_PUT 4 + +#define MAXLENGTH 131072 + +//////////////////////////////////////////////////// +// Client Struct for connecting to PATH COMP SERVER +//////////////////////////////////////////////////// +// List of tcp clients connected to PATH COMP + +#define PATH_COMP_CLIENT_TYPE 1000 +struct pathComp_client +{ + /** IO Channel from client. */ + GIOChannel *channel; + + /** Input/output buffer to the client. */ + struct stream *obuf; + struct stream *ibuf; + + gint fd; // file descriptor + guint type; +}; + +void RESTapi_init (gint); +#endif diff --git a/src/pathcomp/backend/pathComp_cjson.c b/src/pathcomp/backend/pathComp_cjson.c new file mode 100644 index 0000000000000000000000000000000000000000..093d80a6d5a342c7719b231cf1aeb8dcc2e90956 --- /dev/null +++ b/src/pathcomp/backend/pathComp_cjson.c @@ -0,0 +1,2732 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo MartÃnez (ricardo.martinez@cttc.es) + */ + //////////////////////////////////////////////////////////////////////////////////////// + +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <string.h> +#include <unistd.h> +#include <netdb.h> +#include <glib.h> +#include <sys/time.h> +#include <ctype.h> +#include <strings.h> +#include <time.h> +#include <math.h> +#include <float.h> +#include <limits.h> +#include <fcntl.h> + + +#include "pathComp_log.h" +#include "pathComp_cjson.h" + +/* define our own boolean type */ +#define true ((cJSON_bool)1) +#define false ((cJSON_bool)0) + +typedef struct +{ + const unsigned char *json; + size_t position; +} error; + +static error global_error = { NULL, 0 }; + +CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void) +{ + return (const char*) (global_error.json + global_error.position); +} + +/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */ +static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2) +{ + if ((string1 == NULL) || (string2 == NULL)) + { + return 1; + } + + if (string1 == string2) + { + return 0; + } + + for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++) + { + if (*string1 == '\0') + { + return 0; + } + } + + return tolower(*string1) - tolower(*string2); +} + +typedef struct internal_hooks +{ + void *(*allocate)(size_t size); + void (*deallocate)(void *pointer); + void *(*reallocate)(void *pointer, size_t size); +} internal_hooks; + + +#define internal_malloc malloc +#define internal_free free +#define internal_realloc realloc + + +static internal_hooks global_hooks = { internal_malloc, internal_free, internal_realloc }; + +static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks) +{ + size_t length = 0; + unsigned char *copy = NULL; + + if (string == NULL) + { + return NULL; + } + + length = strlen((const char*)string) + sizeof(""); + copy = (unsigned char*)hooks->allocate(length); + if (copy == NULL) + { + return NULL; + } + memcpy(copy, string, length); + + return copy; +} + +CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks) +{ + if (hooks == NULL) + { + /* Reset hooks */ + global_hooks.allocate = malloc; + global_hooks.deallocate = free; + global_hooks.reallocate = realloc; + return; + } + + global_hooks.allocate = malloc; + if (hooks->malloc_fn != NULL) + { + global_hooks.allocate = hooks->malloc_fn; + } + + global_hooks.deallocate = free; + if (hooks->free_fn != NULL) + { + global_hooks.deallocate = hooks->free_fn; + } + + /* use realloc only if both free and malloc are used */ + global_hooks.reallocate = NULL; + if ((global_hooks.allocate == malloc) && (global_hooks.deallocate == free)) + { + global_hooks.reallocate = realloc; + } +} + +/* Internal constructor. */ +static cJSON *cJSON_New_Item(const internal_hooks * const hooks) +{ + cJSON* node = (cJSON*)hooks->allocate(sizeof(cJSON)); + if (node) + { + memset(node, '\0', sizeof(cJSON)); + } + + return node; +} + +/* Delete a cJSON structure. */ +CJSON_PUBLIC(void) cJSON_Delete(cJSON *item) +{ + cJSON *next = NULL; + while (item != NULL) + { + next = item->next; + if (!(item->type & cJSON_IsReference) && (item->child != NULL)) + { + cJSON_Delete(item->child); + } + if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL)) + { + global_hooks.deallocate(item->valuestring); + } + if (!(item->type & cJSON_StringIsConst) && (item->string != NULL)) + { + global_hooks.deallocate(item->string); + } + global_hooks.deallocate(item); + item = next; + } +} + +/* get the decimal point character of the current locale */ +static unsigned char get_decimal_point(void) +{ + return '.'; + +} + +typedef struct +{ + const unsigned char *content; + size_t length; + size_t offset; + size_t depth; /* How deeply nested (in arrays/objects) is the input at the current offset. */ + internal_hooks hooks; +} parse_buffer; + +/* check if the given size is left to read in a given parse buffer (starting with 1) */ +#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length)) +/* check if the buffer can be accessed at the given index (starting with 0) */ +#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length)) +#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index)) +/* get a pointer to the buffer at the position */ +#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset) + +/* Parse the input text to generate a number, and populate the result into item. */ +static cJSON_bool parse_number(cJSON * const item, parse_buffer * const input_buffer) +{ + double number = 0; + unsigned char *after_end = NULL; + unsigned char number_c_string[64]; + unsigned char decimal_point = get_decimal_point(); + size_t i = 0; + + if ((input_buffer == NULL) || (input_buffer->content == NULL)) + { + return false; + } + + /* copy the number into a temporary buffer and replace '.' with the decimal point + * of the current locale (for strtod) + * This also takes care of '\0' not necessarily being available for marking the end of the input */ + for (i = 0; (i < (sizeof(number_c_string) - 1)) && can_access_at_index(input_buffer, i); i++) + { + switch (buffer_at_offset(input_buffer)[i]) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '+': + case '-': + case 'e': + case 'E': + number_c_string[i] = buffer_at_offset(input_buffer)[i]; + break; + + case '.': + number_c_string[i] = decimal_point; + break; + + default: + goto loop_end; + } + } +loop_end: + number_c_string[i] = '\0'; + + number = strtod((const char*)number_c_string, (char**)&after_end); + if (number_c_string == after_end) + { + return false; /* parse_error */ + } + + item->valuedouble = number; + + /* use saturation in case of overflow */ + if (number >= INT_MAX) + { + item->valueint = INT_MAX; + } + else if (number <= INT_MIN) + { + item->valueint = INT_MIN; + } + else + { + item->valueint = (int)number; + } + + item->type = cJSON_Number; + + input_buffer->offset += (size_t)(after_end - number_c_string); + return true; +} + +/* don't ask me, but the original cJSON_SetNumberValue returns an integer or double */ +CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number) +{ + if (number >= INT_MAX) + { + object->valueint = INT_MAX; + } + else if (number <= INT_MIN) + { + object->valueint = INT_MIN; + } + else + { + object->valueint = (int)number; + } + + return object->valuedouble = number; +} + +typedef struct +{ + unsigned char *buffer; + size_t length; + size_t offset; + size_t depth; /* current nesting depth (for formatted printing) */ + cJSON_bool noalloc; + cJSON_bool format; /* is this print a formatted print */ + internal_hooks hooks; +} printbuffer; + +/* realloc printbuffer if necessary to have at least "needed" bytes more */ +static unsigned char* ensure(printbuffer * const p, size_t needed) +{ + unsigned char *newbuffer = NULL; + size_t newsize = 0; + + if ((p == NULL) || (p->buffer == NULL)) + { + return NULL; + } + + if ((p->length > 0) && (p->offset >= p->length)) + { + /* make sure that offset is valid */ + return NULL; + } + + if (needed > INT_MAX) + { + /* sizes bigger than INT_MAX are currently not supported */ + return NULL; + } + + needed += p->offset + 1; + if (needed <= p->length) + { + return p->buffer + p->offset; + } + + if (p->noalloc) { + return NULL; + } + + /* calculate new buffer size */ + if (needed > (INT_MAX / 2)) + { + /* overflow of int, use INT_MAX if possible */ + if (needed <= INT_MAX) + { + newsize = INT_MAX; + } + else + { + return NULL; + } + } + else + { + newsize = needed * 2; + } + + if (p->hooks.reallocate != NULL) + { + /* reallocate with realloc if available */ + newbuffer = (unsigned char*)p->hooks.reallocate(p->buffer, newsize); + if (newbuffer == NULL) + { + p->hooks.deallocate(p->buffer); + p->length = 0; + p->buffer = NULL; + + return NULL; + } + } + else + { + /* otherwise reallocate manually */ + newbuffer = (unsigned char*)p->hooks.allocate(newsize); + if (!newbuffer) + { + p->hooks.deallocate(p->buffer); + p->length = 0; + p->buffer = NULL; + + return NULL; + } + if (newbuffer) + { + memcpy(newbuffer, p->buffer, p->offset + 1); + } + p->hooks.deallocate(p->buffer); + } + p->length = newsize; + p->buffer = newbuffer; + + return newbuffer + p->offset; +} + +/* calculate the new length of the string in a printbuffer and update the offset */ +static void update_offset(printbuffer * const buffer) +{ + const unsigned char *buffer_pointer = NULL; + if ((buffer == NULL) || (buffer->buffer == NULL)) + { + return; + } + buffer_pointer = buffer->buffer + buffer->offset; + + buffer->offset += strlen((const char*)buffer_pointer); +} + +/* Render the number nicely from the given item into a string. */ +static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer) +{ + unsigned char *output_pointer = NULL; + double d = item->valuedouble; + int length = 0; + size_t i = 0; + unsigned char number_buffer[26]; /* temporary buffer to print the number into */ + unsigned char decimal_point = get_decimal_point(); + double test; + + if (output_buffer == NULL) + { + return false; + } + + /* This checks for NaN and Infinity */ + if ((d * 0) != 0) + { + length = sprintf((char*)number_buffer, "null"); + } + else + { + /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */ + length = sprintf((char*)number_buffer, "%1.15g", d); + + /* Check whether the original double can be recovered */ + if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || ((double)test != d)) + { + /* If not, print with 17 decimal places of precision */ + length = sprintf((char*)number_buffer, "%1.17g", d); + } + } + + /* sprintf failed or buffer overrun occured */ + if ((length < 0) || (length > (int)(sizeof(number_buffer) - 1))) + { + return false; + } + + /* reserve appropriate space in the output */ + output_pointer = ensure(output_buffer, (size_t)length); + if (output_pointer == NULL) + { + return false; + } + + /* copy the printed number to the output and replace locale + * dependent decimal point with '.' */ + for (i = 0; i < ((size_t)length); i++) + { + if (number_buffer[i] == decimal_point) + { + output_pointer[i] = '.'; + continue; + } + + output_pointer[i] = number_buffer[i]; + } + output_pointer[i] = '\0'; + + output_buffer->offset += (size_t)length; + + return true; +} + +/* parse 4 digit hexadecimal number */ +static unsigned parse_hex4(const unsigned char * const input) +{ + unsigned int h = 0; + size_t i = 0; + + for (i = 0; i < 4; i++) + { + /* parse digit */ + if ((input[i] >= '0') && (input[i] <= '9')) + { + h += (unsigned int) input[i] - '0'; + } + else if ((input[i] >= 'A') && (input[i] <= 'F')) + { + h += (unsigned int) 10 + input[i] - 'A'; + } + else if ((input[i] >= 'a') && (input[i] <= 'f')) + { + h += (unsigned int) 10 + input[i] - 'a'; + } + else /* invalid */ + { + return 0; + } + + if (i < 3) + { + /* shift left to make place for the next nibble */ + h = h << 4; + } + } + + return h; +} + +/* converts a UTF-16 literal to UTF-8 + * A literal can be one or two sequences of the form \uXXXX */ +static unsigned char utf16_literal_to_utf8(const unsigned char * const input_pointer, const unsigned char * const input_end, unsigned char **output_pointer) +{ + long unsigned int codepoint = 0; + unsigned int first_code = 0; + const unsigned char *first_sequence = input_pointer; + unsigned char utf8_length = 0; + unsigned char utf8_position = 0; + unsigned char sequence_length = 0; + unsigned char first_byte_mark = 0; + + if ((input_end - first_sequence) < 6) + { + /* input ends unexpectedly */ + goto fail; + } + + /* get the first utf16 sequence */ + first_code = parse_hex4(first_sequence + 2); + + /* check that the code is valid */ + if (((first_code >= 0xDC00) && (first_code <= 0xDFFF))) + { + goto fail; + } + + /* UTF16 surrogate pair */ + if ((first_code >= 0xD800) && (first_code <= 0xDBFF)) + { + const unsigned char *second_sequence = first_sequence + 6; + unsigned int second_code = 0; + sequence_length = 12; /* \uXXXX\uXXXX */ + + if ((input_end - second_sequence) < 6) + { + /* input ends unexpectedly */ + goto fail; + } + + if ((second_sequence[0] != '\\') || (second_sequence[1] != 'u')) + { + /* missing second half of the surrogate pair */ + goto fail; + } + + /* get the second utf16 sequence */ + second_code = parse_hex4(second_sequence + 2); + /* check that the code is valid */ + if ((second_code < 0xDC00) || (second_code > 0xDFFF)) + { + /* invalid second half of the surrogate pair */ + goto fail; + } + + + /* calculate the unicode codepoint from the surrogate pair */ + codepoint = 0x10000 + (((first_code & 0x3FF) << 10) | (second_code & 0x3FF)); + } + else + { + sequence_length = 6; /* \uXXXX */ + codepoint = first_code; + } + + /* encode as UTF-8 + * takes at maximum 4 bytes to encode: + * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ + if (codepoint < 0x80) + { + /* normal ascii, encoding 0xxxxxxx */ + utf8_length = 1; + } + else if (codepoint < 0x800) + { + /* two bytes, encoding 110xxxxx 10xxxxxx */ + utf8_length = 2; + first_byte_mark = 0xC0; /* 11000000 */ + } + else if (codepoint < 0x10000) + { + /* three bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx */ + utf8_length = 3; + first_byte_mark = 0xE0; /* 11100000 */ + } + else if (codepoint <= 0x10FFFF) + { + /* four bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx */ + utf8_length = 4; + first_byte_mark = 0xF0; /* 11110000 */ + } + else + { + /* invalid unicode codepoint */ + goto fail; + } + + /* encode as utf8 */ + for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0; utf8_position--) + { + /* 10xxxxxx */ + (*output_pointer)[utf8_position] = (unsigned char)((codepoint | 0x80) & 0xBF); + codepoint >>= 6; + } + /* encode first byte */ + if (utf8_length > 1) + { + (*output_pointer)[0] = (unsigned char)((codepoint | first_byte_mark) & 0xFF); + } + else + { + (*output_pointer)[0] = (unsigned char)(codepoint & 0x7F); + } + + *output_pointer += utf8_length; + + return sequence_length; + +fail: + return 0; +} + +/* Parse the input text into an unescaped cinput, and populate item. */ +static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_buffer) +{ + const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1; + const unsigned char *input_end = buffer_at_offset(input_buffer) + 1; + unsigned char *output_pointer = NULL; + unsigned char *output = NULL; + + /* not a string */ + if (buffer_at_offset(input_buffer)[0] != '\"') + { + goto fail; + } + + { + /* calculate approximate size of the output (overestimate) */ + size_t allocation_length = 0; + size_t skipped_bytes = 0; + while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"')) + { + /* is escape sequence */ + if (input_end[0] == '\\') + { + if ((size_t)(input_end + 1 - input_buffer->content) >= input_buffer->length) + { + /* prevent buffer overflow when last input character is a backslash */ + goto fail; + } + skipped_bytes++; + input_end++; + } + input_end++; + } + if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"')) + { + goto fail; /* string ended unexpectedly */ + } + + /* This is at most how much we need for the output */ + allocation_length = (size_t) (input_end - buffer_at_offset(input_buffer)) - skipped_bytes; + output = (unsigned char*)input_buffer->hooks.allocate(allocation_length + sizeof("")); + if (output == NULL) + { + goto fail; /* allocation failure */ + } + } + + output_pointer = output; + /* loop through the string literal */ + while (input_pointer < input_end) + { + if (*input_pointer != '\\') + { + *output_pointer++ = *input_pointer++; + } + /* escape sequence */ + else + { + unsigned char sequence_length = 2; + if ((input_end - input_pointer) < 1) + { + goto fail; + } + + switch (input_pointer[1]) + { + case 'b': + *output_pointer++ = '\b'; + break; + case 'f': + *output_pointer++ = '\f'; + break; + case 'n': + *output_pointer++ = '\n'; + break; + case 'r': + *output_pointer++ = '\r'; + break; + case 't': + *output_pointer++ = '\t'; + break; + case '\"': + case '\\': + case '/': + *output_pointer++ = input_pointer[1]; + break; + + /* UTF-16 literal */ + case 'u': + sequence_length = utf16_literal_to_utf8(input_pointer, input_end, &output_pointer); + if (sequence_length == 0) + { + /* failed to convert UTF16-literal to UTF-8 */ + goto fail; + } + break; + + default: + goto fail; + } + input_pointer += sequence_length; + } + } + + /* zero terminate the output */ + *output_pointer = '\0'; + + item->type = cJSON_String; + item->valuestring = (char*)output; + + input_buffer->offset = (size_t) (input_end - input_buffer->content); + input_buffer->offset++; + + return true; + +fail: + if (output != NULL) + { + input_buffer->hooks.deallocate(output); + } + + if (input_pointer != NULL) + { + input_buffer->offset = (size_t)(input_pointer - input_buffer->content); + } + + return false; +} + +/* Render the cstring provided to an escaped version that can be printed. */ +static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffer * const output_buffer) +{ + const unsigned char *input_pointer = NULL; + unsigned char *output = NULL; + unsigned char *output_pointer = NULL; + size_t output_length = 0; + /* numbers of additional characters needed for escaping */ + size_t escape_characters = 0; + + if (output_buffer == NULL) + { + return false; + } + + /* empty string */ + if (input == NULL) + { + output = ensure(output_buffer, sizeof("\"\"")); + if (output == NULL) + { + return false; + } + strcpy((char*)output, "\"\""); + + return true; + } + + /* set "flag" to 1 if something needs to be escaped */ + for (input_pointer = input; *input_pointer; input_pointer++) + { + switch (*input_pointer) + { + case '\"': + case '\\': + case '\b': + case '\f': + case '\n': + case '\r': + case '\t': + /* one character escape sequence */ + escape_characters++; + break; + default: + if (*input_pointer < 32) + { + /* UTF-16 escape sequence uXXXX */ + escape_characters += 5; + } + break; + } + } + output_length = (size_t)(input_pointer - input) + escape_characters; + + output = ensure(output_buffer, output_length + sizeof("\"\"")); + if (output == NULL) + { + return false; + } + + /* no characters have to be escaped */ + if (escape_characters == 0) + { + output[0] = '\"'; + memcpy(output + 1, input, output_length); + output[output_length + 1] = '\"'; + output[output_length + 2] = '\0'; + + return true; + } + + output[0] = '\"'; + output_pointer = output + 1; + /* copy the string */ + for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++) + { + if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\')) + { + /* normal character, copy */ + *output_pointer = *input_pointer; + } + else + { + /* character needs to be escaped */ + *output_pointer++ = '\\'; + switch (*input_pointer) + { + case '\\': + *output_pointer = '\\'; + break; + case '\"': + *output_pointer = '\"'; + break; + case '\b': + *output_pointer = 'b'; + break; + case '\f': + *output_pointer = 'f'; + break; + case '\n': + *output_pointer = 'n'; + break; + case '\r': + *output_pointer = 'r'; + break; + case '\t': + *output_pointer = 't'; + break; + default: + /* escape and print as unicode codepoint */ + sprintf((char*)output_pointer, "u%04x", *input_pointer); + output_pointer += 4; + break; + } + } + } + output[output_length + 1] = '\"'; + output[output_length + 2] = '\0'; + + return true; +} + +/* Invoke print_string_ptr (which is useful) on an item. */ +static cJSON_bool print_string(const cJSON * const item, printbuffer * const p) +{ + return print_string_ptr((unsigned char*)item->valuestring, p); +} + +/* Predeclare these prototypes. */ +static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer); +static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer); +static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer); +static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer); +static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer); +static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer); + +/* Utility to jump whitespace and cr/lf */ +static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer) +{ + if ((buffer == NULL) || (buffer->content == NULL)) + { + return NULL; + } + + while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 32)) + { + buffer->offset++; + } + + if (buffer->offset == buffer->length) + { + buffer->offset--; + } + + return buffer; +} + +/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer */ +static parse_buffer *skip_utf8_bom(parse_buffer * const buffer) +{ + if ((buffer == NULL) || (buffer->content == NULL) || (buffer->offset != 0)) + { + return NULL; + } + + if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0)) + { + buffer->offset += 3; + } + + return buffer; +} + +/* Parse an object - create a new root, and populate. */ +CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated) +{ + parse_buffer buffer = { 0, 0, 0, 0, { 0, 0, 0 } }; + cJSON *item = NULL; + + /* reset error position */ + global_error.json = NULL; + global_error.position = 0; + + if (value == NULL) + { + goto fail; + } + + buffer.content = (const unsigned char*)value; + buffer.length = strlen((const char*)value) + sizeof(""); + buffer.offset = 0; + buffer.hooks = global_hooks; + + item = cJSON_New_Item(&global_hooks); + if (item == NULL) /* memory fail */ + { + goto fail; + } + + if (!parse_value(item, buffer_skip_whitespace(skip_utf8_bom(&buffer)))) + { + /* parse failure. ep is set. */ + goto fail; + } + + /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */ + if (require_null_terminated) + { + buffer_skip_whitespace(&buffer); + if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0') + { + goto fail; + } + } + if (return_parse_end) + { + *return_parse_end = (const char*)buffer_at_offset(&buffer); + } + + return item; + +fail: + if (item != NULL) + { + cJSON_Delete(item); + } + + if (value != NULL) + { + error local_error; + local_error.json = (const unsigned char*)value; + local_error.position = 0; + + if (buffer.offset < buffer.length) + { + local_error.position = buffer.offset; + } + else if (buffer.length > 0) + { + local_error.position = buffer.length - 1; + } + + if (return_parse_end != NULL) + { + *return_parse_end = (const char*)local_error.json + local_error.position; + } + + global_error = local_error; + } + + return NULL; +} + +/* Default options for cJSON_Parse */ +CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value) +{ + return cJSON_ParseWithOpts(value, 0, 0); +} + +#define cjson_min(a, b) ((a < b) ? a : b) + +static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks) +{ + printbuffer buffer[1]; + unsigned char *printed = NULL; + + memset(buffer, 0, sizeof(buffer)); + + /* create buffer */ + buffer->buffer = (unsigned char*) hooks->allocate(256); + buffer->format = format; + buffer->hooks = *hooks; + if (buffer->buffer == NULL) + { + goto fail; + } + + /* print the value */ + if (!print_value(item, buffer)) + { + goto fail; + } + update_offset(buffer); + + /* check if reallocate is available */ + if (hooks->reallocate != NULL) + { + printed = (unsigned char*) hooks->reallocate(buffer->buffer, buffer->length); + buffer->buffer = NULL; + if (printed == NULL) { + goto fail; + } + } + else /* otherwise copy the JSON over to a new buffer */ + { + printed = (unsigned char*) hooks->allocate(buffer->offset + 1); + if (printed == NULL) + { + goto fail; + } + memcpy(printed, buffer->buffer, cjson_min(buffer->length, buffer->offset + 1)); + printed[buffer->offset] = '\0'; /* just to be sure */ + + /* free the buffer */ + hooks->deallocate(buffer->buffer); + } + + return printed; + +fail: + if (buffer->buffer != NULL) + { + hooks->deallocate(buffer->buffer); + } + + if (printed != NULL) + { + hooks->deallocate(printed); + } + + return NULL; +} + +/* Render a cJSON item/entity/structure to text. */ +CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item) +{ + return (char*)print(item, true, &global_hooks); +} + +CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item) +{ + return (char*)print(item, false, &global_hooks); +} + +CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt) +{ + printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } }; + + if (prebuffer < 0) + { + return NULL; + } + + p.buffer = (unsigned char*)global_hooks.allocate((size_t)prebuffer); + if (!p.buffer) + { + return NULL; + } + + p.length = (size_t)prebuffer; + p.offset = 0; + p.noalloc = false; + p.format = fmt; + p.hooks = global_hooks; + + if (!print_value(item, &p)) + { + global_hooks.deallocate(p.buffer); + return NULL; + } + + return (char*)p.buffer; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cJSON_bool fmt) +{ + printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } }; + + if ((len < 0) || (buf == NULL)) + { + return false; + } + + p.buffer = (unsigned char*)buf; + p.length = (size_t)len; + p.offset = 0; + p.noalloc = true; + p.format = fmt; + p.hooks = global_hooks; + + return print_value(item, &p); +} + +/* Parser core - when encountering text, process appropriately. */ +static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer) +{ + if ((input_buffer == NULL) || (input_buffer->content == NULL)) + { + return false; /* no input */ + } + + /* parse the different types of values */ + /* null */ + if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0)) + { + item->type = cJSON_NULL; + input_buffer->offset += 4; + return true; + } + /* false */ + if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0)) + { + item->type = cJSON_False; + input_buffer->offset += 5; + return true; + } + /* true */ + if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "true", 4) == 0)) + { + item->type = cJSON_True; + item->valueint = 1; + input_buffer->offset += 4; + return true; + } + /* string */ + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '\"')) + { + return parse_string(item, input_buffer); + } + /* number */ + if (can_access_at_index(input_buffer, 0) && ((buffer_at_offset(input_buffer)[0] == '-') || ((buffer_at_offset(input_buffer)[0] >= '0') && (buffer_at_offset(input_buffer)[0] <= '9')))) + { + return parse_number(item, input_buffer); + } + /* array */ + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '[')) + { + return parse_array(item, input_buffer); + } + /* object */ + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '{')) + { + return parse_object(item, input_buffer); + } + + return false; +} + +/* Render a value to text. */ +static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer) +{ + unsigned char *output = NULL; + + if ((item == NULL) || (output_buffer == NULL)) + { + return false; + } + + switch ((item->type) & 0xFF) + { + case cJSON_NULL: + output = ensure(output_buffer, 5); + if (output == NULL) + { + return false; + } + strcpy((char*)output, "null"); + return true; + + case cJSON_False: + output = ensure(output_buffer, 6); + if (output == NULL) + { + return false; + } + strcpy((char*)output, "false"); + return true; + + case cJSON_True: + output = ensure(output_buffer, 5); + if (output == NULL) + { + return false; + } + strcpy((char*)output, "true"); + return true; + + case cJSON_Number: + return print_number(item, output_buffer); + + case cJSON_Raw: + { + size_t raw_length = 0; + if (item->valuestring == NULL) + { + if (!output_buffer->noalloc) + { + output_buffer->hooks.deallocate(output_buffer->buffer); + } + return false; + } + + raw_length = strlen(item->valuestring) + sizeof(""); + output = ensure(output_buffer, raw_length); + if (output == NULL) + { + return false; + } + memcpy(output, item->valuestring, raw_length); + return true; + } + + case cJSON_String: + return print_string(item, output_buffer); + + case cJSON_Array: + return print_array(item, output_buffer); + + case cJSON_Object: + return print_object(item, output_buffer); + + default: + return false; + } +} + +/* Build an array from input text. */ +static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer) +{ + cJSON *head = NULL; /* head of the linked list */ + cJSON *current_item = NULL; + + if (input_buffer->depth >= CJSON_NESTING_LIMIT) + { + return false; /* to deeply nested */ + } + input_buffer->depth++; + + if (buffer_at_offset(input_buffer)[0] != '[') + { + /* not an array */ + goto fail; + } + + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ']')) + { + /* empty array */ + goto success; + } + + /* check if we skipped to the end of the buffer */ + if (cannot_access_at_index(input_buffer, 0)) + { + input_buffer->offset--; + goto fail; + } + + /* step back to character in front of the first element */ + input_buffer->offset--; + /* loop through the comma separated array elements */ + do + { + /* allocate next item */ + cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks)); + if (new_item == NULL) + { + goto fail; /* allocation failure */ + } + + /* attach next item to list */ + if (head == NULL) + { + /* start the linked list */ + current_item = head = new_item; + } + else + { + /* add to the end and advance */ + current_item->next = new_item; + new_item->prev = current_item; + current_item = new_item; + } + + /* parse next value */ + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (!parse_value(current_item, input_buffer)) + { + goto fail; /* failed to parse value */ + } + buffer_skip_whitespace(input_buffer); + } + while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ',')); + + if (cannot_access_at_index(input_buffer, 0) || buffer_at_offset(input_buffer)[0] != ']') + { + goto fail; /* expected end of array */ + } + +success: + input_buffer->depth--; + + item->type = cJSON_Array; + item->child = head; + + input_buffer->offset++; + + return true; + +fail: + if (head != NULL) + { + cJSON_Delete(head); + } + + return false; +} + +/* Render an array to text */ +static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer) +{ + unsigned char *output_pointer = NULL; + size_t length = 0; + cJSON *current_element = item->child; + + if (output_buffer == NULL) + { + return false; + } + + /* Compose the output array. */ + /* opening square bracket */ + output_pointer = ensure(output_buffer, 1); + if (output_pointer == NULL) + { + return false; + } + + *output_pointer = '['; + output_buffer->offset++; + output_buffer->depth++; + + while (current_element != NULL) + { + if (!print_value(current_element, output_buffer)) + { + return false; + } + update_offset(output_buffer); + if (current_element->next) + { + length = (size_t) (output_buffer->format ? 2 : 1); + output_pointer = ensure(output_buffer, length + 1); + if (output_pointer == NULL) + { + return false; + } + *output_pointer++ = ','; + if(output_buffer->format) + { + *output_pointer++ = ' '; + } + *output_pointer = '\0'; + output_buffer->offset += length; + } + current_element = current_element->next; + } + + output_pointer = ensure(output_buffer, 2); + if (output_pointer == NULL) + { + return false; + } + *output_pointer++ = ']'; + *output_pointer = '\0'; + output_buffer->depth--; + + return true; +} + +/* Build an object from the text. */ +static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer) +{ + cJSON *head = NULL; /* linked list head */ + cJSON *current_item = NULL; + + if (input_buffer->depth >= CJSON_NESTING_LIMIT) + { + return false; /* to deeply nested */ + } + input_buffer->depth++; + + if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '{')) + { + goto fail; /* not an object */ + } + + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '}')) + { + goto success; /* empty object */ + } + + /* check if we skipped to the end of the buffer */ + if (cannot_access_at_index(input_buffer, 0)) + { + input_buffer->offset--; + goto fail; + } + + /* step back to character in front of the first element */ + input_buffer->offset--; + /* loop through the comma separated array elements */ + do + { + /* allocate next item */ + cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks)); + if (new_item == NULL) + { + goto fail; /* allocation failure */ + } + + /* attach next item to list */ + if (head == NULL) + { + /* start the linked list */ + current_item = head = new_item; + } + else + { + /* add to the end and advance */ + current_item->next = new_item; + new_item->prev = current_item; + current_item = new_item; + } + + /* parse the name of the child */ + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (!parse_string(current_item, input_buffer)) + { + goto fail; /* faile to parse name */ + } + buffer_skip_whitespace(input_buffer); + + /* swap valuestring and string, because we parsed the name */ + current_item->string = current_item->valuestring; + current_item->valuestring = NULL; + + if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != ':')) + { + goto fail; /* invalid object */ + } + + /* parse the value */ + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (!parse_value(current_item, input_buffer)) + { + goto fail; /* failed to parse value */ + } + buffer_skip_whitespace(input_buffer); + } + while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ',')); + + if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '}')) + { + goto fail; /* expected end of object */ + } + +success: + input_buffer->depth--; + + item->type = cJSON_Object; + item->child = head; + + input_buffer->offset++; + return true; + +fail: + if (head != NULL) + { + cJSON_Delete(head); + } + + return false; +} + +/* Render an object to text. */ +static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer) +{ + unsigned char *output_pointer = NULL; + size_t length = 0; + cJSON *current_item = item->child; + + if (output_buffer == NULL) + { + return false; + } + + /* Compose the output: */ + length = (size_t) (output_buffer->format ? 2 : 1); /* fmt: {\n */ + output_pointer = ensure(output_buffer, length + 1); + if (output_pointer == NULL) + { + return false; + } + + *output_pointer++ = '{'; + output_buffer->depth++; + if (output_buffer->format) + { + *output_pointer++ = '\n'; + } + output_buffer->offset += length; + + while (current_item) + { + if (output_buffer->format) + { + size_t i; + output_pointer = ensure(output_buffer, output_buffer->depth); + if (output_pointer == NULL) + { + return false; + } + for (i = 0; i < output_buffer->depth; i++) + { + *output_pointer++ = '\t'; + } + output_buffer->offset += output_buffer->depth; + } + + /* print key */ + if (!print_string_ptr((unsigned char*)current_item->string, output_buffer)) + { + return false; + } + update_offset(output_buffer); + + length = (size_t) (output_buffer->format ? 2 : 1); + output_pointer = ensure(output_buffer, length); + if (output_pointer == NULL) + { + return false; + } + *output_pointer++ = ':'; + if (output_buffer->format) + { + *output_pointer++ = '\t'; + } + output_buffer->offset += length; + + /* print value */ + if (!print_value(current_item, output_buffer)) + { + return false; + } + update_offset(output_buffer); + + /* print comma if not last */ + length = (size_t) ((output_buffer->format ? 1 : 0) + (current_item->next ? 1 : 0)); + output_pointer = ensure(output_buffer, length + 1); + if (output_pointer == NULL) + { + return false; + } + if (current_item->next) + { + *output_pointer++ = ','; + } + + if (output_buffer->format) + { + *output_pointer++ = '\n'; + } + *output_pointer = '\0'; + output_buffer->offset += length; + + current_item = current_item->next; + } + + output_pointer = ensure(output_buffer, output_buffer->format ? (output_buffer->depth + 1) : 2); + if (output_pointer == NULL) + { + return false; + } + if (output_buffer->format) + { + size_t i; + for (i = 0; i < (output_buffer->depth - 1); i++) + { + *output_pointer++ = '\t'; + } + } + *output_pointer++ = '}'; + *output_pointer = '\0'; + output_buffer->depth--; + + return true; +} + +/* Get Array size/item / object item. */ +CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array) +{ + cJSON *child = NULL; + size_t size = 0; + + if (array == NULL) + { + return 0; + } + + child = array->child; + + while(child != NULL) + { + size++; + child = child->next; + } + + /* FIXME: Can overflow here. Cannot be fixed without breaking the API */ + + return (int)size; +} + +static cJSON* get_array_item(const cJSON *array, size_t index) +{ + cJSON *current_child = NULL; + + if (array == NULL) + { + return NULL; + } + + current_child = array->child; + while ((current_child != NULL) && (index > 0)) + { + index--; + current_child = current_child->next; + } + + return current_child; +} + +CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index) +{ + if (index < 0) + { + return NULL; + } + + return get_array_item(array, (size_t)index); +} + +static cJSON *get_object_item(const cJSON * const object, const char * const name, const cJSON_bool case_sensitive) +{ + cJSON *current_element = NULL; + + if ((object == NULL) || (name == NULL)) + { + return NULL; + } + + current_element = object->child; + if (case_sensitive) + { + while ((current_element != NULL) && (strcmp(name, current_element->string) != 0)) + { + current_element = current_element->next; + } + } + else + { + while ((current_element != NULL) && (case_insensitive_strcmp((const unsigned char*)name, (const unsigned char*)(current_element->string)) != 0)) + { + current_element = current_element->next; + } + } + + return current_element; +} + +CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string) +{ + return get_object_item(object, string, false); +} + +CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string) +{ + return get_object_item(object, string, true); +} + +CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string) +{ + return cJSON_GetObjectItem(object, string) ? 1 : 0; +} + +/* Utility for array list handling. */ +static void suffix_object(cJSON *prev, cJSON *item) +{ + prev->next = item; + item->prev = prev; +} + +/* Utility for handling references. */ +static cJSON *create_reference(const cJSON *item, const internal_hooks * const hooks) +{ + cJSON *reference = NULL; + if (item == NULL) + { + return NULL; + } + + reference = cJSON_New_Item(hooks); + if (reference == NULL) + { + return NULL; + } + + memcpy(reference, item, sizeof(cJSON)); + reference->string = NULL; + reference->type |= cJSON_IsReference; + reference->next = reference->prev = NULL; + return reference; +} + +/* Add item to array/object. */ +CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item) +{ + cJSON *child = NULL; + + if ((item == NULL) || (array == NULL)) + { + return; + } + + child = array->child; + + if (child == NULL) + { + /* list is empty, start new one */ + array->child = item; + } + else + { + /* append to the end */ + while (child->next) + { + child = child->next; + } + suffix_object(child, item); + } +} + +CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item) +{ + if (item == NULL) + { + return; + } + + /* call cJSON_AddItemToObjectCS for code reuse */ + cJSON_AddItemToObjectCS(object, (char*)cJSON_strdup((const unsigned char*)string, &global_hooks), item); + /* remove cJSON_StringIsConst flag */ + item->type &= ~cJSON_StringIsConst; +} + +#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5)))) + #pragma GCC diagnostic push +#endif +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wcast-qual" +#endif + +/* Add an item to an object with constant string as key */ +CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item) +{ + if ((item == NULL) || (string == NULL)) + { + return; + } + if (!(item->type & cJSON_StringIsConst) && item->string) + { + global_hooks.deallocate(item->string); + } + item->string = (char*)string; + item->type |= cJSON_StringIsConst; + cJSON_AddItemToArray(object, item); +} +#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5)))) + #pragma GCC diagnostic pop +#endif + +CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item) +{ + if (array == NULL) + { + return; + } + + cJSON_AddItemToArray(array, create_reference(item, &global_hooks)); +} + +CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item) +{ + if ((object == NULL) || (string == NULL)) + { + return; + } + + cJSON_AddItemToObject(object, string, create_reference(item, &global_hooks)); +} + +CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item) +{ + if ((parent == NULL) || (item == NULL)) + { + return NULL; + } + + if (item->prev != NULL) + { + /* not the first element */ + item->prev->next = item->next; + } + if (item->next != NULL) + { + /* not the last element */ + item->next->prev = item->prev; + } + + if (item == parent->child) + { + /* first element */ + parent->child = item->next; + } + /* make sure the detached item doesn't point anywhere anymore */ + item->prev = NULL; + item->next = NULL; + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which) +{ + if (which < 0) + { + return NULL; + } + + return cJSON_DetachItemViaPointer(array, get_array_item(array, (size_t)which)); +} + +CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which) +{ + cJSON_Delete(cJSON_DetachItemFromArray(array, which)); +} + +CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string) +{ + cJSON *to_detach = cJSON_GetObjectItem(object, string); + + return cJSON_DetachItemViaPointer(object, to_detach); +} + +CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string) +{ + cJSON *to_detach = cJSON_GetObjectItemCaseSensitive(object, string); + + return cJSON_DetachItemViaPointer(object, to_detach); +} + +CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string) +{ + cJSON_Delete(cJSON_DetachItemFromObject(object, string)); +} + +CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string) +{ + cJSON_Delete(cJSON_DetachItemFromObjectCaseSensitive(object, string)); +} + +/* Replace array/object items with new ones. */ +CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem) +{ + cJSON *after_inserted = NULL; + + if (which < 0) + { + return; + } + + after_inserted = get_array_item(array, (size_t)which); + if (after_inserted == NULL) + { + cJSON_AddItemToArray(array, newitem); + return; + } + + newitem->next = after_inserted; + newitem->prev = after_inserted->prev; + after_inserted->prev = newitem; + if (after_inserted == array->child) + { + array->child = newitem; + } + else + { + newitem->prev->next = newitem; + } +} + +CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement) +{ + if ((parent == NULL) || (replacement == NULL) || (item == NULL)) + { + return false; + } + + if (replacement == item) + { + return true; + } + + replacement->next = item->next; + replacement->prev = item->prev; + + if (replacement->next != NULL) + { + replacement->next->prev = replacement; + } + if (replacement->prev != NULL) + { + replacement->prev->next = replacement; + } + if (parent->child == item) + { + parent->child = replacement; + } + + item->next = NULL; + item->prev = NULL; + cJSON_Delete(item); + + return true; +} + +CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem) +{ + if (which < 0) + { + return; + } + + cJSON_ReplaceItemViaPointer(array, get_array_item(array, (size_t)which), newitem); +} + +static cJSON_bool replace_item_in_object(cJSON *object, const char *string, cJSON *replacement, cJSON_bool case_sensitive) +{ + if ((replacement == NULL) || (string == NULL)) + { + return false; + } + + /* replace the name in the replacement */ + if (!(replacement->type & cJSON_StringIsConst) && (replacement->string != NULL)) + { + cJSON_free(replacement->string); + } + replacement->string = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks); + replacement->type &= ~cJSON_StringIsConst; + + cJSON_ReplaceItemViaPointer(object, get_object_item(object, string, case_sensitive), replacement); + + return true; +} + +CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem) +{ + replace_item_in_object(object, string, newitem, false); +} + +CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object, const char *string, cJSON *newitem) +{ + replace_item_in_object(object, string, newitem, true); +} + +/* Create basic types: */ +CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type = cJSON_NULL; + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type = cJSON_True; + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type = cJSON_False; + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type = b ? cJSON_True : cJSON_False; + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type = cJSON_Number; + item->valuedouble = num; + + /* use saturation in case of overflow */ + if (num >= INT_MAX) + { + item->valueint = INT_MAX; + } + else if (num <= INT_MIN) + { + item->valueint = INT_MIN; + } + else + { + item->valueint = (int)num; + } + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type = cJSON_String; + item->valuestring = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks); + if(!item->valuestring) + { + cJSON_Delete(item); + return NULL; + } + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type = cJSON_Raw; + item->valuestring = (char*)cJSON_strdup((const unsigned char*)raw, &global_hooks); + if(!item->valuestring) + { + cJSON_Delete(item); + return NULL; + } + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if(item) + { + item->type=cJSON_Array; + } + + return item; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void) +{ + cJSON *item = cJSON_New_Item(&global_hooks); + if (item) + { + item->type = cJSON_Object; + } + + return item; +} + +/* Create Arrays: */ +CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count) +{ + size_t i = 0; + cJSON *n = NULL; + cJSON *p = NULL; + cJSON *a = NULL; + + if ((count < 0) || (numbers == NULL)) + { + return NULL; + } + + a = cJSON_CreateArray(); + for(i = 0; a && (i < (size_t)count); i++) + { + n = cJSON_CreateNumber(numbers[i]); + if (!n) + { + cJSON_Delete(a); + return NULL; + } + if(!i) + { + a->child = n; + } + else + { + suffix_object(p, n); + } + p = n; + } + + return a; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count) +{ + size_t i = 0; + cJSON *n = NULL; + cJSON *p = NULL; + cJSON *a = NULL; + + if ((count < 0) || (numbers == NULL)) + { + return NULL; + } + + a = cJSON_CreateArray(); + + for(i = 0; a && (i < (size_t)count); i++) + { + n = cJSON_CreateNumber((double)numbers[i]); + if(!n) + { + cJSON_Delete(a); + return NULL; + } + if(!i) + { + a->child = n; + } + else + { + suffix_object(p, n); + } + p = n; + } + + return a; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count) +{ + size_t i = 0; + cJSON *n = NULL; + cJSON *p = NULL; + cJSON *a = NULL; + + if ((count < 0) || (numbers == NULL)) + { + return NULL; + } + + a = cJSON_CreateArray(); + + for(i = 0;a && (i < (size_t)count); i++) + { + n = cJSON_CreateNumber(numbers[i]); + if(!n) + { + cJSON_Delete(a); + return NULL; + } + if(!i) + { + a->child = n; + } + else + { + suffix_object(p, n); + } + p = n; + } + + return a; +} + +CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count) +{ + size_t i = 0; + cJSON *n = NULL; + cJSON *p = NULL; + cJSON *a = NULL; + + if ((count < 0) || (strings == NULL)) + { + return NULL; + } + + a = cJSON_CreateArray(); + + for (i = 0; a && (i < (size_t)count); i++) + { + n = cJSON_CreateString(strings[i]); + if(!n) + { + cJSON_Delete(a); + return NULL; + } + if(!i) + { + a->child = n; + } + else + { + suffix_object(p,n); + } + p = n; + } + + return a; +} + +/* Duplication */ +CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse) +{ + cJSON *newitem = NULL; + cJSON *child = NULL; + cJSON *next = NULL; + cJSON *newchild = NULL; + + /* Bail on bad ptr */ + if (!item) + { + goto fail; + } + /* Create new item */ + newitem = cJSON_New_Item(&global_hooks); + if (!newitem) + { + goto fail; + } + /* Copy over all vars */ + newitem->type = item->type & (~cJSON_IsReference); + newitem->valueint = item->valueint; + newitem->valuedouble = item->valuedouble; + if (item->valuestring) + { + newitem->valuestring = (char*)cJSON_strdup((unsigned char*)item->valuestring, &global_hooks); + if (!newitem->valuestring) + { + goto fail; + } + } + if (item->string) + { + newitem->string = (item->type&cJSON_StringIsConst) ? item->string : (char*)cJSON_strdup((unsigned char*)item->string, &global_hooks); + if (!newitem->string) + { + goto fail; + } + } + /* If non-recursive, then we're done! */ + if (!recurse) + { + return newitem; + } + /* Walk the ->next chain for the child. */ + child = item->child; + while (child != NULL) + { + newchild = cJSON_Duplicate(child, true); /* Duplicate (with recurse) each item in the ->next chain */ + if (!newchild) + { + goto fail; + } + if (next != NULL) + { + /* If newitem->child already set, then crosswire ->prev and ->next and move on */ + next->next = newchild; + newchild->prev = next; + next = newchild; + } + else + { + /* Set newitem->child and move to it */ + newitem->child = newchild; + next = newchild; + } + child = child->next; + } + + return newitem; + +fail: + if (newitem != NULL) + { + cJSON_Delete(newitem); + } + + return NULL; +} + +CJSON_PUBLIC(void) cJSON_Minify(char *json) +{ + unsigned char *into = (unsigned char*)json; + + if (json == NULL) + { + return; + } + + while (*json) + { + if (*json == ' ') + { + json++; + } + else if (*json == '\t') + { + /* Whitespace characters. */ + json++; + } + else if (*json == '\r') + { + json++; + } + else if (*json=='\n') + { + json++; + } + else if ((*json == '/') && (json[1] == '/')) + { + /* double-slash comments, to end of line. */ + while (*json && (*json != '\n')) + { + json++; + } + } + else if ((*json == '/') && (json[1] == '*')) + { + /* multiline comments. */ + while (*json && !((*json == '*') && (json[1] == '/'))) + { + json++; + } + json += 2; + } + else if (*json == '\"') + { + /* string literals, which are \" sensitive. */ + *into++ = (unsigned char)*json++; + while (*json && (*json != '\"')) + { + if (*json == '\\') + { + *into++ = (unsigned char)*json++; + } + *into++ = (unsigned char)*json++; + } + *into++ = (unsigned char)*json++; + } + else + { + /* All other characters. */ + *into++ = (unsigned char)*json++; + } + } + + /* and null-terminate. */ + *into = '\0'; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_Invalid; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_False; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xff) == cJSON_True; +} + + +CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & (cJSON_True | cJSON_False)) != 0; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_NULL; +} + + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file transponder_agent/agent_cjson.c + * @brief Check if the item is a number (double) + * + * @param item + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2017 + */ +///////////////////////////////////////////////////////////////////////////////////////// +CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_Number; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file transponder_agent/agent_cjson.c + * @brief Check if the item is a string + * + * @param item + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2017 + */ +///////////////////////////////////////////////////////////////////////////////////////// +CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_String; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_Array; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_Object; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item) +{ + if (item == NULL) + { + return false; + } + + return (item->type & 0xFF) == cJSON_Raw; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive) +{ + if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF)) || cJSON_IsInvalid(a)) + { + return false; + } + + /* check if type is valid */ + switch (a->type & 0xFF) + { + case cJSON_False: + case cJSON_True: + case cJSON_NULL: + case cJSON_Number: + case cJSON_String: + case cJSON_Raw: + case cJSON_Array: + case cJSON_Object: + break; + + default: + return false; + } + + /* identical objects are equal */ + if (a == b) + { + return true; + } + + switch (a->type & 0xFF) + { + /* in these cases and equal type is enough */ + case cJSON_False: + case cJSON_True: + case cJSON_NULL: + return true; + + case cJSON_Number: + if (a->valuedouble == b->valuedouble) + { + return true; + } + return false; + + case cJSON_String: + case cJSON_Raw: + if ((a->valuestring == NULL) || (b->valuestring == NULL)) + { + return false; + } + if (strcmp(a->valuestring, b->valuestring) == 0) + { + return true; + } + + return false; + + case cJSON_Array: + { + cJSON *a_element = a->child; + cJSON *b_element = b->child; + + for (; (a_element != NULL) && (b_element != NULL);) + { + if (!cJSON_Compare(a_element, b_element, case_sensitive)) + { + return false; + } + + a_element = a_element->next; + b_element = b_element->next; + } + + /* one of the arrays is longer than the other */ + if (a_element != b_element) { + return false; + } + + return true; + } + + case cJSON_Object: + { + cJSON *a_element = NULL; + cJSON *b_element = NULL; + cJSON_ArrayForEach(a_element, a) + { + /* TODO This has O(n^2) runtime, which is horrible! */ + b_element = get_object_item(b, a_element->string, case_sensitive); + if (b_element == NULL) + { + return false; + } + + if (!cJSON_Compare(a_element, b_element, case_sensitive)) + { + return false; + } + } + + /* doing this twice, once on a and b to prevent true comparison if a subset of b + * TODO: Do this the proper way, this is just a fix for now */ + cJSON_ArrayForEach(b_element, b) + { + a_element = get_object_item(a, b_element->string, case_sensitive); + if (a_element == NULL) + { + return false; + } + + if (!cJSON_Compare(b_element, a_element, case_sensitive)) + { + return false; + } + } + + return true; + } + + default: + return false; + } +} + +CJSON_PUBLIC(void *) cJSON_malloc(size_t size) +{ + return global_hooks.allocate(size); +} + +CJSON_PUBLIC(void) cJSON_free(void *object) +{ + global_hooks.deallocate(object); +} diff --git a/src/pathcomp/backend/pathComp_cjson.h b/src/pathcomp/backend/pathComp_cjson.h new file mode 100644 index 0000000000000000000000000000000000000000..47c2830ef3cb1bf6c72c5e3897a066035936b247 --- /dev/null +++ b/src/pathcomp/backend/pathComp_cjson.h @@ -0,0 +1,214 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + //////////////////////////////////////////////////////////////////////////////////////// + +#ifndef _PATHCOMP_CJSON_H +#define _PATHCOMP_CJSON_H + + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib-2.0/glib/gtypes.h> + +#include <stddef.h> + +/* project version */ +#define CJSON_VERSION_MAJOR 1 +#define CJSON_VERSION_MINOR 6 +#define CJSON_VERSION_PATCH 0 + + +/* cJSON Types: */ +#define cJSON_Invalid (0) +#define cJSON_False (1 << 0) +#define cJSON_True (1 << 1) +#define cJSON_NULL (1 << 2) +#define cJSON_Number (1 << 3) +#define cJSON_String (1 << 4) +#define cJSON_Array (1 << 5) +#define cJSON_Object (1 << 6) +#define cJSON_Raw (1 << 7) /* raw json */ + +#define cJSON_IsReference 256 +#define cJSON_StringIsConst 512 + +#define CJSON_PUBLIC(type) type + +#define CJSON_NESTING_LIMIT 1000 + +/* The cJSON structure: */ +typedef struct cJSON +{ + /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ + struct cJSON *next; + struct cJSON *prev; + /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ + struct cJSON *child; + + /* The type of the item, as above. */ + int type; + + /* The item's string, if type==cJSON_String and type == cJSON_Raw */ + char *valuestring; + /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */ + int valueint; + /* The item's number, if type==cJSON_Number */ + double valuedouble; + + /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ + char *string; +} cJSON; + +typedef struct cJSON_Hooks +{ + void *(*malloc_fn)(size_t sz); + void (*free_fn)(void *ptr); +} cJSON_Hooks; + +typedef int cJSON_bool; + +/* returns the version of cJSON as a string */ +CJSON_PUBLIC(const char*) cJSON_Version(void); + +/* Supply malloc, realloc and free functions to cJSON */ +CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks); + +/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */ +/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */ +CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value); +/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ +/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */ +CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated); + +/* Render a cJSON entity to text for transfer/storage. */ +CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item); +/* Render a cJSON entity to text for transfer/storage without any formatting. */ +CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item); +/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */ +CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt); +/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */ +/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */ +CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format); +/* Delete a cJSON entity and all subentities. */ +CJSON_PUBLIC(void) cJSON_Delete(cJSON *c); + +/* Returns the number of items in an array (or object). */ +CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array); +/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */ +CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index); +/* Get item "string" from object. Case insensitive. */ +CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string); +CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string); +CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string); +/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ +CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void); + +/* These functions check the type of an item */ +CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item); +CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item); + +/* These calls create a cJSON item of the appropriate type. */ +CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void); +CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void); +CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void); +CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean); +CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num); +CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string); +/* raw json */ +CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw); +CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void); +CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void); + +/* These utilities create an Array of count items. */ +CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count); +CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count); +CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count); +CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count); + +/* Append item to the specified array/object. */ +CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item); +CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item); +/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object. + * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before + * writing to `item->string` */ +CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item); +/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */ +CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item); +CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item); + +/* Remove/Detatch items from Arrays/Objects. */ +CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item); +CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which); +CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which); +CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string); +CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string); +CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string); +CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string); + +/* Update array items. */ +CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */ +CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement); +CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem); +CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem); +CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem); + +/* Duplicate a cJSON item */ +CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse); +/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will +need to be released. With recurse!=0, it will duplicate any children connected to the item. +The item->next and ->prev pointers are always zero on return from Duplicate. */ +/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal. + * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */ +CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive); + + +CJSON_PUBLIC(void) cJSON_Minify(char *json); + +/* Macros for creating things quickly. */ +#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull()) +#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) +#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) +#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) +#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) +#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s)) +#define cJSON_AddRawToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateRaw(s)) + +/* When assigning an integer value, it needs to be propagated to valuedouble too. */ +#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number)) +/* helper for the cJSON_SetNumberValue macro */ +CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number); +#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number)) + +/* Macro for iterating over an array or object */ +#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next) + +/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */ +CJSON_PUBLIC(void *) cJSON_malloc(size_t size); +CJSON_PUBLIC(void) cJSON_free(void *object); + + +#endif diff --git a/src/pathcomp/backend/pathComp_ksp.c b/src/pathcomp/backend/pathComp_ksp.c new file mode 100644 index 0000000000000000000000000000000000000000..85c5e750506d56fb7c5511f6c675598adea49ee8 --- /dev/null +++ b/src/pathcomp/backend/pathComp_ksp.c @@ -0,0 +1,545 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo MartÃnez (ricardo.martinez@cttc.es) + */ + //////////////////////////////////////////////////////////////////////////////////////// +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <string.h> +#include <unistd.h> +#include <netdb.h> +#include <glib.h> +#include <sys/time.h> +#include <ctype.h> +#include <strings.h> +#include <time.h> +#include <math.h> +#include <fcntl.h> + +#include "pathComp_log.h" +#include "pathComp_tools.h" +#include "pathComp_ksp.h" + +// Global Variables +struct map_nodes_t *mapNodes; +struct graph_t *graph; +struct contextSet_t* contextSet; + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_ksp.c + * @brief Dijkstra algorithm + * + * @param srcMapIndex + * @param dstMapIndex + * @param g + * @param s + * @param SN + * @param RP + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void sp_comp(gint srcMapIndex, gint dstMapIndex, struct graph_t* g, struct service_t* s, + struct nodes_t* SN, struct compRouteOutputItem_t* RP) { + g_assert(s); + g_assert(g); + + // Set params into mapNodes related to the source nodes of the request + mapNodes->map[srcMapIndex].distance = 0.0; + mapNodes->map[srcMapIndex].latency = 0.0; + mapNodes->map[srcMapIndex].avaiBandwidth = 0.0; + + // Initialize the set Q and S + GList* S = NULL, * Q = NULL; + gint indexVertice = -1; + + // Add the source into the Q + struct nodeItem_t* nodeItem = g_malloc0(sizeof(struct nodeItem_t)); + if (nodeItem == NULL) { + DEBUG_PC("memory allocation failed\n"); + exit(-1); + } + // initialize some nodeItem attributes + nodeItem->distance = 0.0; + nodeItem->latency = 0.0; + duplicate_node_id(&mapNodes->map[srcMapIndex].verticeId, &nodeItem->node); + Q = g_list_insert_sorted(Q, nodeItem, sort_by_distance); + + // Check whether there is spurNode (SN) and rootPath (RP) + if (SN != NULL && RP != NULL) { + struct routeElement_t* re; + for (gint j = 0; j < RP->numRouteElements; j++) + { + // Get the source and target Nodes of the routeElement within the rootPath + re = &RP->routeElement[j]; + DEBUG_PC ("root Link: aNodeId: %s (%s) --> zNodeiId: %s (%s)", re->aNodeId.nodeId, re->aEndPointId, re->zNodeId.nodeId, re->zEndPointId); + + // if ingress of the root link (aNodeId) is the spurNode, then stops + if (compare_node_id(&re->aNodeId, SN) == 0) + { + DEBUG_PC ("root Link: aNodeId: %s and spurNode: %s -- stop exploring the rootPath (RP)", re->aNodeId.nodeId, SN->nodeId); + break; + } + // Extract from Q + GList* listnode = g_list_first(Q); + struct nodeItem_t* node = (struct nodeItem_t*)(listnode->data); + Q = g_list_remove(Q, node); + + //DEBUG_RL_RA ("Exploring node %s", node->node.nodeId); + indexVertice = graph_vertice_lookup(node->node.nodeId, g); + g_assert(indexVertice >= 0); + + // Get the indexTargetedVertice + gint indexTVertice = -1; + indexTVertice = graph_targeted_vertice_lookup(indexVertice, re->zNodeId.nodeId, g); + gint done = check_link(node, indexVertice, indexTVertice, g, s, &S, &Q, mapNodes); + (void)done; + + // Add to the S list + S = g_list_append(S, node); + } + + // Check that the first node in Q set is SpurNode, otherwise something went wrong ... + if (compare_node_id(&re->aNodeId, SN) != 0) { + //DEBUG_PC ("root Link: aNodeId: %s is NOT the spurNode: %s -- something wrong", re->aNodeId.nodeId, SN->nodeId); + g_list_free_full(S, g_free); + g_list_free_full(Q, g_free); + return; + } + } + while (g_list_length(Q) > 0) { + //Extract from Q set + GList* listnode = g_list_first(Q); + struct nodeItem_t* node = (struct nodeItem_t*)(listnode->data); + Q = g_list_remove(Q, node); + DEBUG_PC ("Q length: %d", g_list_length (Q)); + DEBUG_PC ("DeviceId: %s", node->node.nodeId); + + // visit all the links from u within the graph + indexVertice = graph_vertice_lookup(node->node.nodeId, g); + g_assert(indexVertice >= 0); + + // Check the targeted vertices from u + for (gint i = 0; i < g->vertices[indexVertice].numTargetedVertices; i++) { + gint done = check_link(node, indexVertice, i, g, s, &S, &Q, mapNodes); + (void)done; + } + // Add node into the S Set + S = g_list_append(S, node); + //DEBUG_PC ("S length: %d", g_list_length (S)); + } + g_list_free_full(S, g_free); + g_list_free_full(Q, g_free); + return; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_ksp.c + * @brief KSP computation using Dijkstra algorithm + * + * @param pred + * @param g + * @param s + * @param SN + * @param RP + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +gint ksp_comp(struct pred_t* pred, struct graph_t* g, struct service_t* s, + struct nodes_t *SN, struct compRouteOutputItem_t *RP) { + g_assert(pred); + g_assert(g); + g_assert(s); + + // Check the both ingress src and dst endpoints are in the graph + gint srcMapIndex = get_map_index_by_nodeId(s->service_endpoints_id[0].device_uuid, mapNodes); + if (srcMapIndex == -1) { + DEBUG_PC("ingress DeviceId: %s NOT in the graph", s->service_endpoints_id[0].device_uuid); + return -1; + } + + gint dstMapIndex = get_map_index_by_nodeId(s->service_endpoints_id[1].device_uuid, mapNodes); + if (dstMapIndex == -1) { + DEBUG_PC("egress DeviceId: %s NOT in the graph", s->service_endpoints_id[1].device_uuid); + return -1; + } + + // Compute the shortest path route + sp_comp(srcMapIndex, dstMapIndex, g, s, SN, RP); + + // Check that a feasible solution in term of latency and bandwidth is found + gint map_dstIndex = get_map_index_by_nodeId(s->service_endpoints_id[1].device_uuid, mapNodes); + struct map_t* dest_map = &mapNodes->map[map_dstIndex]; + if (!(dest_map->distance < INFINITY_COST)) { + DEBUG_PC("destination: %s NOT reachable", s->service_endpoints_id[1].device_uuid); + return -1; + } + + DEBUG_PC("AvailBw @ %s is %f", dest_map->verticeId.nodeId, dest_map->avaiBandwidth); + // Check that the computed available bandwidth is larger than 0.0 + if (dest_map->avaiBandwidth <= (gfloat)0.0) { + DEBUG_PC("dst: %s NOT REACHABLE", s->service_endpoints_id[1].device_uuid); + return -1; + } + DEBUG_PC("dst: %s REACHABLE", s->service_endpoints_id[1].device_uuid); + // Handle predecessors + build_predecessors(pred, s, mapNodes); + return 1; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_ksp.c + * @brief K-CSPF algorithm execution (YEN algorithm) + * + * @param s + * @param path + * @param g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void alg_comp(struct service_t* s, struct compRouteOutput_t* path, struct graph_t *g) { + g_assert(s); + g_assert(path); + g_assert(g); + + // create map of devices/nodes to handle the path computation using the context + mapNodes = create_map_node(); + build_map_node(mapNodes, g); + + // predecessors to store the computed path + struct pred_t* predecessors = create_predecessors(); + + struct service_endpoints_id_t* iEp = &(s->service_endpoints_id[0]); + struct service_endpoints_id_t* eEp = &(s->service_endpoints_id[1]); + + // Compute the 1st KSP path + gint done = ksp_comp (predecessors, g, s, NULL, NULL); + if (done == -1) { + DEBUG_PC("NO PATH FOUND %s[%s] ---> %s[%s]", iEp->device_uuid, iEp->endpoint_uuid, eEp->device_uuid, eEp->endpoint_uuid); + comp_route_connection_issue_handler(path, s); + g_free(mapNodes); g_free(predecessors); + return; + } + + // Construct the path from the computed predecessors + struct compRouteOutputItem_t* p = create_path_item(); + //print_predecessors(predecessors); + build_path(p, predecessors, s); + //DEBUG_PC ("Path is constructed"); + + gint indexDest = get_map_index_by_nodeId(eEp->device_uuid, mapNodes); + struct map_t* dst_map = &mapNodes->map[indexDest]; + // Get the delay and cost + memcpy(&p->cost, &dst_map->distance, sizeof(gdouble)); + memcpy(&p->availCap, &dst_map->avaiBandwidth, sizeof(dst_map->avaiBandwidth)); + memcpy(&p->delay, &dst_map->latency, sizeof(mapNodes->map[indexDest].latency)); + DEBUG_PC ("Computed Path Avail Bw: %f, Path Cost: %f, latency: %f", p->availCap, p->cost, p->delay); + print_path(p); + + // If 1st SP satisfies the requirements from the req, STOP + gboolean feasibleRoute = check_computed_path_feasability(s, p); + if (feasibleRoute == TRUE) { + DEBUG_PC("1st K-CSPF FEASIBLE, STOP!"); + print_path (p); + path->numPaths++; + + // Copy the serviceId + DEBUG_PC("contextId: %s", s->serviceId.contextId); + copy_service_id(&path->serviceId, &s->serviceId); + + // copy the service endpoints, in general, there will be 2 (point-to-point network connectivity services) + for (gint i = 0; i < s->num_service_endpoints_id; i++) { + struct service_endpoints_id_t* iEp = &(s->service_endpoints_id[i]); + struct service_endpoints_id_t* oEp = &(path->service_endpoints_id[i]); + copy_service_endpoint_id(oEp, iEp); + } + path->num_service_endpoints_id = s->num_service_endpoints_id; + + // Copy the computed path + struct path_t* targetedPath = &(path->paths[path->numPaths - 1]); + duplicate_path_t(p, targetedPath); + print_path_t (targetedPath); + g_free(predecessors); + g_free(p); + g_free(mapNodes); + return; + } + + DEBUG_PC("1st CSPF COMPUTATION IS NOT FEASIBLE --> TRIGGER K COMPUTATIONS"); + // Create A and B sets of paths to handle the YEN algorithm + struct path_set_t* A = create_path_set(); + struct path_set_t* B = create_path_set(); + + // Add the previously computed path into A->paths[0] + duplicate_path(p, &A->paths[0]); + + A->numPaths++; + g_free(predecessors); + g_free(p); + for (gint k = 1; k < MAX_KSP_VALUE; k++) { + DEBUG_PC("------------ kth (%d) ---------------------", k); + struct compRouteOutputItem_t* p = create_path_item(); + duplicate_path(&A->paths[k - 1], p); + // The spurNode ranges from near-end node of the first link to the near-end of the last link forming the kth path + gint i = 0; + struct compRouteOutputItem_t* rootPath = create_path_item(); + for (i = 0; i < p->numRouteElements; i++) { + struct nodes_t* spurNode = create_node(); + struct nodes_t* nextSpurNode = create_node(); + struct routeElement_t* re = &(p->routeElement[i]); + // Create predecessors to store the computed path + struct pred_t* predecessors = create_predecessors(); + // Clear previous mapNodes, i.e. create it again + g_free(mapNodes); + mapNodes = create_map_node(); + build_map_node(mapNodes, g); + struct nodes_t* n = &re->aNodeId; + duplicate_node_id(n, spurNode); + n = &re->zNodeId; + duplicate_node_id(n, nextSpurNode); + DEBUG_PC("spurNode: %s --> nextSpurNode: %s", spurNode->nodeId, nextSpurNode->nodeId); + + // rootPath contains a set of links of A[k-1] from the source Node till the SpurNode -> NextSpurNode + // Example: A[k-1] = {L1, L2, L3, L4}, i.e. " Node_a -- L1 --> Node_b -- L2 --> Node_c -- L3 --> Node_d -- L4 --> Node_e " + // E.g., for the ith iteration if the spurNode = Node_c and NextSpurNode = Node_d; then rootPath = {L1, L2, L3} + add_routeElement_path_back(re, rootPath); + DEBUG_PC("rootPath:"); + print_path(rootPath); + + // For all existing and computed paths p in A check if from the source to the NextSpurNode + // the set of links matches with those contained in the rootPath + // If YES, remove from the auxiliary graph the next link in p from NextSpurNode + // Otherwise do nothing + struct graph_t* gAux = create_graph(); + // Baseline graph + //build_graph (gAux); + duplicate_graph(g, gAux); + // Modified graph + modify_targeted_graph(gAux, A, rootPath, spurNode); + + // Trigger the computation of the path from src to dst constrained to traverse all the links from src + // to spurNode contained into rootPath over the resulting graph + if (ksp_comp(predecessors, gAux, s, spurNode, rootPath) == -1) { + DEBUG_PC("FAILED SP from %s via spurNode: %s to %s", iEp->device_uuid, spurNode->nodeId, eEp->device_uuid); + g_free(nextSpurNode); + g_free(spurNode); + g_free(gAux); + g_free(predecessors); + continue; + } + DEBUG_PC("SUCCESFUL SP from %s via spurNode: %s to %s", iEp->device_uuid, spurNode->nodeId, eEp->device_uuid); + // Create the node list from the predecessors + struct compRouteOutputItem_t* newKpath = create_path_item(); + build_path(newKpath, predecessors, s); + DEBUG_PC("new K (for k: %d) Path is built", k); + gint indexDest = get_map_index_by_nodeId(eEp->device_uuid, mapNodes); + struct map_t* dst_map = &mapNodes->map[indexDest]; + + memcpy(&newKpath->cost, &dst_map->distance, sizeof(gdouble)); + memcpy(&newKpath->availCap, &dst_map->avaiBandwidth, sizeof(dst_map->avaiBandwidth)); + memcpy(&newKpath->delay, &dst_map->latency, sizeof(mapNodes->map[indexDest].latency)); + DEBUG_PC("New PATH (@ kth: %d) ADDED to B[%d] - {Path Cost: %f, e2e latency: %f, bw: %f ", k, B->numPaths, newKpath->cost, newKpath->delay, newKpath->availCap); + // Add the computed kth SP to the heap B + duplicate_path(newKpath, &B->paths[B->numPaths]); + B->numPaths++; + DEBUG_PC("Number of B paths: %d", B->numPaths); + + g_free(newKpath); + g_free(nextSpurNode); + g_free(spurNode); + g_free(gAux); + g_free(predecessors); + } + + // If B is empty then stops + if (B->numPaths == 0) { + DEBUG_PC("B does not have any path ... the stops kth computation"); + break; + } + + // Sort the potential paths contained in B by cost and latency and available bandwidth + sort_path_set(B); + + // Add the lowest path into A[k] + DEBUG_PC("-------------------------------------------------------------"); + DEBUG_PC("To Add SP from B[0] to A[%d] --- Path Cost: %f, e2e Latency: %f", A->numPaths, B->paths[0].cost, B->paths[0].delay); + duplicate_path(&B->paths[0], &A->paths[A->numPaths]); + A->numPaths++; + DEBUG_PC("A Set size: %d", A->numPaths); + DEBUG_PC("-------------------------------------------------------------"); + + // Remove/pòp front element from the path set B (i.e. remove B[0]) + pop_front_path_set(B); + DEBUG_PC("B Set Size: %d", B->numPaths); + } + + // Copy the serviceId + copy_service_id(&path->serviceId, &s->serviceId); + // copy the service endpoints, in general, there will be 2 (point-to-point network connectivity services) + for (gint m = 0; m < s->num_service_endpoints_id; m++) { + struct service_endpoints_id_t* iEp = &(s->service_endpoints_id[m]); + struct service_endpoints_id_t* oEp = &(path->service_endpoints_id[m]); + copy_service_endpoint_id(oEp, iEp); + } + + for (gint ksp = 1; ksp < A->numPaths; ksp++){ + if (ksp >= MAX_KSP_VALUE) { + DEBUG_PC("Number Requested paths (%d) REACHED - STOP", ksp); + break; + } + gdouble feasibleRoute = check_computed_path_feasability(s, &A->paths[ksp]); + if (feasibleRoute == TRUE) { + DEBUG_PC("A[k-th%d] available: %f, pathCost: %f; latency: %f", ksp, A->paths[ksp].availCap, A->paths[ksp].cost, A->paths[ksp].delay); + struct compRouteOutputItem_t* pathaux = &A->paths[ksp]; + path->numPaths++; + struct path_t* targetedPath = &path->paths[path->numPaths - 1]; + duplicate_path_t(pathaux, targetedPath); + print_path_t(targetedPath); + remove_path_set(A); + remove_path_set(B); + return; + } + } + remove_path_set(A); + remove_path_set(B); + // No paths found --> Issue + DEBUG_PC("K-SP failed!!!"); + comp_route_connection_issue_handler(path, s); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_ksp.c + * @brief Iterates over the list of network connectivity service requests + * to compute their own paths fulfilling the constraints + * + * @param outputList + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void ksp_alg_execution_services(struct compRouteOutputList_t* outputList) { + g_assert(outputList); + g_assert(contextSet); + g_assert(serviceList); + + DEBUG_PC("----- Starting the KSP Computation ------"); + + // Iterate over the list of requested network connectivity services + for (gint i = 0; i < serviceList->numServiceList; i++) { + struct service_t* service = &(serviceList->services[i]); + + DEBUG_PC("Starting the Computation for ServiceId: %s [ContextId: %s]", service->serviceId.service_uuid, service->serviceId.contextId); + struct compRouteOutput_t* pathService = &(outputList->compRouteConnection[i]); + // check endpoints of the service are different (PE devices/nodes are different) + if (same_src_dst_pe_nodeid(service) == 0) { + DEBUG_PC("PEs are the same... no path computation"); + comp_route_connection_issue_handler(pathService, service); + outputList->numCompRouteConnList++; + continue; + } + // get the graph associated to the contextId in the contextSet, if no then error + struct graph_t* g = get_graph_by_contextId(contextSet, service->serviceId.contextId); + if (g == NULL) { + DEBUG_PC("The targeted contextId is NOT in the ContextSet ... then NO graph"); + comp_route_connection_issue_handler(pathService, service); + outputList->numCompRouteConnList++; + continue; + } + alg_comp(service, pathService, g); + outputList->numCompRouteConnList++; + + // for each network connectivity service, a single computed path (out of the KCSP) is retuned + // If path is found, then the selected resources must be pre-assigned into the context information + if (pathService->noPathIssue == NO_PATH_CONS_ISSUE) + { + continue; + } + struct path_t* path = &(pathService->paths[pathService->numPaths - 1]); + allocate_graph_resources(path, service, g); + allocate_graph_reverse_resources(path, service, g); + print_graph(g); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_ksp.c + * @brief handles the path computation triggering k-cspf algorithm + * + * @param compRouteOutput + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint pathComp_ksp_alg(struct compRouteOutputList_t * routeConnList) +{ + g_assert(routeConnList); + gint numSuccesPathComp = 0, numPathCompIntents = 0; + + DEBUG_PC ("================================================================"); + DEBUG_PC ("=========================== KSP ========================="); + DEBUG_PC ("================================================================"); + // increase the number of Path Comp. Intents + numPathCompIntents++; + gint http_code = HTTP_CODE_OK; + + // timestamp t0 + struct timeval t0; + gettimeofday(&t0, NULL); + + // Allocate memory for the context + contextSet = create_contextSet(); + // Build up the contextSet (>= 1) + build_contextSet(contextSet); + print_contextSet(contextSet); +#if 1 + //Triggering the path computation for each specific network connectivity service + ksp_alg_execution_services (routeConnList); + + // -- timestamp t1 + struct timeval t1, delta; + gettimeofday(&t1, NULL); + delta.tv_sec = t1.tv_sec - t0.tv_sec; + delta.tv_usec = t1.tv_usec - t0.tv_usec; + delta = tv_adjust(delta); + + numSuccesPathComp++; + update_stats_path_comp(routeConnList, delta, numSuccesPathComp, numPathCompIntents); + print_path_connection_list(routeConnList); +#endif + + g_free(contextSet); + return http_code; +} \ No newline at end of file diff --git a/src/pathcomp/backend/pathComp_ksp.h b/src/pathcomp/backend/pathComp_ksp.h new file mode 100644 index 0000000000000000000000000000000000000000..d542c493143ffe2187164c19711425aca7b7fcdf --- /dev/null +++ b/src/pathcomp/backend/pathComp_ksp.h @@ -0,0 +1,31 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + +#ifndef _PATHCOMP_KSP_H +#define _PATHCOMP_KSP_H + + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib-2.0/glib/gtypes.h> + +// Prototype of external declaration of functions +gint pathComp_ksp_alg (struct compRouteOutputList_t *); + +#endif diff --git a/src/pathcomp/backend/pathComp_log.c b/src/pathcomp/backend/pathComp_log.c new file mode 100644 index 0000000000000000000000000000000000000000..5f66e5a1edc8538dffcb20d89cbe2028a08d64d0 --- /dev/null +++ b/src/pathcomp/backend/pathComp_log.c @@ -0,0 +1,189 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + ///////////////////////////////////////////////////////////////////////////////////////// +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <string.h> +#include <unistd.h> +#include <netdb.h> +#include <glib.h> +#include <sys/time.h> +#include <fcntl.h> + +#include "pathComp_log.h" + + +//////////////////////////////////////////////////////////////////////////////////////// + /** + * @file pathComp_log.c + * @brief Create a new variable + * + * @param size + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct stream* stream_new(size_t size) +{ + /** check values */ + g_assert(size > 0); + + struct stream* stream = g_malloc0(sizeof(struct stream)); + if (stream == NULL) + { + DEBUG_PC("%s memory failed\n", __FUNCTION__); + exit(-1); + } + + stream->data = g_malloc0(size); + if (stream->data == NULL) + { + DEBUG_PC("%s memory failed\n", __FUNCTION__); + exit(-1); + } + stream->size = size; + + /** check values */ + g_assert(stream != NULL); + + return stream; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_log.c + * @brief removal of a stream variable + * + * @param stream + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void stream_free(struct stream* s) +{ + /** check values */ + g_assert(s != NULL); + + //DEBUG_PC("s: %p, s->data: %p", s, s->data); + /** free data */ + g_free(s->data); + g_free(s); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_log.c + * @brief reset the contents of the stream + * + * @param stream + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void stream_reset(struct stream* s) +{ + /** check values */ + g_assert(s != NULL); + g_assert(s->putp >= 0); + g_assert(s->endp >= 0); + g_assert(s->endp >= 0); + + /** reset */ + s->putp = 0; + s->endp = 0; + s->getp = 0; + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_log.c + * @brief Read over a TCP channel the contents + * + * @param channel + * @param ptr + * @nbytes + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +gint read_channel(GIOChannel* channel, guchar* ptr, gint nbytes) +{ + /** check values */ + g_assert(channel != NULL); + g_assert(ptr != NULL); + g_assert(nbytes >= 0); + + /** get the file descriptor */ + gint fd; + fd = g_io_channel_unix_get_fd(channel); + + gsize nread; + gint nleft; + GError* error = NULL; + GIOStatus status; + + nleft = nbytes; + + // Set blocking + int flags = fcntl(fd, F_GETFL, 0); + fcntl(fd, F_SETFL, flags &= ~O_NONBLOCK); + + while (nleft > 0) + { + status = g_io_channel_read_chars(channel, (void*)ptr, nleft, &nread, &error); + if (status != G_IO_STATUS_NORMAL) + { + //DEBUG_PC ("gio-test: ...from %d: G_IO_STATUS_%s\n", fd, + // (status == G_IO_STATUS_AGAIN ? "AGAIN" : + // (status == G_IO_STATUS_EOF ? "EOF" : + // (status == G_IO_STATUS_ERROR ? "ERROR" : "???")))); + return -1; + } + if (nread < 0) + { + return (nread); + } + else + { + if (nread == 0) + break; + } + + nleft -= nread; + ptr += nread; + } + + /** check values */ + g_assert(channel != NULL); + g_assert(ptr != NULL); + g_assert(nleft >= 0); + g_assert(nbytes >= 0); + + return nbytes - nleft; +} \ No newline at end of file diff --git a/src/pathcomp/backend/pathComp_log.h b/src/pathcomp/backend/pathComp_log.h new file mode 100644 index 0000000000000000000000000000000000000000..d9a14209cb2790fed45c93f0b134251f6a990b16 --- /dev/null +++ b/src/pathcomp/backend/pathComp_log.h @@ -0,0 +1,89 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + //////////////////////////////////////////////////////////////////////////////////////// + +#ifndef _PATHCOMP_LOG_H +#define _PATHCOMP_LOG_H + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib-2.0/glib/gtypes.h> + +#define MAXLENGTH 131072 + + /** Stream buffer. */ +struct stream +{ + struct stream *next; + + guchar* data; + + /** Put pointer. */ + gulong putp; + + /** Get pointer. */ + gulong getp; + + /** End of pointer. */ + gulong endp; + + /** Data size. */ + gulong size; +}; + +extern FILE* logfile; + +////////////////////////////////////////////////////// +// For debugging +////////////////////////////////////////////////////// +////////////////////////////////////////////////////// +// For debugging +////////////////////////////////////////////////////// +#define __SHORT_FILENAME__ \ + (strrchr(__FILE__,'/') \ + ? strrchr(__FILE__,'/')+1 \ + : __FILE__ \ + ) + +#define DEBUG_PC(format,...) \ +{ \ + if (logfile != NULL) \ + { \ + g_fprintf(logfile,"%s:%1.5d %30s "format"\n",\ + __SHORT_FILENAME__, \ + __LINE__, __FUNCTION__, ##__VA_ARGS__); \ + fflush(logfile); \ + } \ + else \ + { \ + g_fprintf(stdout,"%s:%1.5d %30s "format"\n", \ + __SHORT_FILENAME__, \ + __LINE__, __FUNCTION__, ##__VA_ARGS__); \ + fflush(stdout); \ + } \ +} + +//// Prototypes //////// +struct stream* stream_new(size_t); +void stream_free(struct stream*); +void stream_reset(struct stream*); + +gint read_channel(GIOChannel*, guchar*, gint); + +#endif \ No newline at end of file diff --git a/src/pathcomp/backend/pathComp_sp.c b/src/pathcomp/backend/pathComp_sp.c new file mode 100644 index 0000000000000000000000000000000000000000..735027fafcde1a6dfb9ce82faf3ba71a0bee56e5 --- /dev/null +++ b/src/pathcomp/backend/pathComp_sp.c @@ -0,0 +1,362 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + //////////////////////////////////////////////////////////////////////////////////////// +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <string.h> +#include <unistd.h> +#include <netdb.h> +#include <glib.h> +#include <sys/time.h> +#include <ctype.h> +#include <strings.h> +#include <time.h> +#include <math.h> +#include <fcntl.h> + +#include "pathComp_log.h" +#include "pathComp_tools.h" +#include "pathComp_sp.h" + +// Global Variables +struct map_nodes_t* mapNodes; +struct graph_t* graph; +struct contextSet_t* contextSet; + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_sp.c + * @brief Excecution Dijkstra algorithm + * + * @param srcMapIndex + * @param dstMapIndex + * @param g + * @param s + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void dijkstra(gint srcMapIndex, gint dstMapIndex, struct graph_t* g, struct service_t* s) { + g_assert(s); + g_assert(g); + + // Set params into mapNodes related to the source nodes of the request + mapNodes->map[srcMapIndex].distance = 0.0; + mapNodes->map[srcMapIndex].latency = 0.0; + mapNodes->map[srcMapIndex].avaiBandwidth = 0.0; + + // Initialize the set Q and S + GList* S = NULL, *Q = NULL; + gint indexVertice = -1; + + // Add the source into the Q + struct nodeItem_t* nodeItem = g_malloc0(sizeof(struct nodeItem_t)); + if (nodeItem == NULL) { + DEBUG_PC("memory allocation failed\n"); + exit(-1); + } + // initialize some nodeItem attributes + nodeItem->distance = 0.0; + nodeItem->latency = 0.0; + duplicate_node_id(&mapNodes->map[srcMapIndex].verticeId, &nodeItem->node); + Q = g_list_insert_sorted(Q, nodeItem, sort_by_distance); + + while (g_list_length(Q) > 0) { + //Extract from Q set + GList* listnode = g_list_first(Q); + struct nodeItem_t* node = (struct nodeItem_t*)(listnode->data); + Q = g_list_remove(Q, node); + DEBUG_PC("Q length: %d", g_list_length(Q)); + DEBUG_PC("DeviceId: %s", node->node.nodeId); + + // visit all the links from u within the graph + indexVertice = graph_vertice_lookup(node->node.nodeId, g); + g_assert(indexVertice >= 0); + + // Check the targeted vertices from u + for (gint i = 0; i < g->vertices[indexVertice].numTargetedVertices; i++) { + gint done = check_link(node, indexVertice, i, g, s, &S, &Q, mapNodes); + (void)done; + } + // Add node into the S Set + S = g_list_append(S, node); + //DEBUG_PC ("S length: %d", g_list_length (S)); + } + g_list_free_full(S, g_free); + g_list_free_full(Q, g_free); + return; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_sp.c + * @brief handling the Dijkstra algorithm + * + * @param pred + * @param g + * @param s + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +gint computation(struct pred_t* pred, struct graph_t* g, struct service_t* s) { + g_assert(pred); + g_assert(g); + g_assert(s); + + // Check the both ingress src and dst endpoints are in the graph + gint srcMapIndex = get_map_index_by_nodeId(s->service_endpoints_id[0].device_uuid, mapNodes); + if (srcMapIndex == -1) { + DEBUG_PC("ingress DeviceId: %s NOT in the graph", s->service_endpoints_id[0].device_uuid); + return -1; + } + + gint dstMapIndex = get_map_index_by_nodeId(s->service_endpoints_id[1].device_uuid, mapNodes); + if (dstMapIndex == -1) { + DEBUG_PC("egress DeviceId: %s NOT in the graph", s->service_endpoints_id[1].device_uuid); + return -1; + } + + // Compute the shortest path + dijkstra(srcMapIndex, dstMapIndex, g, s); + + // Check that a feasible solution in term of latency and bandwidth is found + gint map_dstIndex = get_map_index_by_nodeId(s->service_endpoints_id[1].device_uuid, mapNodes); + struct map_t* dest_map = &mapNodes->map[map_dstIndex]; + if (!(dest_map->distance < INFINITY_COST)) { + DEBUG_PC("destination: %s NOT reachable", s->service_endpoints_id[1].device_uuid); + return -1; + } + + DEBUG_PC("AvailBw @ %s is %f", dest_map->verticeId.nodeId, dest_map->avaiBandwidth); + // Check that the computed available bandwidth is larger than 0.0 + if (dest_map->avaiBandwidth <= (gfloat)0.0) { + DEBUG_PC("dst: %s NOT REACHABLE", s->service_endpoints_id[1].device_uuid); + return -1; + } + DEBUG_PC("dst: %s REACHABLE", s->service_endpoints_id[1].device_uuid); + // Handle predecessors + build_predecessors(pred, s, mapNodes); + + return 1; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_sp.c + * @brief CSPF algorithm execution + * + * @param s + * @param path + * @param g + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void computation_shortest_path(struct service_t* s, struct compRouteOutput_t* path, struct graph_t* g) { + g_assert(s); + g_assert(path); + g_assert(g); + + // create map of devices / nodes to handle the path computation using the context + mapNodes = create_map_node(); + build_map_node(mapNodes, g); + + // predecessors to store the computed path + struct pred_t* predecessors = create_predecessors(); + + struct service_endpoints_id_t* iEp = &(s->service_endpoints_id[0]); + struct service_endpoints_id_t* eEp = &(s->service_endpoints_id[1]); + + // SP computation + gint done = computation(predecessors, g, s); + if (done == -1) { + DEBUG_PC("NO PATH FOUND %s[%s] ---> %s[%s]", iEp->device_uuid, iEp->endpoint_uuid, eEp->device_uuid, eEp->endpoint_uuid); + comp_route_connection_issue_handler(path, s); + g_free(mapNodes); g_free(predecessors); + return; + } + + // Construct the path from the computed predecessors + struct compRouteOutputItem_t* p = create_path_item(); + //print_predecessors(predecessors); + build_path(p, predecessors, s); + //DEBUG_PC ("Path is constructed"); + + gint indexDest = get_map_index_by_nodeId(eEp->device_uuid, mapNodes); + struct map_t* dst_map = &mapNodes->map[indexDest]; + // Get the delay and cost + memcpy(&p->cost, &dst_map->distance, sizeof(gdouble)); + memcpy(&p->availCap, &dst_map->avaiBandwidth, sizeof(dst_map->avaiBandwidth)); + memcpy(&p->delay, &dst_map->latency, sizeof(mapNodes->map[indexDest].latency)); + DEBUG_PC("Computed Path Avail Bw: %f, Path Cost: %f, latency: %f", p->availCap, p->cost, p->delay); + print_path(p); + + gboolean feasibleRoute = check_computed_path_feasability(s, p); + if (feasibleRoute == TRUE) { + DEBUG_PC("SP Feasible"); + print_path(p); + path->numPaths++; + + // Copy the serviceId + DEBUG_PC("contextId: %s", s->serviceId.contextId); + copy_service_id(&path->serviceId, &s->serviceId); + + // copy the service endpoints, in general, there will be 2 (point-to-point network connectivity services) + for (gint i = 0; i < s->num_service_endpoints_id; i++) { + struct service_endpoints_id_t* iEp = &(s->service_endpoints_id[i]); + struct service_endpoints_id_t* oEp = &(path->service_endpoints_id[i]); + copy_service_endpoint_id(oEp, iEp); + } + path->num_service_endpoints_id = s->num_service_endpoints_id; + + // Copy the computed path + struct path_t* targetedPath = &(path->paths[path->numPaths - 1]); + duplicate_path_t(p, targetedPath); + print_path_t(targetedPath); + g_free(predecessors); + g_free(p); + g_free(mapNodes); + return; + } + + DEBUG_PC("SP FAILED!!!"); + comp_route_connection_issue_handler(path, s); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_sp.c + * @brief Iterates over the list of network connectivity service requests + * to compute their own paths fulfilling the constraints + * + * @param outputList + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ +void sp_execution_services(struct compRouteOutputList_t* oPathList) +{ + g_assert(oPathList); + g_assert(contextSet); + g_assert(serviceList); + + DEBUG_PC("----- Starting the SP Computation ------"); + + for (gint i = 0; i < serviceList->numServiceList; i++) { + struct service_t* service = &(serviceList->services[i]); + + DEBUG_PC("Starting the Computation for ServiceId: %s [ContextId: %s]", service->serviceId.service_uuid, service->serviceId.contextId); + struct compRouteOutput_t* pathService = &(oPathList->compRouteConnection[i]); + // check endpoints of the service are different (PE devices/nodes are different) + if (same_src_dst_pe_nodeid(service) == 0) { + DEBUG_PC("PEs are the same... no path computation"); + comp_route_connection_issue_handler(pathService, service); + oPathList->numCompRouteConnList++; + continue; + } + + // get the graph associated to the contextId in the contextSet, if no then error + struct graph_t* g = get_graph_by_contextId(contextSet, service->serviceId.contextId); + if (g == NULL) { + DEBUG_PC("The targeted contextId is NOT in the ContextSet ... then NO graph"); + comp_route_connection_issue_handler(pathService, service); + oPathList->numCompRouteConnList++; + continue; + } + + computation_shortest_path(service, pathService, g); + oPathList->numCompRouteConnList++; + + // for each network connectivity service, a single computed path (out of the KCSP) is retuned + // If path is found, then the selected resources must be pre-assigned into the context information + if (pathService->noPathIssue == NO_PATH_CONS_ISSUE) { + continue; + } + struct path_t* path = &(pathService->paths[pathService->numPaths - 1]); + allocate_graph_resources(path, service, g); + allocate_graph_reverse_resources(path, service, g); + print_graph(g); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_sp.c + * @brief handles the path computation for the constrained shortest path + * + * @param compRouteOutput + * + * @author Ricardo Martínez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +gint pathComp_sp_alg(struct compRouteOutputList_t* routeConnList) +{ + g_assert(routeConnList); + + gint numSuccesPathComp = 0, numPathCompIntents = 0; + + DEBUG_PC("================================================================"); + DEBUG_PC("=========================== SP ========================="); + DEBUG_PC("================================================================"); + // increase the number of Path Comp. Intents + numPathCompIntents++; + gint http_code = HTTP_CODE_OK; + + // timestamp t0 + struct timeval t0; + gettimeofday(&t0, NULL); + + // Allocate memory for the context + contextSet = create_contextSet(); + // Build up the contextSet (>= 1) + build_contextSet(contextSet); + print_contextSet(contextSet); +#if 1 + //Triggering the path computation for each specific network connectivity service + sp_execution_services(routeConnList); + + // -- timestamp t1 + struct timeval t1, delta; + gettimeofday(&t1, NULL); + delta.tv_sec = t1.tv_sec - t0.tv_sec; + delta.tv_usec = t1.tv_usec - t0.tv_usec; + delta = tv_adjust(delta); + + numSuccesPathComp++; + update_stats_path_comp(routeConnList, delta, numSuccesPathComp, numPathCompIntents); + print_path_connection_list(routeConnList); +#endif + + g_free(contextSet); + return http_code; +} + + diff --git a/src/pathcomp/backend/pathComp_sp.h b/src/pathcomp/backend/pathComp_sp.h new file mode 100644 index 0000000000000000000000000000000000000000..fd0807fea36a69e0456e7e839265505c37ac9f86 --- /dev/null +++ b/src/pathcomp/backend/pathComp_sp.h @@ -0,0 +1,31 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Martínez (ricardo.martinez@cttc.es) + */ + +#ifndef _PATHCOMP_SP_H +#define _PATHCOMP_SP_H + + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib-2.0/glib/gtypes.h> + + // Prototype of external declaration of functions +gint pathComp_sp_alg(struct compRouteOutputList_t*); + +#endif \ No newline at end of file diff --git a/src/pathcomp/backend/pathComp_tools.c b/src/pathcomp/backend/pathComp_tools.c new file mode 100644 index 0000000000000000000000000000000000000000..84cf63994405a07ff6c7fbb1da3fc667b0f0500f --- /dev/null +++ b/src/pathcomp/backend/pathComp_tools.c @@ -0,0 +1,2772 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo MartÃnez (ricardo.martinez@cttc.es) + */ +///////////////////////////////////////////////////////////////////////////////////////// + +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <string.h> +#include <unistd.h> +#include <netdb.h> +#include <glib.h> +#include <sys/time.h> +#include <ctype.h> +#include <strings.h> +#include <time.h> +#include <math.h> +#include <fcntl.h> +#include <uuid/uuid.h> +#include <errno.h> + +#include "pathComp_log.h" +#include "pathComp.h" +#include "pathComp_tools.h" + +gint numPathCompIntents = 0; // number of events triggering the path computation +//gint numSuccesPathComp = 0; // number of events resulting in succesfully path computations fulfilling the constraints +struct timeval total_path_comp_time; +gdouble totalReqBw = 0.0; +gdouble totalServedBw = 0.0; + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function for time processing + * + * @param a + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + //////////////////////////////////////////////////////////////////////////////////////// +struct timeval tv_adjust (struct timeval a) { + while (a.tv_usec >= 1000000) { + a.tv_usec -= 1000000; + a.tv_sec++; + } + + while (a.tv_usec < 0) { + a.tv_usec += 1000000; + a.tv_sec--; + } + return a; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief friendly function to copy safely strings + * + * @param dst + * @param src + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + //////////////////////////////////////////////////////////////////////////////////////// +void duplicate_string(gchar* dst, gchar* src) { + g_assert(dst); + g_assert(src); + strcpy(dst, src); + dst[strlen(dst)] = '\0'; + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function used to print the computed the path + * + * @param path + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void print_path (struct compRouteOutputItem_t *p) { + g_assert(p); + + DEBUG_PC ("=========== COMPUTED PATH ======================="); + DEBUG_PC ("Path Avail. Bw: %f, E2E Path Latency: %f, Path Cost: %f", p->availCap, p->delay, p->cost); + for (gint k = 0; k < p->numRouteElements; k++) { + DEBUG_PC ("aNodeId: %s (%s) --> zNodeId: %s (%s)", p->routeElement[k].aNodeId.nodeId, p->routeElement[k].aEndPointId, + p->routeElement[k].zNodeId.nodeId, p->routeElement[k].zEndPointId); + DEBUG_PC("linkId: %s", p->routeElement[k].linkId); + DEBUG_PC("aTopologyId: %s", p->routeElement[k].aTopologyId); + DEBUG_PC("zTopologyId: %s", p->routeElement[k].zTopologyId); + } + DEBUG_PC ("=================================================================="); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function used to print the output path formed by link Ids + * + * @param p + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_path_t(struct path_t* p) { + g_assert(p); + DEBUG_PC(" ============ COMPUTED OUTPUT PATH ================="); + DEBUG_PC("Path Avail Capacity: %f, Cost: %f, Latency: %f", p->path_capacity.value, + p->path_cost.cost_value, p->path_latency.fixed_latency); + DEBUG_PC("number of links of path %d", p->numPathLinks); + for (gint k = 0; k < p->numPathLinks; k++) { + DEBUG_PC("Link: %s", p->pathLinks[k].linkId); + for (gint l = 0; l < p->pathLinks[k].numLinkTopologies; l++) { + DEBUG_PC("end Link [%d] TopologyId: %s", l, p->pathLinks[k].linkTopologies[l].topologyId); + } + DEBUG_PC(" ContextId: %s", p->pathLinks[k].topologyId.contextId); + DEBUG_PC(" TopologyUUid: %s", p->pathLinks[k].topologyId.topology_uuid); + DEBUG_PC(" aDeviceId: %s", p->pathLinks[k].aDeviceId); + DEBUG_PC(" aEndpointId: %s", p->pathLinks[k].aEndPointId); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Returns the char (36 bytes) format of a uuid + * + * @param uuid + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +gchar* get_uuid_char(uuid_t uuid) { + gchar* uuidChar = g_malloc0(16); // uuid has 36 chars + if (uuidChar == NULL) { + DEBUG_PC("Memory Allocation failure"); + exit(-1); + } + uuid_unparse(uuid, (char *)uuidChar); + return uuidChar; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Makes a copy of the service identifier (including the context) + * + * @param o + * @param i + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void copy_service_id(struct serviceId_t* o, struct serviceId_t* i) { + g_assert(o); + g_assert(i); + + memcpy(o->contextId, i->contextId, sizeof(i->contextId)); + memcpy(o->service_uuid, i->service_uuid, sizeof(i->service_uuid)); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Makes a copy of the service endpoint identifier (including the topology (contect and topology id), device and endpoint (port)) + * + * @param oEp + * @param iEp + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void copy_service_endpoint_id(struct service_endpoints_id_t* oEp, struct service_endpoints_id_t* iEp) { + g_assert(oEp); + g_assert(iEp); + + // copy topology information + memcpy(oEp->topology_id.contextId, iEp->topology_id.contextId, sizeof(iEp->topology_id.contextId)); + memcpy(oEp->topology_id.topology_uuid, iEp->topology_id.topology_uuid, sizeof(iEp->topology_id.topology_uuid)); + + // copy the endpoint + memcpy(oEp->device_uuid, iEp->device_uuid, sizeof(iEp->device_uuid)); + memcpy(oEp->endpoint_uuid, iEp->endpoint_uuid, sizeof(iEp->endpoint_uuid)); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief From the set of contexts, it is returned the graph associated to that contexct matching + * with the passed contextId + * + * @param Set + * @param contextId + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct graph_t* get_graph_by_contextId(struct contextSet_t* Set, gchar* contextId) { + g_assert(Set); + g_assert(contextId); + + // iterate over the set of context. Pick the one matching with contextId, and return the graph. + // If not found, return NULL + struct graph_t* g = NULL; + for (gint i = 0; i < Set->num_context_set; i++) { + struct context_t* context = &(Set->contextList[i]); + if (strcmp(context->contextId, contextId) == 0) { + g = &(context->g); + return g; + } + } + return NULL; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Process the service constraint and maps them into the path constraints + * to be fulfilled + * + * @param path_constraints + * @param s + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct path_constraints_t * get_path_constraints(struct service_t* s) { + g_assert(s); + + struct path_constraints_t* path_constraints = g_malloc0(sizeof(struct path_constraints_t)); + if (path_constraints == NULL) { + DEBUG_PC("Memory Allocation Failure"); + exit(-1); + } + + char* eptr; + for (gint i = 0; i < s->num_service_constraints; i++) { + struct constraint_t* constraint = &(s->constraints[i]);; + if (strncmp((const char*)constraint->constraint_type, "bandwidth", 9) == 0) { + path_constraints->bwConstraint = (gdouble)(strtod((char*)constraint->constraint_value, &eptr)); + path_constraints->bw = TRUE; + //DEBUG_PC("Path Constraint Bw: %f", path_constraints->bwConstraint); + } + if (strncmp((const char*)constraint->constraint_type, "cost", 4) == 0) { + path_constraints->costConstraint = (gdouble)(strtod((char*)constraint->constraint_value, &eptr)); + path_constraints->cost = TRUE; + //DEBUG_PC("Path Constraint Cost: %f", path_constraints->costConstraint); + } + if (strncmp((const char*)constraint->constraint_type, "latency", 7) == 0) { + path_constraints->latencyConstraint = (gdouble)(strtod((char*)constraint->constraint_value, &eptr)); + path_constraints->latency = TRUE; + //DEBUG_PC("Path Constraint Latency: %f", path_constraints->latencyConstraint); + } + if (strncmp((const char*)constraint->constraint_type, "energy", 6) == 0) { + path_constraints->energyConstraint = (gdouble)(strtod((char*)constraint->constraint_value, &eptr)); + path_constraints->energy = TRUE; + //DEBUG_PC("Path Constraint Energy: %f", path_constraints->energyConstraint); + } + } + return path_constraints; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Creates the predecessors to keep the computed path + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct pred_t * create_predecessors () +{ + struct pred_t *predecessors = g_malloc0 (sizeof (struct pred_t)); + if (predecessors == NULL) + { + DEBUG_PC ("memory allocation failed\n"); + exit (-1); + } + return predecessors; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief create edge + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct edges_t* create_edge() +{ + struct edges_t* e = g_malloc0(sizeof(struct edges_t)); + if (e == NULL) + { + DEBUG_PC("Memory allocation failed\n"); + exit(-1); + } + return e; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Prints the list of the predecessors for a given computed Shortest Path + * + * @param p + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void print_predecessors (struct pred_t *p) +{ + g_assert (p); + DEBUG_PC ("Number of Predecessors: %d", p->numPredComp); + for (gint i = 0; i < p->numPredComp; i++) { + struct pred_comp_t *pComp = &(p->predComp[i]); + DEBUG_PC ("deviceId: %s", pComp->v.nodeId); + struct edges_t *e = &(pComp->e); + DEBUG_PC("Edge[#%d] (linkId): %s", i, e->linkId); + DEBUG_PC ("\t %s[%s] ===>", e->aNodeId.nodeId, e->aEndPointId); + DEBUG_PC("\t %s[%s]", e->zNodeId.nodeId, e->zEndPointId); + DEBUG_PC("\t aTopologyId: %s", e->aTopologyId); + DEBUG_PC("\t zTopologyId: %s", e->zTopologyId); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Builds the list of predecessors for the request destination using the computed Shortest Path + * being stored in map + * + * @param p + * @param s + * @param map + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void build_predecessors (struct pred_t *p, struct service_t *s, struct map_nodes_t *map) +{ + g_assert (p); + g_assert (s); + g_assert (map); + + struct nodes_t *v = create_node(); + duplicate_string(v->nodeId, s->service_endpoints_id[1].device_uuid); + + struct edges_t *e = create_edge (); + get_edge_from_map_by_node (e, v, map); + + // Get u (being source of edge e) + struct nodes_t u; + duplicate_node_id (&e->aNodeId, &u); + + // Add to the predecessors list + struct pred_comp_t *pred = &(p->predComp[p->numPredComp]); + duplicate_node_id (&u, &pred->v); + struct edges_t *e1 = &(pred->e); + duplicate_edge (e1, e); + p->numPredComp++; + // Back-trace edges till reaching the srcPEId + struct nodes_t* srcNode = create_node(); + duplicate_string(srcNode->nodeId, s->service_endpoints_id[0].device_uuid); + + while (compare_node_id (&u, srcNode) != 0) { + duplicate_node_id (&u, v); + get_edge_from_map_by_node (e, v, map); + // Get the u (being source of edge e) + duplicate_node_id (&e->aNodeId, &u); + // Get the new predecessor + struct pred_comp_t *pred = &p->predComp[p->numPredComp]; + // Add to the predecessors list + duplicate_node_id (&u, &pred->v); + struct edges_t *e1 = &(pred->e); + duplicate_edge (e1, e); + p->numPredComp++; + } + print_predecessors (p); + g_free (e); + g_free(v); + g_free(srcNode); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief It creates a struct nodes_t + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct nodes_t * create_node () +{ + struct nodes_t *n = g_malloc0 (sizeof (struct nodes_t)); + if (n == NULL) { + DEBUG_PC ("memory allocation problem"); + exit (-1); + } + return n; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief It creates a routeElement_t + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct routeElement_t * create_routeElement () +{ + struct routeElement_t *rE = g_malloc0 (sizeof (struct routeElement_t)); + if (rE == NULL) + { + DEBUG_PC ("memory allocation problem"); + exit (-1); + } + return rE; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief copy node ids + * + * @param src + * @param dst + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void duplicate_node_id (struct nodes_t *src, struct nodes_t *dst) +{ + g_assert (src); + g_assert (dst); + + //DEBUG_PC ("Duplicate nodeId for %s", src->nodeId); + strcpy (dst->nodeId, src->nodeId); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief compares a pair of node Ids + * + * @param a + * @param b + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint compare_node_id (struct nodes_t *a, struct nodes_t *b) +{ + g_assert (a); + g_assert (b); + return (memcmp (&a->nodeId, b->nodeId, strlen (b->nodeId))); +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief duplicate two routeElement_t + * + * @param src + * @param dst + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void duplicate_routeElement (struct routeElement_t *src, struct routeElement_t *dst) +{ + g_assert (src); + g_assert (dst); + + duplicate_node_id (&(src->aNodeId), &(dst->aNodeId)); + duplicate_node_id (&(src->zNodeId), &(dst->zNodeId)); + duplicate_string(dst->aEndPointId, src->aEndPointId); + duplicate_string(dst->zEndPointId, src->zEndPointId); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief duplicate two edges + * + * @param e1 (destination) + * @param e2 (source) + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void duplicate_edge (struct edges_t *e1, struct edges_t *e2) { + g_assert (e1); + g_assert (e2); + + duplicate_node_id (&e2->aNodeId, &e1->aNodeId); + duplicate_node_id (&e2->zNodeId, &e1->zNodeId); + //DEBUG_PC ("e->aNodeId: %s ---> e->zNodeId: %s", e1->aNodeId.nodeId, e1->zNodeId.nodeId); + duplicate_string(e1->aEndPointId, e2->aEndPointId); + duplicate_string(e1->zEndPointId, e2->zEndPointId); + duplicate_string(e1->linkId, e2->linkId); + duplicate_string(e1->interDomain_localId, e2->interDomain_localId); + duplicate_string(e1->interDomain_remoteId, e2->interDomain_remoteId); + duplicate_string(e1->aTopologyId, e2->aTopologyId); + duplicate_string(e1->zTopologyId, e2->zTopologyId); + + e1->unit = e2->unit; + memcpy(&e1->totalCap, &e2->totalCap, sizeof(gdouble)); + memcpy(&e1->availCap, &e2->availCap, sizeof(gdouble)); + + memcpy (&e1->cost, &e2->cost, sizeof (gdouble)); + memcpy (&e1->delay, &e2->delay, sizeof (gdouble)); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Duplicate path + * + * @param a - original + * @param b - copy + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void duplicate_path (struct compRouteOutputItem_t *a, struct compRouteOutputItem_t *b) { + g_assert (a); + g_assert (b); + memcpy (&b->availCap, &a->availCap, sizeof (gdouble)); + b->numRouteElements = a->numRouteElements; + memcpy(&b->cost, &a->cost, sizeof(gdouble)); + memcpy (&b->delay, &a->delay, sizeof (gdouble)); + for (gint k = 0; k < a->numRouteElements; k++) { + //DEBUG_PC ("aNodeId: %s // zNodeId: %s", a->routeElement[k].aNodeId.nodeId, a->routeElement[k].zNodeId.nodeId); + // aNodeId duplication + struct nodes_t *n1 = &(a->routeElement[k].aNodeId); + struct nodes_t *n2 = &(b->routeElement[k].aNodeId); + duplicate_node_id (n1, n2); + + //zNodeId duplication + n1 = &(a->routeElement[k].zNodeId); + n2 = &(b->routeElement[k].zNodeId); + duplicate_node_id (n1, n2); + duplicate_string(b->routeElement[k].aEndPointId, a->routeElement[k].aEndPointId); + duplicate_string(b->routeElement[k].zEndPointId, a->routeElement[k].zEndPointId); + duplicate_string(b->routeElement[k].linkId, a->routeElement[k].linkId); + duplicate_string(b->routeElement[k].aTopologyId, a->routeElement[k].aTopologyId); + duplicate_string(b->routeElement[k].zTopologyId, a->routeElement[k].zTopologyId); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Duplicate path from compRouteOutputItem_t to path_t + * + * @param a - original + * @param b - copy + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void duplicate_path_t(struct compRouteOutputItem_t* a, struct path_t* b) +{ + g_assert(a); + g_assert(b); + + memcpy(&b->path_capacity.value, &a->availCap, sizeof(gdouble)); + memcpy(&b->path_cost.cost_value, &a->cost, sizeof(gdouble)); + memcpy(&b->path_latency.fixed_latency, &a->delay, sizeof(gdouble)); + + b->numPathLinks = a->numRouteElements; + + for (gint k = 0; k < a->numRouteElements; k++) { + struct routeElement_t* rE = &(a->routeElement[k]); + struct pathLink_t* pL = &(b->pathLinks[k]); + + // copy the aDeviceId and aEndpointId, zDeviceId and zEndPointId + duplicate_string(pL->aDeviceId, rE->aNodeId.nodeId); + duplicate_string(pL->zDeviceId, rE->zNodeId.nodeId); + duplicate_string(pL->aEndPointId, rE->aEndPointId); + duplicate_string(pL->zEndPointId, rE->zEndPointId); + + duplicate_string(pL->topologyId.topology_uuid, rE->aTopologyId); + duplicate_string(pL->topologyId.contextId, rE->contextId); + + //copy the linkId + duplicate_string(pL->linkId, rE->linkId); + pL->numLinkTopologies++; + duplicate_string(pL->linkTopologies[pL->numLinkTopologies - 1].topologyId, rE->aTopologyId); + pL->numLinkTopologies++; + duplicate_string(pL->linkTopologies[pL->numLinkTopologies - 1].topologyId, rE->zTopologyId); + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Return the index into mapN related nodeId + * + * @param nodeId + * @para mapN + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint get_map_index_by_nodeId (gchar *nodeId, struct map_nodes_t * mapN) +{ + gint index = -1; + gint i = 0; + + for (i = 0; i < mapN->numMapNodes; i++) + { + //DEBUG_PC ("i: %d; current: %s // targeted: %s", i, mapN->map[i].verticeId.nodeId, nodeId); + if (memcmp (mapN->map[i].verticeId.nodeId, nodeId, strlen (nodeId)) == 0) + { + index = i; + //DEBUG_PC ("Index: %d", index); + return index; + } + } + //DEBUG_PC ("Index: %d", index); + return index; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Get the edge e enabling reaching the computed v in mapNodes + * + * @param e + * @param v + * @param mapN + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void get_edge_from_map_by_node (struct edges_t *e, struct nodes_t* v, struct map_nodes_t *mapN) { + + //DEBUG_PC ("Get the Edge into map from node v: %s", v.nodeId); + // Get the edge reaching the node v from mapNodes + gint map_vIndex = get_map_index_by_nodeId (v->nodeId, mapN); + + //DEBUG_PC ("aNodeId: %s --> zNodeId: %s", mapN->map[map_vIndex].predecessor.aNodeId.nodeId, mapN->map[map_vIndex].predecessor.zNodeId.nodeId); + + struct edges_t *te = &(mapN->map[map_vIndex].predecessor); + duplicate_edge (e, te); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Get the edge from the predecessors array for a given node n + * + * @param e + * @param n + * @param predecessors + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void get_edge_from_predecessors (struct edges_t *e, struct nodes_t* n, struct pred_t *predecessors) { + g_assert(predecessors); + + DEBUG_PC ("Get edge outgoing node %s from predecessors list", n->nodeId); + //print_predecessors (predecessors); + for (gint i = 0; i < predecessors->numPredComp; i++) { + struct pred_comp_t *pred = &(predecessors->predComp[i]); + if (compare_node_id (n, &pred->v) == 0) { + // Add to the predecessors list + struct edges_t *te = &(pred->e); + DEBUG_PC("add e (linkId): %s", te->linkId); + duplicate_edge (e, te); + return; + } + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Construct the path using the predecessors list + * + * @param path + * @param predecessors + * @param s + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void build_path (struct compRouteOutputItem_t *p, struct pred_t *predecessors, struct service_t *s) { + //DEBUG_PC ("\n"); + // Get the source device Id of the network connectivity service + struct nodes_t *v = create_node(); + duplicate_string(v->nodeId, s->service_endpoints_id[0].device_uuid); + + struct edges_t* e = create_edge(); + + // Get the edge for v in predecessors + get_edge_from_predecessors (e, v, predecessors); + // Get the target for e + struct nodes_t u; + duplicate_node_id (&e->zNodeId, &u); + //DEBUG_PC ("u: %s", u.nodeId); + struct path_constraints_t* pathCons = get_path_constraints(s); + + // Add route element to the path being constructed + gint k = 0; + duplicate_node_id (&e->aNodeId, &p->routeElement[k].aNodeId); + duplicate_node_id (&e->zNodeId, &p->routeElement[k].zNodeId); + duplicate_string(p->routeElement[k].aEndPointId, e->aEndPointId); + duplicate_string(p->routeElement[k].zEndPointId, e->zEndPointId); + duplicate_string(p->routeElement[k].linkId, e->linkId); + duplicate_string(p->routeElement[k].aTopologyId, e->aTopologyId); + duplicate_string(p->routeElement[k].zTopologyId, e->zTopologyId); + duplicate_string(p->routeElement[k].contextId, s->serviceId.contextId); + p->numRouteElements++; + + // Get the destination device Id of the network connectivity service + struct nodes_t* dst = create_node(); + duplicate_string(dst->nodeId, s->service_endpoints_id[1].device_uuid); + while (compare_node_id (&u, dst) != 0) + { + k++; + p->numRouteElements++; + // v = u + duplicate_node_id (&u, v); + get_edge_from_predecessors (e, v, predecessors); + // Get the target u + duplicate_node_id (&e->zNodeId, &u); + // Add route element to the path being constructed + duplicate_node_id (&e->aNodeId, &p->routeElement[k].aNodeId); + duplicate_node_id (&e->zNodeId, &p->routeElement[k].zNodeId); + duplicate_string(p->routeElement[k].aEndPointId, e->aEndPointId); + duplicate_string(p->routeElement[k].zEndPointId, e->zEndPointId); + duplicate_string(p->routeElement[k].linkId, e->linkId); + duplicate_string(p->routeElement[k].aTopologyId, e->aTopologyId); + duplicate_string(p->routeElement[k].zTopologyId, e->zTopologyId); + duplicate_string(p->routeElement[k].contextId, s->serviceId.contextId); + + // copy the contextId + //duplicate_string(p->routeElement[k].contextId, s->service_endpoints_id[0].topology_id.contextId); + } + g_free(e); g_free(v); g_free(pathCons); + //DEBUG_PC ("Path is constructed"); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Print the graph for DEBUG_PCging purposes + * + * @param g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void print_graph (struct graph_t *g) +{ + DEBUG_PC ("================================================================"); + DEBUG_PC ("=========================== GRAPH =========================="); + DEBUG_PC ("================================================================"); + + DEBUG_PC("Graph Num Vertices: %d", g->numVertices); + + gint i = 0, j = 0, k = 0; + for (i = 0; i < g->numVertices; i++) + { + DEBUG_PC ("Head Vertice [%s]", g->vertices[i].verticeId.nodeId); + for (j = 0; j < g->vertices[i].numTargetedVertices; j++) + { + DEBUG_PC (" Tail Vertice: %s", g->vertices[i].targetedVertices[j].tVertice.nodeId); + for (k = 0; k < g->vertices[i].targetedVertices[j].numEdges; k++) + { + struct edges_t *e = &(g->vertices[i].targetedVertices[j].edges[k]); + DEBUG_PC ("%s(%s) --> %s(%s) [C: %f, Bw: %f b/s, Delay: %f ms]", e->aNodeId.nodeId, e->aEndPointId, e->zNodeId.nodeId, + e->zEndPointId, e->cost, e->availCap, e->delay); + } + } + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Look for a given edge into the graph + * + * @param verticeIndex + * @param targetedVerticeIndex + * @param e + * @param g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint graph_edge_lookup (gint verticeIndex, gint targetedVerticeIndex, struct edges_t *e, struct graph_t *g) { + gint indexEdge = -1; + + for (gint j = 0; j < g->vertices[verticeIndex].targetedVertices[targetedVerticeIndex].numEdges; j++) { + struct edges_t *e2 = &(g->vertices[verticeIndex].targetedVertices[targetedVerticeIndex].edges[j]); + if ((compare_node_id (&e->aNodeId, &e2->aNodeId) == 0) && + (compare_node_id (&e->zNodeId, &e2->zNodeId) == 0) && + (strcmp (e->aEndPointId, e2->aEndPointId) == 0) && + (strcmp (e->zEndPointId, e2->zEndPointId) == 0) && + (strcmp(e->linkId, e2->linkId) == 0)) { + DEBUG_PC ("%s (%s) --> %s (%s) [linkId: %s] FOUND in the Graph at index: %d", e->aNodeId.nodeId, e->aEndPointId, e->zNodeId.nodeId, + e->zEndPointId, e->linkId, j); + indexEdge = j; + return indexEdge; + } + } + return indexEdge; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Look for a given vertice within the graph using the nodeId + * + * @param nodeId + * @param g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint graph_vertice_lookup (gchar *nodeId, struct graph_t *g) +{ + gint index = -1; + //DEBUG_PC("Searching Node: %s", nodeId); + for (gint i = 0; i < g->numVertices; i++) { + //DEBUG_PC("Checked Graph Node: %s", g->vertices[i].verticeId.nodeId); + if (memcmp (g->vertices[i].verticeId.nodeId, nodeId, strlen (nodeId)) == 0) + { + index = i; + //DEBUG_PC ("%s is found in the graph vertice [%d]", nodeId, index); + break; + } + } + return (index); +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Check if a nodeId is already considered into the set of targeted vertices from a given vertice + * + * @param nodeId + * @param vIndex + * @param g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint graph_targeted_vertice_lookup (gint vIndex, gchar *nodeId, struct graph_t *g) +{ + gint addedTargetedVerticeIndex = -1; + gint i = 0; + + if (g->vertices[vIndex].numTargetedVertices == 0) + { + return (addedTargetedVerticeIndex); + } + + for (i = 0; i < g->vertices[vIndex].numTargetedVertices; i++) + { + if (memcmp (g->vertices[vIndex].targetedVertices[i].tVertice.nodeId, nodeId, strlen (nodeId)) == 0) + { + DEBUG_PC ("Targeted %s reachable from %s", nodeId, g->vertices[vIndex].verticeId.nodeId); + addedTargetedVerticeIndex = i; + return (addedTargetedVerticeIndex); + } + } + // not found ... + return (addedTargetedVerticeIndex); +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Check if a nodeId is already considered into the set of targeted vertices from a given vertice, if not to be added + * + * @param nodeId + * @param vIndex + * @param g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint graph_targeted_vertice_add (gint vIndex, gchar *nodeId, struct graph_t *g) +{ + gint addedTargetedVerticeIndex = -1; + gint i = 0; + + if (g->vertices[vIndex].numTargetedVertices == 0) + { + //DEBUG_PC ("targeted vertice %s being reachable from vertice %s", nodeId, g->vertices[vIndex].verticeId.nodeId); + addedTargetedVerticeIndex = 0; + return (addedTargetedVerticeIndex); + } + + for (i = 0; i < g->vertices[vIndex].numTargetedVertices; i++) + { + if (memcmp (g->vertices[vIndex].targetedVertices[i].tVertice.nodeId, nodeId, strlen (nodeId)) == 0) + { + //DEBUG_PC ("Targeted vertice %s is already considered in the reachable from vertice %s", nodeId, g->vertices[vIndex].verticeId.nodeId); + addedTargetedVerticeIndex = -1; + return (addedTargetedVerticeIndex); + } + } + // It is not found, next to be added at i position + addedTargetedVerticeIndex = i; + return (addedTargetedVerticeIndex); +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Remove edge from the graph + * + * @param g + * @param e + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +void remove_edge_from_graph (struct graph_t *g, struct edges_t *e) +{ + // Find the ingress vertice into the graph + DEBUG_PC ("Removing from Graph %s[%s]) ---> %s[%s] (linkId: %s)", e->aNodeId.nodeId, e->aEndPointId, e->zNodeId.nodeId, e->aEndPointId, e->linkId); + gint verticeIndex = -1; + verticeIndex = graph_vertice_lookup (e->aNodeId.nodeId, g); + if (verticeIndex == -1) { + DEBUG_PC ("Edge w/ %s is NOT in the Graph!!", e->aNodeId.nodeId); + return; + } + + // Find the targeted vertice from vertice Id + gint targetedVerticeIndex = -1; + targetedVerticeIndex = graph_targeted_vertice_lookup (verticeIndex, e->zNodeId.nodeId, g); + if (targetedVerticeIndex == -1) { + DEBUG_PC ("%s --> %s NOT in the Graph!!", e->aNodeId.nodeId, e->zNodeId.nodeId); + return; + } + + //DEBUG_PC ("%s --> %s found in the Graph", e->aNodeId.nodeId, e->zNodeId.nodeId); + + // Get the edge position + gint edgeIndex = -1; + edgeIndex = graph_edge_lookup (verticeIndex, targetedVerticeIndex, e, g); + if (edgeIndex == -1) { + DEBUG_PC ("%s --> %s NOT in the Graph!!", e->aNodeId.nodeId, e->zNodeId.nodeId); + return; + } + + //DEBUG_PC ("%s --> %s FOUND in Graph w/ edgeIndex: %d", e->aNodeId.nodeId, e->zNodeId.nodeId, edgeIndex); + + // Remove the edge + //DEBUG_PC ("Start Removing %s --> %s from Graph", e->aNodeId.nodeId, e->zNodeId.nodeId); + struct targetNodes_t *v = &(g->vertices[verticeIndex].targetedVertices[targetedVerticeIndex]); + for (gint j = edgeIndex; j < v->numEdges; j++) { + struct edges_t *e1 = &(v->edges[j]); + struct edges_t *e2 = &(v->edges[j+1]); + duplicate_edge (e1, e2); + } + v->numEdges --; + DEBUG_PC ("Number of Edges between %s and %s is %d", e->aNodeId.nodeId, e->zNodeId.nodeId, v->numEdges); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief create the pointer for keeping a set of the paths (struct compRouteOutput_t) + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct path_set_t * create_path_set () +{ + struct path_set_t * p = g_malloc0 (sizeof (struct path_set_t)); + if (p == NULL) + { + DEBUG_PC ("Memory allocation problem"); + exit (-1); + } + return p; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Remove the path set + * + * @param p + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2021 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void remove_path_set(struct path_set_t* p) +{ + g_assert(p); + g_free(p); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Create map of nodes to handle the path computation + * + * @param mapN + * @param g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void build_map_node (struct map_nodes_t *mapN, struct graph_t *g) +{ + //DEBUG_PC ("Construction of the Map of Nodes"); + for (gint i = 0; i < g->numVertices; i++) + { + duplicate_node_id (&g->vertices[i].verticeId, &mapN->map[i].verticeId); + mapN->map[i].distance = INFINITY_COST; + mapN->map[i].avaiBandwidth = 0.0; + mapN->map[i].latency = INFINITY_COST; + mapN->numMapNodes++; + } + //DEBUG_PC ("mapNodes formed by %d Nodes", mapN->numMapNodes); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for path of struct compRouteOutputList_t * + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct compRouteOutputList_t * create_route_list () +{ + struct compRouteOutputList_t *p = g_malloc0 (sizeof (struct compRouteOutputList_t)); + if (p == NULL) + { + DEBUG_PC ("Memory Allocation Problem"); + exit (-1); + } + return p; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for path of struct compRouteOutputItem_t * + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct compRouteOutputItem_t *create_path_item () +{ + struct compRouteOutputItem_t *p = g_malloc0 (sizeof (struct compRouteOutputItem_t)); + if (p == NULL) { + DEBUG_PC ("Memory Allocation Problem"); + exit (-1); + } + return p; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Sort the set of paths according to the metric (1st criteria) and latency (2nd criteria) + * + * @params setP + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void sort_path_set(struct path_set_t* setP) { + g_assert(setP); + // Sort the paths contained in setP by shotest metric and latency + float epsilon = 0.0000001; + + for (gint i = 0; i < setP->numPaths; i++) { + for (gint j = 0; j < (setP->numPaths - i - 1); j++) { + struct compRouteOutputItem_t* path1 = &setP->paths[j]; + struct compRouteOutputItem_t* path2 = &setP->paths[j + 1]; + + struct compRouteOutputItem_t* pathTmp = create_path_item(); + // 1st Criteria (avail Bw) + if ((path2->availCap - path1->availCap > 0.0) && (fabs(path1->availCap - path2->availCap) > epsilon)) { + duplicate_path(path1, pathTmp); + duplicate_path(path2, path1); + duplicate_path(pathTmp, path2); + g_free(pathTmp); + continue; + } + else if ((path1->availCap - path2->availCap > 0.0) && (fabs(path1->availCap - path2->availCap) > epsilon)) { + g_free(pathTmp); + continue; + } + // likely the same available bw between path1 and path2 + else if (fabs(path1->availCap - path2->availCap) < epsilon) { + // 2nd criteria: sort path cost + if (path1->cost > path2->cost) { + duplicate_path(path1, pathTmp); + duplicate_path(path2, path1); + duplicate_path(pathTmp, path2); + g_free(pathTmp); + continue; + } + else if (path1->cost < path2->cost) { + g_free(pathTmp); + continue; + } + // 3rd criteria: same path cost, prioritize the one with lowest e2e latency + else if (path1->cost == path2->cost) { + if ((path2->delay - path1->delay > 0.0) && (fabs(path1->delay - path2->delay) > epsilon)) { + g_free(pathTmp); + continue; + } + else if ((path1->delay - path2->delay > 0.0) && (fabs(path1->delay - path2->delay) > epsilon)) { + duplicate_path(path1, pathTmp); + duplicate_path(path2, path1); + duplicate_path(pathTmp, path2); + g_free(pathTmp); + continue; + } + // Same bw, same cost and same latency, path1 and path2 are practically the same + else if (fabs(path1->delay - path2->delay) < epsilon) { + g_free(pathTmp); + continue; + } + } + } + } + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Remove first element from the path sets + * + * @params setP + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void pop_front_path_set (struct path_set_t *setP) { + for (gint j = 0; j < setP->numPaths - 1; j++) { + struct compRouteOutputItem_t *path1 = &setP->paths[j]; + struct compRouteOutputItem_t *path2 = &setP->paths[j+1]; + duplicate_path (path2, path1); + } + setP->numPaths--; + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Add routeElement to the back of the path + * + * @param rE + * @param p + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void add_routeElement_path_back (struct routeElement_t *rE, struct compRouteOutputItem_t *p) +{ + //DEBUG_PC ("p->numRouteElements: %d", p->numRouteElements); + p->numRouteElements++; + gint index = p->numRouteElements - 1; + + struct nodes_t *pn = &(p->routeElement[index].aNodeId); + struct nodes_t *rEn = &(rE->aNodeId); + + // duplicate aNodeId + duplicate_node_id (rEn, pn); + pn = &(p->routeElement[index].zNodeId); + rEn = &(rE->zNodeId); + duplicate_node_id (rEn, pn); + duplicate_string(p->routeElement[index].aEndPointId, rE->aEndPointId); + duplicate_string(p->routeElement[index].zEndPointId, rE->zEndPointId); + duplicate_string(p->routeElement[index].linkId, rE->linkId); + duplicate_string(p->routeElement[index].aTopologyId, rE->aTopologyId); + duplicate_string(p->routeElement[index].zTopologyId, rE->zTopologyId); + + return; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief This function compares ap and rootPath. If all the links are equal between both ap and rootPath till the sN, then the link from sN to next node + * ap is returned + * + * @params ap + * @params p + * @params sN + * @params e + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gboolean matching_path_rootPath (struct compRouteOutputItem_t *ap, struct compRouteOutputItem_t *rootPath, struct nodes_t *sN, struct edges_t *e) { + gint j = 0; + gboolean ret = FALSE; + while ((j < ap->numRouteElements) && (j < rootPath->numRouteElements)) { + if ((memcmp (ap->routeElement[j].aNodeId.nodeId, rootPath->routeElement[j].aNodeId.nodeId, sizeof (ap->routeElement[j].aNodeId.nodeId)) == 0) && + //(memcmp (ap->routeElement[j].zNodeId.nodeId, rootPath->routeElement[j].zNodeId.nodeId, sizeof (ap->routeElement[j].zNodeId.nodeId)) != 0) && + (memcmp (sN->nodeId, rootPath->routeElement[j].aNodeId.nodeId, sizeof (ap->routeElement[j].aNodeId.nodeId)) == 0)) { + duplicate_node_id (&ap->routeElement[j].aNodeId, &e->aNodeId); + duplicate_node_id (&ap->routeElement[j].zNodeId, &e->zNodeId); + duplicate_string(e->aEndPointId, ap->routeElement[j].aEndPointId); + duplicate_string(e->zEndPointId, ap->routeElement[j].zEndPointId); + duplicate_string(e->linkId, ap->routeElement[j].linkId); + return TRUE; + } + if ((memcmp (ap->routeElement[j].aNodeId.nodeId, rootPath->routeElement[j].aNodeId.nodeId, sizeof (ap->routeElement[j].aNodeId.nodeId)) == 0) && + (memcmp (ap->routeElement[j].zNodeId.nodeId, rootPath->routeElement[j].zNodeId.nodeId, sizeof (ap->routeElement[j].zNodeId.nodeId)) == 0)) { + j++; + continue; + } + + if ((memcmp (ap->routeElement[j].aNodeId.nodeId, rootPath->routeElement[j].aNodeId.nodeId, sizeof (ap->routeElement[j].aNodeId.nodeId)) != 0) || + (memcmp (ap->routeElement[j].zNodeId.nodeId, rootPath->routeElement[j].zNodeId.nodeId, sizeof (ap->routeElement[j].zNodeId.nodeId)) != 0)) { + //DEBUG_PC ("ap and rootPath not in the same path"); + return ret; + } + } + return ret; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief This function is used to modify the graph to be used for running the subsequent SP computations acording to the YEN algorithm principles + * + * @params g + * @params A + * @params rootPath + * @params spurNode + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void modify_targeted_graph (struct graph_t *g, struct path_set_t *A, struct compRouteOutputItem_t * rootPath, struct nodes_t * spurNode) { + //DEBUG_PC ("Modify the Targeted graph according to the Yen algorithm principles"); + for (gint j = 0; j < A->numPaths; j++) + { + struct compRouteOutputItem_t *ap = &A->paths[j]; + struct edges_t *e = create_edge (); + gboolean ret = FALSE; + ret = matching_path_rootPath (ap, rootPath, spurNode, e); + if (ret == TRUE) { + //DEBUG_PC ("Removal %s [%u]--> %s [%u] from the graph", e->aNodeId.nodeId, e->aLinkId, e->zNodeId.nodeId, e->zLinkId); + remove_edge_from_graph (g, e); + //DEBUG_PC ("Print Resulting Graph"); + //print_graph (g); + g_free (e); + } + if (ret == FALSE) + { + g_free (e); + continue; + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Supporting fucntion to Check if a nodeId is already in the items of a given GList + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint find_nodeId (gconstpointer data, gconstpointer userdata) +{ + /** check values */ + g_assert(data != NULL); + g_assert(userdata != NULL); + + struct nodeItem_t *SNodeId = (struct nodeItem_t *)data; + guchar * nodeId = (guchar *)userdata; + + //DEBUG_PC ("SNodeId (%s) nodeId (%s)", SNodeId->node.nodeId, nodeId); + + if (!memcmp(SNodeId->node.nodeId, nodeId, strlen (SNodeId->node.nodeId))) + { + return (0); + } + return -1; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Explores the link between u and v + * + * @param u + * @param v + * @param g + * @param s + * @param S + * @param Q + * @param mapNodes + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint check_link (struct nodeItem_t *u, gint indexGraphU, gint indexGraphV, struct graph_t *g, + struct service_t *s, GList **S, GList **Q, struct map_nodes_t *mapNodes) { + g_assert(g); + g_assert(s); + g_assert(mapNodes); + + struct targetNodes_t *v = &(g->vertices[indexGraphU].targetedVertices[indexGraphV]); + DEBUG_PC("Explored link (u ===> v):"); + DEBUG_PC("u: %s ====>", u->node.nodeId); + DEBUG_PC("====> v: %s", v->tVertice.nodeId); + + // v already explored in S? then, discard it + GList *found = g_list_find_custom (*S, v->tVertice.nodeId, find_nodeId); + if (found != NULL) { + DEBUG_PC ("v (%s) in S, discard to explore it!", v->tVertice.nodeId); + return 0; + } + + // Get the set of constraints imposed by the service + struct path_constraints_t* path_constraints = get_path_constraints(s); + gdouble distance_through_u = INFINITY_COST; + gdouble latency_through_u = INFINITY_COST; + gint i = 0; + + // Check bandwidth requirement is fulfillied on edge u --> v + gint foundAvailBw = 0; + gdouble edgeAvailBw = 0.0; + for (i = 0; i < v->numEdges; i++) { + struct edges_t *e = &(v->edges[i]); + memcpy (&edgeAvailBw, &(e->availCap), sizeof (gdouble)); + DEBUG_PC("edge:u ===> v"); + DEBUG_PC ("%s[%s] ===>", u->node.nodeId, e->aEndPointId); + DEBUG_PC("====> %s[%s]", v->tVertice.nodeId, e->zEndPointId); + DEBUG_PC("edge available bw: %f", edgeAvailBw); + + // if network service constraint specifies "bandwidth" needs (assuming coherent units) + if (path_constraints->bw == TRUE) { + if (edgeAvailBw < path_constraints->bwConstraint) { + continue; + } + else { + foundAvailBw = 1; + break; + } + } + } + // if bw path constraint is specified but not sastified ... discard the edge + if ((path_constraints->bw == TRUE) && (foundAvailBw == 0)) + { + DEBUG_PC ("AvailBw: %f < path_constraint: %f -- Discard Edge", edgeAvailBw, path_constraints->bwConstraint); + g_free(path_constraints); + return 0; + } + + gint indexEdge = i; // get the index for the explored edge + // Update distance, latency and availBw through u to reach v + gint map_uIndex = get_map_index_by_nodeId (u->node.nodeId, mapNodes); + struct map_t *u_map = &mapNodes->map[map_uIndex]; + distance_through_u = u_map->distance + v->edges[indexEdge].cost; + latency_through_u = u_map->latency + v->edges[indexEdge].delay; + gdouble availBw_through_u = 0.0; + + // ingress endpoint (u) is the src of the request + if (strcmp (u->node.nodeId, s->service_endpoints_id[0].device_uuid) == 0) { + //DEBUG_PC ("AvailBw %f on %s --> %s", edgeAvailBw, u->node.nodeId, v->tVertice.nodeId); + memcpy (&availBw_through_u, &edgeAvailBw, sizeof (gdouble)); + } + else { + // Get the minimum available bandwidth between the src-->u and the new added edge u-->v + //DEBUG_PC ("Current AvailBw: %f from src to %s", u_map->avaiBandwidth, u->node.nodeId); + //DEBUG_PC ("AvailBw: %f %s --> %s", edgeAvailBw, u->node.nodeId, v->tVertice.nodeId); + if (u_map->avaiBandwidth <= edgeAvailBw) { + memcpy (&availBw_through_u, &u_map->avaiBandwidth, sizeof (gdouble)); + } + else { + memcpy (&availBw_through_u, &edgeAvailBw, sizeof (gdouble)); + } + } + // Relax the link according to the pathCost and latency + gint map_vIndex = get_map_index_by_nodeId (v->tVertice.nodeId, mapNodes); + struct map_t *v_map = &mapNodes->map[map_vIndex]; + // If cost dist (u, v) > dist (src, v) relax the link + if (distance_through_u > v_map->distance) { + //DEBUG_PC ("dist(src, u) + dist(u, v): %f > dist (src, v): %f --> Discard Link", distance_through_u, v_map->distance); + return 0; + } + // If dist (src, u) + dist (u, v) = current dist(src, v), then use the latency as discarding criteria + if ((distance_through_u == v_map->distance) && (latency_through_u > v_map->latency)) { + //DEBUG_PC ("dist(src, u) + dist(u,v) = current dist(src, v), but latency (src,u) + latency (u, v) > current latency (src, v)"); + return 0; + } + // If dist (src, u) + dist (u,v) == current dist(src, v) AND latency (src, u) + latency (u, v) == current latency (src, v), the available bandwidth is the criteria + if ((distance_through_u == v_map->distance) && (latency_through_u == v_map->latency) && (availBw_through_u < v_map->avaiBandwidth)) { + return 0; + } + DEBUG_PC ("%s --> %s Relaxed", u->node.nodeId, v->tVertice.nodeId); + DEBUG_PC ("\t AvailBw: %f Mb/s, Cost: %f, Latency: %f ms", availBw_through_u, distance_through_u, latency_through_u); + + // Update Q list -- + struct nodeItem_t *nodeItem = g_malloc0 (sizeof (struct nodeItem_t)); + if (nodeItem == NULL) { + DEBUG_PC ("memory allocation failed\n"); + exit (-1); + } + nodeItem->distance = distance_through_u; + memcpy(&nodeItem->distance, &distance_through_u, sizeof(gdouble)); + memcpy(&nodeItem->latency, &latency_through_u, sizeof(gdouble)); + duplicate_node_id (&v->tVertice, &nodeItem->node); + // add node to the Q list + *Q = g_list_insert_sorted (*Q, nodeItem, sort_by_distance); + //DEBUG_PC ("%s ADDED to Q (length: %d)", nodeItem->node.nodeId, g_list_length(*Q)); + + // Update the mapNodes for the specific reached tv + v_map->distance = distance_through_u; + memcpy(&v_map->distance, &distance_through_u, sizeof(gdouble)); + memcpy (&v_map->avaiBandwidth, &availBw_through_u, sizeof (gdouble)); + memcpy (&v_map->latency, &latency_through_u, sizeof (gdouble)); + // Duplicate the predecessor edge into the mapNodes + struct edges_t *e1 = &(v_map->predecessor); + struct edges_t *e2 = &(v->edges[indexEdge]); + duplicate_edge (e1, e2); + DEBUG_PC ("u->v Edge: %s(%s) --> %s(%s)", e2->aNodeId.nodeId, e2->aEndPointId, e2->zNodeId.nodeId, e2->zEndPointId); + DEBUG_PC("v-pred aTopology: %s", e2->aTopologyId); + DEBUG_PC("v-pred zTopology: %s", e2->zTopologyId); + + // Check whether v is dstPEId + //DEBUG_PC ("Targeted dstPEId: %s", req->dstPEId.nodeId); + //DEBUG_PC ("nodeId added to the map: %s", v_map->verticeId.nodeId); + //DEBUG_PC ("Q Length: %d", g_list_length(*Q)); + g_free(path_constraints); + return 0; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Check the feasability of a path wrt the constraints imposed by the request in terms of latency + * + * @param s + * @param p + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gboolean check_computed_path_feasability (struct service_t *s, struct compRouteOutputItem_t* p) { + float epsilon = 0.0000001; + struct path_constraints_t* pathCons = get_path_constraints(s); + gboolean ret = TRUE; + + if (pathCons->latency == TRUE) { + if ((pathCons->latencyConstraint - p->delay > 0.0) || (fabs(pathCons->latencyConstraint - p->delay) < epsilon)) { + DEBUG_PC("Computed Path (latency: %f) is feasible wrt Connection Demand: %f", p->delay, pathCons->latencyConstraint); + } + else { + DEBUG_PC("Computed Path (latency: %f) is NOT feasible wrt Connection Demand: %f", p->delay, pathCons->latencyConstraint); + g_free(pathCons); + return FALSE; + } + } + // Other constraints... + + g_free(pathCons); + return ret; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Sorting the GList Q items by distance + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint sort_by_distance (gconstpointer a, gconstpointer b) +{ + //DEBUG_PC ("sort by distance a and b"); + g_assert(a != NULL); + g_assert(b != NULL); + + //DEBUG_PC ("sort by distance a and b"); + struct nodeItem_t *node1 = (struct nodeItem_t *)a; + struct nodeItem_t *node2 = (struct nodeItem_t *)b; + g_assert (node1); + g_assert (node2); + + //DEBUG_PC ("a->distance %u; b->distance %u", node1->distance, node2->distance); + //DEBUG_PC("a->latency: %f; b->latency: %f", node1->latency, node2->latency); + //1st criteria, sorting by lowest distance + if (node1->distance > node2->distance) + return 1; + else if (node1->distance < node2->distance) + return 0; + if (node1->distance == node2->distance) + { + if (node1->latency > node2->latency) + return 1; + else if (node1->latency <= node2->latency) + return 0; + } +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for graph + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct graph_t * create_graph () { + struct graph_t * g = g_malloc0 (sizeof (struct graph_t)); + if (g == NULL) + { + DEBUG_PC ("Memory Allocation Problem"); + exit (-1); + } + return g; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for mapNodes + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +struct map_nodes_t * create_map_node () { + struct map_nodes_t * mN = g_malloc0 (sizeof (struct map_nodes_t)); + if (mN == NULL) + { + DEBUG_PC ("Memory allocation failed"); + exit (-1); + } + return mN; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Look up for the service in the servieList bound to a serviceUUID + * + * @params serviceUUID + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// + +struct service_t* get_service_for_computed_path(gchar* serviceUUID) { + for (gint i = 0; i < serviceList->numServiceList; i++) { + struct service_t* s = &(serviceList->services[i]); + if (strcmp(s->serviceId.service_uuid, serviceUUID) == 0) + return s; + } + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for struct deviceList_t + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct deviceList_t* create_device_list() +{ + struct deviceList_t* dList = g_malloc0(sizeof(struct deviceList_t)); + if (dList == NULL) + { + DEBUG_PC("Memory Allocation Failure"); + exit(-1); + } + return dList; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for struct linkList_t + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct linkList_t* create_link_list() { + struct linkList_t* lList = g_malloc0(sizeof(struct linkList_t)); + if (lList == NULL) + { + DEBUG_PC("Memory Allocation Failure"); + exit(-1); + } + lList->numLinks = 0; + return lList; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for struct serviceList_t + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct serviceList_t* create_service_list() { + struct serviceList_t* sList = g_malloc0(sizeof(struct serviceList_t)); + if (sList == NULL) + { + DEBUG_PC("Memory Allocation Failure"); + exit(-1); + } + return sList; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Friendly function to log the service type + * + * @param type + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_service_type(guint type) { + switch (type) { + case SERVICE_TYPE_UNKNOWN: + DEBUG_PC("Service Type UNKNOWN"); + break; + case SERVICE_TYPE_L3NM: + DEBUG_PC("Service Type L3NM"); + break; + case SERVICE_TYPE_L2NM: + DEBUG_PC("Service Type L2NM"); + break; + case SERVICE_TYPE_TAPI: + DEBUG_PC("Service Type L2NM"); + break; + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Friendly function to log the port direction + * + * @param direction + * + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_link_port_direction(guint direction) +{ + switch (direction) { + case LINK_PORT_DIRECTION_BIDIRECTIONAL: + //DEBUG_PC("Bidirectional Port Direction"); + break; + case LINK_PORT_DIRECTION_INPUT: + //DEBUG_PC("Input Port Direction"); + break; + case LINK_PORT_DIRECTION_OUTPUT: + //DEBUG_PC("Output Port Direction"); + break; + case LINK_PORT_DIRECTION_UNKNOWN: + //DEBUG_PC("Unknown Port Direction"); + break; + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Friendly function to log the port termination direction + * + * @param direction + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_termination_direction(guint direction) +{ + switch (direction) { + case TERMINATION_DIRECTION_BIDIRECTIONAL: + //DEBUG_PC("Bidirectional Termination Direction"); + break; + case TERMINATION_DIRECTION_SINK: + //DEBUG_PC("Input Termination Direction"); + break; + case TERMINATION_DIRECTION_SOURCE: + //DEBUG_PC("Output Termination Direction"); + break; + case TERMINATION_DIRECTION_UNKNOWN: + //DEBUG_PC("Unknown Termination Direction"); + break; + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Friendly function to log the termination state + * + * @param state + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_termination_state(guint state) +{ + switch (state) { + case TERMINATION_STATE_CAN_NEVER_TERMINATE: + //DEBUG_PC("Can never Terminate"); + break; + case TERMINATION_STATE_NOT_TERMINATED: + DEBUG_PC("Not terminated"); + break; + case TERMINATION_STATE_TERMINATED_SERVER_TO_CLIENT_FLOW: + DEBUG_PC("Terminated server to client flow"); + break; + case TERMINATION_STATE_TERMINATED_CLIENT_TO_SERVER_FLOW: + DEBUG_PC("Terminated client to server flow"); + break; + case TERMINATION_STATE_TERMINATED_BIDIRECTIONAL: + //DEBUG_PC("Terminated bidirectional"); + break; + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Friendly function to log the capacity unit + * + * @param unit + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_capacity_unit(guint unit) { + + switch (unit) { + case CAPACITY_UNIT_TB: + DEBUG_PC("Unit in TB"); + break; + case CAPACITY_UNIT_TBPS: + DEBUG_PC("Unit in TB/s"); + break; + case CAPACITY_UNIT_GB: + DEBUG_PC("Unit in GB"); + break; + case CAPACITY_UNIT_GBPS: + DEBUG_PC("Unit in GB/s"); + break; + case CAPACITY_UNIT_MB: + DEBUG_PC("Unit in MB"); + break; + case CAPACITY_UNIT_MBPS: + //DEBUG_PC("Unit in MB/s"); + break; + case CAPACITY_UNIT_KB: + DEBUG_PC("Unit in KB"); + break; + case CAPACITY_UNIT_KBPS: + DEBUG_PC("Unit in KB/s"); + break; + case CAPACITY_UNIT_GHZ: + DEBUG_PC("Unit in GHz"); + break; + case CAPACITY_UNIT_MHZ: + DEBUG_PC("Unit in MHz"); + break; + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Friendly function to log the link forwarding direction + * + * @param linkFwDir + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_link_forwarding_direction(guint linkFwDir) { + switch (linkFwDir) { + case LINK_FORWARDING_DIRECTION_BIDIRECTIONAL: + DEBUG_PC("BIDIRECTIONAL LINK FORWARDING DIRECTION"); + break; + case LINK_FORWARDING_DIRECTION_UNIDIRECTIONAL: + DEBUG_PC("UNIDIRECTIONAL LINK FORWARDING DIRECTION"); + break; + case LINK_FORWARDING_DIRECTION_UNKNOWN: + DEBUG_PC("UNKNOWN LINK FORWARDING DIRECTION"); + break; + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Allocate memory for the contextSet + * + * @param + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct contextSet_t* create_contextSet() { + struct contextSet_t* c = g_malloc0(sizeof(struct contextSet_t)); + if (c == NULL) { + DEBUG_PC("Memory Allocation Failure"); + exit(-1); + } + return c; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Search a specific contextUuid element into the contextSet + * + * @param contextUuid + * @param set + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct context_t* find_contextId_in_set(gchar* contextUuid, struct contextSet_t* set) { + + g_assert(set); + //DEBUG_PC("Checking if contextId: %s in in the ContextList??", contextUuid); + + for (gint i = 0; i < set->num_context_set; i++) { + struct context_t* c = &(set->contextList[i]); + //DEBUG_PC("Context Item [%d] Id: %s", i, c->contextId); + if (strcmp(contextUuid, c->contextId) == 0) { + //DEBUG_PC("contextId: %s is FOUND in the ContextSet_List", contextUuid); + return c; + } + } + //DEBUG_PC("contextId: %s NOT FOUND in the ContextSet_List", contextUuid); + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Add a specific context uuid into the context set + * + * @param contextUuid + * @param set + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct context_t* add_contextId_in_set(gchar *contextUuid, struct contextSet_t *set) { + + set->num_context_set++; + struct context_t* c = &(set->contextList[set->num_context_set - 1]); + duplicate_string(c->contextId, contextUuid); + return c; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Find a vertex in a specific graph + * + * @param contextUuid + * @param set + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct vertices_t* find_vertex_in_graph_context(struct graph_t *g, gchar* deviceId) { + + for (gint i = 0; i < g->numVertices; i++) + { + struct vertices_t* v = &(g->vertices[i]); + if (strcmp(v->verticeId.nodeId, deviceId) == 0) { + return v; + } + } + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Adding a deviceId into a graph + * + * @param g + * @param deviceId + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct vertices_t* add_vertex_in_graph(struct graph_t* g, gchar* deviceId) { + g->numVertices++; + struct vertices_t* v = &(g->vertices[g->numVertices - 1]); + duplicate_string(v->verticeId.nodeId, deviceId); + return v; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Construct the graphs (vertices and edges) bound to every individual context + * + * @param cSet + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void build_contextSet_deviceList(struct contextSet_t* cSet) { + // Check every device their endpoints + for (gint i = 0; i < deviceList->numDevices; i++) { + struct device_t* d = &(deviceList->devices[i]); + //DEBUG_PC("Exploring DeviceId: %s", d->deviceId); + + // Check the associated endPoints + for (gint j = 0; j < d->numEndPoints; j++) { + struct endPoint_t* eP = &(d->endPoints[j]); + // Get endPointId (topology, context, device Id and endpoint uuid) + struct endPointId_t* ePid = &(eP->endPointId); //end point id + //DEBUG_PC(" EndPointId: %s || Type: %s", eP->endPointId.endpoint_uuid, d->deviceType); + //DEBUG_PC(" TopologyId: %s || ContextId: %s", eP->endPointId.topology_id.topology_uuid, eP->endPointId.topology_id.contextId); + + // Add contextId in ContextSet and the deviceId (+endpoint) into the vertex set + struct context_t *c = find_contextId_in_set(eP->endPointId.topology_id.contextId, cSet); + if (c == NULL) { + //DEBUG_PC(" contextUuid: %s MUST BE ADDED to ContextSet", eP->endPointId.topology_id.contextId); + c = add_contextId_in_set(eP->endPointId.topology_id.contextId, cSet); + } + // Check if the deviceId and endPointUuid are already considered in the graph of the context c + struct vertices_t* v = find_vertex_in_graph_context(&c->g, d->deviceId); + if (v == NULL) { + //DEBUG_PC(" deviceId: %s MUST BE ADDED to the Context Graph", d->deviceId); + v = add_vertex_in_graph(&c->g, d->deviceId); + } + } + } + //print_contextSet(cSet); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Determine whether a deviceId is in the targetNode list of a specific vertex v + * + * @param v + * @param deviceId + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct targetNodes_t* find_targeted_vertex_in_graph_context(struct vertices_t* v, gchar *deviceId) { + for (gint k = 0; k < v->numTargetedVertices; k++) { + struct targetNodes_t* w = &(v->targetedVertices[k]); + if (strcmp(w->tVertice.nodeId, deviceId) == 0) { + return w; + } + } + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Add a deviceId a targetNode of a specific vertex v + * + * @param v + * @param deviceId + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct targetNodes_t* add_targeted_vertex_in_graph_context(struct vertices_t* v, gchar* bDeviceId) { + v->numTargetedVertices++; + struct targetNodes_t* w = &(v->targetedVertices[v->numTargetedVertices - 1]); + duplicate_string(w->tVertice.nodeId, bDeviceId); + return w; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Returns the structure of a device endpoint bound to a specific deviceId and endPointId + * + * @param devId + * @param endPointUuid + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct endPoint_t* find_device_tied_endpoint(gchar* devId, gchar* endPointUuid) { + //DEBUG_PC("devId: %s ePId: %s", devId, endPointUuid); + for (gint i = 0; i < deviceList->numDevices; i++) { + struct device_t* d = &(deviceList->devices[i]); + if (strcmp(d->deviceId, devId) != 0) { + continue; + } + // Iterate over the endpoints tied to the deviceId + for (gint j = 0; j < d->numEndPoints; j++) { + struct endPoint_t* eP = &(d->endPoints[j]); + //DEBUG_PC("looked endPointId: %s", eP->endPointId.endpoint_uuid); + if (strcmp(eP->endPointId.endpoint_uuid, endPointUuid) == 0) { + return eP; + } + } + } + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Adding the edge/linnk in the targetedNodes w list + * + * @param w + * @param l + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void add_edge_in_targetedVertice_set(struct targetNodes_t* w, struct link_t* l) { + //DEBUG_PC("\t targetedVertex: %s", w->tVertice.nodeId); + w->numEdges++; + struct edges_t* e = &(w->edges[w->numEdges - 1]); + // Copy the link Id UUID + duplicate_string(e->linkId, l->linkId); + + // copy the deviceId and endpointsIds (A --> Z) + struct link_endpointId_t* aEndpointId = &(l->linkEndPointId[0]); + duplicate_string(e->aNodeId.nodeId, aEndpointId->deviceId); + duplicate_string(e->aEndPointId, aEndpointId->endPointId); + duplicate_string(e->aTopologyId, aEndpointId->topology_id.topology_uuid); + + struct link_endpointId_t* zEndpointId = &(l->linkEndPointId[1]); + duplicate_string(e->zNodeId.nodeId, zEndpointId->deviceId); + duplicate_string(e->zEndPointId, zEndpointId->endPointId); + duplicate_string(e->zTopologyId, zEndpointId->topology_id.topology_uuid); + + // The potential and available capacity is indeed retrieved using aEndpointId in the deviceList + struct endPoint_t* eP = find_device_tied_endpoint(aEndpointId->deviceId, aEndpointId->endPointId); + if (eP == NULL) { + DEBUG_PC("devId: %s endPointUuid: %s NOT in Device List!!--- Weird", aEndpointId->deviceId, aEndpointId->endPointId); + exit(-1); + } + //Potential(total) and available capacity + e->unit = eP->potential_capacity.unit; + memcpy(&e->totalCap, &eP->potential_capacity.value, sizeof(gdouble)); + memcpy(&e->availCap, &eP->available_capacity.value, sizeof(gdouble)); + + // Copy interdomain local/remote Ids + memcpy(e->interDomain_localId, eP->inter_domain_plug_in.inter_domain_plug_in_local_id, + strlen(eP->inter_domain_plug_in.inter_domain_plug_in_local_id)); + memcpy(e->interDomain_remoteId, eP->inter_domain_plug_in.inter_domain_plug_in_remote_id, + strlen(eP->inter_domain_plug_in.inter_domain_plug_in_remote_id)); + + // cost value + memcpy(&e->cost, &l->cost_characteristics.cost_value, sizeof(gdouble)); + + // latency + memcpy(&e->delay, &l->latency_characteristics.fixed_latency, sizeof(gdouble)); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Searching a specific edge/link by the linkId(UUID) + * + * @param w + * @param l + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct edges_t* find_edge_in_targetedVertice_set(struct targetNodes_t* w, struct link_t* l) { + + for (gint i = 0; i < w->numEdges; i++) { + struct edges_t* e = &(w->edges[i]); + if (strcmp(e->linkId, l->linkId) == 0) { + return e; + } + } + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief supporting the construction of the graph per context using the explicit + * contents/info of the link list + * + * @param set + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void build_contextSet_linklList(struct contextSet_t* set) { + g_assert(set); + + // for each link in linkList: + // 1st- Retrieve endpoints A --> B feauture (context Id, device Id, endpoint Id) + // 2st - In the graph associated to the contextId, check wheter A (deviceId) is in the vertices list + // o No, this is weird ... exist + // o Yes, get the other link endpoint (i.e., B) and check whether it exists. If NOT add it, considering + // all the attributes; Otherwise, check whether the link is different from existing edges between A and B + + for (gint j = 0; j < linkList->numLinks; j++) { + struct link_t* l = &(linkList->links[j]); + // link assumed to be P2P A --> B; I.e. 2 endPoints; 1st specifies A and 2nd specifie B + struct link_endpointId_t* aEndpointId = &(l->linkEndPointId[0]); + struct topology_id_t* topologyId = &(aEndpointId->topology_id); + // get the contextId + gchar contextUuid[UUID_CHAR_LENGTH]; + duplicate_string(contextUuid, topologyId->contextId); + //DEBUG_PC("Link: %s in Context: %s", l->linkId, contextUuid); + + // Check first contextUuid exists in the cSet + struct context_t* c = find_contextId_in_set(contextUuid, set); + if (c == NULL) { + DEBUG_PC("ContextId: %s does NOT exist... weird", contextUuid); + exit(-1); + } + + // get the device ID of A + gchar aDeviceId[UUID_CHAR_LENGTH]; + duplicate_string(aDeviceId, aEndpointId->deviceId); + + struct graph_t* g = &(c->g); // get the graph associated to the context c + struct vertices_t* v = find_vertex_in_graph_context(g, aDeviceId); + if (v == NULL) { + DEBUG_PC("aDeviceId: %s IS NOT IN Vertices of contextId: %s", aDeviceId, contextUuid); + exit(-1); + } + // get the bEndpointId + struct link_endpointId_t* bEndpointId = &(l->linkEndPointId[1]); + gchar bDeviceId[UUID_CHAR_LENGTH]; + duplicate_string(bDeviceId, bEndpointId->deviceId); + // Check whether device B is in the targeted Vertices from A (i.e., v)? + // If not, add B in the targeted vertices B + create the edge and add it + // If B exist, check whether the explored link/edge is already in the list of edges + struct targetNodes_t* w = find_targeted_vertex_in_graph_context(v, bDeviceId); + if (w == NULL) { + //DEBUG_PC("B device [%s] is PEER of A device [%s]", bDeviceId, v->verticeId.nodeId); + w = add_targeted_vertex_in_graph_context(v, bDeviceId); + add_edge_in_targetedVertice_set(w, l); + } + else { + // w exists, it is needed to check whether the edge (link) should be added + struct edges_t* e = find_edge_in_targetedVertice_set(w, l); + if (e == NULL) { + // Add the link into the list + add_edge_in_targetedVertice_set(w, l); + } + else { + DEBUG_PC("The link already exists ..."); + continue; + } + } + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Create the set of (distinct) contexts with the deviceList and linkList + * + * @param cSet + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void build_contextSet(struct contextSet_t* cSet) { + g_assert(cSet); + g_assert(deviceList); + g_assert(linkList); + + // devices are tied to contexts, i.e. depending on the contextId of the devices + build_contextSet_deviceList(cSet); + + // Once the diverse contexts are created and the devices/endpoints asigned to the + // respective graph tied to each context, it is needed to create the edges + build_contextSet_linklList(cSet); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Print the contents of the ContextIds + * + * @param set + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_contextSet(struct contextSet_t* set) { + g_assert(set); + + for (gint i = 0; i < set->num_context_set; i++) { + struct context_t* c = &(set->contextList[i]); + DEBUG_PC("-------------------------------------------------------------"); + DEBUG_PC(" Context Id: %s", c->contextId); + DEBUG_PC("-------------------------------------------------------------"); + + struct graph_t* g = &(c->g); + for (gint j = 0; j < g->numVertices; j++) { + struct vertices_t* v = &(g->vertices[j]); + DEBUG_PC(" Head Device Id: %s", v->verticeId.nodeId); + for (gint k = 0; k < v->numTargetedVertices; k++) { + struct targetNodes_t* w = &(v->targetedVertices[k]); + DEBUG_PC(" [%d] --- Peer Device Id: %s", k, w->tVertice.nodeId); + for (gint l = 0; l < w->numEdges; l++) { + struct edges_t* e = &(w->edges[l]); + DEBUG_PC(" \t link Id: %s", e->linkId); + DEBUG_PC(" \t aEndPointId: %s", e->aEndPointId); + DEBUG_PC(" \t zEndPointId: %s", e->zEndPointId); + DEBUG_PC(" \t Available Capacity: %f, Latency: %f, Cost: %f", e->availCap, e->delay, e->cost); + DEBUG_PC(" \t aTopologyId: %s", e->aTopologyId); + DEBUG_PC(" \t zTopologyId: %s", e->zTopologyId); + } + } + } + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Check whether src and dst PE nodeId of the req are the same + * + * @param r + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +gint same_src_dst_pe_nodeid(struct service_t* s) +{ + // Check that source PE and dst PE are NOT the same, i.e., different ingress and egress endpoints (iEp, eEp) + struct service_endpoints_id_t* iEp = &(s->service_endpoints_id[0]); + struct service_endpoints_id_t* eEp = &(s->service_endpoints_id[1]); + + gchar* iEpUUID = iEp->endpoint_uuid; + gchar* eEpUUID = eEp->endpoint_uuid; + gchar* iDevUUID = iEp->device_uuid; + gchar* eDevUUID = eEp->device_uuid; + + // Compare the device uuids + if (strcmp(iDevUUID, eDevUUID) != 0) { + DEBUG_PC("DIFFERENT --- iDevId: %s and eDevId: %s", iDevUUID, eDevUUID); + return 1; + } + // Compare the endpoints (ports) + if (strcmp(iEpUUID, eEpUUID) != 0) { + DEBUG_PC("DIFFERENT --- iEpUUID: %s and eEpUUID: %s", iEpUUID, eEpUUID); + return 1; + } + return 0; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Handles issues with the route computation + * + * @param route + * @param s + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void comp_route_connection_issue_handler (struct compRouteOutput_t *path, struct service_t *s) +{ + g_assert(path); + g_assert(s); + + // Increase the number of computed routes/paths despite there was an issue to be reported + path->numPaths++; + // Copy the serviceId + copy_service_id(&(path->serviceId), &(s->serviceId)); + + // copy the service endpoints, in general, there will be 2 (point-to-point network connectivity services) + for (gint i = 0; i < s->num_service_endpoints_id; i++) { + struct service_endpoints_id_t* iEp = &(s->service_endpoints_id[i]); + struct service_endpoints_id_t* oEp = &(path->service_endpoints_id[i]); + copy_service_endpoint_id(oEp, iEp); + } + path->num_service_endpoints_id = s->num_service_endpoints_id; + path->noPathIssue = NO_PATH_CONS_ISSUE; + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief released the allocated memory fo compRouteOutputList_t + * + * @param ro + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void destroy_compRouteOutputList (struct compRouteOutputList_t *ro) +{ + g_assert (ro); + g_free (ro); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief creates a copy of the underlying graph + * + * @param originalGraph + * @param destGraph + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void duplicate_graph (struct graph_t *originalGraph, struct graph_t *destGraph) { + g_assert (originalGraph); + g_assert (destGraph); + + destGraph->numVertices = originalGraph->numVertices; + for (gint i = 0; i < originalGraph->numVertices; i++) { + struct vertices_t *oVertex = &(originalGraph->vertices[i]); + struct vertices_t *dVertex = &(destGraph->vertices[i]); + dVertex->numTargetedVertices = oVertex->numTargetedVertices; + duplicate_node_id (&oVertex->verticeId, &dVertex->verticeId); + + for (gint j = 0; j < oVertex->numTargetedVertices; j++) { + struct targetNodes_t *oTargetedVertex = &(oVertex->targetedVertices[j]); + struct targetNodes_t *dTargetedVertex = &(dVertex->targetedVertices[j]); + duplicate_node_id (&oTargetedVertex->tVertice, &dTargetedVertex->tVertice); + dTargetedVertex->numEdges = oTargetedVertex->numEdges; + + for (gint k = 0; k < oTargetedVertex->numEdges; k++) { + struct edges_t *oEdge = &(oTargetedVertex->edges[k]); + struct edges_t *dEdge = &(dTargetedVertex->edges[k]); + duplicate_edge (dEdge, oEdge); + } + } + } + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function used to retrieve from the graph the edge instance associated to the + * pathLink (pL) + * + * @param pL + * @parma g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct edges_t* get_edge_from_graph_by_linkId(struct pathLink_t* pL, struct graph_t* g) { + g_assert(pL); + g_assert(g); + + for (gint i = 0; i < g->numVertices; i++) { + struct vertices_t* v = &(g->vertices[i]); + for (gint j = 0; j < v->numTargetedVertices; j++) { + struct targetNodes_t* tv = &(v->targetedVertices[j]); + for (gint k = 0; k < tv->numEdges; k++) { + struct edges_t* e = &(tv->edges[k]); + if (strcmp(e->linkId, pL->linkId) == 0) { + return e; + } + } + } + } + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function used to retrieve from the graph the reverse edge (rev_e) associated to an edge (e) + * + * @param e + * @parma g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +struct edges_t* get_reverse_edge_from_the_graph(struct edges_t* e, struct graph_t* g) { + g_assert(e); + g_assert(g); + + for (gint i = 0; i < g->numVertices; i++) { + struct vertices_t* v = &(g->vertices[i]); + // Check Route Element zNodeId with the v->verticeId + if (compare_node_id(&e->zNodeId, &v->verticeId) != 0) + continue; + // Check Route Element zNodeis with any of reachable targeted vertices from v + gboolean foundTargVert = FALSE; + gint indexTargVert = -1; + for (gint j = 0; j < v->numTargetedVertices; j++) { + struct targetNodes_t* tv = &(v->targetedVertices[j]); + if (compare_node_id(&e->aNodeId, &tv->tVertice) == 0) + { + foundTargVert = TRUE; + indexTargVert = j; + break; + } + } + if (foundTargVert == FALSE) { + continue; + } + + // The targeted vertice is found, then check matching with the endpoints + struct targetNodes_t* tv = &(v->targetedVertices[indexTargVert]); + for (gint k = 0; k < tv->numEdges; k++) { + struct edges_t* rev_e = &(tv->edges[k]); + if ((strcmp(rev_e->aEndPointId, e->zEndPointId) == 0) && + (strcmp(rev_e->zEndPointId, e->aEndPointId) == 0)) { + return rev_e; + } + } + } + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function used to reflect in the graph the assigned/allocated resources contained in the path p + * considering the needs (e.g., bandwidth) of service s + * + * @param p + * @param s + * @parma g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2022 + */ +///////////////////////////////////////////////////////////////////////////////////////// +void allocate_graph_resources (struct path_t *p, struct service_t *s, struct graph_t *g) +{ + g_assert (p); + g_assert (s); + g_assert (g); + // Retrieve the requested bw by the service + struct path_constraints_t* pathCons = get_path_constraints(s); + + for (gint i = 0; i < p->numPathLinks; i++) { + struct pathLink_t* pL = &(p->pathLinks[i]); + // get the edge associated to the linkId in the graph + struct edges_t* e = get_edge_from_graph_by_linkId(pL, g); + if (e == NULL) { + DEBUG_PC("The linkId: %s is NOT found in the Graph!!!", pL->linkId); + exit(-1); + } + //Update the availBw in the edge + gdouble resBw = e->availCap - pathCons->bwConstraint; + DEBUG_PC("Updating the Avail Bw @ edge/link: %s", e->linkId); + DEBUG_PC("Initial avaiCap @ e/link: %f, demanded Bw: %f, resulting Avail Bw: %f", e->availCap, pathCons->bwConstraint, resBw); + memcpy(&e->availCap, &resBw, sizeof(gdouble)); + DEBUG_PC("Final e/link avail Bw: %f", e->availCap); + } + g_free(pathCons); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function used to reflect in the graph the assigned/allocated resources contained in the reverse direction of the path p + * considering the needs (e.g., bandwidth) of service s + * + * @param p + * @param s + * @parma g + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2021 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void allocate_graph_reverse_resources(struct path_t* p, struct service_t * s, struct graph_t* g) +{ + g_assert(p); + g_assert(s); + g_assert(g); + + struct path_constraints_t* pathCons = get_path_constraints(s); + for (gint i = 0; i < p->numPathLinks; i++) { + struct pathLink_t* pL = &(p->pathLinks[i]); + struct edges_t* e = get_edge_from_graph_by_linkId(pL, g); + if (e == NULL) { + DEBUG_PC("The linkId: %s is NOT found in the Graph!!!", pL->linkId); + exit(-1); + } + struct edges_t* rev_e = get_reverse_edge_from_the_graph(e, g); + if (rev_e == NULL) { + DEBUG_PC("the reverse edge of linkId: %s is NOT found in the Graph!!!", pL->linkId); + exit(-1); + } + //Update the availBw in the edge + gdouble resBw = rev_e->availCap - pathCons->bwConstraint; + DEBUG_PC("Updating the Avail Bw @ reverse edge/link: %s", rev_e->linkId); + DEBUG_PC("Initial avaiCap @ reverse edge e/link: %f, demanded Bw: %f, resulting Avail Bw: %f", rev_e->availCap, pathCons->bwConstraint, resBw); + memcpy(&rev_e->availCap, &resBw, sizeof(gdouble)); + DEBUG_PC("Final reverse edge e/link avail Bw: %f", rev_e->availCap); + } + g_free(pathCons); + return; +} + +//////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief Function used to printall the computed paths for the requested network connectivity services + * + * @param routeList + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2021 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void print_path_connection_list(struct compRouteOutputList_t* routeList) { + g_assert(routeList); + for (gint i = 0; i < routeList->numCompRouteConnList; i++) { + DEBUG_PC("==================== Service Item: %d ===================", i); + struct compRouteOutput_t* rO = &(routeList->compRouteConnection[i]); + DEBUG_PC("num service endpoints: %d", rO->num_service_endpoints_id); + struct serviceId_t* s = &(rO->serviceId); + DEBUG_PC("ContextId: %s, ServiceId: %s", s->contextId, s->service_uuid); + DEBUG_PC("ingress --- %s [%s]", rO->service_endpoints_id[0].device_uuid, + rO->service_endpoints_id[0].endpoint_uuid); + DEBUG_PC("egress --- %s [%s]", rO->service_endpoints_id[1].device_uuid, + rO->service_endpoints_id[1].endpoint_uuid); + + if (rO->noPathIssue == NO_PATH_CONS_ISSUE) { + DEBUG_PC("NO PATH SUCCESSFULLY COMPUTED"); + continue; + } + // Path + DEBUG_PC("Number of paths: %d", rO->numPaths); + for (gint j = 0; j < rO->numPaths; j++) { + struct path_t* p = &(rO->paths[j]); + print_path_t(p); + } + } + return; +} + +/////////////////////////////////////////////////////////////////////////////////// +/** + * @file pathComp_tools.c + * @brief update statistics for the path computation operations + * + * @param routeConnList + * @param d + * + * @author Ricardo MartÃnez <ricardo.martinez@cttc.es> + * @date 2021 + */ + ///////////////////////////////////////////////////////////////////////////////////////// +void update_stats_path_comp(struct compRouteOutputList_t* routeConnList, struct timeval d, gint numSuccesPathComp, gint numPathCompIntents) { + g_assert(routeConnList); + + total_path_comp_time.tv_sec = total_path_comp_time.tv_sec + d.tv_sec; + total_path_comp_time.tv_usec = total_path_comp_time.tv_usec + d.tv_usec; + total_path_comp_time = tv_adjust(total_path_comp_time); + + gdouble path_comp_time_msec = (((total_path_comp_time.tv_sec) * 1000) + ((total_path_comp_time.tv_usec) / 1000)); + gdouble av_alg_comp_time = ((path_comp_time_msec / numSuccesPathComp)); + DEBUG_PC("\t --- STATS PATH COMP ----"); + DEBUG_PC("Succesfully Comp: %d | Path Comp Requests: %d", numSuccesPathComp, numPathCompIntents); + DEBUG_PC("AV. PATH COMP ALG. TIME: %f ms", av_alg_comp_time); + + for (gint i = 0; i < serviceList->numServiceList; i++) { + struct service_t* s = &(serviceList->services[i]); + char* eptr; + for (gint j = 0; j < s->num_service_constraints; j++) { + struct constraint_t* constraints = &(s->constraints[j]); + if (strncmp((const char*)(constraints->constraint_type), "bandwidth", 9) == 0) { + totalReqBw += (gdouble)(strtod((char*)constraints->constraint_value, &eptr)); + } + } + } + for (gint k = 0; k < routeConnList->numCompRouteConnList; k++) { + struct compRouteOutput_t* rO = &(routeConnList->compRouteConnection[k]); + if (rO->noPathIssue == NO_PATH_CONS_ISSUE) { + continue; + } + // Get the requested service bw bound to that computed path + struct path_t* p = &(rO->paths[0]); + struct service_t* s = get_service_for_computed_path(rO->serviceId.service_uuid); + if (s == NULL) { + DEBUG_PC("Weird the service associated to a path is not found"); + exit(-1); + } + for (gint l = 0; l < s->num_service_constraints; l++) { + struct constraint_t* constraints = &(s->constraints[l]); + char* eptr; + if (strncmp((const char*)(constraints->constraint_type), "bandwidth", 9) == 0) { + totalServedBw += (gdouble)(strtod((char*)constraints->constraint_value, &eptr)); + } + } + } + gdouble avServedRatio = totalServedBw / totalReqBw; + DEBUG_PC("AV. Served Ratio: %f", avServedRatio); + gdouble avBlockedBwRatio = (gdouble)(1.0 - avServedRatio); + DEBUG_PC("AV. BBE: %f", avBlockedBwRatio); + return; + +} diff --git a/src/pathcomp/backend/pathComp_tools.h b/src/pathcomp/backend/pathComp_tools.h new file mode 100644 index 0000000000000000000000000000000000000000..8fe704c3932c219e0f04046fcc62d6f1da5f9b66 --- /dev/null +++ b/src/pathcomp/backend/pathComp_tools.h @@ -0,0 +1,617 @@ +//////////////////////////////////////////////////////////////////////////////////////// +/** + * # Copyright 2022 Centre Tecnol�gic de Telecomunicacions de Catalunya (CTTC/CERCA) www.cttc.es + * + * 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. + + * Author: CTTC/CERCA PONS RU Ricardo Mart�nez (ricardo.martinez@cttc.es) + */ +///////////////////////////////////////////////////////////////////////////////////////// + +#ifndef _PATHCOMP_TOOLS_H +#define _PATHCOMP_TOOLS_H + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib-2.0/glib/gtypes.h> +#include <uuid/uuid.h> + +// External variables +extern struct map_nodes_t* mapNodes; +extern struct graph_t* graph; +extern struct contextSet_t* contextSet; +extern struct linkList_t* linkList; +extern struct deviceList_t* deviceList; +extern struct serviceList_t* serviceList; + +#define INFINITY_COST 0xFFFFFFFF +#define MAX_NUM_PRED 100 + +#define MAX_KSP_VALUE 3 + +// HTTP RETURN CODES +#define HTTP_CODE_OK 200 +#define HTTP_CODE_CREATED 201 +#define HTTP_CODE_BAD_REQUEST 400 +#define HTTP_CODE_UNAUTHORIZED 401 +#define HTTP_CODE_FORBIDDEN 403 +#define HTTP_CODE_NOT_FOUND 404 +#define HTTP_CODE_NOT_ACCEPTABLE 406 + +#define MAX_NODE_ID_SIZE 37 // UUID 128 Bits - In hexadecimal requires 36 char +#define MAX_CONTEXT_ID 37 +//#define UUID_CHAR_LENGTH 37 +#define UUID_CHAR_LENGTH 100 +struct nodes_t { + gchar nodeId[UUID_CHAR_LENGTH]; +}; + +struct nodeItem_t { + struct nodes_t node; + gdouble distance; + gdouble latency; +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Structures for collecting the RL topology including: intra WAN topology and inter-WAN links +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#define MAX_INTER_DOMAIN_PLUG_IN_SIZE 128 +struct edges_t { + //aNodeId/Device Id + struct nodes_t aNodeId; + //zNodeId/Device Id + struct nodes_t zNodeId; + + // UUID of the endPointIds + gchar aEndPointId[UUID_CHAR_LENGTH]; + gchar zEndPointId[UUID_CHAR_LENGTH]; + + // UUID of the link + gchar linkId[UUID_CHAR_LENGTH]; + + // Potential(total) and available capacity + gint unit; + gdouble totalCap, availCap; + + gdouble cost; + gdouble delay; + + // inter-domain local and remote Ids + gchar interDomain_localId[MAX_INTER_DOMAIN_PLUG_IN_SIZE]; + gchar interDomain_remoteId[MAX_INTER_DOMAIN_PLUG_IN_SIZE]; + + gchar aTopologyId[UUID_CHAR_LENGTH]; + gchar zTopologyId[UUID_CHAR_LENGTH]; +}; + +// Structure to handle the path computation +struct pred_comp_t { + struct nodes_t v; + struct edges_t e; +}; + +struct pred_t { + struct pred_comp_t predComp[MAX_NUM_PRED]; + gint numPredComp; +}; + +// Structures for the managing the path computation algorithm +struct map_t { + struct nodes_t verticeId; + struct edges_t predecessor; + gdouble distance; + gdouble avaiBandwidth; + gdouble latency; +}; + +#define MAX_MAP_NODE_SIZE 100 +struct map_nodes_t { + struct map_t map[MAX_MAP_NODE_SIZE]; + gint numMapNodes; +}; + +#define MAX_NUM_VERTICES 20 // 100 # LGR: reduced from 100 to 20 to divide by 5 the memory used +#define MAX_NUM_EDGES 10 // 100 # LGR: reduced from 100 to 10 to divide by 10 the memory used +// Structures for the graph composition +struct targetNodes_t { + // remote / targeted node + struct nodes_t tVertice; + // edge conencting a pair of vertices + struct edges_t edges[MAX_NUM_EDGES]; + gint numEdges; +}; + +struct vertices_t { + struct targetNodes_t targetedVertices[MAX_NUM_VERTICES]; + gint numTargetedVertices; + struct nodes_t verticeId; +}; + +struct graph_t { + struct vertices_t vertices[MAX_NUM_VERTICES]; + gint numVertices; +}; + +//////////////////////////////////////////////////// +// Structure for the Set of Contexts +/////////////////////////////////////////////////// +struct context_t { + gchar contextId[UUID_CHAR_LENGTH]; // UUID char format 36 chars + // conext Id has a graph associated + struct graph_t g; +}; + +//////////////////////////////////////////////////// +// Structure for the Set of Contexts +/////////////////////////////////////////////////// +#define MAX_NUMBER_CONTEXT 5 // 100 # LGR: reduced from 100 to 5 to divide by 20 the memory used +struct contextSet_t { + struct context_t contextList[MAX_NUMBER_CONTEXT]; + gint num_context_set; +}; + +#define MAX_ALG_ID_LENGTH 10 +//////////////////////////////////////////////////// +// External Variables +/////////////////////////////////////////////////// +extern gchar algId[MAX_ALG_ID_LENGTH]; + +//////////////////////////////////////////////////// +// Structure for the Requested Transport Connectivity Services +/////////////////////////////////////////////////// +#define SERVICE_TYPE_UNKNOWN 0 +#define SERVICE_TYPE_L3NM 1 +#define SERVICE_TYPE_L2NM 2 +#define SERVICE_TYPE_TAPI 3 + +/////////////////////////////////////////////////////////////////// +// Structure for the topology_id +/////////////////////////////////////////////////////////////////// +struct topology_id_t { + gchar contextId[UUID_CHAR_LENGTH]; + gchar topology_uuid[UUID_CHAR_LENGTH]; +}; + +struct inter_domain_plug_in_t { + gchar inter_domain_plug_in_local_id[MAX_INTER_DOMAIN_PLUG_IN_SIZE]; + gchar inter_domain_plug_in_remote_id[MAX_INTER_DOMAIN_PLUG_IN_SIZE]; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the endPointId +/////////////////////////////////////////////////////////////////// +struct endPointId_t { + struct topology_id_t topology_id; + gchar device_id[UUID_CHAR_LENGTH]; + gchar endpoint_uuid[UUID_CHAR_LENGTH]; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the endPoint +/////////////////////////////////////////////////////////////////// +#define CAPACITY_UNIT_TB 0 +#define CAPACITY_UNIT_TBPS 1 +#define CAPACITY_UNIT_GB 2 +#define CAPACITY_UNIT_GBPS 3 +#define CAPACITY_UNIT_MB 4 +#define CAPACITY_UNIT_MBPS 5 +#define CAPACITY_UNIT_KB 6 +#define CAPACITY_UNIT_KBPS 7 +#define CAPACITY_UNIT_GHZ 8 +#define CAPACITY_UNIT_MHZ 9 +struct capacity_t { + gdouble value; + gint unit; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the endPoint +/////////////////////////////////////////////////////////////////// +#define MAX_ENDPOINT_TYPE_SIZE 128 +// Link Port Direction +#define LINK_PORT_DIRECTION_BIDIRECTIONAL 0 +#define LINK_PORT_DIRECTION_INPUT 1 +#define LINK_PORT_DIRECTION_OUTPUT 2 +#define LINK_PORT_DIRECTION_UNKNOWN 3 +// Termination Direction +#define TERMINATION_DIRECTION_BIDIRECTIONAL 0 +#define TERMINATION_DIRECTION_SINK 1 +#define TERMINATION_DIRECTION_SOURCE 2 +#define TERMINATION_DIRECTION_UNKNOWN 3 +// Termination State +#define TERMINATION_STATE_CAN_NEVER_TERMINATE 0 +#define TERMINATION_STATE_NOT_TERMINATED 1 +#define TERMINATION_STATE_TERMINATED_SERVER_TO_CLIENT_FLOW 2 +#define TERMINATION_STATE_TERMINATED_CLIENT_TO_SERVER_FLOW 3 +#define TERMINATION_STATE_TERMINATED_BIDIRECTIONAL 4 + +struct endPoint_t { + struct endPointId_t endPointId; + gchar endpointType[MAX_ENDPOINT_TYPE_SIZE]; + guint link_port_direction; + guint termination_direction; + guint termination_state; + struct capacity_t potential_capacity; + struct capacity_t available_capacity; + // inter-domain identifiers + struct inter_domain_plug_in_t inter_domain_plug_in; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the device contents +/////////////////////////////////////////////////////////////////// +#define MAX_DEV_TYPE_SIZE 128 +#define MAX_DEV_ENDPOINT_LENGTH 10 +struct device_t { + gchar deviceId[UUID_CHAR_LENGTH]; // device ID using UUID (128 bits) + + gchar deviceType[MAX_DEV_TYPE_SIZE]; // Specifies the device type + + // define the endpoints attached to the device + gint numEndPoints; + struct endPoint_t endPoints[MAX_DEV_ENDPOINT_LENGTH]; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the device List +/////////////////////////////////////////////////////////////////// +#define MAX_NUM_DEVICE 200 +struct deviceList_t { + // device information + gint numDevices; + struct device_t devices[MAX_NUM_DEVICE]; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the link EndPoint Id +/////////////////////////////////////////////////////////////////// +struct link_endpointId_t { + struct topology_id_t topology_id; + gchar deviceId[UUID_CHAR_LENGTH]; // Device UUID + gchar endPointId[UUID_CHAR_LENGTH]; // Link EndPoint UUID +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the link cost characteristics +/////////////////////////////////////////////////////////////////// +#define LINK_COST_NAME_SIZE 128 +struct cost_characteristics_t { + gchar cost_name[LINK_COST_NAME_SIZE]; + gdouble cost_value; + gdouble cost_algorithm; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the latency characteristics of the link +/////////////////////////////////////////////////////////////////// +struct latency_characteristics_t { + gdouble fixed_latency; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the link +/////////////////////////////////////////////////////////////////// +#define MAX_NUM_LINK_ENDPOINT_IDS 2 + +#define LINK_FORWARDING_DIRECTION_BIDIRECTIONAL 0 +#define LINK_FORWARDING_DIRECTION_UNIDIRECTIONAL 1 +#define LINK_FORWARDING_DIRECTION_UNKNOWN 2 +struct link_t { + gchar linkId[UUID_CHAR_LENGTH]; // link Id using UUID (128 bits) + + gint numLinkEndPointIds; + struct link_endpointId_t linkEndPointId[MAX_NUM_LINK_ENDPOINT_IDS]; + + guint forwarding_direction; + struct capacity_t potential_capacity; + struct capacity_t available_capacity; + struct cost_characteristics_t cost_characteristics; + struct latency_characteristics_t latency_characteristics; +}; + +/////////////////////////////////////////////////////////////////// +// Structure for the link List +/////////////////////////////////////////////////////////////////// +#define MAX_NUM_LIST 2000 +struct linkList_t { + gint numLinks; + struct link_t links[MAX_NUM_LIST]; +}; + +//////////////////////////////////////////////////// +// Structure for service Identifier +/////////////////////////////////////////////////// +struct serviceId_t { + gchar contextId[UUID_CHAR_LENGTH]; + gchar service_uuid[UUID_CHAR_LENGTH]; +}; + +//////////////////////////////////////////////////// +// Structure the service endpoint ids +/////////////////////////////////////////////////// +struct service_endpoints_id_t { + struct topology_id_t topology_id; + gchar device_uuid[UUID_CHAR_LENGTH]; + gchar endpoint_uuid[UUID_CHAR_LENGTH]; +}; + +//////////////////////////////////////////////////// +// Structure for handling generic targeted service constraints +//////////////////////////////////////////////////// +#define MAX_CONSTRAINT_SIZE 128 +// Constraint Type: bandwidth, latency, energy, cost +struct constraint_t { + gchar constraint_type[MAX_CONSTRAINT_SIZE]; + gchar constraint_value[MAX_CONSTRAINT_SIZE]; +}; + +//////////////////////////////////////////////////// +// Structure for individual service request +//////////////////////////////////////////////////// +#define SERVICE_TYPE_UNKNOWN 0 +#define SERVICE_TYPE_L3NM 1 +#define SERVICE_TYPE_L2NM 2 +#define SERVICE_TYPE_TAPI 3 + +#define MAX_NUM_SERVICE_ENPOINTS_ID 2 + +#define MAX_NUM_SERVICE_CONSTRAINTS 10 +struct service_t { + // Indentifier used to determine the used Algorithm Id, e.g., KSP + gchar algId[MAX_ALG_ID_LENGTH]; + + // PATHS expected for the output + guint kPaths; + + struct serviceId_t serviceId; + + guint service_type; // unknown, l2nm, l3nm, tapi + + // endpoints of the network connectivity service, assumed p2p + // the 1st one assumed to be the source (ingress) and the 2nd one is the sink (egress) + struct service_endpoints_id_t service_endpoints_id[MAX_NUM_SERVICE_ENPOINTS_ID]; + guint num_service_endpoints_id; + + // Service Constraints + struct constraint_t constraints[MAX_NUM_SERVICE_CONSTRAINTS]; + guint num_service_constraints; +}; + +//////////////////////////////////////////////////// +// Structure to handle path constraints during computation +//////////////////////////////////////////////////// +struct path_constraints_t { + gdouble bwConstraint; + gboolean bw; + + gdouble costConstraint; + gboolean cost; + + gdouble latencyConstraint; + gboolean latency; + + gdouble energyConstraint; + gboolean energy; +}; + +//////////////////////////////////////////////////// +// Structure for the handling the service requests +/////////////////////////////////////////////////// +#define MAX_SERVICE_LIST 100 +struct serviceList_t { + struct service_t services[MAX_SERVICE_LIST]; + gint numServiceList; +}; + +//////////////////////////////////////////////////////////////////////////////////////////// +// Structure describing the links forming a computed path +//////////////////////////////////////////////////////////////////////////////////////////// +struct linkTopology_t { + gchar topologyId[UUID_CHAR_LENGTH]; +}; + +struct pathLink_t { + gchar linkId[UUID_CHAR_LENGTH]; // link id UUID in char format + + gchar aDeviceId[UUID_CHAR_LENGTH]; + gchar zDeviceId[UUID_CHAR_LENGTH]; + gchar aEndPointId[UUID_CHAR_LENGTH]; + gchar zEndPointId[UUID_CHAR_LENGTH]; + + struct topology_id_t topologyId; + + struct linkTopology_t linkTopologies[2]; // a p2p link (at most) can connect to devices (endpoints) attached to 2 different topologies + gint numLinkTopologies; +}; + +//////////////////////////////////////////////////////////////////////////////////////////// +// Structure describing a computed path +//////////////////////////////////////////////////////////////////////////////////////////// +#define MAX_ROUTE_ELEMENTS 50 +struct routeElement_t { + //aNodeId/Device Id + struct nodes_t aNodeId; + //zNodeId/Device Id + struct nodes_t zNodeId; + + // UUID of the endPointIds + gchar aEndPointId[UUID_CHAR_LENGTH]; + gchar zEndPointId[UUID_CHAR_LENGTH]; + + // UUID of the link + gchar linkId[UUID_CHAR_LENGTH]; + + gchar aTopologyId[UUID_CHAR_LENGTH]; + gchar zTopologyId[UUID_CHAR_LENGTH]; + + // contextId + gchar contextId[UUID_CHAR_LENGTH]; +}; + +struct compRouteOutputItem_t { + // Potential(total) and available capacity + gint unit; + gdouble totalCap, availCap; + + gdouble cost; + gdouble delay; + + struct routeElement_t routeElement[MAX_ROUTE_ELEMENTS]; + gint numRouteElements; +}; + +#define MAX_NUM_PATHS 30 +struct path_set_t { + struct compRouteOutputItem_t paths[MAX_NUM_PATHS]; + gint numPaths; +}; + +#define MAX_NUM_PATH_LINKS 20 +struct path_t { + struct capacity_t path_capacity; + struct latency_characteristics_t path_latency; + struct cost_characteristics_t path_cost; + + struct pathLink_t pathLinks[MAX_NUM_PATH_LINKS]; + guint numPathLinks; +}; + +#define NO_PATH_CONS_ISSUE 1 // No path due to a constraint issue +#define MAX_NUM_COMPUTED_PATHS 10 +struct compRouteOutput_t +{ + // object describing the service identifier: serviceId and contextId + struct serviceId_t serviceId; + + // array describing the service endpoints ids + struct service_endpoints_id_t service_endpoints_id[MAX_NUM_SERVICE_ENPOINTS_ID]; + guint num_service_endpoints_id; + + struct path_t paths[MAX_NUM_COMPUTED_PATHS]; + gint numPaths; + + // if the transport connectivity service cannot be computed, this value is set to 0 determining the constraints were not fulfilled + gint noPathIssue; +}; + +//////////////////////////////////////////////////////////////////////////////////////////// +// Structure to handle the response list with all the computed network connectivity services +//////////////////////////////////////////////////////////////////////////////////////////// +#define MAX_COMP_CONN_LIST 100 +struct compRouteOutputList_t +{ + struct compRouteOutput_t compRouteConnection[MAX_COMP_CONN_LIST]; + gint numCompRouteConnList; + + ///////////////// Metrics ////////////////////////////////////////// + // Number of total succesfully computed connections, i.e., at least 1 feasible path exists + // for every connection in the list + gint compRouteOK; + // For the succesfully newly computed/recovered/re-allocated/re-optimized connections, this + // metric determines the average allocable bandwidth over all the (re-)computed paths for the succesfully + // (i.e., feasible path) connections + gdouble compRouteConnAvBandwidth; + // For the succesfully newly computed/recovered/re-allocated/re-optimized connections, this + // metric determines the average path length (in terms of number of hops) over the computed path for the + // succesfully (i.e., feasible path) connections + gdouble compRouteConnAvPathLength; +}; + +// Prototype of external declaration of functions +void print_path (struct compRouteOutputItem_t *); +void print_path_t(struct path_t*); + +void duplicate_string(gchar *, gchar *); + +gchar* get_uuid_char(uuid_t); +void copy_service_id(struct serviceId_t*, struct serviceId_t *); +void copy_service_endpoint_id(struct service_endpoints_id_t *, struct service_endpoints_id_t *); + +struct graph_t* get_graph_by_contextId(struct contextSet_t *, gchar *); + +struct pred_t * create_predecessors (); +struct edges_t* create_edge(); +void print_predecessors (struct pred_t *); +void build_predecessors (struct pred_t *, struct service_t *, struct map_nodes_t *); +struct nodes_t * create_node (); +struct routeElement_t * create_routeElement (); + +void duplicate_node_id (struct nodes_t *, struct nodes_t *); +gint compare_node_id (struct nodes_t *, struct nodes_t *); +void duplicate_routeElement (struct routeElement_t *, struct routeElement_t *); +void duplicate_edge (struct edges_t *, struct edges_t *); +void duplicate_path (struct compRouteOutputItem_t *, struct compRouteOutputItem_t *); +void duplicate_path_t(struct compRouteOutputItem_t *, struct path_t *); +gint get_map_index_by_nodeId (gchar *, struct map_nodes_t *); +void get_edge_from_map_by_node (struct edges_t *, struct nodes_t*, struct map_nodes_t *); +void get_edge_from_predecessors (struct edges_t *, struct nodes_t*, struct pred_t *); +void build_path (struct compRouteOutputItem_t *, struct pred_t *, struct service_t *); +void print_graph (struct graph_t *); + +gint graph_vertice_lookup (gchar *, struct graph_t *); +gint graph_targeted_vertice_lookup (gint, gchar *, struct graph_t *); +gint graph_targeted_vertice_add (gint, gchar *, struct graph_t *); + +void remove_edge_from_graph (struct graph_t *, struct edges_t *); + +struct path_set_t * create_path_set (); +void sort_path_set (struct path_set_t *); +void pop_front_path_set (struct path_set_t *); +void remove_path_set(struct path_set_t*); + +void build_map_node(struct map_nodes_t *, struct graph_t *); +struct compRouteOutputList_t * create_route_list(); +struct compRouteOutputItem_t * create_path_item (); +void add_routeElement_path_back (struct routeElement_t *, struct compRouteOutputItem_t *); +gboolean matching_path_rootPath (struct compRouteOutputItem_t *, struct compRouteOutputItem_t *, struct nodes_t *, struct edges_t *); +void modify_targeted_graph (struct graph_t *, struct path_set_t *, struct compRouteOutputItem_t *, struct nodes_t *); +gint find_nodeId (gconstpointer, gconstpointer); +gint check_link (struct nodeItem_t *, gint, gint, struct graph_t *, struct service_t *, GList **, GList **, struct map_nodes_t *); +gboolean check_computed_path_feasability (struct service_t *, struct compRouteOutputItem_t * ); + +gint sort_by_distance (gconstpointer, gconstpointer); + +struct graph_t * create_graph (); +struct map_nodes_t * create_map_node (); + +struct service_t * get_service_for_computed_path(gchar *); + +struct deviceList_t* create_device_list(); +struct linkList_t* create_link_list(); +struct serviceList_t* create_service_list(); + +void print_service_type(guint); +void print_link_port_direction(guint); +void print_termination_direction(guint); +void print_termination_state(guint); +void print_capacity_unit(guint); +void print_link_forwarding_direction(guint); + +struct contextSet_t* create_contextSet(); +void build_contextSet(struct contextSet_t *); +void print_contextSet(struct contextSet_t *); + +gint same_src_dst_pe_nodeid (struct service_t *); +void comp_route_connection_issue_handler (struct compRouteOutput_t *, struct service_t *); + +void destroy_compRouteOutputList (struct compRouteOutputList_t *); +void duplicate_graph (struct graph_t *, struct graph_t *); + +void allocate_graph_resources (struct path_t *, struct service_t *, struct graph_t *); +void allocate_graph_reverse_resources(struct path_t*, struct service_t *, struct graph_t *); +void print_route_solution_list (GList *); +struct timeval tv_adjust(struct timeval); + +void print_path_connection_list(struct compRouteOutputList_t*); +void update_stats_path_comp(struct compRouteOutputList_t*, struct timeval, gint, gint); +#endif \ No newline at end of file diff --git a/src/pathcomp/backend/tests/inter_domain_test.txt b/src/pathcomp/backend/tests/inter_domain_test.txt new file mode 100644 index 0000000000000000000000000000000000000000..3aeaa3779a816c7b79ff20601d80450de1743d4a --- /dev/null +++ b/src/pathcomp/backend/tests/inter_domain_test.txt @@ -0,0 +1,543 @@ +{ +"serviceList": [ +{ +"algId": "KSP", +"syncPaths": false, +"serviceId": { +"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"service_uuid": "651550d8-46a0-4f36-9fb9-21b8e4f1b8d2" +}, +"serviceType": 1, +"service_endpoints_ids": [ +{ +"topology_id": { +"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaa" +}, +"device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", +"endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa111" +}, +{ +"topology_id": { +"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" +}, +"device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", +"endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331" +} +], +"service_constraints": [ +{"constraint_type": "bandwidth", "constraint_value": "100"}, +{"constraint_type": "latency", "constraint_value": "20"} +], +"kPaths": 3 +} +], +"deviceList": [ +{"device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa111"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 4, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa112"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa113"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa132"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa133"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa134"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa122"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa123"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa124"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa142"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa143"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa141"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in": {"plug-id-inter-domain-local-id": "a2", "plug-id-inter-domain-remote-id":"c1"}} +] +}, +{"device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa151"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in":{"plug-id-inter-domain-local-id":"a1", +"plug-id-inter-domain-remote-id":"b1"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa152"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa153"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb211"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in":{"plug-id-inter-domain-local-id":"b1", +"plug-id-inter-domain-remote-id":"a1"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb212"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb213"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb231"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in":{"plug-id-inter-domain-local-id":"b2", +"plug-id-inter-domain-remote-id":"c2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb232"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb233"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb241"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in":{"plug-id-inter-domain-local-id":"b4", +"plug-id-inter-domain-remote-id":"c3"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb242"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb243"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc311"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in":{"plug-id-inter-domain-local-id":"c1", +"plug-id-inter-domain-remote-id":"a2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc312"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc313"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc321"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in":{"plug-id-inter-domain-local-id":"c2", +"plug-id-inter-domain-remote-id":"b2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc322"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc323"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, "inter-domain-plug-in":{"plug-id-inter-domain-local-id":"c3", +"plug-id-inter-domain-remote-id":"b4"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc332"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc333"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +} +], +"linkList": [ +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1112", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa113"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa122"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1211", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa122"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa113"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1113", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa112"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa132"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1311", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa132"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa112"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1312", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa133"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa123"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1213", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa123"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa133"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1214", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa124"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa142"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1412", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa142"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa124"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1315", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa134"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa152"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1513", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa152"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa134"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1415", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa143"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa153"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1514", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa153"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa143"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1521", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa151"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb211"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2115", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb211"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa151"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1431", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa141"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc311"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3114", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc311"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa141"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2124", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb212"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb242"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2421", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb242"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb212"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2123", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb213"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb233"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2321", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb233"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb213"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2324", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb232"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb243"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2424", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb243"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb232"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2332", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb231"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc321"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3223", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc321"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb231"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2433", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb241"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc34", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3324", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb241"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3132", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc312"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc323"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3231", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc323"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc312"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3133", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc313"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc333"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3331", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc333"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc313"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3233", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc322"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc332"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3332", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc332"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc322"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +} +] +} \ No newline at end of file diff --git a/src/pathcomp/backend/tests/pc-req.json b/src/pathcomp/backend/tests/pc-req.json new file mode 100644 index 0000000000000000000000000000000000000000..f465c95235dc80851b9e91dc80c3df60d3b4dbe0 --- /dev/null +++ b/src/pathcomp/backend/tests/pc-req.json @@ -0,0 +1,1230 @@ +{ + "deviceList": [ + { + "device_Id": "A1", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A1", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A1", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A1", + "endpoint_uuid": "2000", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "A2", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A2", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A2", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A2", + "endpoint_uuid": "1001", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "A3", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A3", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "A3", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "B1", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B1", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B1", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B1", + "endpoint_uuid": "2000", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "B2", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B2", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B2", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B2", + "endpoint_uuid": "1002", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "B3", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B3", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "B3", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "C1", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C1", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C1", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C1", + "endpoint_uuid": "1001", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "C2", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C2", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C2", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + }, + { + "device_Id": "C3", + "device_endpoints": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C3", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C3", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "endpoint_id": { + "device_id": "C3", + "endpoint_uuid": "1002", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + }, + "endpoint_type": "copper", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "device_type": "emu-packet-router" + } + ], + "linkList": [ + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "A1/1==A2/1", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "A1", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + } + }, + { + "endpoint_id": { + "device_id": "A2", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "A1/2==A3/1", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "A1", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + } + }, + { + "endpoint_id": { + "device_id": "A3", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "A2/1001==C3/1002", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "A2", + "endpoint_uuid": "1001", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + } + }, + { + "endpoint_id": { + "device_id": "C3", + "endpoint_uuid": "1002", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "A2/2==A3/2", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "A2", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + } + }, + { + "endpoint_id": { + "device_id": "A3", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "B1/1==B2/1", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "B1", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + }, + { + "endpoint_id": { + "device_id": "B2", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "B1/2==B3/1", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "B1", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + }, + { + "endpoint_id": { + "device_id": "B3", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "B2/2==B3/2", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "B2", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + }, + { + "endpoint_id": { + "device_id": "B3", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "C1/1001==B2/1002", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "C1", + "endpoint_uuid": "1001", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + }, + { + "endpoint_id": { + "device_id": "B2", + "endpoint_uuid": "1002", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "C1/1==C2/1", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "C1", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + }, + { + "endpoint_id": { + "device_id": "C2", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "C1/2==C3/1", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "C1", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + }, + { + "endpoint_id": { + "device_id": "C3", + "endpoint_uuid": "1", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + }, + { + "available-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + }, + "cost-characteristics": { + "cost-algorithm": "0", + "cost-name": "linkcost", + "cost-value": "1" + }, + "forwarding_direction": 0, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + }, + "link_Id": "C2/2==C3/2", + "link_endpoint_ids": [ + { + "endpoint_id": { + "device_id": "C2", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + }, + { + "endpoint_id": { + "device_id": "C3", + "endpoint_uuid": "2", + "topology_id": { + "contextId": "admin", + "topology_uuid": "C" + } + } + } + ], + "total-potential-capacity": { + "total-size": { + "unit": 5, + "value": 200 + } + } + } + ], + "serviceList": [ + { + "algId": "KSP", + "kPaths": 2, + "serviceId": { + "contextId": "admin", + "service_uuid": "svc:A1/2000==B1/2000" + }, + "serviceType": 1, + "service_constraints": [ + { + "constraint_type": "bandwidth[gbps]", + "constraint_value": "10.0" + }, + { + "constraint_type": "latency[ms]", + "constraint_value": "12.0" + } + ], + "service_endpoints_ids": [ + { + "device_id": "A1", + "endpoint_uuid": "2000", + "topology_id": { + "contextId": "admin", + "topology_uuid": "A" + } + }, + { + "device_id": "B1", + "endpoint_uuid": "2000", + "topology_id": { + "contextId": "admin", + "topology_uuid": "B" + } + } + ], + "syncPaths": false + } + ] +} \ No newline at end of file diff --git a/src/pathcomp/backend/tests/run-test.sh b/src/pathcomp/backend/tests/run-test.sh new file mode 100644 index 0000000000000000000000000000000000000000..214acdf1b8172a8bbd43056b3e3842583ffff645 --- /dev/null +++ b/src/pathcomp/backend/tests/run-test.sh @@ -0,0 +1 @@ +curl -0 -v -X POST -H "Expect:" -H "Content-Type: application/json" http://172.17.0.2:8081/pathComp/api/v1/compRoute -d @inter_domain_test.txt \ No newline at end of file diff --git a/src/pathcomp/backend/tests/test.txt b/src/pathcomp/backend/tests/test.txt new file mode 100644 index 0000000000000000000000000000000000000000..a2bab9f2b908dc2c4a17b86134cea38f6d0ed0b7 --- /dev/null +++ b/src/pathcomp/backend/tests/test.txt @@ -0,0 +1,236 @@ +{ +"serviceList": [ +{ +"algId": "KSP", +"syncPaths": false, +"serviceId": { +"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"service_uuid": "651550d8-46a0-4f36-9fb9-21b8e4f1b8d2" +}, +"serviceType": 1, +"service_endpoints_ids": [ +{ +"topology_id": { +"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d" +}, +"device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", +"endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1" +}, +{ +"topology_id": { +"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d" +}, +"device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", +"endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee1" +} +], +"service_constraints": [ +{"constraint_type": "bandwidth", "constraint_value": "100"}, +{"constraint_type": "latency", "constraint_value": "10"} +], +"kPaths": 3 +} +], +"deviceList": [ +{"device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 4, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa2"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa3"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb2"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb3"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb4"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc2"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc3"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc4"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "dddddddd-dddd-dddd-dddd-dddddddddddd", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "dddddddd-dddd-dddd-dddd-dddddddddddd", "endpoint_uuid": "dddddddd-dddd-dddd-dddd-ddddddddddd2"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "dddddddd-dddd-dddd-dddd-dddddddddddd", "endpoint_uuid": "dddddddd-dddd-dddd-dddd-ddddddddddd3"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +}, +{"device_Id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "device_type": "L3", +"device_endpoints": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee1"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 4, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee2"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee3"}, +"endpoint_type": "termination", "link_port_direction": 0, "termination-direction": 0, "termination-state": 0, "total-potential-capacity": {"total-size": {"value": 200, +"unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}} +] +} +], +"linkList": [ +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffab", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb2"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "10"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffba", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa2"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffac", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa3"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc2"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffca", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa3"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffcb", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc3"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb3"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffbc", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb3"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc3"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffcd", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc4"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "dddddddd-dddd-dddd-dddd-dddddddddddd", "endpoint_uuid": "dddddddd-dddd-dddd-dddd-ddddddddddd2"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffdc", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "dddddddd-dddd-dddd-dddd-dddddddddddd", "endpoint_uuid": "dddddddd-dddd-dddd-dddd-ddddddddddd2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccccc4"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffbe", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb4"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee2"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffeb", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee2"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb4"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffde", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "dddddddd-dddd-dddd-dddd-dddddddddddd", "endpoint_uuid": "dddddddd-dddd-dddd-dddd-ddddddddddd3"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee3"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +}, +{"link_Id": "ffffffff-ffff-ffff-ffff-ffffffffffed", +"link_endpoint_ids": [ +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", "endpoint_uuid": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee3"}}, +{"endpoint_id": {"topology_id": {"contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", +"topology_uuid": "abf65601-a36b-496f-8e21-1708e5f96e2d"}, "device_id": "dddddddd-dddd-dddd-dddd-dddddddddddd", "endpoint_uuid": "dddddddd-dddd-dddd-dddd-ddddddddddd3"}} +], +"forwarding_direction": 1, "total-potential-capacity": { "total-size": {"value": 200, "unit": 5}}, "available-capacity": {"total-size": {"value": 200, "unit": 5}}, +"cost-characteristics": {"cost-name": "linkcost","cost-value": "1","cost-algorithm": "0"},"latency-characteristics": {"fixed-latency-characteristic": "2"} +} +] +} \ No newline at end of file diff --git a/src/pathcomp/frontend/Config.py b/src/pathcomp/frontend/Config.py new file mode 100644 index 0000000000000000000000000000000000000000..f59ca45035ab0efecdf4297467626df18b74fa4d --- /dev/null +++ b/src/pathcomp/frontend/Config.py @@ -0,0 +1,38 @@ +# 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 + +DEFAULT_PATHCOMP_BACKEND_SCHEME = 'http' +DEFAULT_PATHCOMP_BACKEND_HOST = '127.0.0.1' +DEFAULT_PATHCOMP_BACKEND_PORT = '8081' +DEFAULT_PATHCOMP_BACKEND_BASEURL = '/pathComp/api/v1/compRoute' + +PATHCOMP_BACKEND_SCHEME = str(os.environ.get('PATHCOMP_BACKEND_SCHEME', DEFAULT_PATHCOMP_BACKEND_SCHEME )) +PATHCOMP_BACKEND_BASEURL = str(os.environ.get('PATHCOMP_BACKEND_BASEURL', DEFAULT_PATHCOMP_BACKEND_BASEURL)) + +# Find IP:port of backend container as follows: +# - first check env vars PATHCOMP_BACKEND_HOST & PATHCOMP_BACKEND_PORT +# - if not set, check env vars PATHCOMPSERVICE_SERVICE_HOST & PATHCOMPSERVICE_SERVICE_PORT_HTTP +# - if not set, use DEFAULT_PATHCOMP_BACKEND_HOST & DEFAULT_PATHCOMP_BACKEND_PORT +backend_host = DEFAULT_PATHCOMP_BACKEND_HOST +backend_host = os.environ.get('PATHCOMPSERVICE_SERVICE_HOST', backend_host) +PATHCOMP_BACKEND_HOST = str(os.environ.get('PATHCOMP_BACKEND_HOST', backend_host)) + +backend_port = DEFAULT_PATHCOMP_BACKEND_PORT +backend_port = os.environ.get('PATHCOMPSERVICE_SERVICE_PORT_HTTP', backend_port) +PATHCOMP_BACKEND_PORT = int(os.environ.get('PATHCOMP_BACKEND_PORT', backend_port)) + +BACKEND_URL = '{:s}://{:s}:{:d}{:s}'.format( + PATHCOMP_BACKEND_SCHEME, PATHCOMP_BACKEND_HOST, PATHCOMP_BACKEND_PORT, PATHCOMP_BACKEND_BASEURL) diff --git a/src/pathcomp/Dockerfile b/src/pathcomp/frontend/Dockerfile similarity index 94% rename from src/pathcomp/Dockerfile rename to src/pathcomp/frontend/Dockerfile index ec1ebbf06616233fb96acb4e54d3de24b8a016a4..2c511bc073b8d0631bbf120cff98d14a07187c3f 100644 --- a/src/pathcomp/Dockerfile +++ b/src/pathcomp/frontend/Dockerfile @@ -56,14 +56,15 @@ 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 +COPY src/pathcomp/frontend/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/device/. device/ COPY src/pathcomp/. pathcomp/ # Start the service -ENTRYPOINT ["python", "-m", "pathcomp.service"] +ENTRYPOINT ["python", "-m", "pathcomp.frontend.service"] diff --git a/src/pathcomp/Config.py b/src/pathcomp/frontend/__init__.py similarity index 100% rename from src/pathcomp/Config.py rename to src/pathcomp/frontend/__init__.py diff --git a/src/pathcomp/client/PathCompClient.py b/src/pathcomp/frontend/client/PathCompClient.py similarity index 100% rename from src/pathcomp/client/PathCompClient.py rename to src/pathcomp/frontend/client/PathCompClient.py diff --git a/src/pathcomp/client/__init__.py b/src/pathcomp/frontend/client/__init__.py similarity index 100% rename from src/pathcomp/client/__init__.py rename to src/pathcomp/frontend/client/__init__.py diff --git a/src/pathcomp/frontend/example/command.txt b/src/pathcomp/frontend/example/command.txt new file mode 100644 index 0000000000000000000000000000000000000000..59002337f8efe1db607ebd724bb89287142e9d94 --- /dev/null +++ b/src/pathcomp/frontend/example/command.txt @@ -0,0 +1,4 @@ +curl -0 -v -X POST \ + -H "Expect:" -H "Content-Type: application/json" \ + http://172.17.0.2:8081/pathComp/api/v1/compRoute \ + -d @src/pathcomp/backend/test/inter_domain_test.txt diff --git a/src/pathcomp/frontend/example/reply.json b/src/pathcomp/frontend/example/reply.json new file mode 100644 index 0000000000000000000000000000000000000000..6bb4bef233d7eda6215a06d83a03f97901d8ad83 --- /dev/null +++ b/src/pathcomp/frontend/example/reply.json @@ -0,0 +1,92 @@ +{ + "response-list": [ + { + "serviceId": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "service_uuid": "651550d8-46a0-4f36-9fb9-21b8e4f1b8d2" + }, + "service_endpoints_ids": [ + { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa111" + }, + { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331" + } + ], + "path": [ + { + "path-capacity": { + "total-size": { + "value": 200, + "unit": 0 + } + }, + "path-latency": { + "fixed-latency-characteristic": "8.000000" + }, + "path-cost": { + "cost-name": "", + "cost-value": "4.000000", + "cost-algorithm": "0.000000" + }, + "link": [ + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1112", + "topology": [ + { + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + { + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + } + ] + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1214", + "topology": [ + { + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + { + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + } + ] + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1431", + "topology": [ + { + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + { + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + } + ] + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3133", + "topology": [ + { + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + { + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/pathcomp/frontend/example/request.json b/src/pathcomp/frontend/example/request.json new file mode 100644 index 0000000000000000000000000000000000000000..a13f20f12fd9d181d0a21ffc737979cae23bf457 --- /dev/null +++ b/src/pathcomp/frontend/example/request.json @@ -0,0 +1,2474 @@ +{ + "serviceList": [ + { + "algId": "KSP", + "syncPaths": false, + "serviceId": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "service_uuid": "651550d8-46a0-4f36-9fb9-21b8e4f1b8d2" + }, + "serviceType": 1, + "service_endpoints_ids": [ + { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa111" + }, + { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331" + } + ], + "service_constraints": [ + { + "constraint_type": "bandwidth", + "constraint_value": "100" + }, + { + "constraint_type": "latency", + "constraint_value": "20" + } + ], + "kPaths": 3 + } + ], + "deviceList": [ + { + "device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa111" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 4, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa112" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa113" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa132" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa133" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa134" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa122" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa123" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa124" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa142" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa143" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa141" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "a2", + "plug-id-inter-domain-remote-id": "c1" + } + } + ] + }, + { + "device_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa151" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "a1", + "plug-id-inter-domain-remote-id": "b1" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa152" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa153" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb211" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "b1", + "plug-id-inter-domain-remote-id": "a1" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb212" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb213" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb231" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "b2", + "plug-id-inter-domain-remote-id": "c2" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb232" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb233" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb241" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "b4", + "plug-id-inter-domain-remote-id": "c3" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb242" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb243" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc311" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "c1", + "plug-id-inter-domain-remote-id": "a2" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc312" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc313" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc321" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "c2", + "plug-id-inter-domain-remote-id": "b2" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc322" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc323" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + }, + { + "device_Id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "device_type": "L3", + "device_endpoints": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "inter-domain-plug-in": { + "plug-id-inter-domain-local-id": "c3", + "plug-id-inter-domain-remote-id": "b4" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc332" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc333" + }, + "endpoint_type": "termination", + "link_port_direction": 0, + "termination-direction": 0, + "termination-state": 0, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + } + } + ] + } + ], + "linkList": [ + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1112", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa113" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa122" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1211", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa122" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa113" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1113", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa112" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa132" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1311", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa132" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa11", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa112" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1312", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa133" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa123" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1213", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa123" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa133" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1214", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa124" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa142" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1412", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa142" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa12", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa124" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1315", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa134" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa152" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1513", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa152" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa13", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa134" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1415", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa143" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa153" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1514", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa153" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa143" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1521", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa151" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb211" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2115", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb211" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa15", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa151" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1431", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa141" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc311" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3114", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc311" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa14", + "endpoint_uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa141" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2124", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb212" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb242" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2421", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb242" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb212" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2123", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb213" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb233" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2321", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb233" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb21", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb213" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2324", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb232" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb243" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2424", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb243" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb232" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2332", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb231" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc321" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3223", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc321" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb23", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb231" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbb2433", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb241" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc34", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3324", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc331" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + }, + "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb24", + "endpoint_uuid": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb241" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3132", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc312" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc323" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3231", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc323" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc312" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3133", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc313" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc333" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3331", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc333" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc31", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc313" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3233", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc322" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc332" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + }, + { + "link_Id": "cccccccc-cccc-cccc-cccc-cccccccc3332", + "link_endpoint_ids": [ + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc33", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc332" + } + }, + { + "endpoint_id": { + "topology_id": { + "contextId": "b55a05a5-ae2d-4ff3-85ca-97fac0c56f91", + "topology_uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" + }, + "device_id": "cccccccc-cccc-cccc-cccc-cccccccccc32", + "endpoint_uuid": "cccccccc-cccc-cccc-cccc-ccccccccc322" + } + } + ], + "forwarding_direction": 1, + "total-potential-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "available-capacity": { + "total-size": { + "value": 200, + "unit": 5 + } + }, + "cost-characteristics": { + "cost-name": "linkcost", + "cost-value": "1", + "cost-algorithm": "0" + }, + "latency-characteristics": { + "fixed-latency-characteristic": "2" + } + } + ] +} diff --git a/src/pathcomp/requirements.in b/src/pathcomp/frontend/requirements.in similarity index 100% rename from src/pathcomp/requirements.in rename to src/pathcomp/frontend/requirements.in diff --git a/src/pathcomp/service/PathCompService.py b/src/pathcomp/frontend/service/PathCompService.py similarity index 93% rename from src/pathcomp/service/PathCompService.py rename to src/pathcomp/frontend/service/PathCompService.py index 7fd9eab3ba8de53ddc5fdee018519126c44361f0..88dc5134754cc1b198a505ca9d1cd1f98f2ace22 100644 --- a/src/pathcomp/service/PathCompService.py +++ b/src/pathcomp/frontend/service/PathCompService.py @@ -15,7 +15,7 @@ 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 common.proto.pathcomp_pb2_grpc import add_PathCompServiceServicer_to_server from .PathCompServiceServicerImpl import PathCompServiceServicerImpl class PathCompService(GenericGrpcService): diff --git a/src/pathcomp/frontend/service/PathCompServiceServicerImpl.py b/src/pathcomp/frontend/service/PathCompServiceServicerImpl.py new file mode 100644 index 0000000000000000000000000000000000000000..1d55646abffcdb4a882167406ba046aca7bfa651 --- /dev/null +++ b/src/pathcomp/frontend/service/PathCompServiceServicerImpl.py @@ -0,0 +1,61 @@ +# 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.proto.context_pb2 import Empty +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_string +from context.client.ContextClient import ContextClient +from pathcomp.frontend.service.algorithms.Factory import get_algorithm + +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: add filtering of devices and links + # TODO: add contexts, topologies, and membership of devices/links in topologies + algorithm = get_algorithm(request) + algorithm.add_devices(context_client.ListDevices(Empty())) + algorithm.add_links(context_client.ListLinks(Empty())) + algorithm.add_service_requests(request) + + #LOGGER.debug('device_list = {:s}' .format(str(algorithm.device_list ))) + #LOGGER.debug('endpoint_dict = {:s}'.format(str(algorithm.endpoint_dict))) + #LOGGER.debug('link_list = {:s}' .format(str(algorithm.link_list ))) + #LOGGER.debug('service_list = {:s}' .format(str(algorithm.service_list ))) + #LOGGER.debug('service_dict = {:s}' .format(str(algorithm.service_dict ))) + + #import time + #ts = time.time() + #algorithm.execute('request-{:f}.json'.format(ts), 'reply-{:f}.json'.format(ts)) + algorithm.execute() + + reply = algorithm.get_reply() + 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/frontend/service/__init__.py similarity index 100% rename from src/pathcomp/service/__init__.py rename to src/pathcomp/frontend/service/__init__.py diff --git a/src/pathcomp/service/__main__.py b/src/pathcomp/frontend/service/__main__.py similarity index 95% rename from src/pathcomp/service/__main__.py rename to src/pathcomp/frontend/service/__main__.py index a41b9e994f02db725c4adf371d9638fd5135693e..24a5b77418839153839a4fcf92f1a2b42d9cf91d 100644 --- a/src/pathcomp/service/__main__.py +++ b/src/pathcomp/frontend/service/__main__.py @@ -31,7 +31,7 @@ def main(): global LOGGER # pylint: disable=global-statement log_level = get_log_level() - logging.basicConfig(level=log_level) + logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s") LOGGER = logging.getLogger(__name__) wait_for_environment_variables([ diff --git a/src/pathcomp/frontend/service/algorithms/Factory.py b/src/pathcomp/frontend/service/algorithms/Factory.py new file mode 100644 index 0000000000000000000000000000000000000000..80d329a9d6d2f3adf824132aca7e4d5a35cffa99 --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/Factory.py @@ -0,0 +1,33 @@ +# 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 ._Algorithm import _Algorithm +from .KDisjointPathAlgorithm import KDisjointPathAlgorithm +from .KShortestPathAlgorithm import KShortestPathAlgorithm +from .ShortestPathAlgorithm import ShortestPathAlgorithm + +ALGORITHMS = { + 'shortest_path' : ShortestPathAlgorithm, + 'k_shortest_path': KShortestPathAlgorithm, + 'k_disjoint_path': KDisjointPathAlgorithm, +} + +def get_algorithm(request) -> _Algorithm: + algorithm_name = request.WhichOneof('algorithm') + algorithm_class = ALGORITHMS.get(algorithm_name) + if algorithm_class is None: + raise Exception('Algorithm({:s}) not supported'.format(str(algorithm_name))) + algorithm_settings = getattr(request, algorithm_name) + algorithm_instance = algorithm_class(algorithm_settings) + return algorithm_instance diff --git a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..70b50dae53ba22eb6c8df018fb5663cce0bc125e --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py @@ -0,0 +1,232 @@ +# 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 operator +from typing import Dict, List, Optional, Set, Tuple +from common.proto.context_pb2 import Connection, Link, Service +from common.proto.pathcomp_pb2 import Algorithm_KDisjointPath, Algorithm_KShortestPath, PathCompReply, PathCompRequest +from common.tools.grpc.Tools import grpc_message_to_json_string +from pathcomp.frontend.service.algorithms.tools.ComputeSubServices import convert_explicit_path_hops_to_connections +from pathcomp.frontend.service.algorithms.tools.EroPathToHops import eropath_to_hops +from ._Algorithm import _Algorithm +from .KShortestPathAlgorithm import KShortestPathAlgorithm + +Service_Id = Tuple[str, str] # (context_uuid, service_uuid) +Service_Constraints = Dict[str, str] # {constraint_type => constraint_value} +Endpoint_Id = Tuple[str, str] # (device_uuid, endpoint_uuid) +Endpoint_Details = Tuple[str, int] # (site_id, priority) +Service_Endpoints = Dict[Endpoint_Id, Endpoint_Details] +Service_Details = Tuple[int, Service_Constraints, Service_Endpoints] +Services_Details = Dict[Service_Id, Service_Details] + +CUSTOM_CONSTRAINTS = {'bandwidth[gbps]', 'latency[ms]', 'jitter[us]'} + +DUMP_EXECUTION_STEPS = False + +class KDisjointPathAlgorithm(_Algorithm): + def __init__(self, algorithm : Algorithm_KDisjointPath, class_name=__name__) -> None: + super().__init__('KDP', False, class_name=class_name) + self.num_disjoint = algorithm.num_disjoint + self.services_details : Services_Details = dict() + + def add_service_requests(self, request: PathCompRequest) -> None: + super().add_service_requests(request) + for service in request.services: + service_id = service.service_id + context_uuid = service_id.context_id.context_uuid.uuid + service_uuid = service_id.service_uuid.uuid + service_key = (context_uuid, service_uuid) + + constraints = dict() + endpoints = dict() + service_details = (int(service.service_type), constraints, endpoints) + self.services_details.setdefault(service_key, service_details) + + for constraint in service.service_constraints: + if constraint.WhichOneof('constraint') == 'custom': + constraint_type = constraint.custom.constraint_type + if constraint_type not in CUSTOM_CONSTRAINTS: continue + constraint_value = constraint.custom.constraint_value + constraints[constraint_type] = constraint_value + + if constraint.WhichOneof('constraint') == 'endpoint_location': + endpoint_id = constraint.endpoint_location.endpoint_id + device_uuid = endpoint_id.device_id.device_uuid.uuid + endpoint_uuid = endpoint_id.endpoint_uuid.uuid + location_kind = constraint.endpoint_location.location.WhichOneof('location') + if location_kind != 'region': + MSG = 'Unsupported LocationType({:s}) in Constraint({:s})' + raise Exception(MSG.format(location_kind, grpc_message_to_json_string(constraint))) + site_id = constraint.endpoint_location.location.region + endpoints.setdefault((device_uuid, endpoint_uuid), dict())['site_id'] = site_id + + if constraint.WhichOneof('constraint') == 'endpoint_priority': + endpoint_id = constraint.endpoint_priority.endpoint_id + device_uuid = endpoint_id.device_id.device_uuid.uuid + endpoint_uuid = endpoint_id.endpoint_uuid.uuid + priority = constraint.endpoint_priority.priority + endpoints.setdefault((device_uuid, endpoint_uuid), dict())['priority'] = priority + + # TODO: ensure these constraints are provided in the request + if 'bandwidth[gbps]' not in constraints: constraints['bandwidth[gbps]'] = '20.0' + if 'latency[ms]' not in constraints: constraints['latency[ms]'] = '20.0' + + def get_link_from_endpoint(self, endpoint : Dict) -> Tuple[Dict, Link]: + device_uuid = endpoint['device_id'] + endpoint_uuid = endpoint['endpoint_uuid'] + item = self.endpoint_to_link_dict.get((device_uuid, endpoint_uuid)) + if item is None: + MSG = 'Link for Endpoint({:s}, {:s}) not found' + self.logger.warning(MSG.format(device_uuid, endpoint_uuid)) + return None + return item + + def path_to_links(self, path_endpoints : List[Dict]) -> Tuple[List[Dict], Set[str]]: + path_links = list() + path_link_ids = set() + for endpoint in path_endpoints: + link_tuple = self.get_link_from_endpoint(endpoint) + if link_tuple is None: continue + json_link,_ = link_tuple + json_link_id = json_link['link_Id'] + if len(path_links) == 0 or path_links[-1]['link_Id'] != json_link_id: + path_links.append(json_link) + path_link_ids.add(json_link_id) + return path_links, path_link_ids + + def remove_traversed_links(self, link_list : List[Dict], path_endpoints : List[Dict]): + _, path_link_ids = self.path_to_links(path_endpoints) + new_link_list = list(filter(lambda l: l['link_Id'] not in path_link_ids, link_list)) + #self.logger.info('cur_link_list = {:s}'.format(str(link_list))) + #self.logger.info('new_link_list = {:s}'.format(str(new_link_list))) + return new_link_list + + def execute(self, dump_request_filename: Optional[str] = None, dump_reply_filename: Optional[str] = None) -> None: + algorithm = KShortestPathAlgorithm(Algorithm_KShortestPath(k_inspection=0, k_return=1)) + algorithm.sync_paths = True + algorithm.device_list = self.device_list + algorithm.device_dict = self.device_dict + algorithm.endpoint_dict = self.endpoint_dict + algorithm.link_list = self.link_list + algorithm.link_dict = self.link_dict + algorithm.endpoint_to_link_dict = self.endpoint_to_link_dict + + Path = List[Dict] + Path_NoPath = Optional[Path] # None = no path, list = path + self.json_reply : Dict[Tuple[str, str], List[Path_NoPath]] = dict() + + for num_path in range(self.num_disjoint): + algorithm.service_list = list() + algorithm.service_dict = dict() + + #self.logger.warning('services_details = {:s}'.format(str(self.services_details))) + + _request = PathCompRequest() + for service_key, service_details in self.services_details.items(): + service_type, constraints, endpoints = service_details + _service = _request.services.add() + _service.service_id.context_id.context_uuid.uuid = service_key[0] + _service.service_id.service_uuid.uuid = service_key[1] + _service.service_type = service_type + for constraint_type, constraint_value in constraints.items(): + constraint = _service.service_constraints.add() + constraint.custom.constraint_type = constraint_type + constraint.custom.constraint_value = constraint_value + + site_to_endpoints : Dict[str, List[Tuple[Endpoint_Id, int]]] = {} + for endpoint_key,endpoint_details in endpoints.items(): + site_id = endpoint_details.get('site_id') + if site_id is None: continue + priority = endpoint_details.get('priority', 999) + site_to_endpoints.setdefault(site_id, list()).append((endpoint_key, priority)) + + for site_id,site_endpoints in site_to_endpoints.items(): + pending_endpoints = sorted(site_endpoints, key=operator.itemgetter(1)) + if len(pending_endpoints) == 0: continue + endpoint_key, _ = pending_endpoints[0] + device_uuid, endpoint_uuid = endpoint_key + endpoint_id = _service.service_endpoint_ids.add() + endpoint_id.device_id.device_uuid.uuid = device_uuid + endpoint_id.endpoint_uuid.uuid = endpoint_uuid + endpoints.pop(endpoint_key) + + algorithm.add_service_requests(_request) + + dump_request_filename = 'ksp-{:d}-request.json'.format(num_path) if DUMP_EXECUTION_STEPS else None + dump_reply_filename = 'ksp-{:d}-reply.txt'.format(num_path) if DUMP_EXECUTION_STEPS else None + algorithm.execute(dump_request_filename, dump_reply_filename) + + response_list = algorithm.json_reply.get('response-list', []) + for response in response_list: + service_id = response['serviceId'] + service_key = (service_id['contextId'], service_id['service_uuid']) + json_reply_service = self.json_reply.setdefault(service_key, list()) + + no_path_issue = response.get('noPath', {}).get('issue') + if no_path_issue is not None: + json_reply_service.append(None) + continue + + path_endpoints = response['path'][0]['devices'] + json_reply_service.append(path_endpoints) + algorithm.link_list = self.remove_traversed_links(algorithm.link_list, path_endpoints) + + self.logger.debug('self.json_reply = {:s}'.format(str(self.json_reply))) + + def get_reply(self) -> PathCompReply: + reply = PathCompReply() + grpc_services : Dict[Tuple[str, str], Service] = {} + grpc_connections : Dict[Tuple[int, str], Connection] = {} + for service_key,paths in self.json_reply.items(): + context_uuid, service_uuid = service_key + + grpc_services[service_key] = self.add_service_to_reply(reply, context_uuid, service_uuid) + + for num_path,service_path_ero in enumerate(paths): + if service_path_ero is None: continue + path_hops = eropath_to_hops(service_path_ero, self.endpoint_to_link_dict) + connections = convert_explicit_path_hops_to_connections(path_hops, self.device_dict, service_uuid) + + for connection in connections: + connection_uuid,device_layer,path_hops,_ = connection + + service_key = (context_uuid, connection_uuid) + grpc_service = grpc_services.get(service_key) + if grpc_service is not None: continue + grpc_service = self.add_service_to_reply( + reply, context_uuid, connection_uuid, device_layer=device_layer, path_hops=path_hops) + grpc_services[service_key] = grpc_service + + for connection in connections: + connection_uuid,device_layer,path_hops,dependencies = connection + + service_key = (context_uuid, connection_uuid) + grpc_service = grpc_services.get(service_key) + if grpc_service is None: raise Exception('Service({:s}) not found'.format(str(service_key))) + + connection_uuid = '{:s}:{:d}'.format(connection_uuid, num_path) + grpc_connection = grpc_connections.get(connection_uuid) + if grpc_connection is not None: continue + grpc_connection = self.add_connection_to_reply(reply, connection_uuid, grpc_service, path_hops) + grpc_connections[connection_uuid] = grpc_connection + + for service_uuid in dependencies: + sub_service_key = (context_uuid, service_uuid) + grpc_sub_service = grpc_services.get(sub_service_key) + if grpc_sub_service is None: + raise Exception('Service({:s}) not found'.format(str(sub_service_key))) + grpc_sub_service_id = grpc_connection.sub_service_ids.add() + grpc_sub_service_id.CopyFrom(grpc_sub_service.service_id) + + return reply diff --git a/src/pathcomp/frontend/service/algorithms/KShortestPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KShortestPathAlgorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..11da9daa59268b78768c1733333e0d2cc7882335 --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/KShortestPathAlgorithm.py @@ -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. + +from common.proto.pathcomp_pb2 import Algorithm_KShortestPath +from ._Algorithm import _Algorithm + +class KShortestPathAlgorithm(_Algorithm): + def __init__(self, algorithm : Algorithm_KShortestPath, class_name=__name__) -> None: + super().__init__('KSP', False, class_name=class_name) + self.k_inspection = algorithm.k_inspection + self.k_return = algorithm.k_return + + def add_service_requests(self, requested_services) -> None: + super().add_service_requests(requested_services) + for service_request in self.service_list: + service_request['algId' ] = self.algorithm_id + service_request['syncPaths'] = self.sync_paths + service_request['kPaths' ] = self.k_return diff --git a/src/pathcomp/frontend/service/algorithms/ShortestPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/ShortestPathAlgorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..d5f937fd207807ba650669ea9fb2395b2e21b164 --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/ShortestPathAlgorithm.py @@ -0,0 +1,26 @@ +# 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.proto.pathcomp_pb2 import Algorithm_ShortestPath +from ._Algorithm import _Algorithm + +class ShortestPathAlgorithm(_Algorithm): + def __init__(self, algorithm : Algorithm_ShortestPath, class_name=__name__) -> None: + super().__init__('SP', False, class_name=class_name) + + def add_service_requests(self, requested_services) -> None: + super().add_service_requests(requested_services) + for service_request in self.service_list: + service_request['algId' ] = self.algorithm_id + service_request['syncPaths'] = self.sync_paths diff --git a/src/pathcomp/frontend/service/algorithms/_Algorithm.py b/src/pathcomp/frontend/service/algorithms/_Algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..bb96ff354ef32cb0a269d2b678fdb9552d86939d --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/_Algorithm.py @@ -0,0 +1,235 @@ +# 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 json, logging, requests, uuid +from typing import Dict, List, Optional, Tuple +from common.proto.context_pb2 import Connection, Device, DeviceList, EndPointId, Link, LinkList, Service, ServiceStatusEnum, ServiceTypeEnum +from common.proto.pathcomp_pb2 import PathCompReply, PathCompRequest +from common.tools.grpc.Tools import grpc_message_to_json_string +from pathcomp.frontend.Config import BACKEND_URL +from pathcomp.frontend.service.algorithms.tools.ConstantsMappings import DEVICE_LAYER_TO_SERVICE_TYPE, DeviceLayerEnum +from .tools.EroPathToHops import eropath_to_hops +from .tools.ComposeRequest import compose_device, compose_link, compose_service +from .tools.ComputeSubServices import convert_explicit_path_hops_to_connections + +class _Algorithm: + def __init__(self, algorithm_id : str, sync_paths : bool, class_name=__name__) -> None: + # algorithm_id: algorithm to be executed + # sync_paths: if multiple services are included in the request, tunes how to prevent contention. If true, + # services are computed one after the other and resources assigned to service i, are considered as + # used when computing services i+1..n; otherwise, resources are never marked as used during the + # path computation. + + self.logger = logging.getLogger(class_name) + self.algorithm_id = algorithm_id + self.sync_paths = sync_paths + + self.device_list : List[Dict] = list() + self.device_dict : Dict[str, Tuple[Dict, Device]] = dict() + self.endpoint_dict : Dict[str, Dict[str, Tuple[Dict, EndPointId]]] = dict() + self.link_list : List[Dict] = list() + self.link_dict : Dict[str, Tuple[Dict, Link]] = dict() + self.endpoint_to_link_dict : Dict[Tuple[str, str], Tuple[Dict, Link]] = dict() + self.service_list : List[Dict] = list() + self.service_dict : Dict[Tuple[str, str], Tuple[Dict, Service]] = dict() + + def add_devices(self, grpc_devices : DeviceList) -> None: + for grpc_device in grpc_devices.devices: + json_device = compose_device(grpc_device) + self.device_list.append(json_device) + + device_uuid = json_device['device_Id'] + self.device_dict[device_uuid] = (json_device, grpc_device) + + device_endpoint_dict : Dict[str, Tuple[Dict, EndPointId]] = dict() + for json_endpoint,grpc_endpoint in zip(json_device['device_endpoints'], grpc_device.device_endpoints): + endpoint_uuid = json_endpoint['endpoint_id']['endpoint_uuid'] + endpoint_tuple = (json_endpoint['endpoint_id'], grpc_endpoint.endpoint_id) + device_endpoint_dict[endpoint_uuid] = endpoint_tuple + + self.endpoint_dict[device_uuid] = device_endpoint_dict + + def add_links(self, grpc_links : LinkList) -> None: + for grpc_link in grpc_links.links: + json_link = compose_link(grpc_link) + self.link_list.append(json_link) + + link_uuid = json_link['link_Id'] + self.link_dict[link_uuid] = (json_link, grpc_link) + + for link_endpoint_id in json_link['link_endpoint_ids']: + link_endpoint_id = link_endpoint_id['endpoint_id'] + device_uuid = link_endpoint_id['device_id'] + endpoint_uuid = link_endpoint_id['endpoint_uuid'] + endpoint_key = (device_uuid, endpoint_uuid) + link_tuple = (json_link, grpc_link) + self.endpoint_to_link_dict[endpoint_key] = link_tuple + + def add_service_requests(self, request : PathCompRequest) -> None: + for grpc_service in request.services: + json_service = compose_service(grpc_service) + self.service_list.append(json_service) + service_id = json_service['serviceId'] + service_key = (service_id['contextId'], service_id['service_uuid']) + service_tuple = (json_service, grpc_service) + self.service_dict[service_key] = service_tuple + + def execute(self, dump_request_filename : Optional[str] = None, dump_reply_filename : Optional[str] = None) -> None: + request = {'serviceList': self.service_list, 'deviceList': self.device_list, 'linkList': self.link_list} + + self.logger.info('[execute] request={:s}'.format(str(request))) + if dump_request_filename is not None: + with open(dump_request_filename, 'w', encoding='UTF-8') as f: + f.write(json.dumps(request, sort_keys=True, indent=4)) + + self.logger.info('[execute] BACKEND_URL: {:s}'.format(str(BACKEND_URL))) + reply = requests.post(BACKEND_URL, json=request) + self.status_code = reply.status_code + self.raw_reply = reply.content.decode('UTF-8') + + self.logger.info('[execute] status_code={:s} reply={:s}'.format(str(reply.status_code), str(self.raw_reply))) + if dump_reply_filename is not None: + with open(dump_reply_filename, 'w', encoding='UTF-8') as f: + f.write('status_code={:s} reply={:s}'.format(str(self.status_code), str(self.raw_reply))) + + if reply.status_code not in {requests.codes.ok}: + raise Exception('Backend error({:s}) for request({:s})'.format( + str(self.raw_reply), json.dumps(request, sort_keys=True))) + + self.json_reply = reply.json() + + def add_connection_to_reply( + self, reply : PathCompReply, connection_uuid : str, service : Service, path_hops : List[Dict] + ) -> Connection: + connection = reply.connections.add() + + connection.connection_id.connection_uuid.uuid = connection_uuid + connection.service_id.CopyFrom(service.service_id) + + for path_hop in path_hops: + device_uuid = path_hop['device'] + + ingress_endpoint_uuid = path_hop['ingress_ep'] + endpoint_id = connection.path_hops_endpoint_ids.add() + endpoint_id.CopyFrom(self.endpoint_dict[device_uuid][ingress_endpoint_uuid][1]) + + egress_endpoint_uuid = path_hop['egress_ep'] + endpoint_id = connection.path_hops_endpoint_ids.add() + endpoint_id.CopyFrom(self.endpoint_dict[device_uuid][egress_endpoint_uuid][1]) + + return connection + + def add_service_to_reply( + self, reply : PathCompReply, context_uuid : str, service_uuid : str, + device_layer : Optional[DeviceLayerEnum] = None, path_hops : List[Dict] = [] + ) -> Service: + # TODO: implement support for multi-point services + # Control deactivated to enable disjoint paths with multiple redundant endpoints on each side + #service_endpoint_ids = service.service_endpoint_ids + #if len(service_endpoint_ids) != 2: raise NotImplementedError('Service must have 2 endpoints') + + service_key = (context_uuid, service_uuid) + tuple_service = self.service_dict.get(service_key) + if tuple_service is not None: + service = reply.services.add() + service.CopyFrom(tuple_service[1]) + else: + service = reply.services.add() + service.service_id.context_id.context_uuid.uuid = context_uuid + service.service_id.service_uuid.uuid = service_uuid + + if device_layer is not None: + service_type = DEVICE_LAYER_TO_SERVICE_TYPE.get(device_layer.value) + if service_type is None: + MSG = 'Unable to map DeviceLayer({:s}) to ServiceType' + raise Exception(MSG.format(str(device_layer))) + service.service_type = service_type + + service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED + + if path_hops is not None and len(path_hops) > 0: + ingress_endpoint_id = service.service_endpoint_ids.add() + ingress_endpoint_id.device_id.device_uuid.uuid = path_hops[0]['device'] + ingress_endpoint_id.endpoint_uuid.uuid = path_hops[0]['ingress_ep'] + + egress_endpoint_id = service.service_endpoint_ids.add() + egress_endpoint_id.device_id.device_uuid.uuid = path_hops[-1]['device'] + egress_endpoint_id.endpoint_uuid.uuid = path_hops[-1]['egress_ep'] + + return service + + def get_reply(self) -> PathCompReply: + response_list = self.json_reply.get('response-list', []) + reply = PathCompReply() + grpc_services : Dict[Tuple[str, str], Service] = {} + grpc_connections : Dict[str, Connection] = {} + for response in response_list: + service_id = response['serviceId'] + context_uuid = service_id['contextId'] + service_uuid = service_id['service_uuid'] + service_key = (context_uuid, service_uuid) + grpc_services[service_key] = self.add_service_to_reply(reply, context_uuid, service_uuid) + + no_path_issue = response.get('noPath', {}).get('issue') + if no_path_issue is not None: + # no path found: leave connection with no endpoints + # no_path_issue == 1 => no path due to a constraint + continue + + for service_path_ero in response['path']: + path_hops = eropath_to_hops(service_path_ero['devices'], self.endpoint_to_link_dict) + connections = convert_explicit_path_hops_to_connections(path_hops, self.device_dict, service_uuid) + + for connection in connections: + connection_uuid,device_layer,path_hops,_ = connection + service_key = (context_uuid, connection_uuid) + grpc_service = grpc_services.get(service_key) + if grpc_service is None: + grpc_service = self.add_service_to_reply( + reply, context_uuid, connection_uuid, device_layer=device_layer, path_hops=path_hops) + grpc_services[service_key] = grpc_service + + for connection in connections: + connection_uuid,device_layer,path_hops,dependencies = connection + + service_key = (context_uuid, connection_uuid) + grpc_service = grpc_services.get(service_key) + if grpc_service is None: raise Exception('Service({:s}) not found'.format(str(service_key))) + + grpc_connection = grpc_connections.get(connection_uuid) + if grpc_connection is not None: continue + grpc_connection = self.add_connection_to_reply(reply, connection_uuid, grpc_service, path_hops) + grpc_connections[connection_uuid] = grpc_connection + + for service_uuid in dependencies: + sub_service_key = (context_uuid, service_uuid) + grpc_sub_service = grpc_services.get(sub_service_key) + if grpc_sub_service is None: + raise Exception('Service({:s}) not found'.format(str(sub_service_key))) + grpc_sub_service_id = grpc_connection.sub_service_ids.add() + grpc_sub_service_id.CopyFrom(grpc_sub_service.service_id) + + # ... "path-capacity": {"total-size": {"value": 200, "unit": 0}}, + # ... "path-latency": {"fixed-latency-characteristic": "10.000000"}, + # ... "path-cost": {"cost-name": "", "cost-value": "5.000000", "cost-algorithm": "0.000000"}, + #path_capacity = service_path['path-capacity']['total-size'] + #path_capacity_value = path_capacity['value'] + #path_capacity_unit = CapacityUnit(path_capacity['unit']) + #path_latency = service_path['path-latency']['fixed-latency-characteristic'] + #path_cost = service_path['path-cost'] + #path_cost_name = path_cost['cost-name'] + #path_cost_value = path_cost['cost-value'] + #path_cost_algorithm = path_cost['cost-algorithm'] + + return reply diff --git a/src/pathcomp/tests/__init__.py b/src/pathcomp/frontend/service/algorithms/__init__.py similarity index 100% rename from src/pathcomp/tests/__init__.py rename to src/pathcomp/frontend/service/algorithms/__init__.py diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py new file mode 100644 index 0000000000000000000000000000000000000000..7745043318a46649b26d24ae99abaed0577d6171 --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py @@ -0,0 +1,137 @@ +# 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 typing import Dict +from common.Constants import DEFAULT_CONTEXT_UUID, DEFAULT_TOPOLOGY_UUID +from common.proto.context_pb2 import Constraint, Device, EndPointId, Link, Service, ServiceId, TopologyId +from common.tools.grpc.Tools import grpc_message_to_json_string +from .ConstantsMappings import ( + CapacityUnit, LinkForwardingDirection, LinkPortDirection, TerminationDirection, TerminationState) + +LOGGER = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) + +def compose_topology_id(topology_id : TopologyId) -> Dict: + context_uuid = topology_id.context_id.context_uuid.uuid + topology_uuid = topology_id.topology_uuid.uuid + + if len(context_uuid) == 0: context_uuid = DEFAULT_CONTEXT_UUID + if len(topology_uuid) == 0: topology_uuid = DEFAULT_TOPOLOGY_UUID + + return {'contextId': context_uuid, 'topology_uuid': topology_uuid} + +def compose_service_id(service_id : ServiceId) -> Dict: + context_uuid = service_id.context_id.context_uuid.uuid + + if len(context_uuid) == 0: context_uuid = DEFAULT_CONTEXT_UUID + + service_uuid = service_id.service_uuid.uuid + return {'contextId': context_uuid, 'service_uuid': service_uuid} + +def compose_endpoint_id(endpoint_id : EndPointId) -> Dict: + topology_id = compose_topology_id(endpoint_id.topology_id) + device_uuid = endpoint_id.device_id.device_uuid.uuid + endpoint_uuid = endpoint_id.endpoint_uuid.uuid + return {'topology_id': topology_id, 'device_id': device_uuid, 'endpoint_uuid': endpoint_uuid} + +def compose_capacity(value : str, unit : str) -> Dict: + return {'total-size': {'value': value, 'unit': unit}} + +def compose_endpoint( + endpoint_id : Dict, endpoint_type : str, link_port_direction : int, termination_direction : int, + termination_state : int, total_potential_capacity : Dict, available_capacity : Dict +) -> Dict: + return { + 'endpoint_id': endpoint_id, 'endpoint_type': endpoint_type, 'link_port_direction': link_port_direction, + 'termination-direction': termination_direction, 'termination-state': termination_state, + 'total-potential-capacity': total_potential_capacity, 'available-capacity': available_capacity, + } + +def compose_cost_characteristics(cost_name : str, cost_value : str, cost_algorithm : str) -> Dict: + return {'cost-name': cost_name, 'cost-value': cost_value, 'cost-algorithm': cost_algorithm} + +def compose_latency_characteristics(fixed_latency_characteristic : str) -> Dict: + return {'fixed-latency-characteristic': fixed_latency_characteristic} + +def compose_constraint(constraint : Constraint) -> Dict: + if constraint.WhichOneof('constraint') != 'custom': + str_constraint = grpc_message_to_json_string(constraint) + LOGGER.warning('Ignoring unsupported Constraint({:s})'.format(str_constraint)) + return None + constraint_type = constraint.custom.constraint_type + constraint_value = constraint.custom.constraint_value + return {'constraint_type': constraint_type, 'constraint_value': constraint_value} + +def compose_device(grpc_device : Device) -> Dict: + device_uuid = grpc_device.device_id.device_uuid.uuid + device_type = grpc_device.device_type + + endpoints = [] + for device_endpoint in grpc_device.device_endpoints: + endpoint_id = compose_endpoint_id(device_endpoint.endpoint_id) + endpoint_type = device_endpoint.endpoint_type + link_port_direction = LinkPortDirection.BIDIRECTIONAL.value + termination_direction = TerminationDirection.BIDIRECTIONAL.value + termination_state = TerminationState.TERMINATED_BIDIRECTIONAL.value + total_potential_capacity = compose_capacity(200, CapacityUnit.MBPS.value) + available_capacity = compose_capacity(200, CapacityUnit.MBPS.value) + endpoint = compose_endpoint( + endpoint_id, endpoint_type, link_port_direction, termination_direction, + termination_state, total_potential_capacity, available_capacity) + endpoints.append(endpoint) + + return {'device_Id': device_uuid, 'device_type': device_type, 'device_endpoints': endpoints} + +def compose_link(grpc_link : Link) -> Dict: + link_uuid = grpc_link.link_id.link_uuid.uuid + + endpoint_ids = [ + {'endpoint_id' : compose_endpoint_id(link_endpoint_id)} + for link_endpoint_id in grpc_link.link_endpoint_ids + ] + + forwarding_direction = LinkForwardingDirection.BIDIRECTIONAL.value + total_potential_capacity = compose_capacity(200, CapacityUnit.MBPS.value) + available_capacity = compose_capacity(200, CapacityUnit.MBPS.value) + cost_characteristics = compose_cost_characteristics('linkcost', '1', '0') + latency_characteristics = compose_latency_characteristics('2') + + return { + 'link_Id': link_uuid, 'link_endpoint_ids': endpoint_ids, 'forwarding_direction': forwarding_direction, + 'total-potential-capacity': total_potential_capacity, 'available-capacity': available_capacity, + 'cost-characteristics': cost_characteristics, 'latency-characteristics': latency_characteristics, + } + +def compose_service(grpc_service : Service) -> Dict: + service_id = compose_service_id(grpc_service.service_id) + service_type = grpc_service.service_type + + endpoint_ids = [ + compose_endpoint_id(service_endpoint_id) + for service_endpoint_id in grpc_service.service_endpoint_ids + ] + + constraints = list(filter(lambda constraint: constraint is not None, [ + compose_constraint(service_constraint) + for service_constraint in grpc_service.service_constraints + ])) + + return { + 'serviceId': service_id, + 'serviceType': service_type, + 'service_endpoints_ids': endpoint_ids, + 'service_constraints': constraints, + } diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py new file mode 100644 index 0000000000000000000000000000000000000000..f2c66cb24ca3c15c71f22dbe4eeca634e18d985a --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py @@ -0,0 +1,96 @@ +# 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. + +# Convert the path defined as explicit hops with ingress and egress endpoints per device into a set of connections and +# compute the dependencies among them. +# +# Example: +# o-- int DC1 eth1 -- 10/1 CS1 1/2 -- 1/2 R2 2/1 -- a7.. OLS 60.. -- 2/1 R3 1/1 -- 1/1 CS2 10/1 -- eth1 DC2 int --o +# APP PKT PKT CTRL PKT PKT APP +# +# path_hops = [ +# {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'}, +# {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'}, +# {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'}, +# {'device': 'TN-OLS', 'ingress_ep': 'a7a80b23a703', 'egress_ep': '60519106029e'}, +# {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'}, +# {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}, +# {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'} +# ] +# +# connections=[ +# (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), <DeviceLayerEnum.OPTICAL_CONTROLLER: 1>, [ +# {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'} +# ], []), +# (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), <DeviceLayerEnum.PACKET_DEVICE: 30>, [ +# {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'}, +# {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'}, +# {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'}, +# {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'} +# ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]), +# (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), <DeviceLayerEnum.APPLICATION_DEVICE: 40>, [ +# {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'}, +# {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'} +# ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')]) +# ] + +import queue, uuid +from typing import Dict, List, Tuple +from common.proto.context_pb2 import Device +from .ConstantsMappings import DEVICE_TYPE_TO_LAYER, DeviceLayerEnum + +def convert_explicit_path_hops_to_connections( + path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]], main_connection_uuid : str +) -> List[Tuple[str, DeviceLayerEnum, List[str], List[str]]]: + + connection_stack = queue.LifoQueue() + connections : List[Tuple[str, DeviceLayerEnum, List[str], List[str]]] = list() + old_device_layer = None + last_device_uuid = None + for path_hop in path_hops: + device_uuid = path_hop['device'] + if last_device_uuid == device_uuid: continue + device_tuple = device_dict.get(device_uuid) + if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid))) + json_device,_ = device_tuple + device_type = json_device['device_type'] + device_layer = DEVICE_TYPE_TO_LAYER.get(device_type) + if device_layer is None: raise Exception('Undefined Layer for DeviceType({:s})'.format(str(device_type))) + + if old_device_layer is None: + # path ingress + connection_stack.put((main_connection_uuid, device_layer, [path_hop], [])) + elif old_device_layer > device_layer: + # underlying connection begins + connection_uuid = str(uuid.uuid4()) + connection_stack.put((connection_uuid, device_layer, [path_hop], [])) + elif old_device_layer == device_layer: + # same connection continues + connection_stack.queue[-1][2].append(path_hop) + elif old_device_layer < device_layer: + # underlying connection ended + connection = connection_stack.get() + connections.append(connection) + connection_stack.queue[-1][3].append(connection[0]) + connection_stack.queue[-1][2].append(path_hop) + else: + raise Exception('Uncontrolled condition') + + old_device_layer = device_layer + last_device_uuid = device_uuid + + # path egress + connections.append(connection_stack.get()) + assert connection_stack.empty() + return connections diff --git a/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py b/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py new file mode 100644 index 0000000000000000000000000000000000000000..5e4f5408398cca012dca52fb19bf11a2b84a5721 --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py @@ -0,0 +1,105 @@ +# 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 enum import IntEnum +from common.DeviceTypes import DeviceTypeEnum +from common.proto.context_pb2 import ServiceTypeEnum + +class CapacityUnit(IntEnum): + TB = 0 + TBPS = 1 + GB = 2 + GBPS = 3 + MB = 4 + MBPS = 5 + KB = 6 + KBPS = 7 + GHZ = 8 + MHZ = 9 + +CAPACITY_MULTIPLIER = { + CapacityUnit.TB : 1.e12, + CapacityUnit.TBPS : 1.e12, + CapacityUnit.GB : 1.e9, + CapacityUnit.GBPS : 1.e9, + CapacityUnit.MB : 1.e6, + CapacityUnit.MBPS : 1.e6, + CapacityUnit.KB : 1.e3, + CapacityUnit.KBPS : 1.e3, + CapacityUnit.GHZ : 1.e9, + CapacityUnit.MHZ : 1.e6, +} + +class LinkPortDirection(IntEnum): + BIDIRECTIONAL = 0 + INPUT = 1 + OUTPUT = 2 + UNKNOWN = 3 + +class TerminationDirection(IntEnum): + BIDIRECTIONAL = 0 + SINK = 1 + SOURCE = 2 + UNKNOWN = 3 + +class TerminationState(IntEnum): + CAN_NEVER_TERMINATE = 0 + NOT_TERMINATED = 1 + TERMINATED_SERVER_TO_CLIENT = 2 + TERMINATED_CLIENT_TO_SERVER = 3 + TERMINATED_BIDIRECTIONAL = 4 + PERMENANTLY_TERMINATED = 5 + TERMINATION_STATE_UNKNOWN = 6 + +class LinkForwardingDirection(IntEnum): + BIDIRECTIONAL = 0 + UNIDIRECTIONAL = 1 + UNKNOWN = 2 + +class DeviceLayerEnum(IntEnum): + APPLICATION_CONTROLLER = 41 # Layer 4 domain controller + APPLICATION_DEVICE = 40 # Layer 4 domain device + PACKET_CONTROLLER = 31 # Layer 3 domain controller + PACKET_DEVICE = 30 # Layer 3 domain device + MAC_LAYER_CONTROLLER = 21 # Layer 2 domain controller + MAC_LAYER_DEVICE = 20 # Layer 2 domain device + OPTICAL_CONTROLLER = 1 # Layer 0 domain controller + OPTICAL_DEVICE = 0 # Layer 0 domain device + +DEVICE_TYPE_TO_LAYER = { + DeviceTypeEnum.EMULATED_DATACENTER.value : DeviceLayerEnum.APPLICATION_DEVICE, + DeviceTypeEnum.DATACENTER.value : DeviceLayerEnum.APPLICATION_DEVICE, + + DeviceTypeEnum.EMULATED_PACKET_ROUTER.value : DeviceLayerEnum.PACKET_DEVICE, + DeviceTypeEnum.PACKET_ROUTER.value : DeviceLayerEnum.PACKET_DEVICE, + DeviceTypeEnum.PACKET_SWITCH.value : DeviceLayerEnum.MAC_LAYER_DEVICE, + DeviceTypeEnum.P4_SWITCH.value : DeviceLayerEnum.MAC_LAYER_DEVICE, + + DeviceTypeEnum.MICROVAWE_RADIO_SYSTEM.value : DeviceLayerEnum.MAC_LAYER_CONTROLLER, + + DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value: DeviceLayerEnum.OPTICAL_CONTROLLER, + DeviceTypeEnum.OPEN_LINE_SYSTEM.value : DeviceLayerEnum.OPTICAL_CONTROLLER, + + DeviceTypeEnum.OPTICAL_ROADM.value : DeviceLayerEnum.OPTICAL_DEVICE, + DeviceTypeEnum.OPTICAL_TRANDPONDER.value : DeviceLayerEnum.OPTICAL_DEVICE, +} + +DEVICE_LAYER_TO_SERVICE_TYPE = { + DeviceLayerEnum.APPLICATION_DEVICE.value: ServiceTypeEnum.SERVICETYPE_L3NM, + + DeviceLayerEnum.PACKET_DEVICE.value : ServiceTypeEnum.SERVICETYPE_L3NM, + DeviceLayerEnum.MAC_LAYER_DEVICE.value : ServiceTypeEnum.SERVICETYPE_L2NM, + + DeviceLayerEnum.OPTICAL_CONTROLLER.value: ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE, +} diff --git a/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py b/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py new file mode 100644 index 0000000000000000000000000000000000000000..021940937c23a7cb461a603aa32a15f16626eb1d --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py @@ -0,0 +1,76 @@ +# 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. + +# Convert the Explicit Route Object (ERO)-like paths produced by the PathComp component (response['path']) into +# explicit hops with ingress and egress endpoints per device (path_hops). +# +# response['path'] = [{ +# 'path-capacity': {'total-size': {'value': 200, 'unit': 0}}, +# 'path-latency': {'fixed-latency-characteristic': '12.000000'}, +# 'path-cost': {'cost-name': '', 'cost-value': '6.000000', 'cost-algorithm': '0.000000'}, +# 'devices': [ +# {'device_id': 'DC1-GW', 'endpoint_uuid': 'int'}, +# {'device_id': 'DC1-GW', 'endpoint_uuid': 'eth1'}, +# {'device_id': 'CS1-GW1', 'endpoint_uuid': '1/2'}, +# {'device_id': 'TN-R2', 'endpoint_uuid': '2/1'}, +# {'device_id': 'TN-OLS', 'endpoint_uuid': 'ca46812e8ad7'}, +# {'device_id': 'TN-R3', 'endpoint_uuid': '1/1'}, +# {'device_id': 'CS2-GW1', 'endpoint_uuid': '10/1'}, +# {'device_id': 'DC2-GW', 'endpoint_uuid': 'int'} +# ] +# }] +# +# path_hops = [ +# {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'}, +# {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'}, +# {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'}, +# {'device': 'TN-OLS', 'ingress_ep': '951f2f57e4a4', 'egress_ep': 'ca46812e8ad7'}, +# {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'}, +# {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}, +# {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'} +# ] +# + +from typing import Dict, List + +def eropath_to_hops(ero_path : List[Dict], endpoint_to_link_dict : Dict) -> List[Dict]: + path_hops = [] + for endpoint in ero_path: + device_uuid = endpoint['device_id'] + endpoint_uuid = endpoint['endpoint_uuid'] + + if len(path_hops) == 0: + path_hops.append({'device': device_uuid, 'ingress_ep': endpoint_uuid}) + continue + + last_hop = path_hops[-1] + if (last_hop['device'] == device_uuid): + if ('ingress_ep' not in last_hop) or ('egress_ep' in last_hop): continue + last_hop['egress_ep'] = endpoint_uuid + continue + + endpoint_key = (last_hop['device'], last_hop['egress_ep']) + link_tuple = endpoint_to_link_dict.get(endpoint_key) + ingress = next(iter([ + ep_id for ep_id in link_tuple[0]['link_endpoint_ids'] + if (ep_id['endpoint_id']['device_id'] == device_uuid) and\ + (ep_id['endpoint_id']['endpoint_uuid'] != endpoint_uuid) + ]), None) + if ingress['endpoint_id']['device_id'] != device_uuid: raise Exception('Malformed path') + path_hops.append({ + 'device': ingress['endpoint_id']['device_id'], + 'ingress_ep': ingress['endpoint_id']['endpoint_uuid'], + 'egress_ep': endpoint_uuid, + }) + return path_hops diff --git a/src/pathcomp/frontend/service/algorithms/tools/__init__.py b/src/pathcomp/frontend/service/algorithms/tools/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..70a33251242c51f49140e596b8208a19dd5245f7 --- /dev/null +++ b/src/pathcomp/frontend/service/algorithms/tools/__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/.gitignore b/src/pathcomp/frontend/tests/.gitignore similarity index 100% rename from src/pathcomp/tests/.gitignore rename to src/pathcomp/frontend/tests/.gitignore diff --git a/src/pathcomp/tests/MockService_Dependencies.py b/src/pathcomp/frontend/tests/MockService_Dependencies.py similarity index 63% rename from src/pathcomp/tests/MockService_Dependencies.py rename to src/pathcomp/frontend/tests/MockService_Dependencies.py index b5fe85aa9cec8dd3e3993493abf8a26956a1a886..16ff9a5efca5827fdb531dad74aabff29507a580 100644 --- a/src/pathcomp/tests/MockService_Dependencies.py +++ b/src/pathcomp/frontend/tests/MockService_Dependencies.py @@ -17,18 +17,12 @@ 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 @@ -41,18 +35,6 @@ class MockService_Dependencies(GenericGrpcService): 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/frontend/tests/Objects_A_B_C.py similarity index 70% rename from src/pathcomp/tests/Objects.py rename to src/pathcomp/frontend/tests/Objects_A_B_C.py index f4785d7ae670efcc5525d6b00c4baf3acf3f22b1..510ebb6746ccb8d050d5eb6ea91ec6354f224459 100644 --- a/src/pathcomp/tests/Objects.py +++ b/src/pathcomp/frontend/tests/Objects_A_B_C.py @@ -13,7 +13,7 @@ # 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.Constraint import json_constraint_custom 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 @@ -21,10 +21,10 @@ from common.tools.object_factory.Link import get_link_uuid, json_link, json_link 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): +def compose_device(device_uuid, endpoint_uuids, topology_id=None): 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) + endpoints = json_endpoints(device_id, endpoints, topology_id=topology_id) device = json_device_emulated_packet_router_disabled(device_uuid, endpoints=endpoints) return device_id, endpoints, device @@ -45,32 +45,36 @@ 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_ADMIN_UUID = DEFAULT_TOPOLOGY_UUID +TOPOLOGY_ADMIN_ID = json_topology_id(TOPOLOGY_ADMIN_UUID, context_id=CONTEXT_ID) +TOPOLOGY_ADMIN = json_topology(TOPOLOGY_ADMIN_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_A_UUID = 'A' +TOPOLOGY_A_ID = json_topology_id(TOPOLOGY_A_UUID, context_id=CONTEXT_ID) +TOPOLOGY_A = json_topology(TOPOLOGY_A_UUID, 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_B_UUID = 'B' +TOPOLOGY_B_ID = json_topology_id(TOPOLOGY_B_UUID, context_id=CONTEXT_ID) +TOPOLOGY_B = json_topology(TOPOLOGY_B_UUID, context_id=CONTEXT_ID) -TOPOLOGY_C_ID = json_topology_id('C', context_id=CONTEXT_ID) -TOPOLOGY_C = json_topology('C', context_id=CONTEXT_ID) +TOPOLOGY_C_UUID = 'C' +TOPOLOGY_C_ID = json_topology_id(TOPOLOGY_C_UUID, context_id=CONTEXT_ID) +TOPOLOGY_C = json_topology(TOPOLOGY_C_UUID, 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']) +DEVICE_A1_ID, DEVICE_A1_ENDPOINTS, DEVICE_A1 = compose_device('A1', ['1', '2', '2000'], topology_id=TOPOLOGY_A_ID) +DEVICE_A2_ID, DEVICE_A2_ENDPOINTS, DEVICE_A2 = compose_device('A2', ['1', '2', '1001'], topology_id=TOPOLOGY_A_ID) +DEVICE_A3_ID, DEVICE_A3_ENDPOINTS, DEVICE_A3 = compose_device('A3', ['1', '2' ], topology_id=TOPOLOGY_A_ID) # ----- 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']) +DEVICE_B1_ID, DEVICE_B1_ENDPOINTS, DEVICE_B1 = compose_device('B1', ['1', '2', '2000'], topology_id=TOPOLOGY_B_ID) +DEVICE_B2_ID, DEVICE_B2_ENDPOINTS, DEVICE_B2 = compose_device('B2', ['1', '2', '1002'], topology_id=TOPOLOGY_B_ID) +DEVICE_B3_ID, DEVICE_B3_ENDPOINTS, DEVICE_B3 = compose_device('B3', ['1', '2' ], topology_id=TOPOLOGY_B_ID) # ----- 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']) +DEVICE_C1_ID, DEVICE_C1_ENDPOINTS, DEVICE_C1 = compose_device('C1', ['1', '2', '1001'], topology_id=TOPOLOGY_C_ID) +DEVICE_C2_ID, DEVICE_C2_ENDPOINTS, DEVICE_C2 = compose_device('C2', ['1', '2' ], topology_id=TOPOLOGY_C_ID) +DEVICE_C3_ID, DEVICE_C3_ENDPOINTS, DEVICE_C3 = compose_device('C3', ['1', '2', '1002'], topology_id=TOPOLOGY_C_ID) # ----- InterDomain Links ---------------------------------------------------------------------------------------------- LINK_A2_C3_ID, LINK_A2_C3 = compose_link(DEVICE_A2_ENDPOINTS[2], DEVICE_C3_ENDPOINTS[2]) @@ -93,13 +97,13 @@ LINK_C2_C3_ID, LINK_C2_C3 = compose_link(DEVICE_C2_ENDPOINTS[1], DEVICE_C3_ENDPO # ----- 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), + json_constraint_custom('bandwidth[gbps]', 10.0), + json_constraint_custom('latency[ms]', 12.0), ]) # ----- Containers ----------------------------------------------------------------------------------------------------- -CONTEXTS = [CONTEXT] -TOPOLOGIES = [TOPOLOGY_ADMIN, TOPOLOGY_A, TOPOLOGY_B, TOPOLOGY_C] +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, ] @@ -107,4 +111,28 @@ 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] +SERVICES = [ SERVICE_A1_B1] + +OBJECTS_PER_TOPOLOGY = [ + (TOPOLOGY_ADMIN_ID, + [ DEVICE_A1_ID, DEVICE_A2_ID, DEVICE_A3_ID, + DEVICE_B1_ID, DEVICE_B2_ID, DEVICE_B3_ID, + DEVICE_C1_ID, DEVICE_C2_ID, DEVICE_C3_ID, ], + [ LINK_A2_C3_ID, LINK_C1_B2_ID, + LINK_A1_A2_ID, LINK_A1_A3_ID, LINK_A2_A3_ID, + LINK_B1_B2_ID, LINK_B1_B3_ID, LINK_B2_B3_ID, + LINK_C1_C2_ID, LINK_C1_C3_ID, LINK_C2_C3_ID, ], + ), + (TOPOLOGY_A_ID, + [ DEVICE_A1_ID, DEVICE_A2_ID, DEVICE_A3_ID, ], + [ LINK_A1_A2_ID, LINK_A1_A3_ID, LINK_A2_A3_ID, ], + ), + (TOPOLOGY_B_ID, + [ DEVICE_B1_ID, DEVICE_B2_ID, DEVICE_B3_ID, ], + [ LINK_B1_B2_ID, LINK_B1_B3_ID, LINK_B2_B3_ID, ], + ), + (TOPOLOGY_C_ID, + [ DEVICE_C1_ID, DEVICE_C2_ID, DEVICE_C3_ID, ], + [ LINK_C1_C2_ID, LINK_C1_C3_ID, LINK_C2_C3_ID, ], + ), +] diff --git a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py new file mode 100644 index 0000000000000000000000000000000000000000..06e9bbbc715a85a2c0d979584c58b268bff687e6 --- /dev/null +++ b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py @@ -0,0 +1,191 @@ +# 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_custom +from common.tools.object_factory.Context import json_context, json_context_id +from common.tools.object_factory.Device import ( + json_device_emulated_connect_rules, json_device_emulated_datacenter_disabled, + 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 + +# if true, Device component is present and will infeer the endpoints from connect-rules +# if false, Device component is not present and device objects must contain preconfigured endpoints +ADD_CONNECT_RULES_TO_DEVICES = False + +def compose_router(device_uuid, endpoint_uuids, topology_id=None): + device_id = json_device_id(device_uuid) + r_endpoints = [(endpoint_uuid, 'copper', []) for endpoint_uuid in endpoint_uuids] + config_rules = json_device_emulated_connect_rules(r_endpoints) if ADD_CONNECT_RULES_TO_DEVICES else [] + endpoints = json_endpoints(device_id, r_endpoints, topology_id=topology_id) + j_endpoints = [] if ADD_CONNECT_RULES_TO_DEVICES else endpoints + device = json_device_emulated_packet_router_disabled(device_uuid, config_rules=config_rules, endpoints=j_endpoints) + return device_id, endpoints, device + +def compose_datacenter(device_uuid, endpoint_uuids, topology_id=None): + device_id = json_device_id(device_uuid) + r_endpoints = [(endpoint_uuid, 'copper', []) for endpoint_uuid in endpoint_uuids] + config_rules = json_device_emulated_connect_rules(r_endpoints) if ADD_CONNECT_RULES_TO_DEVICES else [] + endpoints = json_endpoints(device_id, r_endpoints, topology_id=topology_id) + j_endpoints = [] if ADD_CONNECT_RULES_TO_DEVICES else endpoints + device = json_device_emulated_datacenter_disabled(device_uuid, config_rules=config_rules, endpoints=j_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 -------------------------------------------------------------------------------------------------------- +# Overall network topology +TOPO_ADMIN_UUID = DEFAULT_TOPOLOGY_UUID +TOPO_ADMIN_ID = json_topology_id(TOPO_ADMIN_UUID, context_id=CONTEXT_ID) +TOPO_ADMIN = json_topology(TOPO_ADMIN_UUID, context_id=CONTEXT_ID) + +# DataCenter #1 Network +TOPO_DC1_UUID = 'DC1' +TOPO_DC1_ID = json_topology_id(TOPO_DC1_UUID, context_id=CONTEXT_ID) +TOPO_DC1 = json_topology(TOPO_DC1_UUID, context_id=CONTEXT_ID) + +# DataCenter #2 Network +TOPO_DC2_UUID = 'DC2' +TOPO_DC2_ID = json_topology_id(TOPO_DC2_UUID, context_id=CONTEXT_ID) +TOPO_DC2 = json_topology(TOPO_DC2_UUID, context_id=CONTEXT_ID) + +# CellSite #1 Network +TOPO_CS1_UUID = 'CS1' +TOPO_CS1_ID = json_topology_id(TOPO_CS1_UUID, context_id=CONTEXT_ID) +TOPO_CS1 = json_topology(TOPO_CS1_UUID, context_id=CONTEXT_ID) + +# CellSite #2 Network +TOPO_CS2_UUID = 'CS2' +TOPO_CS2_ID = json_topology_id(TOPO_CS2_UUID, context_id=CONTEXT_ID) +TOPO_CS2 = json_topology(TOPO_CS2_UUID, context_id=CONTEXT_ID) + +# Transport Network Network +TOPO_TN_UUID = 'TN' +TOPO_TN_ID = json_topology_id(TOPO_TN_UUID, context_id=CONTEXT_ID) +TOPO_TN = json_topology(TOPO_TN_UUID, context_id=CONTEXT_ID) + + +# ----- Devices -------------------------------------------------------------------------------------------------------- +# DataCenters +DEV_DC1GW_ID, DEV_DC1GW_EPS, DEV_DC1GW = compose_datacenter('DC1-GW', ['eth1', 'eth2', 'int']) +DEV_DC2GW_ID, DEV_DC2GW_EPS, DEV_DC2GW = compose_datacenter('DC2-GW', ['eth1', 'eth2', 'int']) + +# CellSites +DEV_CS1GW1_ID, DEV_CS1GW1_EPS, DEV_CS1GW1 = compose_router('CS1-GW1', ['10/1', '1/1', '1/2']) +DEV_CS1GW2_ID, DEV_CS1GW2_EPS, DEV_CS1GW2 = compose_router('CS1-GW2', ['10/1', '1/1', '1/2']) +DEV_CS2GW1_ID, DEV_CS2GW1_EPS, DEV_CS2GW1 = compose_router('CS2-GW1', ['10/1', '1/1', '1/2']) +DEV_CS2GW2_ID, DEV_CS2GW2_EPS, DEV_CS2GW2 = compose_router('CS2-GW2', ['10/1', '1/1', '1/2']) + +# Transport Network +DEV_TNR1_ID, DEV_TNR1_EPS, DEV_TNR1 = compose_router('TN-R1', ['1/1', '1/2', '2/1', '2/2', '2/3']) +DEV_TNR2_ID, DEV_TNR2_EPS, DEV_TNR2 = compose_router('TN-R2', ['1/1', '1/2', '2/1', '2/2', '2/3']) +DEV_TNR3_ID, DEV_TNR3_EPS, DEV_TNR3 = compose_router('TN-R3', ['1/1', '1/2', '2/1', '2/2', '2/3']) +DEV_TNR4_ID, DEV_TNR4_EPS, DEV_TNR4 = compose_router('TN-R4', ['1/1', '1/2', '2/1', '2/2', '2/3']) + + +# ----- Links ---------------------------------------------------------------------------------------------------------- +# InterDomain DC-CSGW +LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW1 = compose_link(DEV_DC1GW_EPS[0], DEV_CS1GW1_EPS[0]) +LINK_DC1GW_CS1GW2_ID, LINK_DC1GW_CS1GW2 = compose_link(DEV_DC1GW_EPS[1], DEV_CS1GW2_EPS[0]) +LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW1 = compose_link(DEV_DC2GW_EPS[0], DEV_CS2GW1_EPS[0]) +LINK_DC2GW_CS2GW2_ID, LINK_DC2GW_CS2GW2 = compose_link(DEV_DC2GW_EPS[1], DEV_CS2GW2_EPS[0]) + +# InterDomain CSGW-TN +LINK_CS1GW1_TNR1_ID, LINK_CS1GW1_TNR1 = compose_link(DEV_CS1GW1_EPS[1], DEV_TNR1_EPS[0]) +LINK_CS1GW2_TNR2_ID, LINK_CS1GW2_TNR2 = compose_link(DEV_CS1GW2_EPS[1], DEV_TNR2_EPS[0]) +LINK_CS1GW1_TNR2_ID, LINK_CS1GW1_TNR2 = compose_link(DEV_CS1GW1_EPS[2], DEV_TNR2_EPS[1]) +LINK_CS1GW2_TNR1_ID, LINK_CS1GW2_TNR1 = compose_link(DEV_CS1GW2_EPS[2], DEV_TNR1_EPS[1]) +LINK_CS2GW1_TNR3_ID, LINK_CS2GW1_TNR3 = compose_link(DEV_CS2GW1_EPS[1], DEV_TNR3_EPS[0]) +LINK_CS2GW2_TNR4_ID, LINK_CS2GW2_TNR4 = compose_link(DEV_CS2GW2_EPS[1], DEV_TNR4_EPS[0]) +LINK_CS2GW1_TNR4_ID, LINK_CS2GW1_TNR4 = compose_link(DEV_CS2GW1_EPS[2], DEV_TNR4_EPS[1]) +LINK_CS2GW2_TNR3_ID, LINK_CS2GW2_TNR3 = compose_link(DEV_CS2GW2_EPS[2], DEV_TNR3_EPS[1]) + +# IntraDomain TN +LINK_TNR1_TNR2_ID, LINK_TNR1_TNR2 = compose_link(DEV_TNR1_EPS[2], DEV_TNR2_EPS[3]) +LINK_TNR2_TNR3_ID, LINK_TNR2_TNR3 = compose_link(DEV_TNR2_EPS[2], DEV_TNR3_EPS[3]) +LINK_TNR3_TNR4_ID, LINK_TNR3_TNR4 = compose_link(DEV_TNR3_EPS[2], DEV_TNR4_EPS[3]) +LINK_TNR4_TNR1_ID, LINK_TNR4_TNR1 = compose_link(DEV_TNR4_EPS[2], DEV_TNR1_EPS[3]) +LINK_TNR1_TNR3_ID, LINK_TNR1_TNR3 = compose_link(DEV_TNR1_EPS[4], DEV_TNR3_EPS[4]) +LINK_TNR2_TNR4_ID, LINK_TNR2_TNR4 = compose_link(DEV_TNR2_EPS[4], DEV_TNR4_EPS[4]) + + +# ----- Service -------------------------------------------------------------------------------------------------------- +SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[ + json_constraint_custom('bandwidth[gbps]', 10.0), + json_constraint_custom('latency[ms]', 20.0), +]) + +# ----- Containers ----------------------------------------------------------------------------------------------------- +CONTEXTS = [ CONTEXT ] +TOPOLOGIES = [ TOPO_ADMIN, TOPO_DC1, TOPO_DC2, TOPO_CS1, TOPO_CS2, TOPO_TN ] +DEVICES = [ DEV_DC1GW, DEV_DC2GW, + DEV_CS1GW1, DEV_CS1GW2, DEV_CS2GW1, DEV_CS2GW2, + DEV_TNR1, DEV_TNR2, DEV_TNR3, DEV_TNR4, + ] +LINKS = [ LINK_DC1GW_CS1GW1, LINK_DC1GW_CS1GW2, LINK_DC2GW_CS2GW1, LINK_DC2GW_CS2GW2, + LINK_CS1GW1_TNR1, LINK_CS1GW2_TNR2, LINK_CS1GW1_TNR2, LINK_CS1GW2_TNR1, + LINK_CS2GW1_TNR3, LINK_CS2GW2_TNR4, LINK_CS2GW1_TNR4, LINK_CS2GW2_TNR3, + LINK_TNR1_TNR2, LINK_TNR2_TNR3, LINK_TNR3_TNR4, LINK_TNR4_TNR1, LINK_TNR1_TNR3, LINK_TNR2_TNR4, + ] +SERVICES = [ SERVICE_DC1GW_DC2GW ] + +OBJECTS_PER_TOPOLOGY = [ + (TOPO_ADMIN_ID, + [ DEV_DC1GW_ID, DEV_DC2GW_ID, + DEV_CS1GW1_ID, DEV_CS1GW2_ID, DEV_CS2GW1_ID, DEV_CS2GW2_ID, + DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID, + ], + [ LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW2_ID, LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW2_ID, + LINK_CS1GW1_TNR1_ID, LINK_CS1GW2_TNR2_ID, LINK_CS1GW1_TNR2_ID, LINK_CS1GW2_TNR1_ID, + LINK_CS2GW1_TNR3_ID, LINK_CS2GW2_TNR4_ID, LINK_CS2GW1_TNR4_ID, LINK_CS2GW2_TNR3_ID, + LINK_TNR1_TNR2_ID, LINK_TNR2_TNR3_ID, LINK_TNR3_TNR4_ID, LINK_TNR4_TNR1_ID, LINK_TNR1_TNR3_ID, + LINK_TNR2_TNR4_ID, + ], + ), + (TOPO_DC1_ID, + [DEV_DC1GW_ID], + []), + (TOPO_DC2_ID, + [DEV_DC2GW_ID], + []), + (TOPO_CS1_ID, + [DEV_CS1GW1_ID, DEV_CS1GW2_ID], + []), + (TOPO_CS2_ID, + [DEV_CS2GW1_ID, DEV_CS2GW2_ID], + []), + (TOPO_TN_ID, + [ DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID, + ], + [ LINK_TNR1_TNR2_ID, LINK_TNR2_TNR3_ID, LINK_TNR3_TNR4_ID, LINK_TNR4_TNR1_ID, LINK_TNR1_TNR3_ID, + LINK_TNR2_TNR4_ID, + ]), +] diff --git a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py new file mode 100644 index 0000000000000000000000000000000000000000..99fd83ed9e1a7ca27faa6acb11b07abd573423ef --- /dev/null +++ b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py @@ -0,0 +1,202 @@ +# 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 uuid +from common.Constants import DEFAULT_CONTEXT_UUID, DEFAULT_TOPOLOGY_UUID +from common.tools.object_factory.Constraint import json_constraint_custom +from common.tools.object_factory.Context import json_context, json_context_id +from common.tools.object_factory.Device import ( + json_device_emulated_connect_rules, json_device_emulated_datacenter_disabled, + json_device_emulated_packet_router_disabled, json_device_emulated_tapi_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 + +# if true, Device component is present and will infeer the endpoints from connect-rules +# if false, Device component is not present and device objects must contain preconfigured endpoints +ADD_CONNECT_RULES_TO_DEVICES = False + +def compose_router(device_uuid, endpoint_uuids, topology_id=None): + device_id = json_device_id(device_uuid) + r_endpoints = [(endpoint_uuid, 'copper', []) for endpoint_uuid in endpoint_uuids] + config_rules = json_device_emulated_connect_rules(r_endpoints) if ADD_CONNECT_RULES_TO_DEVICES else [] + endpoints = json_endpoints(device_id, r_endpoints, topology_id=topology_id) + j_endpoints = [] if ADD_CONNECT_RULES_TO_DEVICES else endpoints + device = json_device_emulated_packet_router_disabled(device_uuid, config_rules=config_rules, endpoints=j_endpoints) + return device_id, endpoints, device + +def compose_ols(device_uuid, endpoint_uuids, topology_id=None): + device_id = json_device_id(device_uuid) + r_endpoints = [(endpoint_uuid, 'optical', []) for endpoint_uuid in endpoint_uuids] + config_rules = json_device_emulated_connect_rules(r_endpoints) if ADD_CONNECT_RULES_TO_DEVICES else [] + endpoints = json_endpoints(device_id, r_endpoints, topology_id=topology_id) + j_endpoints = [] if ADD_CONNECT_RULES_TO_DEVICES else endpoints + device = json_device_emulated_tapi_disabled(device_uuid, config_rules=config_rules, endpoints=j_endpoints) + return device_id, endpoints, device + +def compose_datacenter(device_uuid, endpoint_uuids, topology_id=None): + device_id = json_device_id(device_uuid) + r_endpoints = [(endpoint_uuid, 'copper', []) for endpoint_uuid in endpoint_uuids] + config_rules = json_device_emulated_connect_rules(r_endpoints) if ADD_CONNECT_RULES_TO_DEVICES else [] + endpoints = json_endpoints(device_id, r_endpoints, topology_id=topology_id) + j_endpoints = [] if ADD_CONNECT_RULES_TO_DEVICES else endpoints + device = json_device_emulated_datacenter_disabled(device_uuid, config_rules=config_rules, endpoints=j_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 -------------------------------------------------------------------------------------------------------- +# Overall network topology +TOPO_ADMIN_UUID = DEFAULT_TOPOLOGY_UUID +TOPO_ADMIN_ID = json_topology_id(TOPO_ADMIN_UUID, context_id=CONTEXT_ID) +TOPO_ADMIN = json_topology(TOPO_ADMIN_UUID, context_id=CONTEXT_ID) + +# DataCenter #1 Network +TOPO_DC1_UUID = 'DC1' +TOPO_DC1_ID = json_topology_id(TOPO_DC1_UUID, context_id=CONTEXT_ID) +TOPO_DC1 = json_topology(TOPO_DC1_UUID, context_id=CONTEXT_ID) + +# DataCenter #2 Network +TOPO_DC2_UUID = 'DC2' +TOPO_DC2_ID = json_topology_id(TOPO_DC2_UUID, context_id=CONTEXT_ID) +TOPO_DC2 = json_topology(TOPO_DC2_UUID, context_id=CONTEXT_ID) + +# CellSite #1 Network +TOPO_CS1_UUID = 'CS1' +TOPO_CS1_ID = json_topology_id(TOPO_CS1_UUID, context_id=CONTEXT_ID) +TOPO_CS1 = json_topology(TOPO_CS1_UUID, context_id=CONTEXT_ID) + +# CellSite #2 Network +TOPO_CS2_UUID = 'CS2' +TOPO_CS2_ID = json_topology_id(TOPO_CS2_UUID, context_id=CONTEXT_ID) +TOPO_CS2 = json_topology(TOPO_CS2_UUID, context_id=CONTEXT_ID) + +# Transport Network Network +TOPO_TN_UUID = 'TN' +TOPO_TN_ID = json_topology_id(TOPO_TN_UUID, context_id=CONTEXT_ID) +TOPO_TN = json_topology(TOPO_TN_UUID, context_id=CONTEXT_ID) + + +# ----- Devices -------------------------------------------------------------------------------------------------------- +# DataCenters +DEV_DC1GW_ID, DEV_DC1GW_EPS, DEV_DC1GW = compose_datacenter('DC1-GW', ['eth1', 'eth2', 'int']) +DEV_DC2GW_ID, DEV_DC2GW_EPS, DEV_DC2GW = compose_datacenter('DC2-GW', ['eth1', 'eth2', 'int']) + +# CellSites +DEV_CS1GW1_ID, DEV_CS1GW1_EPS, DEV_CS1GW1 = compose_router('CS1-GW1', ['10/1', '1/1', '1/2']) +DEV_CS1GW2_ID, DEV_CS1GW2_EPS, DEV_CS1GW2 = compose_router('CS1-GW2', ['10/1', '1/1', '1/2']) +DEV_CS2GW1_ID, DEV_CS2GW1_EPS, DEV_CS2GW1 = compose_router('CS2-GW1', ['10/1', '1/1', '1/2']) +DEV_CS2GW2_ID, DEV_CS2GW2_EPS, DEV_CS2GW2 = compose_router('CS2-GW2', ['10/1', '1/1', '1/2']) + +# Transport Network +DEV_TNR1_ID, DEV_TNR1_EPS, DEV_TNR1 = compose_router('TN-R1', ['1/1', '1/2', '2/1']) +DEV_TNR2_ID, DEV_TNR2_EPS, DEV_TNR2 = compose_router('TN-R2', ['1/1', '1/2', '2/1']) +DEV_TNR3_ID, DEV_TNR3_EPS, DEV_TNR3 = compose_router('TN-R3', ['1/1', '1/2', '2/1']) +DEV_TNR4_ID, DEV_TNR4_EPS, DEV_TNR4 = compose_router('TN-R4', ['1/1', '1/2', '2/1']) +tols_ep_uuids = [str(uuid.uuid4()).split('-')[-1] for _ in range(4)] +DEV_TOLS_ID, DEV_TOLS_EPS, DEV_TOLS = compose_ols('TN-OLS', tols_ep_uuids) + + +# ----- Links ---------------------------------------------------------------------------------------------------------- +# InterDomain DC-CSGW +LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW1 = compose_link(DEV_DC1GW_EPS[0], DEV_CS1GW1_EPS[0]) +LINK_DC1GW_CS1GW2_ID, LINK_DC1GW_CS1GW2 = compose_link(DEV_DC1GW_EPS[1], DEV_CS1GW2_EPS[0]) +LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW1 = compose_link(DEV_DC2GW_EPS[0], DEV_CS2GW1_EPS[0]) +LINK_DC2GW_CS2GW2_ID, LINK_DC2GW_CS2GW2 = compose_link(DEV_DC2GW_EPS[1], DEV_CS2GW2_EPS[0]) + +# InterDomain CSGW-TN +LINK_CS1GW1_TNR1_ID, LINK_CS1GW1_TNR1 = compose_link(DEV_CS1GW1_EPS[1], DEV_TNR1_EPS[0]) +LINK_CS1GW2_TNR2_ID, LINK_CS1GW2_TNR2 = compose_link(DEV_CS1GW2_EPS[1], DEV_TNR2_EPS[0]) +LINK_CS1GW1_TNR2_ID, LINK_CS1GW1_TNR2 = compose_link(DEV_CS1GW1_EPS[2], DEV_TNR2_EPS[1]) +LINK_CS1GW2_TNR1_ID, LINK_CS1GW2_TNR1 = compose_link(DEV_CS1GW2_EPS[2], DEV_TNR1_EPS[1]) +LINK_CS2GW1_TNR3_ID, LINK_CS2GW1_TNR3 = compose_link(DEV_CS2GW1_EPS[1], DEV_TNR3_EPS[0]) +LINK_CS2GW2_TNR4_ID, LINK_CS2GW2_TNR4 = compose_link(DEV_CS2GW2_EPS[1], DEV_TNR4_EPS[0]) +LINK_CS2GW1_TNR4_ID, LINK_CS2GW1_TNR4 = compose_link(DEV_CS2GW1_EPS[2], DEV_TNR4_EPS[1]) +LINK_CS2GW2_TNR3_ID, LINK_CS2GW2_TNR3 = compose_link(DEV_CS2GW2_EPS[2], DEV_TNR3_EPS[1]) + +# IntraDomain TN +LINK_TNR1_TOLS_ID, LINK_TNR1_TOLS = compose_link(DEV_TNR1_EPS[2], DEV_TOLS_EPS[0]) +LINK_TNR2_TOLS_ID, LINK_TNR2_TOLS = compose_link(DEV_TNR2_EPS[2], DEV_TOLS_EPS[1]) +LINK_TNR3_TOLS_ID, LINK_TNR3_TOLS = compose_link(DEV_TNR3_EPS[2], DEV_TOLS_EPS[2]) +LINK_TNR4_TOLS_ID, LINK_TNR4_TOLS = compose_link(DEV_TNR4_EPS[2], DEV_TOLS_EPS[3]) + + +# ----- Service -------------------------------------------------------------------------------------------------------- +SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[ + json_constraint_custom('bandwidth[gbps]', 10.0), + json_constraint_custom('latency[ms]', 20.0), +]) + +# ----- Containers ----------------------------------------------------------------------------------------------------- +CONTEXTS = [ CONTEXT ] +TOPOLOGIES = [ TOPO_ADMIN, TOPO_DC1, TOPO_DC2, TOPO_CS1, TOPO_CS2, TOPO_TN ] +DEVICES = [ DEV_DC1GW, DEV_DC2GW, + DEV_CS1GW1, DEV_CS1GW2, DEV_CS2GW1, DEV_CS2GW2, + DEV_TNR1, DEV_TNR2, DEV_TNR3, DEV_TNR4, + DEV_TOLS, + ] +LINKS = [ LINK_DC1GW_CS1GW1, LINK_DC1GW_CS1GW2, LINK_DC2GW_CS2GW1, LINK_DC2GW_CS2GW2, + LINK_CS1GW1_TNR1, LINK_CS1GW2_TNR2, LINK_CS1GW1_TNR2, LINK_CS1GW2_TNR1, + LINK_CS2GW1_TNR3, LINK_CS2GW2_TNR4, LINK_CS2GW1_TNR4, LINK_CS2GW2_TNR3, + LINK_TNR1_TOLS, LINK_TNR2_TOLS, LINK_TNR3_TOLS, LINK_TNR4_TOLS, + ] +SERVICES = [ SERVICE_DC1GW_DC2GW ] + +OBJECTS_PER_TOPOLOGY = [ + (TOPO_ADMIN_ID, + [ DEV_DC1GW_ID, DEV_DC2GW_ID, + DEV_CS1GW1_ID, DEV_CS1GW2_ID, DEV_CS2GW1_ID, DEV_CS2GW2_ID, + DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID, + DEV_TOLS_ID, + ], + [ LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW2_ID, LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW2_ID, + LINK_CS1GW1_TNR1_ID, LINK_CS1GW2_TNR2_ID, LINK_CS1GW1_TNR2_ID, LINK_CS1GW2_TNR1_ID, + LINK_CS2GW1_TNR3_ID, LINK_CS2GW2_TNR4_ID, LINK_CS2GW1_TNR4_ID, LINK_CS2GW2_TNR3_ID, + LINK_TNR1_TOLS_ID, LINK_TNR2_TOLS_ID, LINK_TNR3_TOLS_ID, LINK_TNR4_TOLS_ID, + ], + ), + (TOPO_DC1_ID, + [DEV_DC1GW_ID], + []), + (TOPO_DC2_ID, + [DEV_DC2GW_ID], + []), + (TOPO_CS1_ID, + [DEV_CS1GW1_ID, DEV_CS1GW2_ID], + []), + (TOPO_CS2_ID, + [DEV_CS2GW1_ID, DEV_CS2GW2_ID], + []), + (TOPO_TN_ID, + [ DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID, + DEV_TOLS_ID, + ], + [ LINK_TNR1_TOLS_ID, LINK_TNR2_TOLS_ID, LINK_TNR3_TOLS_ID, LINK_TNR4_TOLS_ID, + ]), +] diff --git a/src/pathcomp/tests/PrepareTestScenario.py b/src/pathcomp/frontend/tests/PrepareTestScenario.py similarity index 73% rename from src/pathcomp/tests/PrepareTestScenario.py rename to src/pathcomp/frontend/tests/PrepareTestScenario.py index a4efcbdbfc0d311dfb120ab8124a9d2268660daf..2e7002b0f70b81f0bbe728a7b8139730d004221e 100644 --- a/src/pathcomp/tests/PrepareTestScenario.py +++ b/src/pathcomp/frontend/tests/PrepareTestScenario.py @@ -17,14 +17,13 @@ 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 +from pathcomp.frontend.client.PathCompClient import PathCompClient +from pathcomp.frontend.service.PathCompService import PathCompService +from pathcomp.frontend.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 +PATHCOMP_SERVICE_PORT = MOCKSERVICE_PORT + int(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) @@ -43,15 +42,7 @@ def context_client(mock_service : MockService_Dependencies): # pylint: disable=r _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 +def pathcomp_service(context_client : ContextClient): # pylint: disable=redefined-outer-name _service = PathCompService() _service.start() diff --git a/src/pathcomp/frontend/tests/__init__.py b/src/pathcomp/frontend/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..70a33251242c51f49140e596b8208a19dd5245f7 --- /dev/null +++ b/src/pathcomp/frontend/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/frontend/tests/test_unitary.py b/src/pathcomp/frontend/tests/test_unitary.py new file mode 100644 index 0000000000000000000000000000000000000000..53f4d7065e5ee847cd99f431c87c1231e52bbd63 --- /dev/null +++ b/src/pathcomp/frontend/tests/test_unitary.py @@ -0,0 +1,275 @@ +# 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 copy, logging, os +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 common.tools.object_factory.Constraint import ( + json_constraint_custom, json_constraint_endpoint_location_region, json_constraint_endpoint_priority, + json_constraint_sla_availability) +from common.tools.object_factory.Device import json_device_id +from common.tools.object_factory.EndPoint import json_endpoint_id +from common.tools.object_factory.Service import json_service_l3nm_planned +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from pathcomp.frontend.client.PathCompClient import PathCompClient + +# Scenarios: +#from .Objects_A_B_C import CONTEXTS, DEVICES, LINKS, OBJECTS_PER_TOPOLOGY, SERVICES, TOPOLOGIES +#from .Objects_DC_CSGW_TN import CONTEXTS, DEVICES, LINKS, OBJECTS_PER_TOPOLOGY, SERVICES, TOPOLOGIES +from .Objects_DC_CSGW_TN_OLS import CONTEXTS, DEVICES, LINKS, OBJECTS_PER_TOPOLOGY, SERVICES, TOPOLOGIES + +# configure backend environment variables before overwriting them with fixtures to use real backend pathcomp +DEFAULT_PATHCOMP_BACKEND_SCHEME = 'http' +DEFAULT_PATHCOMP_BACKEND_HOST = '127.0.0.1' +DEFAULT_PATHCOMP_BACKEND_PORT = '8081' +DEFAULT_PATHCOMP_BACKEND_BASEURL = '/pathComp/api/v1/compRoute' + +os.environ['PATHCOMP_BACKEND_SCHEME'] = os.environ.get('PATHCOMP_BACKEND_SCHEME', DEFAULT_PATHCOMP_BACKEND_SCHEME) +os.environ['PATHCOMP_BACKEND_BASEURL'] = os.environ.get('PATHCOMP_BACKEND_BASEURL', DEFAULT_PATHCOMP_BACKEND_BASEURL) + +# Find IP:port of backend container as follows: +# - first check env vars PATHCOMP_BACKEND_HOST & PATHCOMP_BACKEND_PORT +# - if not set, check env vars PATHCOMPSERVICE_SERVICE_HOST & PATHCOMPSERVICE_SERVICE_PORT_HTTP +# - if not set, use DEFAULT_PATHCOMP_BACKEND_HOST & DEFAULT_PATHCOMP_BACKEND_PORT +backend_host = DEFAULT_PATHCOMP_BACKEND_HOST +backend_host = os.environ.get('PATHCOMPSERVICE_SERVICE_HOST', backend_host) +os.environ['PATHCOMP_BACKEND_HOST'] = os.environ.get('PATHCOMP_BACKEND_HOST', backend_host) + +backend_port = DEFAULT_PATHCOMP_BACKEND_PORT +backend_port = os.environ.get('PATHCOMPSERVICE_SERVICE_PORT_HTTP', backend_port) +os.environ['PATHCOMP_BACKEND_PORT'] = os.environ.get('PATHCOMP_BACKEND_PORT', backend_port) + +from .PrepareTestScenario import ( # pylint: disable=unused-import + # be careful, order of symbols is important here! + mock_service, pathcomp_service, context_client, pathcomp_client) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +def test_prepare_environment( + context_client : ContextClient): # 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 : context_client.SetDevice (Device (**device )) + for link in LINKS : context_client.SetLink (Link (**link )) + + for topology_id, device_ids, link_ids in OBJECTS_PER_TOPOLOGY: + topology = Topology() + topology.CopyFrom(context_client.GetTopology(TopologyId(**topology_id))) + + device_ids_in_topology = {device_id.device_uuid.uuid for device_id in topology.device_ids} + func_device_id_not_added = lambda device_id: device_id['device_uuid']['uuid'] not in device_ids_in_topology + func_device_id_json_to_grpc = lambda device_id: DeviceId(**device_id) + device_ids_to_add = list(map(func_device_id_json_to_grpc, filter(func_device_id_not_added, device_ids))) + topology.device_ids.extend(device_ids_to_add) + + link_ids_in_topology = {link_id.link_uuid.uuid for link_id in topology.link_ids} + func_link_id_not_added = lambda link_id: link_id['link_uuid']['uuid'] not in link_ids_in_topology + func_link_id_json_to_grpc = lambda link_id: LinkId(**link_id) + link_ids_to_add = list(map(func_link_id_json_to_grpc, filter(func_link_id_not_added, link_ids))) + topology.link_ids.extend(link_ids_to_add) + + context_client.SetTopology(topology) + +def test_request_service_shortestpath( + pathcomp_client : PathCompClient): # pylint: disable=redefined-outer-name + + request_services = copy.deepcopy(SERVICES) + #request_services[0]['service_constraints'] = [ + # json_constraint_custom('bandwidth[gbps]', 1000.0), + # json_constraint_custom('latency[ms]', 1200.0), + #] + pathcomp_request = PathCompRequest(services=request_services) + pathcomp_request.shortest_path.Clear() # hack to select the shortest path algorithm that has no attributes + + 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_request_service_kshortestpath( + pathcomp_client : PathCompClient): # pylint: disable=redefined-outer-name + + request_services = SERVICES + pathcomp_request = PathCompRequest(services=request_services) + pathcomp_request.k_shortest_path.k_inspection = 2 #pylint: disable=no-member + pathcomp_request.k_shortest_path.k_return = 2 #pylint: disable=no-member + + 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_request_service_kdisjointpath( + pathcomp_client : PathCompClient): # pylint: disable=redefined-outer-name + + service_uuid = 'DC1-DC2' + raw_endpoints = [ + ('CS1-GW1', '10/1', 'DC1', 10), + ('CS1-GW2', '10/1', 'DC1', 20), + ('CS2-GW1', '10/1', 'DC2', 10), + ('CS2-GW2', '10/1', 'DC2', 20), + ] + + endpoint_ids, constraints = [], [ + json_constraint_custom('bandwidth[gbps]', 10.0), + json_constraint_custom('latency[ms]', 12.0), + json_constraint_sla_availability(2, True), + json_constraint_custom('diversity', {'end-to-end-diverse': 'all-other-accesses'}), + ] + + for device_uuid, endpoint_uuid, region, priority in raw_endpoints: + device_id = json_device_id(device_uuid) + endpoint_id = json_endpoint_id(device_id, endpoint_uuid) + endpoint_ids.append(endpoint_id) + constraints.extend([ + json_constraint_endpoint_location_region(endpoint_id, region), + json_constraint_endpoint_priority(endpoint_id, priority), + ]) + + service = json_service_l3nm_planned(service_uuid, endpoint_ids=endpoint_ids, constraints=constraints) + request_services = [service] + + pathcomp_request = PathCompRequest(services=request_services) + pathcomp_request.k_disjoint_path.num_disjoint = 2 #pylint: disable=no-member + + 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 + + for link in LINKS : context_client.RemoveLink (LinkId (**link ['link_id' ])) + for device in DEVICES : context_client.RemoveDevice (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/pathcomp/misc/example-results-kdisjointpaths.json b/src/pathcomp/misc/example-results-kdisjointpaths.json new file mode 100644 index 0000000000000000000000000000000000000000..9eda25d484e45db53471ea3f655d511cbcc42c18 --- /dev/null +++ b/src/pathcomp/misc/example-results-kdisjointpaths.json @@ -0,0 +1,73 @@ +{ + "connections": [ + { + "connection_id": {"connection_uuid": {"uuid": "d8cb463a-77c4-4149-80fc-32c4842a191d"}}, + "path_hops_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "int"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC1"}}}, + {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "eth1"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC1"}}}, + {"device_id": {"device_uuid": {"uuid": "CS1-GW1"}}, "endpoint_uuid": {"uuid": "200"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "CS1"}}}, + {"device_id": {"device_uuid": {"uuid": "TN-R2"}}, "endpoint_uuid": {"uuid": "1"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "TN"}}}, + {"device_id": {"device_uuid": {"uuid": "TN-R3"}}, "endpoint_uuid": {"uuid": "100"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "TN"}}}, + {"device_id": {"device_uuid": {"uuid": "CS2-GW1"}}, "endpoint_uuid": {"uuid": "1000"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "CS2"}}}, + {"device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "endpoint_uuid": {"uuid": "int"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC2"}}} + ], + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "svc:DC1-GW/int==DC2-GW/int"} + }, + "sub_service_ids": [] + }, + { + "connection_id": {"connection_uuid": {"uuid": "9f7c5075-0736-4d2a-8435-b8e8c37fa6ea"}}, + "path_hops_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "int"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC1"}}}, + {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "eth2"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC1"}}}, + {"device_id": {"device_uuid": {"uuid": "CS1-GW2"}}, "endpoint_uuid": {"uuid": "200"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "CS1"}}}, + {"device_id": {"device_uuid": {"uuid": "TN-R1"}}, "endpoint_uuid": {"uuid": "3"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "TN"}}}, + {"device_id": {"device_uuid": {"uuid": "TN-R3"}}, "endpoint_uuid": {"uuid": "200"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "TN"}}}, + {"device_id": {"device_uuid": {"uuid": "CS2-GW2"}}, "endpoint_uuid": {"uuid": "1000"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "CS2"}}}, + {"device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "endpoint_uuid": {"uuid": "int"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC2"}}} + ], + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "svc:DC1-GW/int==DC2-GW/int"} + }, + "sub_service_ids": [] + } + ], + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "svc:DC1-GW/int==DC2-GW/int"} + }, + "service_type": "SERVICETYPE_L3NM", + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "int"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC1"}}}, + {"device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "endpoint_uuid": {"uuid": "int"}, + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "DC2"}}} + ], + "service_status": {"service_status": "SERVICESTATUS_PLANNED"}, + "service_constraints": [ + {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "10.0"}}, + {"custom": {"constraint_type": "latency[ms]", "constraint_value": "12.0"}} + ], + "service_config": {"config_rules": []} + } + ] +} \ No newline at end of file diff --git a/src/pathcomp/misc/my_deploy-tests.sh b/src/pathcomp/misc/my_deploy-tests.sh new file mode 100644 index 0000000000000000000000000000000000000000..d744dd5ab491ac9fc0f9f1c69231105276f4dd5b --- /dev/null +++ b/src/pathcomp/misc/my_deploy-tests.sh @@ -0,0 +1,22 @@ +# Set the URL of your local Docker registry where the images will be uploaded to. +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: +# context device automation policy service compute monitoring webui +# interdomain slice pathcomp dlt +# dbscanserving opticalattackmitigator opticalcentralizedattackdetector +# l3_attackmitigator l3_centralizedattackdetector l3_distributedattackdetector +export TFS_COMPONENTS="context device pathcomp service" + +# Set the tag you want to use for your images. +export TFS_IMAGE_TAG="dev" + +# Set the name of the Kubernetes namespace to deploy to. +export TFS_K8S_NAMESPACE="tfs" + +# Set additional manifest files to be applied after the deployment +export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml" + +# Set the neew Grafana admin password +export TFS_GRAFANA_PASSWORD="admin123+" diff --git a/src/pathcomp/misc/test-commands.sh b/src/pathcomp/misc/test-commands.sh new file mode 100644 index 0000000000000000000000000000000000000000..262cb8ed0d035c0abba0178d08cad6e60e72831f --- /dev/null +++ b/src/pathcomp/misc/test-commands.sh @@ -0,0 +1,33 @@ +#!/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. + +docker build -t "pathcomp-frontend:latest" -f ./src/pathcomp/frontend/Dockerfile . +docker build -t "pathcomp-backend:builder" --target builder -f ./src/pathcomp/backend/Dockerfile . +docker build -t "pathcomp-backend:latest" -f ./src/pathcomp/backend/Dockerfile . +docker build -t "pathcomp-backend:gdb" -f ./src/pathcomp/backend/Dockerfile-gdb . + +docker network create --driver=bridge --subnet=172.28.0.0/24 --gateway=172.28.0.254 tfbr + +docker run --name pathcomp-frontend -d --network=tfbr --ip 172.28.0.1 pathcomp-frontend:latest +docker run --name pathcomp-backend -d --network=tfbr --ip 172.28.0.2 pathcomp-backend:latest + +docker rm -f pathcomp-frontend pathcomp-backend +docker network rm tfbr + +docker images --filter="dangling=true" --quiet | xargs -r docker rmi + +docker exec -i pathcomp bash -c "pytest --log-level=INFO --verbose pathcomp/tests/test_unitary.py" + +./scripts/run_tests_locally-pathcomp-frontend.sh diff --git a/src/pathcomp/service/PathCompServiceServicerImpl.py b/src/pathcomp/service/PathCompServiceServicerImpl.py deleted file mode 100644 index 239ab6ab5bbe8b6051115a8200cc1f6f304e75b5..0000000000000000000000000000000000000000 --- a/src/pathcomp/service/PathCompServiceServicerImpl.py +++ /dev/null @@ -1,85 +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. - -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/tests/test_unitary.py b/src/pathcomp/tests/test_unitary.py deleted file mode 100644 index 23e574e0e1b512b7a69b69847ef5ef034bd2ca41..0000000000000000000000000000000000000000 --- a/src/pathcomp/tests/test_unitary.py +++ /dev/null @@ -1,95 +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 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/PolicyRuleConditionFieldsGetter.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionFieldsGetter.java new file mode 100644 index 0000000000000000000000000000000000000000..7ba1c1535283f292b4dbe0d5b7bffe9bf1149156 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionFieldsGetter.java @@ -0,0 +1,47 @@ +/* +* 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. +*/ + +package eu.teraflow.policy; + +import eu.teraflow.policy.model.NumericalOperator; +import eu.teraflow.policy.model.PolicyRuleCondition; +import eu.teraflow.policy.monitoring.model.KpiValue; +import java.util.List; +import java.util.stream.Collectors; +import javax.inject.Singleton; + +@Singleton +public class PolicyRuleConditionFieldsGetter { + + public List<String> getKpiIds(List<PolicyRuleCondition> policyRuleConditions) { + return policyRuleConditions.stream() + .map(PolicyRuleCondition::getKpiId) + .collect(Collectors.toList()); + } + + public List<KpiValue> getKpiValues(List<PolicyRuleCondition> policyRuleConditions) { + return policyRuleConditions.stream() + .map(PolicyRuleCondition::getKpiValue) + .collect(Collectors.toList()); + } + + public List<NumericalOperator> getNumericalOperators( + List<PolicyRuleCondition> policyRuleConditions) { + return policyRuleConditions.stream() + .map(PolicyRuleCondition::getNumericalOperator) + .collect(Collectors.toList()); + } +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java new file mode 100644 index 0000000000000000000000000000000000000000..0ca242dbbb860354219c4c85bb367563672572ef --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java @@ -0,0 +1,101 @@ +/* +* 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. +*/ + +package eu.teraflow.policy; + +import eu.teraflow.policy.context.ContextService; +import eu.teraflow.policy.context.model.Device; +import eu.teraflow.policy.context.model.Service; +import eu.teraflow.policy.context.model.ServiceId; +import io.smallrye.mutiny.Uni; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import org.jboss.logging.Logger; + +@ApplicationScoped +public class PolicyRuleConditionValidator { + + private static final Logger LOGGER = Logger.getLogger(PolicyRuleConditionValidator.class); + private static final String INVALID_MESSAGE = "%s is invalid."; + private static final String VALID_MESSAGE = "%s is valid."; + + private final ContextService contextService; + + @Inject + public PolicyRuleConditionValidator(ContextService contextService) { + this.contextService = contextService; + } + + public Uni<Boolean> validateDeviceId(String deviceId) { + final var isDeviceIdValid = isDeviceIdValid(deviceId); + + isDeviceIdValid + .subscribe() + .with( + deviceIdIdBooleanValue -> { + if (Boolean.FALSE.equals(deviceIdIdBooleanValue)) { + LOGGER.errorf(INVALID_MESSAGE, deviceId); + } + LOGGER.infof(VALID_MESSAGE, deviceId); + }); + + return isDeviceIdValid; + } + + public Uni<Boolean> validateServiceId(ServiceId serviceId) { + final var isServiceIdValid = isServiceIdValid(serviceId); + + isServiceIdValid + .subscribe() + .with( + serviceIdBooleanValue -> { + if (Boolean.FALSE.equals(serviceIdBooleanValue)) { + LOGGER.errorf(INVALID_MESSAGE, serviceId); + } + }); + + return isServiceIdValid; + } + + private Uni<Boolean> isDeviceIdValid(String deviceId) { + return contextService + .getDevice(deviceId) + .onItem() + .transform(device -> checkIfDeviceIdExists(device, deviceId)); + } + + private boolean checkIfDeviceIdExists(Device device, String deviceId) { + final var deviceDeviceId = device.getDeviceId(); + + return deviceDeviceId.equals(deviceId); + } + + private Uni<Boolean> isServiceIdValid(ServiceId serviceId) { + return contextService + .getService(serviceId) + .onItem() + .transform(service -> checkIfServiceIdExists(service, serviceId)); + } + + private boolean checkIfServiceIdExists(Service service, ServiceId serviceId) { + final var serviceServiceIdServiceId = service.getServiceId(); + final var serviceServiceIdContextId = serviceServiceIdServiceId.getContextId(); + final var serviceServiceIdId = serviceServiceIdServiceId.getId(); + + return serviceServiceIdContextId.equals(serviceId.getContextId()) + && serviceServiceIdId.equals(serviceId.getId()); + } +} 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 66994625ddb2eb6a52e1d0a99acd52a2cd1cc2f2..7cb3935005c6762ee725fd474a2b03cc373f0194 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -17,6 +17,7 @@ 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; @@ -24,6 +25,8 @@ 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; @@ -32,23 +35,88 @@ 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) { + ServiceService serviceService, + PolicyRuleConditionValidator policyRuleConditionValidator, + PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter) { 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); @@ -56,8 +124,80 @@ 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 35b6e2fd8cebf544d3f4b0f56fffbf4572f1de2b..49882be71c471851460257d5d56db7fcaf193444 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java +++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java @@ -88,6 +88,7 @@ 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; @@ -1472,12 +1473,12 @@ public class Serializer { public Monitoring.KpiValue serializeIntegerKpiValue(KpiValue<Integer> kpiValue) { final var builder = Monitoring.KpiValue.newBuilder(); - return builder.setIntVal(kpiValue.getValue()).build(); + return builder.setInt32Val(kpiValue.getValue()).build(); } public int deserializeIntegerKpiValue(Monitoring.KpiValue serializedKpiValue) { - return serializedKpiValue.getIntVal(); + return serializedKpiValue.getInt32Val(); } public Monitoring.KpiValue serialize(KpiValue<?> kpiValue) { @@ -1485,7 +1486,7 @@ public class Serializer { if (kpiValue.getValue() instanceof Integer) { final var serializedIntegerKpiValue = serializeIntegerKpiValue((KpiValue<Integer>) kpiValue); - builder.setIntVal(serializedIntegerKpiValue.getIntVal()); + builder.setInt32Val(serializedIntegerKpiValue.getInt32Val()); } if (kpiValue.getValue() instanceof Float) { final var serializedFloatKpiValue = serializeFloatKpiValue((KpiValue<Float>) kpiValue); @@ -1508,7 +1509,7 @@ public class Serializer { final var typeOfKpiValue = serializedKpiValue.getValueCase(); switch (typeOfKpiValue) { - case INTVAL: + case INT32VAL: final var intValue = deserializeIntegerKpiValue(serializedKpiValue); return new IntegerKpiValue(intValue); case BOOLVAL: @@ -1569,37 +1570,47 @@ 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 kpiId = alarmDescriptor.getKpiId(); - final var kpiValueRange = alarmDescriptor.getKpiValueRange(); + final var kpiIds = alarmDescriptor.getKpiIds(); + final var kpiValueRanges = alarmDescriptor.getKpiValueRanges(); final var timestamp = alarmDescriptor.getTimestamp(); - final var serializedKpiIdUuid = serializeUuid(kpiId); - final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); - final var serializedKpiValueRange = serialize(kpiValueRange); + 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); + builder.setAlarmId(serializedAlarmId); builder.setAlarmDescription(alarmDescription); builder.setName(name); - builder.setKpiId(serializedKpiId); - builder.setKpiValueRange(serializedKpiValueRange); - builder.setTimestamp(timestamp); + builder.addAllKpiId(serializedKpiIds); + builder.addAllKpiValueRange(serializedKpiValueRanges); + builder.setTimestamp(serializedTimestamp); 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 serializedKpiId = serializedAlarmDescriptor.getKpiId(); - final var serializedKpiValueRange = serializedAlarmDescriptor.getKpiValueRange(); - final var timestamp = serializedAlarmDescriptor.getTimestamp(); + final var serializedKpiIds = serializedAlarmDescriptor.getKpiIdList(); + final var serializedKpiValueRanges = serializedAlarmDescriptor.getKpiValueRangeList(); + final var serializeTimestamp = serializedAlarmDescriptor.getTimestamp(); - final var kpiId = deserialize(serializedKpiId); - final var kpiValueRange = deserialize(serializedKpiValueRange); + 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); - return new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp); + return new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp); } public Monitoring.AlarmResponse serialize(AlarmResponse alarmResponse) { @@ -1635,34 +1646,44 @@ 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 startDate = subDescriptor.getStartDate(); - final var endDate = subDescriptor.getEndDate(); + final var startTimestamp = subDescriptor.getStartTimestamp(); + final var endTimestamp = subDescriptor.getEndTimestamp(); + 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.setStartDate(startDate); - builder.setEndDate(endDate); + builder.setStartTimestamp(serializedStartTimestamp); + builder.setEndTimestamp(serializedEndTimestamp); 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 startDate = serializedSubDescriptor.getStartDate(); - final var endDate = serializedSubDescriptor.getEndDate(); + final var serializedStartTimestamp = serializedSubDescriptor.getStartTimestamp(); + final var serializedEndTimestamp = serializedSubDescriptor.getEndTimestamp(); + final var subscriptionId = deserialize(serializedSubscriptionId); final var kpiId = deserialize(serializedKpiId); + final var startTimestamp = deserialize(serializedStartTimestamp); + final var endTimestamp = deserialize(serializedEndTimestamp); - return new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate); + return new SubsDescriptor( + subscriptionId, kpiId, samplingDurationS, samplingIntervalS, startTimestamp, endTimestamp); } public SubscriptionID serializeSubscriptionIdId(String subscriptionId) { @@ -1930,10 +1951,11 @@ 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(timestamp); + builder.setTimestamp(serializedTimestamp); builder.setKpiValue(serializedKpiValue); return builder.build(); @@ -1942,10 +1964,11 @@ public class Serializer { public Kpi deserialize(Monitoring.Kpi serializedKpi) { final var serializedKpiId = serializedKpi.getKpiId(); - final var timestamp = serializedKpi.getTimestamp(); + final var serializedTimestamp = 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); @@ -2149,6 +2172,33 @@ 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 b32d3cf3008611ea67aee53f5234f1e45b98be8c..6f50dfca8cb43a3d825137e31a83c63855b5aebd 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 final PolicyRuleState policyRuleState; + private PolicyRuleState policyRuleState; private final int priority; private final List<PolicyRuleCondition> policyRuleConditions; private final BooleanOperator booleanOperator; @@ -64,6 +64,10 @@ 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 4b9849a7649894cb4109fb458dac611e834bd916..925c22aa62588de6d9a364a647f65e74f6b01740 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,21 +28,17 @@ import java.util.List; public interface MonitoringGateway { - Uni<String> createKpi(KpiDescriptor kpiDescriptor); + Uni<String> setKpi(KpiDescriptor kpiDescriptor); Uni<KpiDescriptor> getKpiDescriptor(String kpiId); - Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor); + Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor); Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId); - Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor); - - Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor); - - Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor); + Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor); Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId); - Multi<AlarmResponse> getAlarmResponseStream(String alarmId); + Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription); } 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 e0b4e088a9e23387f56d956bed5f6e104a68ea56..e500b78c508f8e5b22d78c98f7960ff8ca9e7c13 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> createKpi(KpiDescriptor kpiDescriptor) { + public Uni<String> setKpi(KpiDescriptor kpiDescriptor) { final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor); return streamingDelegateMonitoring - .createKpi(serializedKpiDescriptor) + .setKpi(serializedKpiDescriptor) .onItem() .transform(serializer::deserialize); } @@ -65,11 +65,11 @@ public class MonitoringGatewayImpl implements MonitoringGateway { } @Override - public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) { + public Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor) { final var serializedSubsDescriptor = serializer.serialize(subsDescriptor); return streamingDelegateMonitoring - .subscribeKpi(serializedSubsDescriptor) + .setKpiSubscription(serializedSubsDescriptor) .onItem() .transform(kpiList -> serializer.deserialize(kpiList.getKpiListList())); } @@ -85,35 +85,15 @@ public class MonitoringGatewayImpl implements MonitoringGateway { } @Override - 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) { + public Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor) { final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor); return streamingDelegateMonitoring - .createKpiAlarm(serializedAlarmDescriptor) + .setKpiAlarm(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); @@ -125,11 +105,11 @@ public class MonitoringGatewayImpl implements MonitoringGateway { } @Override - public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) { - final var serializedAlarmId = serializer.serializeAlarmId(alarmId); + public Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription) { + final var serializedAlarmSubscription = serializer.serialize(alarmSubscription); return streamingDelegateMonitoring - .getAlarmResponseStream(serializedAlarmId) + .getAlarmResponseStream(serializedAlarmSubscription) .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 276a9d3632655cf684ae4dff0469d477ff15a88e..5022833ceed4896b1458a077125b4f822127cb6c 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,21 +28,17 @@ import java.util.List; public interface MonitoringService { - Uni<String> createKpi(KpiDescriptor kpiDescriptor); + Uni<String> setKpi(KpiDescriptor kpiDescriptor); Uni<KpiDescriptor> getKpiDescriptor(String kpiId); - Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor); + Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor); Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId); - Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor); - - Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor); - - Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor); + Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor); Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId); - Multi<AlarmResponse> getAlarmResponseStream(String alarmId); + Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription); } 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 e1e79af757b9866360040b785fd41dd1f0c70cd4..5cec6e989749ade8083f01be341d0a0fd0982c98 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> createKpi(KpiDescriptor kpiDescriptor) { - return monitoringGateway.createKpi(kpiDescriptor); + public Uni<String> setKpi(KpiDescriptor kpiDescriptor) { + return monitoringGateway.setKpi(kpiDescriptor); } @Override @@ -49,8 +49,8 @@ public class MonitoringServiceImpl implements MonitoringService { } @Override - public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) { - return monitoringGateway.subscribeKpi(subsDescriptor); + public Multi<List<Kpi>> setKpiSubscription(SubsDescriptor subsDescriptor) { + return monitoringGateway.setKpiSubscription(subsDescriptor); } @Override @@ -59,18 +59,8 @@ public class MonitoringServiceImpl implements MonitoringService { } @Override - 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); + public Uni<String> setKpiAlarm(AlarmDescriptor alarmDescriptor) { + return monitoringGateway.setKpiAlarm(alarmDescriptor); } @Override @@ -79,7 +69,7 @@ public class MonitoringServiceImpl implements MonitoringService { } @Override - public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) { - return monitoringGateway.getAlarmResponseStream(alarmId); + public Multi<AlarmResponse> getAlarmResponseStream(AlarmSubscription alarmSubscription) { + return monitoringGateway.getAlarmResponseStream(alarmSubscription); } } 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 ac216ee7cec55efbd7f169679b4e0eebad0f3950..85f0ce9e725845c86edf5bf265524db456076505 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,26 +16,36 @@ 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 String kpiId; - private final KpiValueRange kpiValueRange; - private final String timestamp; + private final List<String> kpiIds; + private final List<KpiValueRange> kpiValueRanges; + private final double timestamp; public AlarmDescriptor( + String alarmId, String alarmDescription, String name, - String kpiId, - KpiValueRange kpiValueRange, - String timestamp) { + List<String> kpiIds, + List<KpiValueRange> kpiValueRanges, + double timestamp) { + this.alarmId = alarmId; this.alarmDescription = alarmDescription; this.name = name; - this.kpiId = kpiId; - this.kpiValueRange = kpiValueRange; + this.kpiIds = kpiIds; + this.kpiValueRanges = kpiValueRanges; this.timestamp = timestamp; } + public String getAlarmId() { + return alarmId; + } + public String getAlarmDescription() { return alarmDescription; } @@ -44,22 +54,28 @@ public class AlarmDescriptor { return name; } - public String getKpiId() { - return kpiId; + public List<String> getKpiIds() { + return kpiIds; } - public KpiValueRange getKpiValueRange() { - return kpiValueRange; + public List<KpiValueRange> getKpiValueRanges() { + return kpiValueRanges; } - public String getTimestamp() { + public double getTimestamp() { return timestamp; } @Override public String toString() { return String.format( - "%s:{alarmDescription:\"%s\", name:\"%s\", kpiId:\"%s\", %s, timestamp:\"%s\"}", - getClass().getSimpleName(), alarmDescription, name, kpiId, kpiValueRange, timestamp); + "%s:{alarmId:\"%s\", alarmDescription:\"%s\", name:\"%s\", [%s], [%s], timestamp:\"%f\"}", + getClass().getSimpleName(), + alarmId, + alarmDescription, + name, + Util.toString(kpiIds), + Util.toString(kpiValueRanges), + timestamp); } } diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmSubscription.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmSubscription.java new file mode 100644 index 0000000000000000000000000000000000000000..166d791cc4628d64588e17b33da1baca48ef4810 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmSubscription.java @@ -0,0 +1,50 @@ +/* +* 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. +*/ + +package eu.teraflow.policy.monitoring.model; + +public class AlarmSubscription { + + private final String alarmId; + private final float subscriptionTimeoutS; + private final float subscriptionFrequencyMs; + + public AlarmSubscription( + String alarmId, float subscriptionTimeoutS, float subscriptionFrequencyMs) { + this.alarmId = alarmId; + this.subscriptionTimeoutS = subscriptionTimeoutS; + this.subscriptionFrequencyMs = subscriptionFrequencyMs; + } + + public String getAlarmId() { + return alarmId; + } + + public float getSubscriptionTimeoutS() { + return subscriptionTimeoutS; + } + + public float getSubscriptionFrequencyMs() { + return subscriptionFrequencyMs; + } + + @Override + public String toString() { + return String.format( + "%s:{alarmId:\"%s\", subscriptionTimeoutS:\"%f\", subscriptionFrequencyMs:\"%f\"}", + getClass().getSimpleName(), alarmId, subscriptionTimeoutS, subscriptionFrequencyMs); + } +} 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 c042240298fdea49ca1509ac2563e849b16575c5..98b8c510d487ee2f873d84facac390cdcab4391f 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 String timestamp; + private final double timestamp; private final KpiValue<?> kpiValue; - public Kpi(String kpiId, String timestamp, KpiValue<?> kpiValue) { + public Kpi(String kpiId, double timestamp, KpiValue<?> kpiValue) { this.kpiId = kpiId; this.timestamp = timestamp; this.kpiValue = kpiValue; @@ -32,7 +32,7 @@ public class Kpi { return kpiId; } - public String getTimestamp() { + public double getTimestamp() { return timestamp; } @@ -43,7 +43,7 @@ public class Kpi { @Override public String toString() { return String.format( - "%s:{kpiId:\"%s\", timeStamp:\"%s\", %s}", + "%s:{kpiId:\"%s\", timeStamp:\"%f\", %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 ced38b3f9f76239ee83687f14587da168dc7c320..101d784c3ba796bbaf2be9820263e595630f2578 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,23 +17,30 @@ 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 String startDate; - private final String endDate; + private final double startTimestamp; + private final double endTimestamp; public SubsDescriptor( + String subscriptionId, String kpiId, float samplingDurationS, float samplingIntervalS, - String startDate, - String endDate) { + double startTimestamp, + double endTimestamp) { + this.subscriptionId = subscriptionId; this.kpiId = kpiId; this.samplingDurationS = samplingDurationS; this.samplingIntervalS = samplingIntervalS; - this.startDate = startDate; - this.endDate = endDate; + this.startTimestamp = startTimestamp; + this.endTimestamp = endTimestamp; + } + + public String getSubscriptionId() { + return subscriptionId; } public String getKpiId() { @@ -48,23 +55,24 @@ public class SubsDescriptor { return samplingIntervalS; } - public String getStartDate() { - return startDate; + public double getStartTimestamp() { + return startTimestamp; } - public String getEndDate() { - return endDate; + public double getEndTimestamp() { + return endTimestamp; } @Override public String toString() { return String.format( - "%s:{kpiId:\"%s\", samplingDurationS:\"%f\", samplingIntervalS:\"%f\", startDate:\"%s\", endDate:\"%s\"}", + "%s:{subscriptionId:\"%s\", kpiId:\"%s\", samplingDurationS:\"%f\", samplingIntervalS:\"%f\", startTimestamp:\"%f\", endTimestamp:\"%f\"}", getClass().getSimpleName(), + subscriptionId, kpiId, samplingDurationS, samplingIntervalS, - startDate, - endDate); + startTimestamp, + endTimestamp); } } 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 05f835d58f6552f3bd21f467b02026c9c509a67c..fa04952179478587dae40b4a4a39a67fdb2a29e1 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().setIntVal(44).build()), + new IntegerKpiValue(44), Monitoring.KpiValue.newBuilder().setInt32Val(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().setIntVal(32).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build()) + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) .build()), Arguments.of( new KpiValueRange(new IntegerKpiValue(32), new FloatKpiValue(42.2f)), Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build()) + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(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().setIntVal(32).build()) + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(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().setIntVal(32).build()) + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(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().setIntVal(42).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(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().setIntVal(42).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(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().setIntVal(42).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) .build()), Arguments.of( new KpiValueRange(new StringKpiValue("string"), new FloatKpiValue(42.2f)), @@ -2656,26 +2656,38 @@ class SerializerTest { @Test void shouldSerializeAlarmDescriptor() { + final var alarmId = "alarmId"; final var alarmDescription = "alarmDescription"; final var name = "name"; final var kpiId = "kpiId"; - final var timestamp = "timestamp"; + final double timestamp = 100.0; + final var kpiIds = List.of("kpiId1", "kpiId2"); final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); + final var kpiValueRanges = List.of(kpiValueRange); + final var alarmDescriptor = - new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp); + new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp); - final var serializedKpiIdUuid = serializer.serializeUuid(kpiId); - final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); + 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")); 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) - .setKpiId(serializedKpiId) - .setKpiValueRange(serializedKpiValueRange) - .setTimestamp(timestamp) + .addKpiId(serializedKpiId1) + .addKpiId(serializedKpiId2) + .addKpiValueRange(serializedKpiValueRange) + .setTimestamp(serializedTimeStamp) .build(); final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor); @@ -2685,26 +2697,39 @@ class SerializerTest { @Test void shouldDeserializeAlarmDescriptor() { + final var alarmId = "alarmId"; final var alarmDescription = "alarmDescription"; final var name = "name"; final var kpiId = "kpiId"; - final var timestamp = "timestamp"; + final double timestamp = 100.0; + final var kpiIds = List.of("kpiId1", "kpiId2"); final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); + final var kpiValueRanges = List.of(kpiValueRange); + final var expectedAlarmDescriptor = - new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp); + 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")); - 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) - .setKpiId(serializedKpiId) - .setKpiValueRange(serializedKpiValueRange) - .setTimestamp(timestamp) + .addKpiId(serializedKpiId1) + .addKpiId(serializedKpiId2) + .addKpiValueRange(serializedKpiValueRange) + .setTimestamp(serializedTimeStamp) .build(); final var alarmDescriptor = serializer.deserialize(serializedAlarmDescriptor); @@ -2762,25 +2787,42 @@ class SerializerTest { @Test void shouldSerializeSubDescriptor() { + final var subscriptionId = "subscriptionId"; final var kpiId = "kpiId"; final var samplingDurationS = 10f; final var samplingIntervalS = 45f; - final var startDate = "01/07/2022"; - final var endDate = "02/07/2022"; + final var startTimestamp = 1.0; + final var endTimestamp = 100.0; final var subDescriptor = - new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate); - + new SubsDescriptor( + subscriptionId, + kpiId, + samplingDurationS, + samplingIntervalS, + startTimestamp, + endTimestamp); + + final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId); + final var serializedSubscriptionId = + monitoring.Monitoring.SubscriptionID.newBuilder() + .setSubsId(serializedSubscriptionIdUuid) + .build(); 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) - .setStartDate(startDate) - .setEndDate(endDate) + .setStartTimestamp(serializedStartTimestamp) + .setEndTimestamp(serializedEndTimestamp) .build(); final var serializedSubDescriptor = serializer.serialize(subDescriptor); @@ -2790,25 +2832,42 @@ class SerializerTest { @Test void shouldDeserializeSubDescriptor() { + final var subscriptionId = "subscriptionId"; final var kpiId = "kpiId"; final var samplingDurationS = 10f; final var samplingIntervalS = 45f; - final var startDate = "01/07/2022"; - final var endDate = "02/07/2022"; + final var startTimestamp = 1.0; + final var endTimestamp = 100.0; final var expectedSubDescriptor = - new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate); - + new SubsDescriptor( + subscriptionId, + kpiId, + samplingDurationS, + samplingIntervalS, + startTimestamp, + endTimestamp); + + final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId); + final var serializedSubscriptionId = + monitoring.Monitoring.SubscriptionID.newBuilder() + .setSubsId(serializedSubscriptionIdUuid) + .build(); 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) - .setStartDate(startDate) - .setEndDate(endDate) + .setStartTimestamp(serializedStartTimestamp) + .setEndTimestamp(serializedEndTimestamp) .build(); final var subDescriptor = serializer.deserialize(serializedSubDescriptor); @@ -3155,18 +3214,20 @@ class SerializerTest { @Test void shouldSerializeKpi() { final var expectedKpiId = "expectedKpiId"; - final var expectedTimestamp = "expectedTimestamp"; + final var expectedTimestamp = 100.0; 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(expectedTimestamp) + .setTimestamp(serializedexpectedTimestamp) .setKpiValue(serializedKpiValue) .build(); @@ -3178,7 +3239,7 @@ class SerializerTest { @Test void shouldDeserializeKpi() { final var expectedKpiId = "expectedKpiId"; - final var expectedTimestamp = "expectedTimestamp"; + final var expectedTimestamp = 100.0; final var expectedKpiValue = new BooleanKpiValue(true); final var expectedKpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue); @@ -3192,16 +3253,20 @@ class SerializerTest { @Test void shouldSerializeKpisList() { final var expectedKpiIdA = "expectedKpiIdA"; - final var expectedTimestampA = "expectedTimestampA"; + final var expectedTimestampA = 100.0; 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 = "expectedTimestampB"; + final var expectedTimestampB = 100.0; 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); @@ -3210,14 +3275,14 @@ class SerializerTest { final var expectedKpiA = Monitoring.Kpi.newBuilder() .setKpiId(serializedKpiIdA) - .setTimestamp(expectedTimestampA) + .setTimestamp(serializedexpectedTimestampA) .setKpiValue(serializedKpiValueA) .build(); final var expectedKpiB = Monitoring.Kpi.newBuilder() .setKpiId(serializedKpiIdB) - .setTimestamp(expectedTimestampB) + .setTimestamp(serializedexpectedTimestampB) .setKpiValue(serializedKpiValueB) .build(); @@ -3231,16 +3296,20 @@ class SerializerTest { @Test void shouldDeserializeKpisList() { final var expectedKpiIdA = "expectedKpiIdA"; - final var expectedTimestampA = "expectedTimestampA"; + final var expectedTimestampA = 100.0; 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 = "expectedTimestampB"; + final var expectedTimestampB = 200.0; 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); @@ -3249,14 +3318,14 @@ class SerializerTest { final var serializedKpiA = Monitoring.Kpi.newBuilder() .setKpiId(serializedKpiIdA) - .setTimestamp(expectedTimestampA) + .setTimestamp(serializedexpectedTimestampA) .setKpiValue(serializedKpiValueA) .build(); final var serializedKpiB = Monitoring.Kpi.newBuilder() .setKpiId(serializedKpiIdB) - .setTimestamp(expectedTimestampB) + .setTimestamp(serializedexpectedTimestampB) .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 5d63d4aa45e578957a7a3414c33491cebe98acbe..9d05f3da8a831e74922e65473206539680c8d78b 100644 --- a/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java +++ b/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java @@ -19,85 +19,124 @@ public final class Monitoring { com.google.protobuf.MessageOrBuilder { /** - * <code>string kpi_description = 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 = 1;</code> + * <code>string kpi_description = 2;</code> * @return The bytes for kpiDescription. */ com.google.protobuf.ByteString getKpiDescriptionBytes(); /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code> + * <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> * @return The enum numeric value on the wire for kpiSampleType. */ int getKpiSampleTypeValue(); /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code> + * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code> * @return The kpiSampleType. */ kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType(); /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>.context.DeviceId device_id = 5;</code> * @return Whether the deviceId field is set. */ boolean hasDeviceId(); /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>.context.DeviceId device_id = 5;</code> * @return The deviceId. */ context.ContextOuterClass.DeviceId getDeviceId(); /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>.context.DeviceId device_id = 5;</code> */ context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder(); /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> * @return Whether the endpointId field is set. */ boolean hasEndpointId(); /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> * @return The endpointId. */ context.ContextOuterClass.EndPointId getEndpointId(); /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> */ context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder(); /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.ServiceId service_id = 7;</code> * @return Whether the serviceId field is set. */ boolean hasServiceId(); /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.ServiceId service_id = 7;</code> * @return The serviceId. */ context.ContextOuterClass.ServiceId getServiceId(); /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.ServiceId service_id = 7;</code> */ context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder(); /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.SliceId slice_id = 8;</code> * @return Whether the sliceId field is set. */ boolean hasSliceId(); /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.SliceId slice_id = 8;</code> * @return The sliceId. */ context.ContextOuterClass.SliceId getSliceId(); /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.SliceId slice_id = 8;</code> */ context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder(); } @@ -115,6 +154,7 @@ public final class Monitoring { } private KpiDescriptor() { kpiDescription_ = ""; + kpiIdList_ = java.util.Collections.emptyList(); kpiSampleType_ = 0; } @@ -138,6 +178,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 { @@ -149,18 +190,40 @@ 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 16: { + 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: { int rawValue = input.readEnum(); kpiSampleType_ = rawValue; break; } - case 26: { + case 42: { context.ContextOuterClass.DeviceId.Builder subBuilder = null; if (deviceId_ != null) { subBuilder = deviceId_.toBuilder(); @@ -173,7 +236,7 @@ public final class Monitoring { break; } - case 34: { + case 50: { context.ContextOuterClass.EndPointId.Builder subBuilder = null; if (endpointId_ != null) { subBuilder = endpointId_.toBuilder(); @@ -186,7 +249,7 @@ public final class Monitoring { break; } - case 42: { + case 58: { context.ContextOuterClass.ServiceId.Builder subBuilder = null; if (serviceId_ != null) { subBuilder = serviceId_.toBuilder(); @@ -199,7 +262,7 @@ public final class Monitoring { break; } - case 50: { + case 66: { context.ContextOuterClass.SliceId.Builder subBuilder = null; if (sliceId_ != null) { subBuilder = sliceId_.toBuilder(); @@ -227,6 +290,9 @@ 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(); } @@ -244,10 +310,36 @@ public final class Monitoring { monitoring.Monitoring.KpiDescriptor.class, monitoring.Monitoring.KpiDescriptor.Builder.class); } - public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1; + 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; private volatile java.lang.Object kpiDescription_; /** - * <code>string kpi_description = 1;</code> + * <code>string kpi_description = 2;</code> * @return The kpiDescription. */ @java.lang.Override @@ -264,7 +356,7 @@ public final class Monitoring { } } /** - * <code>string kpi_description = 1;</code> + * <code>string kpi_description = 2;</code> * @return The bytes for kpiDescription. */ @java.lang.Override @@ -282,17 +374,57 @@ public final class Monitoring { } } - public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 2; + 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 = 2;</code> + * <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 = 2;</code> + * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code> * @return The kpiSampleType. */ @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() { @@ -301,10 +433,10 @@ public final class Monitoring { return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result; } - public static final int DEVICE_ID_FIELD_NUMBER = 3; + public static final int DEVICE_ID_FIELD_NUMBER = 5; private context.ContextOuterClass.DeviceId deviceId_; /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>.context.DeviceId device_id = 5;</code> * @return Whether the deviceId field is set. */ @java.lang.Override @@ -312,7 +444,7 @@ public final class Monitoring { return deviceId_ != null; } /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>.context.DeviceId device_id = 5;</code> * @return The deviceId. */ @java.lang.Override @@ -320,17 +452,17 @@ public final class Monitoring { return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_; } /** - * <code>.context.DeviceId device_id = 3;</code> + * <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 = 4; + public static final int ENDPOINT_ID_FIELD_NUMBER = 6; private context.ContextOuterClass.EndPointId endpointId_; /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> * @return Whether the endpointId field is set. */ @java.lang.Override @@ -338,7 +470,7 @@ public final class Monitoring { return endpointId_ != null; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> * @return The endpointId. */ @java.lang.Override @@ -346,17 +478,17 @@ public final class Monitoring { return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <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 = 5; + public static final int SERVICE_ID_FIELD_NUMBER = 7; private context.ContextOuterClass.ServiceId serviceId_; /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.ServiceId service_id = 7;</code> * @return Whether the serviceId field is set. */ @java.lang.Override @@ -364,7 +496,7 @@ public final class Monitoring { return serviceId_ != null; } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.ServiceId service_id = 7;</code> * @return The serviceId. */ @java.lang.Override @@ -372,17 +504,17 @@ public final class Monitoring { return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_; } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.ServiceId service_id = 7;</code> */ @java.lang.Override public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() { return getServiceId(); } - public static final int SLICE_ID_FIELD_NUMBER = 6; + public static final int SLICE_ID_FIELD_NUMBER = 8; private context.ContextOuterClass.SliceId sliceId_; /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.SliceId slice_id = 8;</code> * @return Whether the sliceId field is set. */ @java.lang.Override @@ -390,7 +522,7 @@ public final class Monitoring { return sliceId_ != null; } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.SliceId slice_id = 8;</code> * @return The sliceId. */ @java.lang.Override @@ -398,7 +530,7 @@ public final class Monitoring { return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_; } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.SliceId slice_id = 8;</code> */ @java.lang.Override public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() { @@ -419,23 +551,29 @@ 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, 1, kpiDescription_); + 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(2, kpiSampleType_); + output.writeEnum(4, kpiSampleType_); } if (deviceId_ != null) { - output.writeMessage(3, getDeviceId()); + output.writeMessage(5, getDeviceId()); } if (endpointId_ != null) { - output.writeMessage(4, getEndpointId()); + output.writeMessage(6, getEndpointId()); } if (serviceId_ != null) { - output.writeMessage(5, getServiceId()); + output.writeMessage(7, getServiceId()); } if (sliceId_ != null) { - output.writeMessage(6, getSliceId()); + output.writeMessage(8, getSliceId()); } unknownFields.writeTo(output); } @@ -446,28 +584,36 @@ 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(1, kpiDescription_); + 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(2, kpiSampleType_); + .computeEnumSize(4, kpiSampleType_); } if (deviceId_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, getDeviceId()); + .computeMessageSize(5, getDeviceId()); } if (endpointId_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, getEndpointId()); + .computeMessageSize(6, getEndpointId()); } if (serviceId_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, getServiceId()); + .computeMessageSize(7, getServiceId()); } if (sliceId_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, getSliceId()); + .computeMessageSize(8, getSliceId()); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -484,8 +630,15 @@ 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()) { @@ -518,8 +671,16 @@ 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()) { @@ -666,13 +827,26 @@ 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) { @@ -725,7 +899,22 @@ 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_; @@ -795,14 +984,43 @@ 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 (other.kpiSampleType_ != 0) { - setKpiSampleTypeValue(other.getKpiSampleTypeValue()); - } - if (other.hasDeviceId()) { + 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()) { @@ -842,10 +1060,130 @@ 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 = 1;</code> + * <code>string kpi_description = 2;</code> * @return The kpiDescription. */ public java.lang.String getKpiDescription() { @@ -861,7 +1199,7 @@ public final class Monitoring { } } /** - * <code>string kpi_description = 1;</code> + * <code>string kpi_description = 2;</code> * @return The bytes for kpiDescription. */ public com.google.protobuf.ByteString @@ -878,7 +1216,7 @@ public final class Monitoring { } } /** - * <code>string kpi_description = 1;</code> + * <code>string kpi_description = 2;</code> * @param value The kpiDescription to set. * @return This builder for chaining. */ @@ -893,7 +1231,7 @@ public final class Monitoring { return this; } /** - * <code>string kpi_description = 1;</code> + * <code>string kpi_description = 2;</code> * @return This builder for chaining. */ public Builder clearKpiDescription() { @@ -903,7 +1241,7 @@ public final class Monitoring { return this; } /** - * <code>string kpi_description = 1;</code> + * <code>string kpi_description = 2;</code> * @param value The bytes for kpiDescription to set. * @return This builder for chaining. */ @@ -919,548 +1257,788 @@ public final class Monitoring { return this; } - 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_; - } - /** - * <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 Builder setKpiSampleTypeValue(int value) { - - kpiSampleType_ = value; - onChanged(); - return this; - } - /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</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; + 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>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code> - * @param value The kpiSampleType to set. - * @return This builder for chaining. + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) { - if (value == null) { - throw new NullPointerException(); + public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() { + if (kpiIdListBuilder_ == null) { + return java.util.Collections.unmodifiableList(kpiIdList_); + } else { + return kpiIdListBuilder_.getMessageList(); } - - kpiSampleType_ = value.getNumber(); - onChanged(); - return this; - } - /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</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 = 3;</code> - * @return Whether the deviceId field is set. + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public boolean hasDeviceId() { - return deviceIdBuilder_ != null || deviceId_ != null; + public int getKpiIdListCount() { + if (kpiIdListBuilder_ == null) { + return kpiIdList_.size(); + } else { + return kpiIdListBuilder_.getCount(); + } } /** - * <code>.context.DeviceId device_id = 3;</code> - * @return The deviceId. + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public context.ContextOuterClass.DeviceId getDeviceId() { - if (deviceIdBuilder_ == null) { - return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_; + public monitoring.Monitoring.KpiId getKpiIdList(int index) { + if (kpiIdListBuilder_ == null) { + return kpiIdList_.get(index); } else { - return deviceIdBuilder_.getMessage(); + return kpiIdListBuilder_.getMessage(index); } } /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public Builder setDeviceId(context.ContextOuterClass.DeviceId value) { - if (deviceIdBuilder_ == null) { + public Builder setKpiIdList( + int index, monitoring.Monitoring.KpiId value) { + if (kpiIdListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - deviceId_ = value; + ensureKpiIdListIsMutable(); + kpiIdList_.set(index, value); onChanged(); } else { - deviceIdBuilder_.setMessage(value); + kpiIdListBuilder_.setMessage(index, value); } - return this; } /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public Builder setDeviceId( - context.ContextOuterClass.DeviceId.Builder builderForValue) { - if (deviceIdBuilder_ == null) { - deviceId_ = builderForValue.build(); + public Builder setKpiIdList( + int index, monitoring.Monitoring.KpiId.Builder builderForValue) { + if (kpiIdListBuilder_ == null) { + ensureKpiIdListIsMutable(); + kpiIdList_.set(index, builderForValue.build()); onChanged(); } else { - deviceIdBuilder_.setMessage(builderForValue.build()); + kpiIdListBuilder_.setMessage(index, builderForValue.build()); } - return this; } /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</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; + public Builder addKpiIdList(monitoring.Monitoring.KpiId value) { + if (kpiIdListBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); } + ensureKpiIdListIsMutable(); + kpiIdList_.add(value); onChanged(); } else { - deviceIdBuilder_.mergeFrom(value); + kpiIdListBuilder_.addMessage(value); } - return this; } /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public Builder clearDeviceId() { - if (deviceIdBuilder_ == null) { - deviceId_ = null; + 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 { - deviceId_ = null; - deviceIdBuilder_ = null; + kpiIdListBuilder_.addMessage(index, value); } - return this; } /** - * <code>.context.DeviceId device_id = 3;</code> - */ - public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() { - - onChanged(); - return getDeviceIdFieldBuilder().getBuilder(); - } - /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() { - if (deviceIdBuilder_ != null) { - return deviceIdBuilder_.getMessageOrBuilder(); + public Builder addKpiIdList( + monitoring.Monitoring.KpiId.Builder builderForValue) { + if (kpiIdListBuilder_ == null) { + ensureKpiIdListIsMutable(); + kpiIdList_.add(builderForValue.build()); + onChanged(); } else { - return deviceId_ == null ? - context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_; + kpiIdListBuilder_.addMessage(builderForValue.build()); } + return this; } /** - * <code>.context.DeviceId device_id = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</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; + 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 deviceIdBuilder_; - } - - 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 = 4;</code> - * @return Whether the endpointId field is set. - */ - public boolean hasEndpointId() { - return endpointIdBuilder_ != null || endpointId_ != null; + return this; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> - * @return The endpointId. + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public context.ContextOuterClass.EndPointId getEndpointId() { - if (endpointIdBuilder_ == null) { - return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_; + 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 { - return endpointIdBuilder_.getMessage(); + kpiIdListBuilder_.addAllMessages(values); } + return this; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public Builder setEndpointId(context.ContextOuterClass.EndPointId value) { - if (endpointIdBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - endpointId_ = value; + public Builder clearKpiIdList() { + if (kpiIdListBuilder_ == null) { + kpiIdList_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); onChanged(); } else { - endpointIdBuilder_.setMessage(value); + kpiIdListBuilder_.clear(); } - return this; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public Builder setEndpointId( - context.ContextOuterClass.EndPointId.Builder builderForValue) { - if (endpointIdBuilder_ == null) { - endpointId_ = builderForValue.build(); + public Builder removeKpiIdList(int index) { + if (kpiIdListBuilder_ == null) { + ensureKpiIdListIsMutable(); + kpiIdList_.remove(index); onChanged(); } else { - endpointIdBuilder_.setMessage(builderForValue.build()); + kpiIdListBuilder_.remove(index); } - return this; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</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); + public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder( + int index) { + return getKpiIdListFieldBuilder().getBuilder(index); + } + /** + * <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; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public Builder clearEndpointId() { - if (endpointIdBuilder_ == null) { - endpointId_ = null; - onChanged(); + public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> + getKpiIdListOrBuilderList() { + if (kpiIdListBuilder_ != null) { + return kpiIdListBuilder_.getMessageOrBuilderList(); } else { - endpointId_ = null; - endpointIdBuilder_ = null; + return java.util.Collections.unmodifiableList(kpiIdList_); } - - return this; } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() { - - onChanged(); - return getEndpointIdFieldBuilder().getBuilder(); + public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() { + return getKpiIdListFieldBuilder().addBuilder( + monitoring.Monitoring.KpiId.getDefaultInstance()); } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> */ - public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() { - if (endpointIdBuilder_ != null) { - return endpointIdBuilder_.getMessageOrBuilder(); - } else { - return endpointId_ == null ? - context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_; - } + public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder( + int index) { + return getKpiIdListFieldBuilder().addBuilder( + index, monitoring.Monitoring.KpiId.getDefaultInstance()); } /** - * <code>.context.EndPointId endpoint_id = 4;</code> + * <code>repeated .monitoring.KpiId kpi_id_list = 3;</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(), + 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()); - endpointId_ = null; + kpiIdList_ = null; } - return endpointIdBuilder_; + return kpiIdListBuilder_; } - private context.ContextOuterClass.ServiceId serviceId_; - private com.google.protobuf.SingleFieldBuilderV3< - context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_; + private int kpiSampleType_ = 0; /** - * <code>.context.ServiceId service_id = 5;</code> - * @return Whether the serviceId field is set. + * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code> + * @return The enum numeric value on the wire for kpiSampleType. */ - public boolean hasServiceId() { - return serviceIdBuilder_ != null || serviceId_ != null; + @java.lang.Override public int getKpiSampleTypeValue() { + return kpiSampleType_; } /** - * <code>.context.ServiceId service_id = 5;</code> - * @return The serviceId. + * <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 context.ContextOuterClass.ServiceId getServiceId() { - if (serviceIdBuilder_ == null) { - return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_; - } else { - return serviceIdBuilder_.getMessage(); - } + public Builder setKpiSampleTypeValue(int value) { + + kpiSampleType_ = value; + onChanged(); + return this; } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code> + * @return The kpiSampleType. */ - public Builder setServiceId(context.ContextOuterClass.ServiceId value) { - if (serviceIdBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - serviceId_ = value; - onChanged(); - } else { - serviceIdBuilder_.setMessage(value); - } + @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 = 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.ServiceId service_id = 5;</code> + * <code>.context.DeviceId device_id = 5;</code> */ - public Builder setServiceId( - context.ContextOuterClass.ServiceId.Builder builderForValue) { - if (serviceIdBuilder_ == null) { - serviceId_ = builderForValue.build(); + public Builder setDeviceId( + context.ContextOuterClass.DeviceId.Builder builderForValue) { + if (deviceIdBuilder_ == null) { + deviceId_ = builderForValue.build(); onChanged(); } else { - serviceIdBuilder_.setMessage(builderForValue.build()); + deviceIdBuilder_.setMessage(builderForValue.build()); } return this; } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.DeviceId device_id = 5;</code> */ - public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) { - if (serviceIdBuilder_ == null) { - if (serviceId_ != null) { - serviceId_ = - context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial(); + public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) { + if (deviceIdBuilder_ == null) { + if (deviceId_ != null) { + deviceId_ = + context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial(); } else { - serviceId_ = value; + deviceId_ = value; } onChanged(); } else { - serviceIdBuilder_.mergeFrom(value); + deviceIdBuilder_.mergeFrom(value); } return this; } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.DeviceId device_id = 5;</code> */ - public Builder clearServiceId() { - if (serviceIdBuilder_ == null) { - serviceId_ = null; + public Builder clearDeviceId() { + if (deviceIdBuilder_ == null) { + deviceId_ = null; onChanged(); } else { - serviceId_ = null; - serviceIdBuilder_ = null; + deviceId_ = null; + deviceIdBuilder_ = null; } return this; } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.DeviceId device_id = 5;</code> */ - public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() { + public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() { onChanged(); - return getServiceIdFieldBuilder().getBuilder(); + return getDeviceIdFieldBuilder().getBuilder(); } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.DeviceId device_id = 5;</code> */ - public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() { - if (serviceIdBuilder_ != null) { - return serviceIdBuilder_.getMessageOrBuilder(); + public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() { + if (deviceIdBuilder_ != null) { + return deviceIdBuilder_.getMessageOrBuilder(); } else { - return serviceId_ == null ? - context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_; + return deviceId_ == null ? + context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_; } } /** - * <code>.context.ServiceId service_id = 5;</code> + * <code>.context.DeviceId device_id = 5;</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(), + 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()); - serviceId_ = null; + deviceId_ = null; } - return serviceIdBuilder_; + return deviceIdBuilder_; } - private context.ContextOuterClass.SliceId sliceId_; + private context.ContextOuterClass.EndPointId endpointId_; private com.google.protobuf.SingleFieldBuilderV3< - context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_; + context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_; /** - * <code>.context.SliceId slice_id = 6;</code> - * @return Whether the sliceId field is set. + * <code>.context.EndPointId endpoint_id = 6;</code> + * @return Whether the endpointId field is set. */ - public boolean hasSliceId() { - return sliceIdBuilder_ != null || sliceId_ != null; + public boolean hasEndpointId() { + return endpointIdBuilder_ != null || endpointId_ != null; } /** - * <code>.context.SliceId slice_id = 6;</code> - * @return The sliceId. + * <code>.context.EndPointId endpoint_id = 6;</code> + * @return The endpointId. */ - public context.ContextOuterClass.SliceId getSliceId() { - if (sliceIdBuilder_ == null) { - return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_; + public context.ContextOuterClass.EndPointId getEndpointId() { + if (endpointIdBuilder_ == null) { + return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_; } else { - return sliceIdBuilder_.getMessage(); + return endpointIdBuilder_.getMessage(); } } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> */ - public Builder setSliceId(context.ContextOuterClass.SliceId value) { - if (sliceIdBuilder_ == null) { + public Builder setEndpointId(context.ContextOuterClass.EndPointId value) { + if (endpointIdBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - sliceId_ = value; + endpointId_ = value; onChanged(); } else { - sliceIdBuilder_.setMessage(value); + endpointIdBuilder_.setMessage(value); } return this; } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> */ - public Builder setSliceId( - context.ContextOuterClass.SliceId.Builder builderForValue) { - if (sliceIdBuilder_ == null) { - sliceId_ = builderForValue.build(); + public Builder setEndpointId( + context.ContextOuterClass.EndPointId.Builder builderForValue) { + if (endpointIdBuilder_ == null) { + endpointId_ = builderForValue.build(); onChanged(); } else { - sliceIdBuilder_.setMessage(builderForValue.build()); + endpointIdBuilder_.setMessage(builderForValue.build()); } return this; } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> */ - public Builder mergeSliceId(context.ContextOuterClass.SliceId value) { - if (sliceIdBuilder_ == null) { - if (sliceId_ != null) { - sliceId_ = - context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial(); + public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) { + if (endpointIdBuilder_ == null) { + if (endpointId_ != null) { + endpointId_ = + context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial(); } else { - sliceId_ = value; + endpointId_ = value; } onChanged(); } else { - sliceIdBuilder_.mergeFrom(value); + endpointIdBuilder_.mergeFrom(value); } return this; } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> */ - public Builder clearSliceId() { - if (sliceIdBuilder_ == null) { - sliceId_ = null; + public Builder clearEndpointId() { + if (endpointIdBuilder_ == null) { + endpointId_ = null; onChanged(); } else { - sliceId_ = null; - sliceIdBuilder_ = null; + endpointId_ = null; + endpointIdBuilder_ = null; } return this; } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> */ - public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() { + public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() { onChanged(); - return getSliceIdFieldBuilder().getBuilder(); + return getEndpointIdFieldBuilder().getBuilder(); } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.EndPointId endpoint_id = 6;</code> */ - public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() { - if (sliceIdBuilder_ != null) { - return sliceIdBuilder_.getMessageOrBuilder(); + public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() { + if (endpointIdBuilder_ != null) { + return endpointIdBuilder_.getMessageOrBuilder(); } else { - return sliceId_ == null ? - context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_; + return endpointId_ == null ? + context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_; } } /** - * <code>.context.SliceId slice_id = 6;</code> + * <code>.context.EndPointId endpoint_id = 6;</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(), + 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()); - sliceId_ = null; + endpointId_ = null; } - return sliceIdBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + return endpointIdBuilder_; } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(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); + } + + // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptor) } @@ -1501,140 +2079,61 @@ public final class Monitoring { } - public interface BundleKpiDescriptorOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.BundleKpiDescriptor) + public interface MonitorKpiRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest) com.google.protobuf.MessageOrBuilder { /** - * <code>string kpi_description = 1;</code> - * @return The kpiDescription. + * <code>.monitoring.KpiId kpi_id = 1;</code> + * @return Whether the kpiId field is set. */ - java.lang.String getKpiDescription(); + boolean hasKpiId(); /** - * <code>string kpi_description = 1;</code> - * @return The bytes for kpiDescription. + * <code>.monitoring.KpiId kpi_id = 1;</code> + * @return The kpiId. */ - com.google.protobuf.ByteString - getKpiDescriptionBytes(); - + monitoring.Monitoring.KpiId getKpiId(); /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <code>.monitoring.KpiId kpi_id = 1;</code> */ - java.util.List<monitoring.Monitoring.KpiId> - getKpiIdListList(); - /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> - */ - monitoring.Monitoring.KpiId getKpiIdList(int index); - /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> - */ - 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(); + monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(); /** - * <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> + * <code>float monitoring_window_s = 2;</code> + * @return The monitoringWindowS. */ - context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder(); + float getMonitoringWindowS(); /** - * <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> + * <pre> + * Pending add field to reflect Available Device Protocols + * </pre> + * + * <code>float sampling_rate_s = 3;</code> + * @return The samplingRateS. */ - context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder(); + float getSamplingRateS(); } /** - * Protobuf type {@code monitoring.BundleKpiDescriptor} + * Protobuf type {@code monitoring.MonitorKpiRequest} */ - public static final class BundleKpiDescriptor extends + public static final class MonitorKpiRequest extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.BundleKpiDescriptor) - BundleKpiDescriptorOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest) + MonitorKpiRequestOrBuilder { private static final long serialVersionUID = 0L; - // Use BundleKpiDescriptor.newBuilder() to construct. - private BundleKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use MonitorKpiRequest.newBuilder() to construct. + private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private BundleKpiDescriptor() { - kpiDescription_ = ""; - kpiIdList_ = java.util.Collections.emptyList(); - kpiSampleType_ = 0; + private MonitorKpiRequest() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new BundleKpiDescriptor(); + return new MonitorKpiRequest(); } @java.lang.Override @@ -1642,7 +2141,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private BundleKpiDescriptor( + private MonitorKpiRequest( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -1650,7 +2149,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 { @@ -1662,76 +2160,26 @@ public final class Monitoring { done = true; break; case 10: { - 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; - } - 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(deviceId_); - deviceId_ = subBuilder.buildPartial(); - } - - break; - } - case 42: { - context.ContextOuterClass.EndPointId.Builder subBuilder = null; - if (endpointId_ != null) { - subBuilder = endpointId_.toBuilder(); + monitoring.Monitoring.KpiId.Builder subBuilder = null; + if (kpiId_ != null) { + subBuilder = kpiId_.toBuilder(); } - endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry); + kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry); if (subBuilder != null) { - subBuilder.mergeFrom(endpointId_); - endpointId_ = subBuilder.buildPartial(); + subBuilder.mergeFrom(kpiId_); + kpiId_ = subBuilder.buildPartial(); } break; } - 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(); - } + case 21: { + monitoringWindowS_ = input.readFloat(); 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(); - } + case 29: { + samplingRateS_ = input.readFloat(); break; } default: { @@ -1749,261 +2197,97 @@ 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_BundleKpiDescriptor_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_BundleKpiDescriptor_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class); + monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class); } - public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1; - private volatile java.lang.Object kpiDescription_; - /** - * <code>string kpi_description = 1;</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; - } - } + public static final int KPI_ID_FIELD_NUMBER = 1; + private monitoring.Monitoring.KpiId kpiId_; /** - * <code>string kpi_description = 1;</code> - * @return The bytes for kpiDescription. + * <code>.monitoring.KpiId kpi_id = 1;</code> + * @return Whether the kpiId field is set. */ @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 boolean hasKpiId() { + return kpiId_ != null; } - - public static final int KPI_ID_LIST_FIELD_NUMBER = 2; - private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_; /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <code>.monitoring.KpiId kpi_id = 1;</code> + * @return The kpiId. */ @java.lang.Override - public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() { - return kpiIdList_; + public monitoring.Monitoring.KpiId getKpiId() { + return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; } /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <code>.monitoring.KpiId kpi_id = 1;</code> */ @java.lang.Override - public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> - getKpiIdListOrBuilderList() { - return kpiIdList_; + public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() { + return getKpiId(); } + + public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2; + private float monitoringWindowS_; /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <code>float monitoring_window_s = 2;</code> + * @return The monitoringWindowS. */ @java.lang.Override - public int getKpiIdListCount() { - return kpiIdList_.size(); + public float getMonitoringWindowS() { + return monitoringWindowS_; } + + public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3; + private float samplingRateS_; /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <pre> + * Pending add field to reflect Available Device Protocols + * </pre> + * + * <code>float sampling_rate_s = 3;</code> + * @return The samplingRateS. */ @java.lang.Override - public monitoring.Monitoring.KpiId getKpiIdList(int index) { - return kpiIdList_.get(index); + public float getSamplingRateS() { + return samplingRateS_; } - /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> - */ + + private byte memoizedIsInitialized = -1; @java.lang.Override - 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; + 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 (kpiId_ != null) { + output.writeMessage(1, getKpiId()); } - if (serviceId_ != null) { - output.writeMessage(6, getServiceId()); + if (monitoringWindowS_ != 0F) { + output.writeFloat(2, monitoringWindowS_); } - if (sliceId_ != null) { - output.writeMessage(7, getSliceId()); + if (samplingRateS_ != 0F) { + output.writeFloat(3, samplingRateS_); } unknownFields.writeTo(output); } @@ -2014,32 +2298,17 @@ public final class Monitoring { if (size != -1) return size; size = 0; - 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(2, kpiIdList_.get(i)); - } - if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, kpiSampleType_); - } - if (deviceId_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, getDeviceId()); - } - if (endpointId_ != null) { + if (kpiId_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, getEndpointId()); + .computeMessageSize(1, getKpiId()); } - if (serviceId_ != null) { + if (monitoringWindowS_ != 0F) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, getServiceId()); + .computeFloatSize(2, monitoringWindowS_); } - if (sliceId_ != null) { + if (samplingRateS_ != 0F) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, getSliceId()); + .computeFloatSize(3, samplingRateS_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -2051,36 +2320,22 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.BundleKpiDescriptor)) { + if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) { return super.equals(obj); } - monitoring.Monitoring.BundleKpiDescriptor other = (monitoring.Monitoring.BundleKpiDescriptor) obj; + monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj; - 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 (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; } @@ -2092,98 +2347,84 @@ public final class Monitoring { } int hash = 41; hash = (19 * hash) + getDescriptor().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(); + if (hasKpiId()) { + 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.BundleKpiDescriptor parseFrom( + public static monitoring.Monitoring.MonitorKpiRequest parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.BundleKpiDescriptor 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.BundleKpiDescriptor 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.BundleKpiDescriptor 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.BundleKpiDescriptor parseFrom(byte[] data) + public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.BundleKpiDescriptor 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.BundleKpiDescriptor 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.BundleKpiDescriptor 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.BundleKpiDescriptor 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.BundleKpiDescriptor 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.BundleKpiDescriptor 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.BundleKpiDescriptor parseFrom( + public static monitoring.Monitoring.MonitorKpiRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2196,7 +2437,7 @@ public final class Monitoring { public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(monitoring.Monitoring.BundleKpiDescriptor prototype) { + public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -2212,26 +2453,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.BundleKpiDescriptor} + * Protobuf type {@code monitoring.MonitorKpiRequest} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:monitoring.BundleKpiDescriptor) - monitoring.Monitoring.BundleKpiDescriptorOrBuilder { + // @@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_BundleKpiDescriptor_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_BundleKpiDescriptor_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class); + monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class); } - // Construct using monitoring.Monitoring.BundleKpiDescriptor.newBuilder() + // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -2244,63 +2485,38 @@ public final class Monitoring { private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { - getKpiIdListFieldBuilder(); } } @java.lang.Override public Builder clear() { super.clear(); - kpiDescription_ = ""; - - if (kpiIdListBuilder_ == null) { - kpiIdList_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); + if (kpiIdBuilder_ == null) { + kpiId_ = null; } else { - kpiIdListBuilder_.clear(); + kpiId_ = null; + kpiIdBuilder_ = null; } - kpiSampleType_ = 0; + monitoringWindowS_ = 0F; + + samplingRateS_ = 0F; - 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_BundleKpiDescriptor_descriptor; + return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor; } @java.lang.Override - public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() { - return monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance(); + public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() { + return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.BundleKpiDescriptor build() { - monitoring.Monitoring.BundleKpiDescriptor result = buildPartial(); + public monitoring.Monitoring.MonitorKpiRequest build() { + monitoring.Monitoring.MonitorKpiRequest result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -2308,40 +2524,15 @@ public final class Monitoring { } @java.lang.Override - 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.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_; + public monitoring.Monitoring.MonitorKpiRequest buildPartial() { + monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this); + if (kpiIdBuilder_ == null) { + result.kpiId_ = kpiId_; } else { - result.sliceId_ = sliceIdBuilder_.build(); + result.kpiId_ = kpiIdBuilder_.build(); } + result.monitoringWindowS_ = monitoringWindowS_; + result.samplingRateS_ = samplingRateS_; onBuilt(); return result; } @@ -2380,60 +2571,24 @@ public final class Monitoring { } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof monitoring.Monitoring.BundleKpiDescriptor) { - return mergeFrom((monitoring.Monitoring.BundleKpiDescriptor)other); + if (other instanceof monitoring.Monitoring.MonitorKpiRequest) { + return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(monitoring.Monitoring.BundleKpiDescriptor other) { - if (other == monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()) return this; - 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()); + public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) { + if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this; + if (other.hasKpiId()) { + mergeKpiId(other.getKpiId()); } - if (other.hasServiceId()) { - mergeServiceId(other.getServiceId()); + if (other.getMonitoringWindowS() != 0F) { + setMonitoringWindowS(other.getMonitoringWindowS()); } - if (other.hasSliceId()) { - mergeSliceId(other.getSliceId()); + if (other.getSamplingRateS() != 0F) { + setSamplingRateS(other.getSamplingRateS()); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -2450,11 +2605,11 @@ public final class Monitoring { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - monitoring.Monitoring.BundleKpiDescriptor parsedMessage = null; + monitoring.Monitoring.MonitorKpiRequest parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.BundleKpiDescriptor) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -2463,1055 +2618,377 @@ public final class Monitoring { } return this; } - private int bitField0_; - private java.lang.Object kpiDescription_ = ""; + private monitoring.Monitoring.KpiId kpiId_; + private com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_; /** - * <code>string kpi_description = 1;</code> - * @return The kpiDescription. + * <code>.monitoring.KpiId kpi_id = 1;</code> + * @return Whether the kpiId field is set. */ - 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; - } + public boolean hasKpiId() { + return kpiIdBuilder_ != null || kpiId_ != null; } /** - * <code>string kpi_description = 1;</code> - * @return The bytes for kpiDescription. + * <code>.monitoring.KpiId kpi_id = 1;</code> + * @return The 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; + public monitoring.Monitoring.KpiId getKpiId() { + if (kpiIdBuilder_ == null) { + return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; } else { - return (com.google.protobuf.ByteString) ref; + return kpiIdBuilder_.getMessage(); } } /** - * <code>string kpi_description = 1;</code> - * @param value The kpiDescription to set. - * @return This builder for chaining. + * <code>.monitoring.KpiId kpi_id = 1;</code> */ - public Builder setKpiDescription( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - kpiDescription_ = value; - onChanged(); + 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>string kpi_description = 1;</code> - * @return This builder for chaining. + * <code>.monitoring.KpiId kpi_id = 1;</code> */ - public Builder clearKpiDescription() { - - kpiDescription_ = getDefaultInstance().getKpiDescription(); - onChanged(); + public Builder setKpiId( + monitoring.Monitoring.KpiId.Builder builderForValue) { + if (kpiIdBuilder_ == null) { + kpiId_ = builderForValue.build(); + onChanged(); + } else { + kpiIdBuilder_.setMessage(builderForValue.build()); + } + return this; } /** - * <code>string kpi_description = 1;</code> - * @param value The bytes for kpiDescription to set. - * @return This builder for chaining. + * <code>.monitoring.KpiId kpi_id = 1;</code> */ - public Builder setKpiDescriptionBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - kpiDescription_ = value; - onChanged(); - return this; - } + 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); + } - 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; - } + return this; } - - private com.google.protobuf.RepeatedFieldBuilderV3< - monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_; - /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <code>.monitoring.KpiId kpi_id = 1;</code> */ - public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() { - if (kpiIdListBuilder_ == null) { - return java.util.Collections.unmodifiableList(kpiIdList_); + public Builder clearKpiId() { + if (kpiIdBuilder_ == null) { + kpiId_ = null; + onChanged(); } else { - return kpiIdListBuilder_.getMessageList(); + kpiId_ = null; + kpiIdBuilder_ = null; } + + return this; } /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <code>.monitoring.KpiId kpi_id = 1;</code> */ - public int getKpiIdListCount() { - if (kpiIdListBuilder_ == null) { - return kpiIdList_.size(); - } else { - return kpiIdListBuilder_.getCount(); - } + public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() { + + onChanged(); + return getKpiIdFieldBuilder().getBuilder(); } /** - * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code> + * <code>.monitoring.KpiId kpi_id = 1;</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 = 2;</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 = 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(); + public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() { + if (kpiIdBuilder_ != null) { + return kpiIdBuilder_.getMessageOrBuilder(); } else { - return java.util.Collections.unmodifiableList(kpiIdList_); + return kpiId_ == null ? + monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; } } /** - * <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> + * <code>.monitoring.KpiId kpi_id = 1;</code> */ - public java.util.List<monitoring.Monitoring.KpiId.Builder> - getKpiIdListBuilderList() { - return getKpiIdListFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilderV3< monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> - getKpiIdListFieldBuilder() { - if (kpiIdListBuilder_ == null) { - kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + getKpiIdFieldBuilder() { + if (kpiIdBuilder_ == null) { + kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>( - kpiIdList_, - ((bitField0_ & 0x00000001) != 0), + getKpiId(), getParentForChildren(), isClean()); - kpiIdList_ = null; + kpiId_ = null; } - return kpiIdListBuilder_; + return kpiIdBuilder_; } - private int kpiSampleType_ = 0; + private float monitoringWindowS_ ; /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code> - * @return The enum numeric value on the wire for kpiSampleType. + * <code>float monitoring_window_s = 2;</code> + * @return The monitoringWindowS. */ - @java.lang.Override public int getKpiSampleTypeValue() { - return kpiSampleType_; + @java.lang.Override + public float getMonitoringWindowS() { + return monitoringWindowS_; } /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code> - * @param value The enum numeric value on the wire for kpiSampleType to set. + * <code>float monitoring_window_s = 2;</code> + * @param value The monitoringWindowS to set. * @return This builder for chaining. */ - public Builder setKpiSampleTypeValue(int value) { + public Builder setMonitoringWindowS(float value) { - kpiSampleType_ = value; + monitoringWindowS_ = value; onChanged(); return this; } /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code> - * @return The kpiSampleType. + * <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 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 float getSamplingRateS() { + return samplingRateS_; } /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code> - * @param value The kpiSampleType to set. + * <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 setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) { - if (value == null) { - throw new NullPointerException(); - } + public Builder setSamplingRateS(float value) { - kpiSampleType_ = value.getNumber(); + samplingRateS_ = value; onChanged(); return this; } /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code> + * <pre> + * Pending add field to reflect Available Device Protocols + * </pre> + * + * <code>float sampling_rate_s = 3;</code> * @return This builder for chaining. */ - public Builder clearKpiSampleType() { + public Builder clearSamplingRateS() { - kpiSampleType_ = 0; + samplingRateS_ = 0F; 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 = 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(); - } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); } - /** - * <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); - } - return this; + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); } - /** - * <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); - } - 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(builder_scope: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_; - } + // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest) + private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest(); + } - 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); - } + public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } - return this; + 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); } - /** - * <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()); - } + }; - 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); - } + public static com.google.protobuf.Parser<MonitorKpiRequest> parser() { + 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 com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() { + return PARSER; + } - 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); - } - - 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; - } + @java.lang.Override + public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } } - public interface EditedKpiDescriptorOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.EditedKpiDescriptor) + 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(); - /** - * <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> - getKpiIdListList(); - /** - * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> - */ - monitoring.Monitoring.KpiId getKpiIdList(int index); + monitoring.Monitoring.KpiId getKpiId(int index); /** - * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> */ - int getKpiIdListCount(); + int getKpiIdCount(); /** - * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> */ java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> - getKpiIdListOrBuilderList(); + getKpiIdOrBuilderList(); /** - * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> */ - monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder( + monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder( int index); /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code> - * @return The enum numeric value on the wire for kpiSampleType. - */ - int getKpiSampleTypeValue(); - /** - * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code> - * @return The kpiSampleType. + * <code>float monitoring_window_s = 2;</code> + * @return The monitoringWindowS. */ - kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType(); + float getMonitoringWindowS(); /** - * <code>.context.DeviceId device_id = 5;</code> - * @return Whether the deviceId field is set. - */ - boolean hasDeviceId(); - /** - * <code>.context.DeviceId device_id = 5;</code> - * @return The deviceId. - */ - context.ContextOuterClass.DeviceId getDeviceId(); - /** - * <code>.context.DeviceId device_id = 5;</code> + * <code>float sampling_rate_s = 3;</code> + * @return The samplingRateS. */ - context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder(); + float getSamplingRateS(); /** - * <code>.context.EndPointId endpoint_id = 6;</code> - * @return Whether the endpointId field is set. - */ - boolean hasEndpointId(); - /** - * <code>.context.EndPointId endpoint_id = 6;</code> - * @return The endpointId. - */ - context.ContextOuterClass.EndPointId getEndpointId(); - /** - * <code>.context.EndPointId endpoint_id = 6;</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.EndPointIdOrBuilder getEndpointIdOrBuilder(); + int getLastNSamples(); /** - * <code>.context.ServiceId service_id = 7;</code> - * @return Whether the serviceId field is set. + * <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 hasServiceId(); + boolean hasStartTimestamp(); /** - * <code>.context.ServiceId service_id = 7;</code> - * @return The serviceId. + * <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. */ - context.ContextOuterClass.ServiceId getServiceId(); + context.ContextOuterClass.Timestamp getStartTimestamp(); /** - * <code>.context.ServiceId service_id = 7;</code> + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> */ - context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder(); + context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder(); /** - * <code>.context.SliceId slice_id = 8;</code> - * @return Whether the sliceId field is set. + * <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. */ - boolean hasSliceId(); + boolean hasEndTimestamp(); /** - * <code>.context.SliceId slice_id = 8;</code> - * @return The sliceId. + * <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. */ - context.ContextOuterClass.SliceId getSliceId(); + context.ContextOuterClass.Timestamp getEndTimestamp(); /** - * <code>.context.SliceId slice_id = 8;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ - context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder(); + context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder(); } /** - * Protobuf type {@code monitoring.EditedKpiDescriptor} + * Protobuf type {@code monitoring.KpiQuery} */ - public static final class EditedKpiDescriptor extends + public static final class KpiQuery extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.EditedKpiDescriptor) - EditedKpiDescriptorOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.KpiQuery) + KpiQueryOrBuilder { private static final long serialVersionUID = 0L; - // Use EditedKpiDescriptor.newBuilder() to construct. - private EditedKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use KpiQuery.newBuilder() to construct. + private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private EditedKpiDescriptor() { - kpiDescription_ = ""; - kpiIdList_ = java.util.Collections.emptyList(); - kpiSampleType_ = 0; + private KpiQuery() { + kpiId_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new EditedKpiDescriptor(); + return new KpiQuery(); } @java.lang.Override @@ -3519,7 +2996,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private EditedKpiDescriptor( + private KpiQuery( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -3539,87 +3016,51 @@ 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>(); + kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(); mutable_bitField0_ |= 0x00000001; } - kpiIdList_.add( + kpiId_.add( input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry)); break; } - case 32: { - int rawValue = input.readEnum(); + case 21: { - kpiSampleType_ = rawValue; + monitoringWindowS_ = input.readFloat(); break; } - 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(); - } + case 29: { + samplingRateS_ = input.readFloat(); break; } - 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(); - } + case 32: { + lastNSamples_ = input.readUInt32(); break; } - case 58: { - context.ContextOuterClass.ServiceId.Builder subBuilder = null; - if (serviceId_ != null) { - subBuilder = serviceId_.toBuilder(); + case 42: { + context.ContextOuterClass.Timestamp.Builder subBuilder = null; + if (startTimestamp_ != null) { + subBuilder = startTimestamp_.toBuilder(); } - serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry); + startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry); if (subBuilder != null) { - subBuilder.mergeFrom(serviceId_); - serviceId_ = subBuilder.buildPartial(); + subBuilder.mergeFrom(startTimestamp_); + startTimestamp_ = subBuilder.buildPartial(); } break; } - case 66: { - context.ContextOuterClass.SliceId.Builder subBuilder = null; - if (sliceId_ != null) { - subBuilder = sliceId_.toBuilder(); + case 50: { + context.ContextOuterClass.Timestamp.Builder subBuilder = null; + if (endTimestamp_ != null) { + subBuilder = endTimestamp_.toBuilder(); } - sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry); + endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry); if (subBuilder != null) { - subBuilder.mergeFrom(sliceId_); - sliceId_ = subBuilder.buildPartial(); + subBuilder.mergeFrom(endTimestamp_); + endTimestamp_ = subBuilder.buildPartial(); } break; @@ -3640,7 +3081,7 @@ public final class Monitoring { e).setUnfinishedMessage(this); } finally { if (((mutable_bitField0_ & 0x00000001) != 0)) { - kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_); + kpiId_ = java.util.Collections.unmodifiableList(kpiId_); } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); @@ -3648,242 +3089,168 @@ public final class Monitoring { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_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_EditedKpiDescriptor_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.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(); } - - public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2; - private volatile java.lang.Object kpiDescription_; /** - * <code>string kpi_description = 2;</code> - * @return The kpiDescription. + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> */ @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; - } + public monitoring.Monitoring.KpiId getKpiId(int index) { + return kpiId_.get(index); } /** - * <code>string kpi_description = 2;</code> - * @return The bytes for kpiDescription. + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> */ @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( + public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder( 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; + return kpiId_.get(index); } - 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_; - } + public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2; + private float monitoringWindowS_; /** - * <code>.context.DeviceId device_id = 5;</code> + * <code>float monitoring_window_s = 2;</code> + * @return The monitoringWindowS. */ @java.lang.Override - public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() { - return getDeviceId(); + public float getMonitoringWindowS() { + return monitoringWindowS_; } - 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; - } + public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3; + private float samplingRateS_; /** - * <code>.context.EndPointId endpoint_id = 6;</code> - * @return The endpointId. + * <code>float sampling_rate_s = 3;</code> + * @return The samplingRateS. */ @java.lang.Override - public context.ContextOuterClass.EndPointId getEndpointId() { - return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_; + public float getSamplingRateS() { + return samplingRateS_; } + + public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4; + private int lastNSamples_; /** - * <code>.context.EndPointId endpoint_id = 6;</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.EndPointIdOrBuilder getEndpointIdOrBuilder() { - return getEndpointId(); + public int getLastNSamples() { + return lastNSamples_; } - public static final int SERVICE_ID_FIELD_NUMBER = 7; - private context.ContextOuterClass.ServiceId serviceId_; + public static final int START_TIMESTAMP_FIELD_NUMBER = 5; + private context.ContextOuterClass.Timestamp startTimestamp_; /** - * <code>.context.ServiceId service_id = 7;</code> - * @return Whether the serviceId field is set. + * <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 hasServiceId() { - return serviceId_ != null; + public boolean hasStartTimestamp() { + return startTimestamp_ != null; } /** - * <code>.context.ServiceId service_id = 7;</code> - * @return The serviceId. + * <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.ServiceId getServiceId() { - return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_; + public context.ContextOuterClass.Timestamp getStartTimestamp() { + return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_; } /** - * <code>.context.ServiceId service_id = 7;</code> + * <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.ServiceIdOrBuilder getServiceIdOrBuilder() { - return getServiceId(); + public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() { + return getStartTimestamp(); } - public static final int SLICE_ID_FIELD_NUMBER = 8; - private context.ContextOuterClass.SliceId sliceId_; + public static final int END_TIMESTAMP_FIELD_NUMBER = 6; + private context.ContextOuterClass.Timestamp endTimestamp_; /** - * <code>.context.SliceId slice_id = 8;</code> - * @return Whether the sliceId field is set. + * <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 hasSliceId() { - return sliceId_ != null; + public boolean hasEndTimestamp() { + return endTimestamp_ != null; } /** - * <code>.context.SliceId slice_id = 8;</code> - * @return The sliceId. + * <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.SliceId getSliceId() { - return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_; + public context.ContextOuterClass.Timestamp getEndTimestamp() { + return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_; } /** - * <code>.context.SliceId slice_id = 8;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ @java.lang.Override - public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() { - return getSliceId(); + public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() { + return getEndTimestamp(); } private byte memoizedIsInitialized = -1; @@ -3894,3670 +3261,1729 @@ public final class Monitoring { 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 (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 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); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(monitoring.Monitoring.EditedKpiDescriptor 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.EditedKpiDescriptor} - */ - 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; - } - - @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); - } - - // Construct using monitoring.Monitoring.EditedKpiDescriptor.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - 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) { - 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_EditedKpiDescriptor_descriptor; - } - - @java.lang.Override - public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() { - return monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance(); - } - - @java.lang.Override - public monitoring.Monitoring.EditedKpiDescriptor build() { - monitoring.Monitoring.EditedKpiDescriptor result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @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; - } - - @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.EditedKpiDescriptor) { - return mergeFrom((monitoring.Monitoring.EditedKpiDescriptor)other); - } else { - super.mergeFrom(other); - return this; - } - } - - 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; - } - - @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.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; - } - 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> - * @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 { - return (java.lang.String) ref; - } - } - /** - * <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; - } - - 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>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 { - kpiIdListBuilder_.setMessage(index, builderForValue.build()); - } - 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 { - kpiIdListBuilder_.addMessage(value); - } - return this; - } - /** - * <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(); - } - ensureKpiIdListIsMutable(); - kpiIdList_.add(index, value); - onChanged(); - } else { - kpiIdListBuilder_.addMessage(index, value); - } - 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 { - kpiIdListBuilder_.addMessage(builderForValue.build()); - } - 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 { - kpiIdListBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <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 { - kpiIdListBuilder_.addAllMessages(values); - } - return this; - } - /** - * <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 { - kpiIdListBuilder_.clear(); - } - 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); - } - 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> - */ - 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 = 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()); - } - /** - * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code> - */ - public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder( - int index) { - return getKpiIdListFieldBuilder().addBuilder( - index, monitoring.Monitoring.KpiId.getDefaultInstance()); - } - /** - * <code>repeated .monitoring.KpiId kpi_id_list = 3;</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), - getParentForChildren(), - isClean()); - kpiIdList_ = null; - } - return kpiIdListBuilder_; - } - - private int kpiSampleType_ = 0; - /** - * <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> - * @param value The enum numeric value on the wire for kpiSampleType to set. - * @return This builder for chaining. - */ - public Builder setKpiSampleTypeValue(int value) { - - kpiSampleType_ = value; - onChanged(); - return this; - } - /** - * <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; - } - /** - * <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> - */ - 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 = 5;</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); - } - - return this; - } - /** - * <code>.context.DeviceId device_id = 5;</code> - */ - public Builder clearDeviceId() { - if (deviceIdBuilder_ == null) { - deviceId_ = null; - onChanged(); - } else { - deviceId_ = null; - deviceIdBuilder_ = null; - } - - return this; - } - /** - * <code>.context.DeviceId device_id = 5;</code> - */ - public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() { - - onChanged(); - return getDeviceIdFieldBuilder().getBuilder(); - } - /** - * <code>.context.DeviceId device_id = 5;</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 = 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()); - deviceId_ = null; - } - return deviceIdBuilder_; - } - - 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 = 6;</code> - * @return Whether the endpointId field is set. - */ - public boolean hasEndpointId() { - return endpointIdBuilder_ != null || endpointId_ != null; - } - /** - * <code>.context.EndPointId endpoint_id = 6;</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 = 6;</code> - */ - 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; - } - /** - * <code>.context.EndPointId endpoint_id = 6;</code> - */ - public Builder setEndpointId( - context.ContextOuterClass.EndPointId.Builder builderForValue) { - if (endpointIdBuilder_ == null) { - endpointId_ = builderForValue.build(); - onChanged(); - } else { - endpointIdBuilder_.setMessage(builderForValue.build()); - } - - return this; - } - /** - * <code>.context.EndPointId endpoint_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(); - } else { - endpointId_ = value; - } - onChanged(); - } else { - endpointIdBuilder_.mergeFrom(value); - } - - return this; - } - /** - * <code>.context.EndPointId endpoint_id = 6;</code> - */ - public Builder clearEndpointId() { - if (endpointIdBuilder_ == null) { - endpointId_ = null; - onChanged(); - } else { - endpointId_ = null; - endpointIdBuilder_ = null; - } - - return this; - } - /** - * <code>.context.EndPointId endpoint_id = 6;</code> - */ - public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() { - - onChanged(); - return getEndpointIdFieldBuilder().getBuilder(); - } - /** - * <code>.context.EndPointId endpoint_id = 6;</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 = 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(), - 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 = 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); - } - - - // @@protoc_insertion_point(builder_scope:monitoring.EditedKpiDescriptor) - } - - // @@protoc_insertion_point(class_scope:monitoring.EditedKpiDescriptor) - private static final monitoring.Monitoring.EditedKpiDescriptor DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new monitoring.Monitoring.EditedKpiDescriptor(); - } - - public static monitoring.Monitoring.EditedKpiDescriptor getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser<EditedKpiDescriptor> - PARSER = new com.google.protobuf.AbstractParser<EditedKpiDescriptor>() { - @java.lang.Override - public EditedKpiDescriptor parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new EditedKpiDescriptor(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<EditedKpiDescriptor> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<EditedKpiDescriptor> getParserForType() { - return PARSER; - } - - @java.lang.Override - public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface MonitorKpiRequestOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest) - 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>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.MonitorKpiRequest} - */ - public static final class MonitorKpiRequest extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest) - MonitorKpiRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use MonitorKpiRequest.newBuilder() to construct. - private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private MonitorKpiRequest() { - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new MonitorKpiRequest(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private MonitorKpiRequest( - 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: { - 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 21: { - - monitoringWindowS_ = input.readFloat(); - break; - } - case 29: { - - samplingRateS_ = input.readFloat(); - 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 monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.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 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() { - 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 (kpiId_ != null) { - output.writeMessage(1, getKpiId()); - } - if (monitoringWindowS_ != 0F) { - output.writeFloat(2, monitoringWindowS_); - } - if (samplingRateS_ != 0F) { - output.writeFloat(3, samplingRateS_); - } - 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 (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; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) { - return super.equals(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; - } - - @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) + 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( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - 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.MonitorKpiRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - 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.MonitorKpiRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - 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.MonitorKpiRequest parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - 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.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - 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.MonitorKpiRequest parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static monitoring.Monitoring.MonitorKpiRequest 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.MonitorKpiRequest 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.MonitorKpiRequest} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@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_MonitorKpiRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class); - } - - // Construct using monitoring.Monitoring.MonitorKpiRequest.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 (kpiIdBuilder_ == null) { - kpiId_ = null; - } else { - 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_MonitorKpiRequest_descriptor; - } - - @java.lang.Override - public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() { - return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance(); - } - - @java.lang.Override - public monitoring.Monitoring.MonitorKpiRequest build() { - monitoring.Monitoring.MonitorKpiRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - 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; - } - - @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.MonitorKpiRequest) { - return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)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()); - } - if (other.getMonitoringWindowS() != 0F) { - setMonitoringWindowS(other.getMonitoringWindowS()); - } - if (other.getSamplingRateS() != 0F) { - setSamplingRateS(other.getSamplingRateS()); - } - 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.MonitorKpiRequest parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - 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 = 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_; - } + return true; + } - private float monitoringWindowS_ ; - /** - * <code>float monitoring_window_s = 2;</code> - * @return The monitoringWindowS. - */ - @java.lang.Override - public float getMonitoringWindowS() { - return monitoringWindowS_; + @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)); } - /** - * <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; + if (monitoringWindowS_ != 0F) { + output.writeFloat(2, monitoringWindowS_); } - /** - * <code>float monitoring_window_s = 2;</code> - * @return This builder for chaining. - */ - public Builder clearMonitoringWindowS() { - - monitoringWindowS_ = 0F; - onChanged(); - return this; + if (samplingRateS_ != 0F) { + output.writeFloat(3, samplingRateS_); + } + if (lastNSamples_ != 0) { + output.writeUInt32(4, lastNSamples_); + } + if (startTimestamp_ != null) { + output.writeMessage(5, getStartTimestamp()); } + if (endTimestamp_ != null) { + output.writeMessage(6, getEndTimestamp()); + } + unknownFields.writeTo(output); + } - 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_; + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < kpiId_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, kpiId_.get(i)); } - /** - * <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; + if (monitoringWindowS_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(2, monitoringWindowS_); } - /** - * <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; + if (samplingRateS_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(3, samplingRateS_); } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + if (lastNSamples_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, lastNSamples_); } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + if (startTimestamp_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, getStartTimestamp()); } + if (endTimestamp_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, getEndTimestamp()); + } + 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); + } + monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj; - // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest) + 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; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; } - // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest) - private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest(); + @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(); + } + 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(); + } + if (hasEndTimestamp()) { + hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getEndTimestamp().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; } - public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() { - return DEFAULT_INSTANCE; + 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); } - 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); - } - }; - - public static com.google.protobuf.Parser<MonitorKpiRequest> parser() { - return PARSER; + @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 com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() { - return PARSER; + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); } @java.lang.Override - public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() { - return DEFAULT_INSTANCE; + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; } - - } - - public interface KpiQueryOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery) - com.google.protobuf.MessageOrBuilder { - - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - java.util.List<monitoring.Monitoring.KpiId> - getKpiIdList(); - /** - * <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> - */ - java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> - getKpiIdOrBuilderList(); - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> + * Protobuf type {@code monitoring.KpiQuery} */ - monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder( - int index); + 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>float monitoring_window_s = 2;</code> - * @return The monitoringWindowS. - */ - float getMonitoringWindowS(); + @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); + } - /** - * <code>float sampling_rate_s = 3;</code> - * @return The samplingRateS. - */ - float getSamplingRateS(); + // Construct using monitoring.Monitoring.KpiQuery.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } - /** - * <pre> - * used when you want something like "get the last N many samples - * </pre> - * - * <code>uint32 last_n_samples = 4;</code> - * @return The lastNSamples. - */ - int getLastNSamples(); + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getKpiIdFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (kpiIdBuilder_ == null) { + kpiId_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + kpiIdBuilder_.clear(); + } + monitoringWindowS_ = 0F; - /** - * <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.String getStartDate(); - /** - * <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. - */ - com.google.protobuf.ByteString - getStartDateBytes(); + samplingRateS_ = 0F; - /** - * <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.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.KpiQuery} - */ - public static final class KpiQuery extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.KpiQuery) - KpiQueryOrBuilder { - private static final long serialVersionUID = 0L; - // Use KpiQuery.newBuilder() to construct. - private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private KpiQuery() { - kpiId_ = java.util.Collections.emptyList(); - startDate_ = ""; - endDate_ = ""; - } + lastNSamples_ = 0; - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new KpiQuery(); - } + 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 final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private KpiQuery( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor; } - 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)) { - 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 29: { + @java.lang.Override + public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() { + return monitoring.Monitoring.KpiQuery.getDefaultInstance(); + } - samplingRateS_ = input.readFloat(); - break; - } - case 32: { + @java.lang.Override + public monitoring.Monitoring.KpiQuery build() { + monitoring.Monitoring.KpiQuery result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } - lastNSamples_ = input.readUInt32(); - break; - } - case 42: { - java.lang.String s = input.readStringRequireUtf8(); + @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); + } + result.kpiId_ = kpiId_; + } else { + result.kpiId_ = kpiIdBuilder_.build(); + } + result.monitoringWindowS_ = monitoringWindowS_; + result.samplingRateS_ = samplingRateS_; + result.lastNSamples_ = lastNSamples_; + 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; + } - startDate_ = s; - break; - } - case 50: { - java.lang.String s = input.readStringRequireUtf8(); + @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.KpiQuery) { + return mergeFrom((monitoring.Monitoring.KpiQuery)other); + } else { + super.mergeFrom(other); + return this; + } + } - endDate_ = s; - break; + 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_); } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; + 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_); } } } - } 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)) { - kpiId_ = java.util.Collections.unmodifiableList(kpiId_); + if (other.getMonitoringWindowS() != 0F) { + setMonitoringWindowS(other.getMonitoringWindowS()); } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); + if (other.getSamplingRateS() != 0F) { + setSamplingRateS(other.getSamplingRateS()); + } + if (other.getLastNSamples() != 0) { + setLastNSamples(other.getLastNSamples()); + } + if (other.hasStartTimestamp()) { + mergeStartTimestamp(other.getStartTimestamp()); + } + if (other.hasEndTimestamp()) { + mergeEndTimestamp(other.getEndTimestamp()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor; - } - - @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); - } - - public static final int KPI_ID_FIELD_NUMBER = 1; - private java.util.List<monitoring.Monitoring.KpiId> kpiId_; - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - @java.lang.Override - public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() { - return kpiId_; - } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - @java.lang.Override - public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> - getKpiIdOrBuilderList() { - return kpiId_; - } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - @java.lang.Override - 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 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_; - /** - * <code>float sampling_rate_s = 3;</code> - * @return The samplingRateS. - */ - @java.lang.Override - public float getSamplingRateS() { - return samplingRateS_; - } - - 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 final int START_DATE_FIELD_NUMBER = 5; - private volatile java.lang.Object startDate_; - /** - * <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 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; - } - } - /** - * <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 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; + @java.lang.Override + public final boolean isInitialized() { + return true; } - } - public static final int END_DATE_FIELD_NUMBER = 6; - private volatile java.lang.Object endDate_; - /** - * <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 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; + @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); + } + } + return this; } - } + private int bitField0_; - 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; - } + private com.google.protobuf.RepeatedFieldBuilderV3< + monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_; - @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)); + /** + * <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(); + } } - if (monitoringWindowS_ != 0F) { - output.writeFloat(2, monitoringWindowS_); + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> + */ + public int getKpiIdCount() { + if (kpiIdBuilder_ == null) { + return kpiId_.size(); + } else { + return kpiIdBuilder_.getCount(); + } } - if (samplingRateS_ != 0F) { - output.writeFloat(3, samplingRateS_); + /** + * <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); + } } - if (lastNSamples_ != 0) { - output.writeUInt32(4, lastNSamples_); + /** + * <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; } - if (!getStartDateBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, startDate_); + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</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; } - if (!getEndDateBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 6, endDate_); + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</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; } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < kpiId_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, kpiId_.get(i)); + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</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; } - if (monitoringWindowS_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(2, monitoringWindowS_); + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> + */ + public Builder addKpiId( + monitoring.Monitoring.KpiId.Builder builderForValue) { + if (kpiIdBuilder_ == null) { + ensureKpiIdIsMutable(); + kpiId_.add(builderForValue.build()); + onChanged(); + } else { + kpiIdBuilder_.addMessage(builderForValue.build()); + } + return this; } - if (samplingRateS_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(3, samplingRateS_); + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> + */ + public Builder addKpiId( + int index, monitoring.Monitoring.KpiId.Builder builderForValue) { + if (kpiIdBuilder_ == null) { + ensureKpiIdIsMutable(); + kpiId_.add(index, builderForValue.build()); + onChanged(); + } else { + kpiIdBuilder_.addMessage(index, builderForValue.build()); + } + return this; } - if (lastNSamples_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(4, lastNSamples_); + /** + * <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_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + kpiIdBuilder_.clear(); + } + return this; + } + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> + */ + public Builder removeKpiId(int index) { + if (kpiIdBuilder_ == null) { + ensureKpiIdIsMutable(); + kpiId_.remove(index); + onChanged(); + } else { + kpiIdBuilder_.remove(index); + } + 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> + */ + public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> + getKpiIdOrBuilderList() { + if (kpiIdBuilder_ != null) { + return kpiIdBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(kpiId_); + } + } + /** + * <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> + */ + public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder( + int index) { + return getKpiIdFieldBuilder().addBuilder( + index, monitoring.Monitoring.KpiId.getDefaultInstance()); } - if (!getStartDateBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, startDate_); + /** + * <code>repeated .monitoring.KpiId kpi_id = 1;</code> + */ + public java.util.List<monitoring.Monitoring.KpiId.Builder> + getKpiIdBuilderList() { + return getKpiIdFieldBuilder().getBuilderList(); } - if (!getEndDateBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, endDate_); + 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; + } + return kpiIdBuilder_; } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; + private float monitoringWindowS_ ; + /** + * <code>float monitoring_window_s = 2;</code> + * @return The monitoringWindowS. + */ + @java.lang.Override + public float getMonitoringWindowS() { + return monitoringWindowS_; } - if (!(obj instanceof monitoring.Monitoring.KpiQuery)) { - return super.equals(obj); + /** + * <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; } - 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 (!getStartDate() - .equals(other.getStartDate())) return false; - if (!getEndDate() - .equals(other.getEndDate())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; + private float samplingRateS_ ; + /** + * <code>float sampling_rate_s = 3;</code> + * @return The samplingRateS. + */ + @java.lang.Override + public float getSamplingRateS() { + return samplingRateS_; } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getKpiIdCount() > 0) { - hash = (37 * hash) + KPI_ID_FIELD_NUMBER; - hash = (53 * hash) + getKpiIdList().hashCode(); + /** + * <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; } - 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.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>float sampling_rate_s = 3;</code> + * @return This builder for chaining. + */ + public Builder clearSamplingRateS() { + + samplingRateS_ = 0F; + onChanged(); + 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. + */ @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); + public int getLastNSamples() { + return lastNSamples_; } - - // Construct using monitoring.Monitoring.KpiQuery.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); + /** + * <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; + } + /** + * <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 Builder clearLastNSamples() { + + lastNSamples_ = 0; + onChanged(); + return this; } - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); + 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. + */ + public boolean hasStartTimestamp() { + return startTimestampBuilder_ != null || startTimestamp_ != null; } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getKpiIdFieldBuilder(); + /** + * <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. + */ + public context.ContextOuterClass.Timestamp getStartTimestamp() { + if (startTimestampBuilder_ == null) { + return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_; + } else { + return startTimestampBuilder_.getMessage(); } } - @java.lang.Override - public Builder clear() { - super.clear(); - if (kpiIdBuilder_ == null) { - kpiId_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); + /** + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> + */ + public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) { + if (startTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + startTimestamp_ = value; + onChanged(); } else { - kpiIdBuilder_.clear(); + startTimestampBuilder_.setMessage(value); } - 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_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); + /** + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> + */ + public Builder setStartTimestamp( + context.ContextOuterClass.Timestamp.Builder builderForValue) { + if (startTimestampBuilder_ == null) { + startTimestamp_ = builderForValue.build(); + onChanged(); + } else { + startTimestampBuilder_.setMessage(builderForValue.build()); } - 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); + 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 Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) { + if (startTimestampBuilder_ == null) { + if (startTimestamp_ != null) { + startTimestamp_ = + context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial(); + } else { + startTimestamp_ = value; } - result.kpiId_ = kpiId_; + onChanged(); } else { - result.kpiId_ = kpiIdBuilder_.build(); + startTimestampBuilder_.mergeFrom(value); } - result.monitoringWindowS_ = monitoringWindowS_; - result.samplingRateS_ = samplingRateS_; - result.lastNSamples_ = lastNSamples_; - result.startDate_ = startDate_; - result.endDate_ = endDate_; - onBuilt(); - return result; - } - @java.lang.Override - public Builder clone() { - return super.clone(); + return this; } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); + /** + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> + */ + public Builder clearStartTimestamp() { + if (startTimestampBuilder_ == null) { + startTimestamp_ = null; + onChanged(); + } else { + startTimestamp_ = null; + startTimestampBuilder_ = null; + } + + return this; } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); + /** + * <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(); } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); + /** + * <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_; + } } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); + /** + * <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_; } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); + + 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; } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof monitoring.Monitoring.KpiQuery) { - return mergeFrom((monitoring.Monitoring.KpiQuery)other); + /** + * <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. + */ + public context.ContextOuterClass.Timestamp getEndTimestamp() { + if (endTimestampBuilder_ == null) { + return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_; } else { - super.mergeFrom(other); - return this; + return endTimestampBuilder_.getMessage(); } } - - 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(); + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> + */ + public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) { + if (endTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); } + endTimestamp_ = value; + 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()); + endTimestampBuilder_.setMessage(value); } - if (other.getSamplingRateS() != 0F) { - setSamplingRateS(other.getSamplingRateS()); - } - if (other.getLastNSamples() != 0) { - setLastNSamples(other.getLastNSamples()); + + return this; + } + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> + */ + public Builder setEndTimestamp( + context.ContextOuterClass.Timestamp.Builder builderForValue) { + if (endTimestampBuilder_ == null) { + endTimestamp_ = builderForValue.build(); + onChanged(); + } else { + endTimestampBuilder_.setMessage(builderForValue.build()); } - if (!other.getStartDate().isEmpty()) { - startDate_ = other.startDate_; + + return this; + } + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</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; + } onChanged(); + } else { + endTimestampBuilder_.mergeFrom(value); } - if (!other.getEndDate().isEmpty()) { - endDate_ = other.endDate_; + + return this; + } + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> + */ + public Builder clearEndTimestamp() { + if (endTimestampBuilder_ == null) { + endTimestamp_ = null; onChanged(); + } else { + endTimestamp_ = null; + endTimestampBuilder_ = null; } - this.mergeUnknownFields(other.unknownFields); - onChanged(); + return this; } + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> + */ + public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() { + + onChanged(); + return getEndTimestampFieldBuilder().getBuilder(); + } + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> + */ + public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() { + if (endTimestampBuilder_ != null) { + return endTimestampBuilder_.getMessageOrBuilder(); + } else { + return endTimestamp_ == null ? + context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_; + } + } + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</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(), + getParentForChildren(), + isClean()); + endTimestamp_ = null; + } + return endTimestampBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } @java.lang.Override - public final boolean isInitialized() { - return true; + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); } + + // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery) + } + + // @@protoc_insertion_point(class_scope:monitoring.KpiQuery) + private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery(); + } + + public static monitoring.Monitoring.KpiQuery getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<KpiQuery> + PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() { @java.lang.Override - public Builder mergeFrom( + public KpiQuery parsePartialFrom( 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); + throws com.google.protobuf.InvalidProtocolBufferException { + return new KpiQuery(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser<KpiQuery> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<KpiQuery> getParserForType() { + return PARSER; + } + + @java.lang.Override + public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface KpiIdOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.KpiId) + com.google.protobuf.MessageOrBuilder { + + /** + * <code>.context.Uuid kpi_id = 1;</code> + * @return Whether the kpiId field is set. + */ + boolean hasKpiId(); + /** + * <code>.context.Uuid kpi_id = 1;</code> + * @return The kpiId. + */ + context.ContextOuterClass.Uuid getKpiId(); + /** + * <code>.context.Uuid kpi_id = 1;</code> + */ + context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder(); + } + /** + * Protobuf type {@code monitoring.KpiId} + */ + public static final class KpiId extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:monitoring.KpiId) + KpiIdOrBuilder { + private static final long serialVersionUID = 0L; + // Use KpiId.newBuilder() to construct. + private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + super(builder); + } + private KpiId() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new KpiId(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private KpiId( + 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: { + context.ContextOuterClass.Uuid.Builder subBuilder = null; + if (kpiId_ != null) { + subBuilder = kpiId_.toBuilder(); + } + kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(kpiId_); + kpiId_ = subBuilder.buildPartial(); + } + + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } } } - return this; + } 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(); } - private int bitField0_; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor; + } - 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; - } + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable + .ensureFieldAccessorsInitialized( + monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class); + } + + public static final int KPI_ID_FIELD_NUMBER = 1; + private context.ContextOuterClass.Uuid kpiId_; + /** + * <code>.context.Uuid kpi_id = 1;</code> + * @return Whether the kpiId field is set. + */ + @java.lang.Override + public boolean hasKpiId() { + return kpiId_ != null; + } + /** + * <code>.context.Uuid kpi_id = 1;</code> + * @return The kpiId. + */ + @java.lang.Override + public context.ContextOuterClass.Uuid getKpiId() { + return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_; + } + /** + * <code>.context.Uuid kpi_id = 1;</code> + */ + @java.lang.Override + public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() { + return getKpiId(); + } + + 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 (kpiId_ != null) { + output.writeMessage(1, getKpiId()); } + 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 = 1;</code> - */ - public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() { - if (kpiIdBuilder_ == null) { - return java.util.Collections.unmodifiableList(kpiId_); - } else { - return kpiIdBuilder_.getMessageList(); - } + size = 0; + if (kpiId_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getKpiId()); } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</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 = 1;</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.KpiId)) { + return super.equals(obj); } - /** - * <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; + monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj; + + if (hasKpiId() != other.hasKpiId()) return false; + if (hasKpiId()) { + if (!getKpiId() + .equals(other.getKpiId())) return false; } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</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; + 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 = 1;</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; + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasKpiId()) { + hash = (37 * hash) + KPI_ID_FIELD_NUMBER; + hash = (53 * hash) + getKpiId().hashCode(); } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</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; + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static monitoring.Monitoring.KpiId parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + 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.KpiId parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + 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.KpiId parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + 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.KpiId parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + 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.KpiId parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + 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.KpiId parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static monitoring.Monitoring.KpiId 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.KpiId 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.KpiId} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements + // @@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_KpiId_descriptor; } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - public Builder addKpiId( - monitoring.Monitoring.KpiId.Builder builderForValue) { - if (kpiIdBuilder_ == null) { - ensureKpiIdIsMutable(); - kpiId_.add(builderForValue.build()); - onChanged(); - } else { - kpiIdBuilder_.addMessage(builderForValue.build()); - } - return this; + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable + .ensureFieldAccessorsInitialized( + monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class); } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - public Builder addKpiId( - int index, monitoring.Monitoring.KpiId.Builder builderForValue) { - if (kpiIdBuilder_ == null) { - ensureKpiIdIsMutable(); - kpiId_.add(index, builderForValue.build()); - onChanged(); - } else { - kpiIdBuilder_.addMessage(index, builderForValue.build()); - } - return this; + + // Construct using monitoring.Monitoring.KpiId.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); } - /** - * <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; + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - public Builder clearKpiId() { - if (kpiIdBuilder_ == null) { - kpiId_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - kpiIdBuilder_.clear(); + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { } - return this; } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - public Builder removeKpiId(int index) { + @java.lang.Override + public Builder clear() { + super.clear(); if (kpiIdBuilder_ == null) { - ensureKpiIdIsMutable(); - kpiId_.remove(index); - onChanged(); + kpiId_ = null; } else { - kpiIdBuilder_.remove(index); + kpiId_ = null; + kpiIdBuilder_ = null; } return this; } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder( - int index) { - return getKpiIdFieldBuilder().getBuilder(index); + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor; } - /** - * <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); - } + + @java.lang.Override + public monitoring.Monitoring.KpiId getDefaultInstanceForType() { + return monitoring.Monitoring.KpiId.getDefaultInstance(); } - /** - * <code>repeated .monitoring.KpiId kpi_id = 1;</code> - */ - public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> - getKpiIdOrBuilderList() { - if (kpiIdBuilder_ != null) { - return kpiIdBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(kpiId_); + + @java.lang.Override + public monitoring.Monitoring.KpiId build() { + monitoring.Monitoring.KpiId result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); } + return result; } - /** - * <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> - */ - 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() { + + @java.lang.Override + public monitoring.Monitoring.KpiId buildPartial() { + monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this); 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; + result.kpiId_ = kpiId_; + } else { + result.kpiId_ = kpiIdBuilder_.build(); } - return kpiIdBuilder_; + onBuilt(); + return result; } - 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; + public Builder clone() { + return super.clone(); } - /** - * <code>float monitoring_window_s = 2;</code> - * @return This builder for chaining. - */ - public Builder clearMonitoringWindowS() { - - monitoringWindowS_ = 0F; - onChanged(); - return this; + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); } - - private float samplingRateS_ ; - /** - * <code>float sampling_rate_s = 3;</code> - * @return The samplingRateS. - */ @java.lang.Override - public float getSamplingRateS() { - return samplingRateS_; + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); } - /** - * <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; + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); } - /** - * <code>float sampling_rate_s = 3;</code> - * @return This builder for chaining. - */ - public Builder clearSamplingRateS() { - - samplingRateS_ = 0F; - onChanged(); - return this; + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); } - - 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 Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); } - /** - * <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; + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof monitoring.Monitoring.KpiId) { + return mergeFrom((monitoring.Monitoring.KpiId)other); + } else { + 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; } - /** - * <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 Builder clearLastNSamples() { - - lastNSamples_ = 0; - onChanged(); + + @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.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 java.lang.Object startDate_ = ""; + private context.ContextOuterClass.Uuid kpiId_; + private com.google.protobuf.SingleFieldBuilderV3< + context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_; /** - * <pre> - * used when you want something like "get the samples since X date/time" - * </pre> - * - * <code>string start_date = 5;</code> - * @return The startDate. + * <code>.context.Uuid kpi_id = 1;</code> + * @return Whether the kpiId field is set. */ - 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 (java.lang.String) ref; - } + public boolean hasKpiId() { + return kpiIdBuilder_ != null || kpiId_ != null; } /** - * <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. + * <code>.context.Uuid kpi_id = 1;</code> + * @return The kpiId. */ - 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; + public context.ContextOuterClass.Uuid getKpiId() { + if (kpiIdBuilder_ == null) { + return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_; } else { - return (com.google.protobuf.ByteString) ref; + return kpiIdBuilder_.getMessage(); } } /** - * <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 Builder setStartDate( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - startDate_ = value; - onChanged(); - return this; - } - /** - * <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. + * <code>.context.Uuid kpi_id = 1;</code> */ - public Builder clearStartDate() { - - startDate_ = getDefaultInstance().getStartDate(); - 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; } /** - * <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. + * <code>.context.Uuid kpi_id = 1;</code> */ - public Builder setStartDateBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - startDate_ = value; - onChanged(); + public Builder setKpiId( + context.ContextOuterClass.Uuid.Builder builderForValue) { + if (kpiIdBuilder_ == null) { + kpiId_ = builderForValue.build(); + onChanged(); + } else { + kpiIdBuilder_.setMessage(builderForValue.build()); + } + return this; } - - private java.lang.Object endDate_ = ""; /** - * <pre> - * used when you want something like "get the samples until X date/time" - * </pre> - * - * <code>string end_date = 6;</code> - * @return The endDate. + * <code>.context.Uuid kpi_id = 1;</code> */ - 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; + 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 { - return (java.lang.String) ref; + kpiIdBuilder_.mergeFrom(value); } + + return this; } /** - * <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. + * <code>.context.Uuid kpi_id = 1;</code> */ - 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; + public Builder clearKpiId() { + if (kpiIdBuilder_ == null) { + kpiId_ = null; + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + kpiId_ = null; + kpiIdBuilder_ = null; } + + return this; } /** - * <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. + * <code>.context.Uuid kpi_id = 1;</code> */ - public Builder setEndDate( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - endDate_ = value; + public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() { + onChanged(); - return this; + return getKpiIdFieldBuilder().getBuilder(); } /** - * <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. + * <code>.context.Uuid kpi_id = 1;</code> */ - public Builder clearEndDate() { - - endDate_ = getDefaultInstance().getEndDate(); - onChanged(); - return this; + public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() { + if (kpiIdBuilder_ != null) { + return kpiIdBuilder_.getMessageOrBuilder(); + } else { + return kpiId_ == null ? + context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_; + } } /** - * <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. + * <code>.context.Uuid kpi_id = 1;</code> */ - public Builder setEndDateBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - endDate_ = value; - 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( @@ -7572,85 +4998,115 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery) + // @@protoc_insertion_point(builder_scope:monitoring.KpiId) } - // @@protoc_insertion_point(class_scope:monitoring.KpiQuery) - private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.KpiId) + private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery(); + DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId(); } - public static monitoring.Monitoring.KpiQuery getDefaultInstance() { + public static monitoring.Monitoring.KpiId 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<KpiId> + PARSER = new com.google.protobuf.AbstractParser<KpiId>() { @java.lang.Override - public KpiQuery parsePartialFrom( + public KpiId parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new KpiQuery(input, extensionRegistry); + return new KpiId(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<KpiQuery> parser() { + public static com.google.protobuf.Parser<KpiId> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<KpiQuery> getParserForType() { + public com.google.protobuf.Parser<KpiId> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() { + public monitoring.Monitoring.KpiId getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface KpiIdOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.KpiId) + public interface KpiOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.Kpi) 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>.context.Timestamp timestamp = 2;</code> + * @return Whether the timestamp field is set. + */ + boolean hasTimestamp(); + /** + * <code>.context.Timestamp timestamp = 2;</code> + * @return The timestamp. + */ + context.ContextOuterClass.Timestamp getTimestamp(); + /** + * <code>.context.Timestamp timestamp = 2;</code> + */ + context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder(); + + /** + * <code>.monitoring.KpiValue kpi_value = 3;</code> + * @return Whether the kpiValue field is set. + */ + boolean hasKpiValue(); + /** + * <code>.monitoring.KpiValue kpi_value = 3;</code> + * @return The kpiValue. + */ + monitoring.Monitoring.KpiValue getKpiValue(); + /** + * <code>.monitoring.KpiValue kpi_value = 3;</code> + */ + monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder(); } /** - * Protobuf type {@code monitoring.KpiId} + * Protobuf type {@code monitoring.Kpi} */ - public static final class KpiId extends + public static final class Kpi extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.KpiId) - KpiIdOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.Kpi) + KpiOrBuilder { private static final long serialVersionUID = 0L; - // Use KpiId.newBuilder() to construct. - private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use Kpi.newBuilder() to construct. + private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private KpiId() { + private Kpi() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new KpiId(); + return new Kpi(); } @java.lang.Override @@ -7658,7 +5114,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private KpiId( + private Kpi( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -7677,11 +5133,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(); @@ -7689,6 +5145,32 @@ public final class Monitoring { 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(); + } + + 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(); + } + + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -7710,21 +5192,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_Kpi_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_Kpi_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class); + monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.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 @@ -7732,21 +5214,73 @@ 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 TIMESTAMP_FIELD_NUMBER = 2; + private context.ContextOuterClass.Timestamp timestamp_; + /** + * <code>.context.Timestamp timestamp = 2;</code> + * @return Whether the timestamp field is set. + */ + @java.lang.Override + public boolean hasTimestamp() { + return timestamp_ != null; + } + /** + * <code>.context.Timestamp timestamp = 2;</code> + * @return The timestamp. + */ + @java.lang.Override + public context.ContextOuterClass.Timestamp getTimestamp() { + return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_; + } + /** + * <code>.context.Timestamp timestamp = 2;</code> + */ + @java.lang.Override + public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() { + return getTimestamp(); + } + + public static final int KPI_VALUE_FIELD_NUMBER = 3; + private monitoring.Monitoring.KpiValue kpiValue_; + /** + * <code>.monitoring.KpiValue kpi_value = 3;</code> + * @return Whether the kpiValue field is set. + */ + @java.lang.Override + public boolean hasKpiValue() { + return kpiValue_ != null; + } + /** + * <code>.monitoring.KpiValue kpi_value = 3;</code> + * @return The kpiValue. + */ + @java.lang.Override + 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; @java.lang.Override public final boolean isInitialized() { @@ -7764,6 +5298,12 @@ public final class Monitoring { if (kpiId_ != null) { output.writeMessage(1, getKpiId()); } + if (timestamp_ != null) { + output.writeMessage(2, getTimestamp()); + } + if (kpiValue_ != null) { + output.writeMessage(3, getKpiValue()); + } unknownFields.writeTo(output); } @@ -7777,6 +5317,14 @@ public final class Monitoring { size += com.google.protobuf.CodedOutputStream .computeMessageSize(1, getKpiId()); } + if (timestamp_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getTimestamp()); + } + if (kpiValue_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getKpiValue()); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -7787,16 +5335,26 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.KpiId)) { + if (!(obj instanceof monitoring.Monitoring.Kpi)) { return super.equals(obj); } - monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj; + monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) 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 (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -7812,74 +5370,82 @@ public final class Monitoring { 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 = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static monitoring.Monitoring.KpiId parseFrom( + public static monitoring.Monitoring.Kpi parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiId 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.KpiId 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.KpiId 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.KpiId parseFrom(byte[] data) + public static monitoring.Monitoring.Kpi parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiId 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.KpiId 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.KpiId 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.KpiId 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.KpiId 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.KpiId 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.KpiId parseFrom( + public static monitoring.Monitoring.Kpi parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -7892,7 +5458,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.Kpi prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -7908,26 +5474,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.KpiId} + * Protobuf type {@code monitoring.Kpi} */ 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.Kpi) + monitoring.Monitoring.KpiOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_KpiId_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_KpiId_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class); + monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class); } - // Construct using monitoring.Monitoring.KpiId.newBuilder() + // Construct using monitoring.Monitoring.Kpi.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -7951,23 +5517,35 @@ public final class Monitoring { kpiId_ = null; kpiIdBuilder_ = null; } + if (timestampBuilder_ == null) { + timestamp_ = null; + } else { + timestamp_ = null; + timestampBuilder_ = null; + } + 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_KpiId_descriptor; + return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor; } @java.lang.Override - public monitoring.Monitoring.KpiId getDefaultInstanceForType() { - return monitoring.Monitoring.KpiId.getDefaultInstance(); + public monitoring.Monitoring.Kpi getDefaultInstanceForType() { + return monitoring.Monitoring.Kpi.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.KpiId build() { - monitoring.Monitoring.KpiId result = buildPartial(); + public monitoring.Monitoring.Kpi build() { + monitoring.Monitoring.Kpi result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -7975,13 +5553,23 @@ public final class Monitoring { } @java.lang.Override - public monitoring.Monitoring.KpiId buildPartial() { - monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this); + 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 (timestampBuilder_ == null) { + result.timestamp_ = timestamp_; + } else { + result.timestamp_ = timestampBuilder_.build(); + } + if (kpiValueBuilder_ == null) { + result.kpiValue_ = kpiValue_; + } else { + result.kpiValue_ = kpiValueBuilder_.build(); + } onBuilt(); return result; } @@ -8020,19 +5608,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.Kpi) { + return mergeFrom((monitoring.Monitoring.Kpi)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.Kpi other) { + if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this; if (other.hasKpiId()) { mergeKpiId(other.getKpiId()); } + if (other.hasTimestamp()) { + mergeTimestamp(other.getTimestamp()); + } + if (other.hasKpiValue()) { + mergeKpiValue(other.getKpiValue()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -8048,11 +5642,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.Kpi parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -8062,31 +5656,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(); @@ -8100,10 +5694,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(); @@ -8114,13 +5708,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; } @@ -8132,7 +5726,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) { @@ -8146,33 +5740,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()); @@ -8180,6 +5774,244 @@ 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_; + /** + * <code>.context.Timestamp timestamp = 2;</code> + * @return Whether the timestamp field is set. + */ + public boolean hasTimestamp() { + return timestampBuilder_ != null || timestamp_ != null; + } + /** + * <code>.context.Timestamp timestamp = 2;</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 = 2;</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 = 2;</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 = 2;</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 = 2;</code> + */ + public Builder clearTimestamp() { + if (timestampBuilder_ == null) { + timestamp_ = null; + onChanged(); + } else { + timestamp_ = null; + timestampBuilder_ = null; + } + + return this; + } + /** + * <code>.context.Timestamp timestamp = 2;</code> + */ + public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() { + + onChanged(); + return getTimestampFieldBuilder().getBuilder(); + } + /** + * <code>.context.Timestamp timestamp = 2;</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 = 2;</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_; + } + + 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. + */ + public boolean hasKpiValue() { + return kpiValueBuilder_ != null || kpiValue_ != null; + } + /** + * <code>.monitoring.KpiValue kpi_value = 3;</code> + * @return The kpiValue. + */ + public monitoring.Monitoring.KpiValue getKpiValue() { + if (kpiValueBuilder_ == null) { + return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_; + } else { + return kpiValueBuilder_.getMessage(); + } + } + /** + * <code>.monitoring.KpiValue kpi_value = 3;</code> + */ + 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>.monitoring.KpiValue kpi_value = 3;</code> + */ + 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) { @@ -8193,113 +6025,130 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.KpiId) + // @@protoc_insertion_point(builder_scope:monitoring.Kpi) } - // @@protoc_insertion_point(class_scope:monitoring.KpiId) - private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.Kpi) + private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId(); + DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi(); } - public static monitoring.Monitoring.KpiId getDefaultInstance() { + public static monitoring.Monitoring.Kpi 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<Kpi> + PARSER = new com.google.protobuf.AbstractParser<Kpi>() { @java.lang.Override - public KpiId parsePartialFrom( + public Kpi parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new KpiId(input, extensionRegistry); + return new Kpi(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<KpiId> parser() { + public static com.google.protobuf.Parser<Kpi> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<KpiId> getParserForType() { + public com.google.protobuf.Parser<Kpi> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.KpiId getDefaultInstanceForType() { + public monitoring.Monitoring.Kpi getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface KpiOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.Kpi) + public interface KpiValueRangeOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange) com.google.protobuf.MessageOrBuilder { /** - * <code>.monitoring.KpiId kpi_id = 1;</code> - * @return Whether the kpiId field is set. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * @return Whether the kpiMinValue field is set. */ - boolean hasKpiId(); + boolean hasKpiMinValue(); /** - * <code>.monitoring.KpiId kpi_id = 1;</code> - * @return The kpiId. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * @return The kpiMinValue. */ - monitoring.Monitoring.KpiId getKpiId(); + monitoring.Monitoring.KpiValue getKpiMinValue(); /** - * <code>.monitoring.KpiId kpi_id = 1;</code> + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(); + monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder(); /** - * <code>string timestamp = 2;</code> - * @return The timestamp. + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * @return Whether the kpiMaxValue field is set. */ - java.lang.String getTimestamp(); + boolean hasKpiMaxValue(); /** - * <code>string timestamp = 2;</code> - * @return The bytes for timestamp. + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * @return The kpiMaxValue. */ - com.google.protobuf.ByteString - getTimestampBytes(); + monitoring.Monitoring.KpiValue getKpiMaxValue(); + /** + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + */ + monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder(); /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> - * @return Whether the kpiValue field is set. + * <pre> + * by default True + * </pre> + * + * <code>bool inRange = 3;</code> + * @return The inRange. */ - boolean hasKpiValue(); + boolean getInRange(); + /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> - * @return The kpiValue. + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMinValue = 4;</code> + * @return The includeMinValue. */ - monitoring.Monitoring.KpiValue getKpiValue(); + boolean getIncludeMinValue(); + /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMaxValue = 5;</code> + * @return The includeMaxValue. */ - monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder(); + boolean getIncludeMaxValue(); } /** - * Protobuf type {@code monitoring.Kpi} + * Protobuf type {@code monitoring.KpiValueRange} */ - public static final class Kpi extends + public static final class KpiValueRange extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.Kpi) - KpiOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange) + KpiValueRangeOrBuilder { private static final long serialVersionUID = 0L; - // Use Kpi.newBuilder() to construct. - private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use KpiValueRange.newBuilder() to construct. + private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private Kpi() { - timestamp_ = ""; + private KpiValueRange() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new Kpi(); + return new KpiValueRange(); } @java.lang.Override @@ -8307,7 +6156,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private Kpi( + private KpiValueRange( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -8326,37 +6175,46 @@ public final class Monitoring { done = true; break; case 10: { - monitoring.Monitoring.KpiId.Builder subBuilder = null; - if (kpiId_ != null) { - subBuilder = kpiId_.toBuilder(); + monitoring.Monitoring.KpiValue.Builder subBuilder = null; + if (kpiMinValue_ != null) { + subBuilder = kpiMinValue_.toBuilder(); } - kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry); + kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry); if (subBuilder != null) { - subBuilder.mergeFrom(kpiId_); - kpiId_ = subBuilder.buildPartial(); + subBuilder.mergeFrom(kpiMinValue_); + kpiMinValue_ = subBuilder.buildPartial(); } break; } case 18: { - java.lang.String s = input.readStringRequireUtf8(); - - timestamp_ = s; - break; - } - case 26: { monitoring.Monitoring.KpiValue.Builder subBuilder = null; - if (kpiValue_ != null) { - subBuilder = kpiValue_.toBuilder(); + if (kpiMaxValue_ != null) { + subBuilder = kpiMaxValue_.toBuilder(); } - kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry); + kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry); if (subBuilder != null) { - subBuilder.mergeFrom(kpiValue_); - kpiValue_ = subBuilder.buildPartial(); + subBuilder.mergeFrom(kpiMaxValue_); + kpiMaxValue_ = 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)) { @@ -8378,105 +6236,112 @@ public final class Monitoring { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_Kpi_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_Kpi_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class); + monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class); } - public static final int KPI_ID_FIELD_NUMBER = 1; - private monitoring.Monitoring.KpiId kpiId_; + public static final int KPIMINVALUE_FIELD_NUMBER = 1; + private monitoring.Monitoring.KpiValue kpiMinValue_; /** - * <code>.monitoring.KpiId kpi_id = 1;</code> - * @return Whether the kpiId field is set. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * @return Whether the kpiMinValue field is set. */ @java.lang.Override - public boolean hasKpiId() { - return kpiId_ != null; + public boolean hasKpiMinValue() { + return kpiMinValue_ != null; } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> - * @return The kpiId. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * @return The kpiMinValue. */ @java.lang.Override - public monitoring.Monitoring.KpiId getKpiId() { - return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; + public monitoring.Monitoring.KpiValue getKpiMinValue() { + return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_; } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ @java.lang.Override - public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() { - return getKpiId(); + public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() { + return getKpiMinValue(); } - public static final int TIMESTAMP_FIELD_NUMBER = 2; - private volatile java.lang.Object timestamp_; + public static final int KPIMAXVALUE_FIELD_NUMBER = 2; + private monitoring.Monitoring.KpiValue kpiMaxValue_; /** - * <code>string timestamp = 2;</code> - * @return The timestamp. + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * @return Whether the kpiMaxValue field is set. */ @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; - } + public boolean hasKpiMaxValue() { + return kpiMaxValue_ != null; } /** - * <code>string timestamp = 2;</code> - * @return The bytes for timestamp. + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * @return The kpiMaxValue. */ @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; - } + 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(); } - public static final int KPI_VALUE_FIELD_NUMBER = 3; - private monitoring.Monitoring.KpiValue kpiValue_; + public static final int INRANGE_FIELD_NUMBER = 3; + private boolean inRange_; /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> - * @return Whether the kpiValue field is set. + * <pre> + * by default True + * </pre> + * + * <code>bool inRange = 3;</code> + * @return The inRange. */ @java.lang.Override - public boolean hasKpiValue() { - return kpiValue_ != null; + public boolean getInRange() { + return inRange_; } + + public static final int INCLUDEMINVALUE_FIELD_NUMBER = 4; + private boolean includeMinValue_; /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> - * @return The kpiValue. + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMinValue = 4;</code> + * @return The includeMinValue. */ @java.lang.Override - public monitoring.Monitoring.KpiValue getKpiValue() { - return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_; + public boolean getIncludeMinValue() { + return includeMinValue_; } + + public static final int INCLUDEMAXVALUE_FIELD_NUMBER = 5; + private boolean includeMaxValue_; /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMaxValue = 5;</code> + * @return The includeMaxValue. */ @java.lang.Override - public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() { - return getKpiValue(); + public boolean getIncludeMaxValue() { + return includeMaxValue_; } private byte memoizedIsInitialized = -1; @@ -8493,14 +6358,20 @@ 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 (kpiMinValue_ != null) { + output.writeMessage(1, getKpiMinValue()); } - if (!getTimestampBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_); + if (kpiMaxValue_ != null) { + output.writeMessage(2, getKpiMaxValue()); } - if (kpiValue_ != null) { - output.writeMessage(3, getKpiValue()); + if (inRange_ != false) { + output.writeBool(3, inRange_); + } + if (includeMinValue_ != false) { + output.writeBool(4, includeMinValue_); + } + if (includeMaxValue_ != false) { + output.writeBool(5, includeMaxValue_); } unknownFields.writeTo(output); } @@ -8511,16 +6382,25 @@ public final class Monitoring { if (size != -1) return size; size = 0; - if (kpiId_ != null) { + if (kpiMinValue_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getKpiId()); + .computeMessageSize(1, getKpiMinValue()); } - if (!getTimestampBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_); + if (kpiMaxValue_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getKpiMaxValue()); } - if (kpiValue_ != null) { + if (inRange_ != false) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, getKpiValue()); + .computeBoolSize(3, inRange_); + } + if (includeMinValue_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, includeMinValue_); + } + if (includeMaxValue_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(5, includeMaxValue_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -8532,23 +6412,27 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.Kpi)) { + if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) { return super.equals(obj); } - monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj; + monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj; - if (hasKpiId() != other.hasKpiId()) return false; - if (hasKpiId()) { - if (!getKpiId() - .equals(other.getKpiId())) return false; + if (hasKpiMinValue() != other.hasKpiMinValue()) return false; + if (hasKpiMinValue()) { + if (!getKpiMinValue() + .equals(other.getKpiMinValue())) 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 (hasKpiMaxValue() != other.hasKpiMaxValue()) return false; + if (hasKpiMaxValue()) { + if (!getKpiMaxValue() + .equals(other.getKpiMaxValue())) 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; } @@ -8560,84 +6444,91 @@ 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(); + if (hasKpiMinValue()) { + hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER; + hash = (53 * hash) + getKpiMinValue().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(); + if (hasKpiMaxValue()) { + hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER; + hash = (53 * hash) + getKpiMaxValue().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.Kpi parseFrom( + public static monitoring.Monitoring.KpiValueRange parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.Kpi 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.Kpi 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.Kpi 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.Kpi parseFrom(byte[] data) + public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.Kpi 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.Kpi 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.Kpi 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.Kpi 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.Kpi 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.Kpi 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.Kpi parseFrom( + public static monitoring.Monitoring.KpiValueRange parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -8650,7 +6541,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.KpiValueRange prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -8666,26 +6557,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.Kpi} + * Protobuf type {@code monitoring.KpiValueRange} */ 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.KpiValueRange) + monitoring.Monitoring.KpiValueRangeOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_Kpi_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_Kpi_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class); + monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class); } - // Construct using monitoring.Monitoring.Kpi.newBuilder() + // Construct using monitoring.Monitoring.KpiValueRange.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -8703,37 +6594,41 @@ public final class Monitoring { @java.lang.Override public Builder clear() { super.clear(); - if (kpiIdBuilder_ == null) { - kpiId_ = null; + if (kpiMinValueBuilder_ == null) { + kpiMinValue_ = null; } else { - kpiId_ = null; - kpiIdBuilder_ = null; + kpiMinValue_ = null; + kpiMinValueBuilder_ = null; } - timestamp_ = ""; - - if (kpiValueBuilder_ == null) { - kpiValue_ = null; + if (kpiMaxValueBuilder_ == null) { + kpiMaxValue_ = null; } else { - kpiValue_ = null; - kpiValueBuilder_ = null; + 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_Kpi_descriptor; + return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor; } @java.lang.Override - public monitoring.Monitoring.Kpi getDefaultInstanceForType() { - return monitoring.Monitoring.Kpi.getDefaultInstance(); + public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() { + return monitoring.Monitoring.KpiValueRange.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.Kpi build() { - monitoring.Monitoring.Kpi result = buildPartial(); + public monitoring.Monitoring.KpiValueRange build() { + monitoring.Monitoring.KpiValueRange result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -8741,19 +6636,21 @@ public final class Monitoring { } @java.lang.Override - public monitoring.Monitoring.Kpi buildPartial() { - monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this); - if (kpiIdBuilder_ == null) { - result.kpiId_ = kpiId_; + public monitoring.Monitoring.KpiValueRange buildPartial() { + monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this); + if (kpiMinValueBuilder_ == null) { + result.kpiMinValue_ = kpiMinValue_; } else { - result.kpiId_ = kpiIdBuilder_.build(); + result.kpiMinValue_ = kpiMinValueBuilder_.build(); } - result.timestamp_ = timestamp_; - if (kpiValueBuilder_ == null) { - result.kpiValue_ = kpiValue_; + if (kpiMaxValueBuilder_ == null) { + result.kpiMaxValue_ = kpiMaxValue_; } else { - result.kpiValue_ = kpiValueBuilder_.build(); + result.kpiMaxValue_ = kpiMaxValueBuilder_.build(); } + result.inRange_ = inRange_; + result.includeMinValue_ = includeMinValue_; + result.includeMaxValue_ = includeMaxValue_; onBuilt(); return result; } @@ -8792,25 +6689,30 @@ 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.KpiValueRange) { + return mergeFrom((monitoring.Monitoring.KpiValueRange)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.KpiValueRange other) { + if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this; + if (other.hasKpiMinValue()) { + mergeKpiMinValue(other.getKpiMinValue()); } - if (!other.getTimestamp().isEmpty()) { - timestamp_ = other.timestamp_; - onChanged(); + if (other.hasKpiMaxValue()) { + mergeKpiMaxValue(other.getKpiMaxValue()); } - if (other.hasKpiValue()) { - mergeKpiValue(other.getKpiValue()); + 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(); @@ -8827,11 +6729,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.KpiValueRange parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -8841,318 +6743,371 @@ public final class Monitoring { return this; } - private monitoring.Monitoring.KpiId kpiId_; + private monitoring.Monitoring.KpiValue kpiMinValue_; private com.google.protobuf.SingleFieldBuilderV3< - monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_; + monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_; /** - * <code>.monitoring.KpiId kpi_id = 1;</code> - * @return Whether the kpiId field is set. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * @return Whether the kpiMinValue field is set. */ - public boolean hasKpiId() { - return kpiIdBuilder_ != null || kpiId_ != null; + public boolean hasKpiMinValue() { + return kpiMinValueBuilder_ != null || kpiMinValue_ != null; } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> - * @return The kpiId. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * @return The kpiMinValue. */ - public monitoring.Monitoring.KpiId getKpiId() { - if (kpiIdBuilder_ == null) { - return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; + public monitoring.Monitoring.KpiValue getKpiMinValue() { + if (kpiMinValueBuilder_ == null) { + return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_; } else { - return kpiIdBuilder_.getMessage(); + return kpiMinValueBuilder_.getMessage(); } } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - public Builder setKpiId(monitoring.Monitoring.KpiId value) { - if (kpiIdBuilder_ == null) { + public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) { + if (kpiMinValueBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - kpiId_ = value; + kpiMinValue_ = value; onChanged(); } else { - kpiIdBuilder_.setMessage(value); + kpiMinValueBuilder_.setMessage(value); } return this; } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - public Builder setKpiId( - monitoring.Monitoring.KpiId.Builder builderForValue) { - if (kpiIdBuilder_ == null) { - kpiId_ = builderForValue.build(); + public Builder setKpiMinValue( + monitoring.Monitoring.KpiValue.Builder builderForValue) { + if (kpiMinValueBuilder_ == null) { + kpiMinValue_ = builderForValue.build(); onChanged(); } else { - kpiIdBuilder_.setMessage(builderForValue.build()); + kpiMinValueBuilder_.setMessage(builderForValue.build()); } return this; } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - public Builder mergeKpiId(monitoring.Monitoring.KpiId value) { - if (kpiIdBuilder_ == null) { - if (kpiId_ != null) { - kpiId_ = - monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial(); + public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) { + if (kpiMinValueBuilder_ == null) { + if (kpiMinValue_ != null) { + kpiMinValue_ = + monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial(); } else { - kpiId_ = value; + kpiMinValue_ = value; } onChanged(); } else { - kpiIdBuilder_.mergeFrom(value); + kpiMinValueBuilder_.mergeFrom(value); } return this; } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - public Builder clearKpiId() { - if (kpiIdBuilder_ == null) { - kpiId_ = null; + public Builder clearKpiMinValue() { + if (kpiMinValueBuilder_ == null) { + kpiMinValue_ = null; onChanged(); } else { - kpiId_ = null; - kpiIdBuilder_ = null; + kpiMinValue_ = null; + kpiMinValueBuilder_ = null; } return this; } /** - * <code>.monitoring.KpiId kpi_id = 1;</code> + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() { + public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() { 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 timestamp_ = ""; - /** - * <code>string timestamp = 2;</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; - } + return getKpiMinValueFieldBuilder().getBuilder(); } /** - * <code>string timestamp = 2;</code> - * @return The bytes for timestamp. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - 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; + public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() { + if (kpiMinValueBuilder_ != null) { + return kpiMinValueBuilder_.getMessageOrBuilder(); } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>string timestamp = 2;</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 = 2;</code> - * @return This builder for chaining. - */ - public Builder clearTimestamp() { - - timestamp_ = getDefaultInstance().getTimestamp(); - onChanged(); - return this; + return kpiMinValue_ == null ? + monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_; + } } /** - * <code>string timestamp = 2;</code> - * @param value The bytes for timestamp to set. - * @return This builder for chaining. + * <code>.monitoring.KpiValue kpiMinValue = 1;</code> */ - public Builder setTimestampBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - timestamp_ = value; - onChanged(); - return this; + 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 kpiValue_; + private monitoring.Monitoring.KpiValue kpiMaxValue_; private com.google.protobuf.SingleFieldBuilderV3< - monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_; + monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_; /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> - * @return Whether the kpiValue field is set. + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * @return Whether the kpiMaxValue field is set. */ - public boolean hasKpiValue() { - return kpiValueBuilder_ != null || kpiValue_ != null; + public boolean hasKpiMaxValue() { + return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null; } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> - * @return The kpiValue. + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * @return The kpiMaxValue. */ - public monitoring.Monitoring.KpiValue getKpiValue() { - if (kpiValueBuilder_ == null) { - return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_; + public monitoring.Monitoring.KpiValue getKpiMaxValue() { + if (kpiMaxValueBuilder_ == null) { + return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_; } else { - return kpiValueBuilder_.getMessage(); + return kpiMaxValueBuilder_.getMessage(); } } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> */ - public Builder setKpiValue(monitoring.Monitoring.KpiValue value) { - if (kpiValueBuilder_ == null) { + public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) { + if (kpiMaxValueBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - kpiValue_ = value; + kpiMaxValue_ = value; onChanged(); } else { - kpiValueBuilder_.setMessage(value); + kpiMaxValueBuilder_.setMessage(value); } return this; } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> */ - public Builder setKpiValue( + public Builder setKpiMaxValue( monitoring.Monitoring.KpiValue.Builder builderForValue) { - if (kpiValueBuilder_ == null) { - kpiValue_ = builderForValue.build(); + if (kpiMaxValueBuilder_ == null) { + kpiMaxValue_ = builderForValue.build(); onChanged(); } else { - kpiValueBuilder_.setMessage(builderForValue.build()); + kpiMaxValueBuilder_.setMessage(builderForValue.build()); } return this; } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> */ - public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) { - if (kpiValueBuilder_ == null) { - if (kpiValue_ != null) { - kpiValue_ = - monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial(); + public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) { + if (kpiMaxValueBuilder_ == null) { + if (kpiMaxValue_ != null) { + kpiMaxValue_ = + monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial(); } else { - kpiValue_ = value; + kpiMaxValue_ = value; } onChanged(); } else { - kpiValueBuilder_.mergeFrom(value); + kpiMaxValueBuilder_.mergeFrom(value); } return this; } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> */ - public Builder clearKpiValue() { - if (kpiValueBuilder_ == null) { - kpiValue_ = null; + public Builder clearKpiMaxValue() { + if (kpiMaxValueBuilder_ == null) { + kpiMaxValue_ = null; onChanged(); } else { - kpiValue_ = null; - kpiValueBuilder_ = null; + kpiMaxValue_ = null; + kpiMaxValueBuilder_ = null; } return this; } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> */ - public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() { + public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() { onChanged(); - return getKpiValueFieldBuilder().getBuilder(); + return getKpiMaxValueFieldBuilder().getBuilder(); } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> */ - public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() { - if (kpiValueBuilder_ != null) { - return kpiValueBuilder_.getMessageOrBuilder(); + public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() { + if (kpiMaxValueBuilder_ != null) { + return kpiMaxValueBuilder_.getMessageOrBuilder(); } else { - return kpiValue_ == null ? - monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_; + return kpiMaxValue_ == null ? + monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_; } } /** - * <code>.monitoring.KpiValue kpi_value = 3;</code> + * <code>.monitoring.KpiValue kpiMaxValue = 2;</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< + getKpiMaxValueFieldBuilder() { + if (kpiMaxValueBuilder_ == null) { + kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>( - getKpiValue(), + getKpiMaxValue(), getParentForChildren(), isClean()); - kpiValue_ = null; + kpiMaxValue_ = null; } - return kpiValueBuilder_; + 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. + */ + public Builder clearInRange() { + + inRange_ = false; + onChanged(); + return this; + } + + private boolean includeMinValue_ ; + /** + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMinValue = 4;</code> + * @return The includeMinValue. + */ + @java.lang.Override + public boolean getIncludeMinValue() { + return includeMinValue_; + } + /** + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMinValue = 4;</code> + * @param value The includeMinValue to set. + * @return This builder for chaining. + */ + public Builder setIncludeMinValue(boolean value) { + + includeMinValue_ = value; + onChanged(); + return this; + } + /** + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMinValue = 4;</code> + * @return This builder for chaining. + */ + public Builder clearIncludeMinValue() { + + includeMinValue_ = false; + onChanged(); + return this; + } + + private boolean includeMaxValue_ ; + /** + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMaxValue = 5;</code> + * @return The includeMaxValue. + */ + @java.lang.Override + public boolean getIncludeMaxValue() { + return includeMaxValue_; + } + /** + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMaxValue = 5;</code> + * @param value The includeMaxValue to set. + * @return This builder for chaining. + */ + public Builder setIncludeMaxValue(boolean value) { + + includeMaxValue_ = value; + onChanged(); + return this; + } + /** + * <pre> + * False is outside the interval + * </pre> + * + * <code>bool includeMaxValue = 5;</code> + * @return This builder for chaining. + */ + public Builder clearIncludeMaxValue() { + + includeMaxValue_ = false; + onChanged(); + return this; } @java.lang.Override public final Builder setUnknownFields( @@ -9167,100 +7122,155 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.Kpi) + // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange) } - // @@protoc_insertion_point(class_scope:monitoring.Kpi) - private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange) + private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi(); + DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange(); } - public static monitoring.Monitoring.Kpi getDefaultInstance() { + public static monitoring.Monitoring.KpiValueRange 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<KpiValueRange> + PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() { @java.lang.Override - public Kpi parsePartialFrom( + public KpiValueRange parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new Kpi(input, extensionRegistry); + return new KpiValueRange(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<Kpi> parser() { + public static com.google.protobuf.Parser<KpiValueRange> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<Kpi> getParserForType() { + public com.google.protobuf.Parser<KpiValueRange> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.Kpi getDefaultInstanceForType() { + public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface KpiValueRangeOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange) + public interface KpiValueOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.KpiValue) com.google.protobuf.MessageOrBuilder { /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> - * @return Whether the kpiMinValue field is set. + * <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. + */ + long getInt64Val(); + + /** + * <code>uint64 uint64Val = 4;</code> + * @return Whether the uint64Val field is set. */ - boolean hasKpiMinValue(); + boolean hasUint64Val(); /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> - * @return The kpiMinValue. + * <code>uint64 uint64Val = 4;</code> + * @return The uint64Val. */ - monitoring.Monitoring.KpiValue getKpiMinValue(); + long getUint64Val(); + /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>float floatVal = 5;</code> + * @return Whether the floatVal field is set. */ - monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder(); + boolean hasFloatVal(); + /** + * <code>float floatVal = 5;</code> + * @return The floatVal. + */ + float getFloatVal(); /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> - * @return Whether the kpiMaxValue field is set. + * <code>string stringVal = 6;</code> + * @return Whether the stringVal field is set. */ - boolean hasKpiMaxValue(); + boolean hasStringVal(); /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> - * @return The kpiMaxValue. + * <code>string stringVal = 6;</code> + * @return The stringVal. */ - monitoring.Monitoring.KpiValue getKpiMaxValue(); + java.lang.String getStringVal(); /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>string stringVal = 6;</code> + * @return The bytes for stringVal. */ - monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder(); + com.google.protobuf.ByteString + getStringValBytes(); + + /** + * <code>bool boolVal = 7;</code> + * @return Whether the boolVal field is set. + */ + boolean hasBoolVal(); + /** + * <code>bool boolVal = 7;</code> + * @return The boolVal. + */ + boolean getBoolVal(); + + public monitoring.Monitoring.KpiValue.ValueCase getValueCase(); } /** - * Protobuf type {@code monitoring.KpiValueRange} + * Protobuf type {@code monitoring.KpiValue} */ - public static final class KpiValueRange extends + public static final class KpiValue extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange) - KpiValueRangeOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.KpiValue) + KpiValueOrBuilder { private static final long serialVersionUID = 0L; - // Use KpiValueRange.newBuilder() to construct. - private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use KpiValue.newBuilder() to construct. + private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private KpiValueRange() { + private KpiValue() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new KpiValueRange(); + return new KpiValue(); } @java.lang.Override @@ -9268,7 +7278,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private KpiValueRange( + private KpiValue( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -9286,30 +7296,40 @@ public final class Monitoring { case 0: 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(); - } - + case 8: { + valueCase_ = 1; + value_ = input.readInt32(); 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(); - } - + 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(); + break; + } + case 50: { + java.lang.String s = input.readStringRequireUtf8(); + valueCase_ = 6; + value_ = s; + break; + } + case 56: { + valueCase_ = 7; + value_ = input.readBool(); break; } default: { @@ -9333,67 +7353,244 @@ 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_KpiValue_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_KpiValue_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class); + monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class); } - public static final int KPIMINVALUE_FIELD_NUMBER = 1; - private monitoring.Monitoring.KpiValue kpiMinValue_; + 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>.monitoring.KpiValue kpiMinValue = 1;</code> - * @return Whether the kpiMinValue field is set. + * <code>int32 int32Val = 1;</code> + * @return Whether the int32Val field is set. */ @java.lang.Override - public boolean hasKpiMinValue() { - return kpiMinValue_ != null; + public boolean hasInt32Val() { + return valueCase_ == 1; } /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> - * @return The kpiMinValue. + * <code>int32 int32Val = 1;</code> + * @return The int32Val. */ @java.lang.Override - public monitoring.Monitoring.KpiValue getKpiMinValue() { - return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_; + public int getInt32Val() { + if (valueCase_ == 1) { + return (java.lang.Integer) value_; + } + return 0; } + + public static final int UINT32VAL_FIELD_NUMBER = 2; /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>uint32 uint32Val = 2;</code> + * @return Whether the uint32Val field is set. */ @java.lang.Override - public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() { - return getKpiMinValue(); + 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; } - public static final int KPIMAXVALUE_FIELD_NUMBER = 2; - private monitoring.Monitoring.KpiValue kpiMaxValue_; + public static final int INT64VAL_FIELD_NUMBER = 3; /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> - * @return Whether the kpiMaxValue field is set. + * <code>int64 int64Val = 3;</code> + * @return Whether the int64Val field is set. */ @java.lang.Override - public boolean hasKpiMaxValue() { - return kpiMaxValue_ != null; + public boolean hasInt64Val() { + return valueCase_ == 3; + } + /** + * <code>int64 int64Val = 3;</code> + * @return The int64Val. + */ + @java.lang.Override + public long getInt64Val() { + if (valueCase_ == 3) { + return (java.lang.Long) value_; + } + return 0L; + } + + public static final int UINT64VAL_FIELD_NUMBER = 4; + /** + * <code>uint64 uint64Val = 4;</code> + * @return Whether the uint64Val field is set. + */ + @java.lang.Override + public boolean hasUint64Val() { + return valueCase_ == 4; + } + /** + * <code>uint64 uint64Val = 4;</code> + * @return The uint64Val. + */ + @java.lang.Override + public long getUint64Val() { + if (valueCase_ == 4) { + return (java.lang.Long) value_; + } + return 0L; + } + + 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; + } + /** + * <code>float floatVal = 5;</code> + * @return The floatVal. + */ + @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_; + } + 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; + } + return s; + } + } + /** + * <code>string stringVal = 6;</code> + * @return The bytes for stringVal. + */ + public com.google.protobuf.ByteString + getStringValBytes() { + java.lang.Object ref = ""; + if (valueCase_ == 6) { + ref = value_; + } + 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; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } } + + public static final int BOOLVAL_FIELD_NUMBER = 7; /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> - * @return The kpiMaxValue. + * <code>bool boolVal = 7;</code> + * @return Whether the boolVal field is set. */ @java.lang.Override - public monitoring.Monitoring.KpiValue getKpiMaxValue() { - return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_; + public boolean hasBoolVal() { + return valueCase_ == 7; } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>bool boolVal = 7;</code> + * @return The boolVal. */ @java.lang.Override - public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() { - return getKpiMaxValue(); + public boolean getBoolVal() { + if (valueCase_ == 7) { + return (java.lang.Boolean) value_; + } + return false; } private byte memoizedIsInitialized = -1; @@ -9410,11 +7607,32 @@ 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 (valueCase_ == 1) { + output.writeInt32( + 1, (int)((java.lang.Integer) value_)); } - if (kpiMaxValue_ != null) { - output.writeMessage(2, getKpiMaxValue()); + 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 (valueCase_ == 6) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 6, value_); + } + if (valueCase_ == 7) { + output.writeBool( + 7, (boolean)((java.lang.Boolean) value_)); } unknownFields.writeTo(output); } @@ -9425,13 +7643,38 @@ public final class Monitoring { if (size != -1) return size; size = 0; - if (kpiMinValue_ != null) { + if (valueCase_ == 1) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getKpiMinValue()); + .computeInt32Size( + 1, (int)((java.lang.Integer) value_)); } - if (kpiMaxValue_ != null) { + if (valueCase_ == 2) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, getKpiMaxValue()); + .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) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize( + 5, (float)((java.lang.Float) value_)); + } + if (valueCase_ == 6) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, value_); + } + if (valueCase_ == 7) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize( + 7, (boolean)((java.lang.Boolean) value_)); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -9443,20 +7686,44 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) { + if (!(obj instanceof monitoring.Monitoring.KpiValue)) { return super.equals(obj); } - monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj; + monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) 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 (!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 (!unknownFields.equals(other.unknownFields)) return false; return true; @@ -9469,82 +7736,110 @@ 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(); + 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: } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static monitoring.Monitoring.KpiValueRange parseFrom( + public static monitoring.Monitoring.KpiValue parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiValueRange 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.KpiValueRange 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.KpiValueRange 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.KpiValueRange parseFrom(byte[] data) + public static monitoring.Monitoring.KpiValue parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiValueRange 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.KpiValueRange 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.KpiValueRange 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.KpiValueRange 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.KpiValueRange 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.KpiValueRange 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.KpiValueRange parseFrom( + public static monitoring.Monitoring.KpiValue parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -9557,7 +7852,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.KpiValue prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -9573,26 +7868,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.KpiValueRange} + * Protobuf type {@code monitoring.KpiValue} */ 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.KpiValue) + monitoring.Monitoring.KpiValueOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_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_KpiValueRange_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class); + monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class); } - // Construct using monitoring.Monitoring.KpiValueRange.newBuilder() + // Construct using monitoring.Monitoring.KpiValue.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -9610,35 +7905,25 @@ public final class Monitoring { @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; - } + valueCase_ = 0; + value_ = null; return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor; + return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor; } @java.lang.Override - public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() { - return monitoring.Monitoring.KpiValueRange.getDefaultInstance(); + public monitoring.Monitoring.KpiValue getDefaultInstanceForType() { + return monitoring.Monitoring.KpiValue.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.KpiValueRange build() { - monitoring.Monitoring.KpiValueRange result = buildPartial(); + public monitoring.Monitoring.KpiValue build() { + monitoring.Monitoring.KpiValue result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -9646,18 +7931,30 @@ public final class Monitoring { } @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(); + public monitoring.Monitoring.KpiValue buildPartial() { + monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this); + if (valueCase_ == 1) { + result.value_ = value_; } - if (kpiMaxValueBuilder_ == null) { - result.kpiMaxValue_ = kpiMaxValue_; - } else { - result.kpiMaxValue_ = kpiMaxValueBuilder_.build(); + 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_; + } + if (valueCase_ == 7) { + result.value_ = value_; } + result.valueCase_ = valueCase_; onBuilt(); return result; } @@ -9696,21 +7993,50 @@ public final class Monitoring { } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof monitoring.Monitoring.KpiValueRange) { - return mergeFrom((monitoring.Monitoring.KpiValueRange)other); + if (other instanceof monitoring.Monitoring.KpiValue) { + return mergeFrom((monitoring.Monitoring.KpiValue)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()); + 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; + } } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -9727,11 +8053,11 @@ public final class Monitoring { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - monitoring.Monitoring.KpiValueRange parsedMessage = null; + monitoring.Monitoring.KpiValue parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -9740,243 +8066,363 @@ 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; + } + - 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. + * <code>int32 int32Val = 1;</code> + * @return Whether the int32Val field is set. */ - public boolean hasKpiMinValue() { - return kpiMinValueBuilder_ != null || kpiMinValue_ != null; + public boolean hasInt32Val() { + return valueCase_ == 1; } /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> - * @return The kpiMinValue. + * <code>int32 int32Val = 1;</code> + * @return The int32Val. */ - public monitoring.Monitoring.KpiValue getKpiMinValue() { - if (kpiMinValueBuilder_ == null) { - return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_; - } else { - return kpiMinValueBuilder_.getMessage(); + public int getInt32Val() { + if (valueCase_ == 1) { + return (java.lang.Integer) value_; } + return 0; } /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>int32 int32Val = 1;</code> + * @param value The int32Val to set. + * @return This builder for chaining. */ - public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) { - if (kpiMinValueBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - kpiMinValue_ = value; - onChanged(); - } else { - kpiMinValueBuilder_.setMessage(value); - } - + public Builder setInt32Val(int value) { + valueCase_ = 1; + value_ = value; + onChanged(); return this; } /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>int32 int32Val = 1;</code> + * @return This builder for chaining. */ - public Builder setKpiMinValue( - monitoring.Monitoring.KpiValue.Builder builderForValue) { - if (kpiMinValueBuilder_ == null) { - kpiMinValue_ = builderForValue.build(); + public Builder clearInt32Val() { + if (valueCase_ == 1) { + valueCase_ = 0; + value_ = null; onChanged(); - } else { - kpiMinValueBuilder_.setMessage(builderForValue.build()); } + 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>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>uint32 uint32Val = 2;</code> + * @return This builder for chaining. */ - 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; - } + public Builder clearUint32Val() { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; onChanged(); - } else { - kpiMinValueBuilder_.mergeFrom(value); } + return this; + } + /** + * <code>int64 int64Val = 3;</code> + * @return Whether the int64Val field is set. + */ + public boolean hasInt64Val() { + return valueCase_ == 3; + } + /** + * <code>int64 int64Val = 3;</code> + * @return The int64Val. + */ + public long getInt64Val() { + if (valueCase_ == 3) { + return (java.lang.Long) value_; + } + 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>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>int64 int64Val = 3;</code> + * @return This builder for chaining. */ - public Builder clearKpiMinValue() { - if (kpiMinValueBuilder_ == null) { - kpiMinValue_ = null; + public Builder clearInt64Val() { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; onChanged(); - } else { - kpiMinValue_ = null; - kpiMinValueBuilder_ = null; } - return this; } + /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>uint64 uint64Val = 4;</code> + * @return Whether the uint64Val field is set. */ - public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() { - - onChanged(); - return getKpiMinValueFieldBuilder().getBuilder(); + public boolean hasUint64Val() { + return valueCase_ == 4; } /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>uint64 uint64Val = 4;</code> + * @return The uint64Val. */ - public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() { - if (kpiMinValueBuilder_ != null) { - return kpiMinValueBuilder_.getMessageOrBuilder(); - } else { - return kpiMinValue_ == null ? - monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_; + public long getUint64Val() { + if (valueCase_ == 4) { + return (java.lang.Long) value_; } + return 0L; } /** - * <code>.monitoring.KpiValue kpiMinValue = 1;</code> + * <code>uint64 uint64Val = 4;</code> + * @param value The uint64Val to set. + * @return This builder for chaining. */ - 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; + public Builder setUint64Val(long value) { + valueCase_ = 4; + value_ = value; + onChanged(); + return this; + } + /** + * <code>uint64 uint64Val = 4;</code> + * @return This builder for chaining. + */ + public Builder clearUint64Val() { + if (valueCase_ == 4) { + valueCase_ = 0; + value_ = null; + onChanged(); } - return kpiMinValueBuilder_; + return this; } - 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. + * <code>float floatVal = 5;</code> + * @return Whether the floatVal field is set. */ - public boolean hasKpiMaxValue() { - return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null; + public boolean hasFloatVal() { + return valueCase_ == 5; } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> - * @return The kpiMaxValue. + * <code>float floatVal = 5;</code> + * @return The floatVal. */ - public monitoring.Monitoring.KpiValue getKpiMaxValue() { - if (kpiMaxValueBuilder_ == null) { - return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_; - } else { - return kpiMaxValueBuilder_.getMessage(); + public float getFloatVal() { + if (valueCase_ == 5) { + return (java.lang.Float) value_; } + return 0F; } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>float floatVal = 5;</code> + * @param value The floatVal to set. + * @return This builder for chaining. */ - public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) { - if (kpiMaxValueBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - kpiMaxValue_ = value; + public Builder setFloatVal(float value) { + valueCase_ = 5; + value_ = value; + onChanged(); + return this; + } + /** + * <code>float floatVal = 5;</code> + * @return This builder for chaining. + */ + public Builder clearFloatVal() { + if (valueCase_ == 5) { + valueCase_ = 0; + value_ = null; onChanged(); - } else { - kpiMaxValueBuilder_.setMessage(value); } - return this; } + + /** + * <code>string stringVal = 6;</code> + * @return Whether the stringVal field is set. + */ + @java.lang.Override + public boolean hasStringVal() { + return valueCase_ == 6; + } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>string stringVal = 6;</code> + * @return The stringVal. */ - public Builder setKpiMaxValue( - monitoring.Monitoring.KpiValue.Builder builderForValue) { - if (kpiMaxValueBuilder_ == null) { - kpiMaxValue_ = builderForValue.build(); - onChanged(); + @java.lang.Override + public java.lang.String getStringVal() { + java.lang.Object ref = ""; + if (valueCase_ == 6) { + 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_ == 6) { + value_ = s; + } + return s; } else { - kpiMaxValueBuilder_.setMessage(builderForValue.build()); + return (java.lang.String) ref; } - - return this; } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>string stringVal = 6;</code> + * @return The bytes for stringVal. */ - 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; + @java.lang.Override + public com.google.protobuf.ByteString + getStringValBytes() { + java.lang.Object ref = ""; + if (valueCase_ == 6) { + ref = value_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + if (valueCase_ == 6) { + value_ = b; } - onChanged(); + return b; } else { - kpiMaxValueBuilder_.mergeFrom(value); + return (com.google.protobuf.ByteString) ref; } - + } + /** + * <code>string stringVal = 6;</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_ = 6; + value_ = value; + onChanged(); return this; } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>string stringVal = 6;</code> + * @return This builder for chaining. */ - public Builder clearKpiMaxValue() { - if (kpiMaxValueBuilder_ == null) { - kpiMaxValue_ = null; + public Builder clearStringVal() { + if (valueCase_ == 6) { + valueCase_ = 0; + value_ = null; onChanged(); - } else { - kpiMaxValue_ = null; - kpiMaxValueBuilder_ = null; } - return this; } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>string stringVal = 6;</code> + * @param value The bytes for stringVal to set. + * @return This builder for chaining. */ - public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() { - + public Builder setStringValBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + valueCase_ = 6; + value_ = value; onChanged(); - return getKpiMaxValueFieldBuilder().getBuilder(); + return this; } + /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>bool boolVal = 7;</code> + * @return Whether the boolVal field is set. */ - public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() { - if (kpiMaxValueBuilder_ != null) { - return kpiMaxValueBuilder_.getMessageOrBuilder(); - } else { - return kpiMaxValue_ == null ? - monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_; + public boolean hasBoolVal() { + return valueCase_ == 7; + } + /** + * <code>bool boolVal = 7;</code> + * @return The boolVal. + */ + public boolean getBoolVal() { + if (valueCase_ == 7) { + return (java.lang.Boolean) value_; } + return false; } /** - * <code>.monitoring.KpiValue kpiMaxValue = 2;</code> + * <code>bool boolVal = 7;</code> + * @param value The boolVal to set. + * @return This builder for chaining. */ - 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; + public Builder setBoolVal(boolean value) { + valueCase_ = 7; + value_ = value; + onChanged(); + return this; + } + /** + * <code>bool boolVal = 7;</code> + * @return This builder for chaining. + */ + public Builder clearBoolVal() { + if (valueCase_ == 7) { + valueCase_ = 0; + value_ = null; + onChanged(); } - return kpiMaxValueBuilder_; + return this; } @java.lang.Override public final Builder setUnknownFields( @@ -9991,122 +8437,95 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange) + // @@protoc_insertion_point(builder_scope:monitoring.KpiValue) } - // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange) - private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.KpiValue) + private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange(); + DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue(); } - public static monitoring.Monitoring.KpiValueRange getDefaultInstance() { + public static monitoring.Monitoring.KpiValue 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<KpiValue> + PARSER = new com.google.protobuf.AbstractParser<KpiValue>() { @java.lang.Override - public KpiValueRange parsePartialFrom( + public KpiValue parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new KpiValueRange(input, extensionRegistry); + return new KpiValue(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<KpiValueRange> parser() { + public static com.google.protobuf.Parser<KpiValue> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<KpiValueRange> getParserForType() { + public com.google.protobuf.Parser<KpiValue> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() { + public monitoring.Monitoring.KpiValue getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface KpiValueOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.KpiValue) + public interface KpiListOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.KpiList) com.google.protobuf.MessageOrBuilder { /** - * <code>uint32 intVal = 1;</code> - * @return Whether the intVal field is set. - */ - boolean hasIntVal(); - /** - * <code>uint32 intVal = 1;</code> - * @return The intVal. - */ - int getIntVal(); - - /** - * <code>float floatVal = 2;</code> - * @return Whether the floatVal field is set. - */ - boolean hasFloatVal(); - /** - * <code>float floatVal = 2;</code> - * @return The floatVal. - */ - float getFloatVal(); - - /** - * <code>string stringVal = 3;</code> - * @return Whether the stringVal field is set. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - boolean hasStringVal(); + java.util.List<monitoring.Monitoring.Kpi> + getKpiListList(); /** - * <code>string stringVal = 3;</code> - * @return The stringVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - java.lang.String getStringVal(); + monitoring.Monitoring.Kpi getKpiList(int index); /** - * <code>string stringVal = 3;</code> - * @return The bytes for stringVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - com.google.protobuf.ByteString - getStringValBytes(); - + int getKpiListCount(); /** - * <code>bool boolVal = 4;</code> - * @return Whether the boolVal field is set. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - boolean hasBoolVal(); + java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> + getKpiListOrBuilderList(); /** - * <code>bool boolVal = 4;</code> - * @return The boolVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - boolean getBoolVal(); - - public monitoring.Monitoring.KpiValue.ValueCase getValueCase(); + monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder( + int index); } /** - * Protobuf type {@code monitoring.KpiValue} + * Protobuf type {@code monitoring.KpiList} */ - public static final class KpiValue extends + public static final class KpiList extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.KpiValue) - KpiValueOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.KpiList) + KpiListOrBuilder { private static final long serialVersionUID = 0L; - // Use KpiValue.newBuilder() to construct. - private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use KpiList.newBuilder() to construct. + private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private KpiValue() { + private KpiList() { + kpiList_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new KpiValue(); + return new KpiList(); } @java.lang.Override @@ -10114,7 +8533,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private KpiValue( + private KpiList( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -10122,6 +8541,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 { @@ -10132,25 +8552,13 @@ public final class Monitoring { case 0: done = true; break; - 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(); + case 10: { + 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: { @@ -10168,181 +8576,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_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; - } - } - 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 - public boolean hasIntVal() { - return valueCase_ == 1; + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor; } - /** - * <code>uint32 intVal = 1;</code> - * @return The intVal. - */ + @java.lang.Override - public int getIntVal() { - if (valueCase_ == 1) { - return (java.lang.Integer) value_; - } - return 0; + 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); } - public static final int FLOATVAL_FIELD_NUMBER = 2; + public static final int KPI_LIST_FIELD_NUMBER = 1; + private java.util.List<monitoring.Monitoring.Kpi> kpiList_; /** - * <code>float floatVal = 2;</code> - * @return Whether the floatVal field is set. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ @java.lang.Override - public boolean hasFloatVal() { - return valueCase_ == 2; + public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() { + return kpiList_; } /** - * <code>float floatVal = 2;</code> - * @return The floatVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ @java.lang.Override - public float getFloatVal() { - if (valueCase_ == 2) { - return (java.lang.Float) value_; - } - return 0F; - } - - public static final int STRINGVAL_FIELD_NUMBER = 3; - /** - * <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; - } + public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> + getKpiListOrBuilderList() { + return kpiList_; } /** - * <code>string stringVal = 3;</code> - * @return The bytes for stringVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - 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; - } + @java.lang.Override + public int getKpiListCount() { + return kpiList_.size(); } - - public static final int BOOLVAL_FIELD_NUMBER = 4; /** - * <code>bool boolVal = 4;</code> - * @return Whether the boolVal field is set. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ @java.lang.Override - public boolean hasBoolVal() { - return valueCase_ == 4; + public monitoring.Monitoring.Kpi getKpiList(int index) { + return kpiList_.get(index); } /** - * <code>bool boolVal = 4;</code> - * @return The boolVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ @java.lang.Override - public boolean getBoolVal() { - if (valueCase_ == 4) { - return (java.lang.Boolean) value_; - } - return false; + public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder( + int index) { + return kpiList_.get(index); } private byte memoizedIsInitialized = -1; @@ -10359,20 +8650,8 @@ public final class Monitoring { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - 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_)); + for (int i = 0; i < kpiList_.size(); i++) { + output.writeMessage(1, kpiList_.get(i)); } unknownFields.writeTo(output); } @@ -10383,23 +8662,9 @@ public final class Monitoring { if (size != -1) return size; size = 0; - if (valueCase_ == 1) { - size += com.google.protobuf.CodedOutputStream - .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) { + for (int i = 0; i < kpiList_.size(); i++) { size += com.google.protobuf.CodedOutputStream - .computeBoolSize( - 4, (boolean)((java.lang.Boolean) value_)); + .computeMessageSize(1, kpiList_.get(i)); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -10411,33 +8676,13 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.KpiValue)) { + if (!(obj instanceof monitoring.Monitoring.KpiList)) { return super.equals(obj); } - monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj; + monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj; - 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 (!getKpiListList() + .equals(other.getKpiListList())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -10449,96 +8694,78 @@ public final class Monitoring { } int hash = 41; hash = (19 * hash) + getDescriptor().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: + 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.KpiValue parseFrom( + public static monitoring.Monitoring.KpiList parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiValue 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.KpiValue 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.KpiValue 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.KpiValue parseFrom(byte[] data) + public static monitoring.Monitoring.KpiList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiValue 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.KpiValue 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.KpiValue 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.KpiValue 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.KpiValue 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.KpiValue 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.KpiValue parseFrom( + public static monitoring.Monitoring.KpiList parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -10551,7 +8778,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.KpiList prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -10567,26 +8794,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.KpiValue} + * Protobuf type {@code monitoring.KpiList} */ 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.KpiList) + monitoring.Monitoring.KpiListOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_KpiValue_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_KpiValue_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class); + monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class); } - // Construct using monitoring.Monitoring.KpiValue.newBuilder() + // Construct using monitoring.Monitoring.KpiList.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -10599,52 +8826,54 @@ public final class Monitoring { private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { + getKpiListFieldBuilder(); } } @java.lang.Override public Builder clear() { super.clear(); - valueCase_ = 0; - value_ = null; + if (kpiListBuilder_ == null) { + kpiList_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + kpiListBuilder_.clear(); + } return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor; - } - - @java.lang.Override - public monitoring.Monitoring.KpiValue getDefaultInstanceForType() { - return monitoring.Monitoring.KpiValue.getDefaultInstance(); + return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor; } @java.lang.Override - public monitoring.Monitoring.KpiValue build() { - monitoring.Monitoring.KpiValue result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; + public monitoring.Monitoring.KpiList getDefaultInstanceForType() { + return monitoring.Monitoring.KpiList.getDefaultInstance(); } @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_; + public monitoring.Monitoring.KpiList build() { + monitoring.Monitoring.KpiList result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); } - if (valueCase_ == 4) { - result.value_ = value_; + return result; + } + + @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_; + } else { + result.kpiList_ = kpiListBuilder_.build(); } - result.valueCase_ = valueCase_; onBuilt(); return result; } @@ -10683,37 +8912,40 @@ 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.KpiList) { + return mergeFrom((monitoring.Monitoring.KpiList)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 INTVAL: { - setIntVal(other.getIntVal()); - break; - } - case FLOATVAL: { - setFloatVal(other.getFloatVal()); - break; - } - case STRINGVAL: { - valueCase_ = 3; - value_ = other.value_; + 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(); - break; } - case BOOLVAL: { - setBoolVal(other.getBoolVal()); - break; - } - case VALUE_NOT_SET: { - break; + } 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); @@ -10731,11 +8963,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.KpiList parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -10744,240 +8976,246 @@ public final class Monitoring { } return this; } - private int valueCase_ = 0; - private java.lang.Object value_; - public ValueCase - getValueCase() { - return ValueCase.forNumber( - valueCase_); - } + private int bitField0_; - public Builder clearValue() { - valueCase_ = 0; - value_ = null; - onChanged(); - return this; + 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>uint32 intVal = 1;</code> - * @return Whether the intVal field is set. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public boolean hasIntVal() { - return valueCase_ == 1; + public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() { + if (kpiListBuilder_ == null) { + return java.util.Collections.unmodifiableList(kpiList_); + } else { + return kpiListBuilder_.getMessageList(); + } } /** - * <code>uint32 intVal = 1;</code> - * @return The intVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public int getIntVal() { - if (valueCase_ == 1) { - return (java.lang.Integer) value_; + public int getKpiListCount() { + if (kpiListBuilder_ == null) { + return kpiList_.size(); + } else { + return kpiListBuilder_.getCount(); } - return 0; } /** - * <code>uint32 intVal = 1;</code> - * @param value The intVal to set. - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder setIntVal(int value) { - valueCase_ = 1; - value_ = value; - onChanged(); - return this; + public monitoring.Monitoring.Kpi getKpiList(int index) { + if (kpiListBuilder_ == null) { + return kpiList_.get(index); + } else { + return kpiListBuilder_.getMessage(index); + } } /** - * <code>uint32 intVal = 1;</code> - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder clearIntVal() { - if (valueCase_ == 1) { - valueCase_ = 0; - value_ = null; + public Builder setKpiList( + int index, monitoring.Monitoring.Kpi value) { + if (kpiListBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKpiListIsMutable(); + kpiList_.set(index, value); onChanged(); + } else { + kpiListBuilder_.setMessage(index, value); } return this; } - - /** - * <code>float floatVal = 2;</code> - * @return Whether the floatVal field is set. - */ - public boolean hasFloatVal() { - return valueCase_ == 2; - } /** - * <code>float floatVal = 2;</code> - * @return The floatVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public float getFloatVal() { - if (valueCase_ == 2) { - return (java.lang.Float) value_; + public Builder setKpiList( + int index, monitoring.Monitoring.Kpi.Builder builderForValue) { + if (kpiListBuilder_ == null) { + ensureKpiListIsMutable(); + kpiList_.set(index, builderForValue.build()); + onChanged(); + } else { + kpiListBuilder_.setMessage(index, builderForValue.build()); } - return 0F; + return this; } /** - * <code>float floatVal = 2;</code> - * @param value The floatVal to set. - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder setFloatVal(float value) { - valueCase_ = 2; - value_ = value; - onChanged(); + public Builder addKpiList(monitoring.Monitoring.Kpi value) { + if (kpiListBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKpiListIsMutable(); + kpiList_.add(value); + onChanged(); + } else { + kpiListBuilder_.addMessage(value); + } return this; } /** - * <code>float floatVal = 2;</code> - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder clearFloatVal() { - if (valueCase_ == 2) { - valueCase_ = 0; - value_ = 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 { + kpiListBuilder_.addMessage(index, value); } return this; } - /** - * <code>string stringVal = 3;</code> - * @return Whether the stringVal field is set. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - @java.lang.Override - public boolean hasStringVal() { - return valueCase_ == 3; + public Builder addKpiList( + monitoring.Monitoring.Kpi.Builder builderForValue) { + if (kpiListBuilder_ == null) { + ensureKpiListIsMutable(); + kpiList_.add(builderForValue.build()); + onChanged(); + } else { + kpiListBuilder_.addMessage(builderForValue.build()); + } + return this; } /** - * <code>string stringVal = 3;</code> - * @return The stringVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - @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; + public Builder addKpiList( + int index, monitoring.Monitoring.Kpi.Builder builderForValue) { + if (kpiListBuilder_ == null) { + ensureKpiListIsMutable(); + kpiList_.add(index, builderForValue.build()); + onChanged(); } else { - return (java.lang.String) ref; + kpiListBuilder_.addMessage(index, builderForValue.build()); } + return this; } /** - * <code>string stringVal = 3;</code> - * @return The bytes for stringVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - @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; + 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 { - return (com.google.protobuf.ByteString) ref; + kpiListBuilder_.addAllMessages(values); } + return this; } /** - * <code>string stringVal = 3;</code> - * @param value The stringVal to set. - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder setStringVal( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - valueCase_ = 3; - value_ = value; - onChanged(); + public Builder clearKpiList() { + if (kpiListBuilder_ == null) { + kpiList_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + kpiListBuilder_.clear(); + } return this; } /** - * <code>string stringVal = 3;</code> - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder clearStringVal() { - if (valueCase_ == 3) { - valueCase_ = 0; - value_ = null; + public Builder removeKpiList(int index) { + if (kpiListBuilder_ == null) { + ensureKpiListIsMutable(); + kpiList_.remove(index); onChanged(); + } else { + kpiListBuilder_.remove(index); } return this; } /** - * <code>string stringVal = 3;</code> - * @param value The bytes for stringVal to set. - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder setStringValBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - valueCase_ = 3; - value_ = value; - onChanged(); - return this; + public monitoring.Monitoring.Kpi.Builder getKpiListBuilder( + int index) { + return getKpiListFieldBuilder().getBuilder(index); } - /** - * <code>bool boolVal = 4;</code> - * @return Whether the boolVal field is set. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public boolean hasBoolVal() { - return valueCase_ == 4; + public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder( + int index) { + if (kpiListBuilder_ == null) { + return kpiList_.get(index); } else { + return kpiListBuilder_.getMessageOrBuilder(index); + } } /** - * <code>bool boolVal = 4;</code> - * @return The boolVal. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public boolean getBoolVal() { - if (valueCase_ == 4) { - return (java.lang.Boolean) value_; + public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> + getKpiListOrBuilderList() { + if (kpiListBuilder_ != null) { + return kpiListBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(kpiList_); } - return false; } /** - * <code>bool boolVal = 4;</code> - * @param value The boolVal to set. - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder setBoolVal(boolean value) { - valueCase_ = 4; - value_ = value; - onChanged(); - return this; + public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() { + return getKpiListFieldBuilder().addBuilder( + monitoring.Monitoring.Kpi.getDefaultInstance()); } /** - * <code>bool boolVal = 4;</code> - * @return This builder for chaining. + * <code>repeated .monitoring.Kpi kpi_list = 1;</code> */ - public Builder clearBoolVal() { - if (valueCase_ == 4) { - valueCase_ = 0; - value_ = null; - onChanged(); + 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()); + kpiList_ = null; } - return this; + return kpiListBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -10992,95 +9230,95 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.KpiValue) + // @@protoc_insertion_point(builder_scope:monitoring.KpiList) } - // @@protoc_insertion_point(class_scope:monitoring.KpiValue) - private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.KpiList) + private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue(); + DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList(); } - public static monitoring.Monitoring.KpiValue getDefaultInstance() { + public static monitoring.Monitoring.KpiList 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<KpiList> + PARSER = new com.google.protobuf.AbstractParser<KpiList>() { @java.lang.Override - public KpiValue parsePartialFrom( + public KpiList parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new KpiValue(input, extensionRegistry); + return new KpiList(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<KpiValue> parser() { + public static com.google.protobuf.Parser<KpiList> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<KpiValue> getParserForType() { + public com.google.protobuf.Parser<KpiList> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.KpiValue getDefaultInstanceForType() { + public monitoring.Monitoring.KpiList getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface KpiListOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.KpiList) + public interface KpiDescriptorListOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList) com.google.protobuf.MessageOrBuilder { /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - java.util.List<monitoring.Monitoring.Kpi> - getKpiListList(); + java.util.List<monitoring.Monitoring.KpiDescriptor> + getKpiDescriptorListList(); /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - monitoring.Monitoring.Kpi getKpiList(int index); + monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index); /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - int getKpiListCount(); + int getKpiDescriptorListCount(); /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> - getKpiListOrBuilderList(); + java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> + getKpiDescriptorListOrBuilderList(); /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder( + monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder( int index); } /** - * Protobuf type {@code monitoring.KpiList} + * Protobuf type {@code monitoring.KpiDescriptorList} */ - public static final class KpiList extends + public static final class KpiDescriptorList extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.KpiList) - KpiListOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList) + KpiDescriptorListOrBuilder { private static final long serialVersionUID = 0L; - // Use KpiList.newBuilder() to construct. - private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use KpiDescriptorList.newBuilder() to construct. + private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private KpiList() { - kpiList_ = java.util.Collections.emptyList(); + private KpiDescriptorList() { + kpiDescriptorList_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new KpiList(); + return new KpiDescriptorList(); } @java.lang.Override @@ -11088,7 +9326,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private KpiList( + private KpiDescriptorList( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -11109,11 +9347,11 @@ public final class Monitoring { break; case 10: { if (!((mutable_bitField0_ & 0x00000001) != 0)) { - kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(); + kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(); mutable_bitField0_ |= 0x00000001; } - kpiList_.add( - input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry)); + kpiDescriptorList_.add( + input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry)); break; } default: { @@ -11132,7 +9370,7 @@ public final class Monitoring { e).setUnfinishedMessage(this); } finally { if (((mutable_bitField0_ & 0x00000001) != 0)) { - kpiList_ = java.util.Collections.unmodifiableList(kpiList_); + kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_); } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); @@ -11140,55 +9378,55 @@ public final class Monitoring { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_KpiList_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_KpiList_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class); + monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class); } - public static final int KPI_LIST_FIELD_NUMBER = 1; - private java.util.List<monitoring.Monitoring.Kpi> kpiList_; + public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1; + private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_; /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ @java.lang.Override - public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() { - return kpiList_; + public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() { + return kpiDescriptorList_; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ @java.lang.Override - public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> - getKpiListOrBuilderList() { - return kpiList_; + public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> + getKpiDescriptorListOrBuilderList() { + return kpiDescriptorList_; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ @java.lang.Override - public int getKpiListCount() { - return kpiList_.size(); + public int getKpiDescriptorListCount() { + return kpiDescriptorList_.size(); } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ @java.lang.Override - public monitoring.Monitoring.Kpi getKpiList(int index) { - return kpiList_.get(index); + public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) { + return kpiDescriptorList_.get(index); } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ @java.lang.Override - public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder( + public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder( int index) { - return kpiList_.get(index); + return kpiDescriptorList_.get(index); } private byte memoizedIsInitialized = -1; @@ -11205,8 +9443,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 < kpiList_.size(); i++) { - output.writeMessage(1, kpiList_.get(i)); + for (int i = 0; i < kpiDescriptorList_.size(); i++) { + output.writeMessage(1, kpiDescriptorList_.get(i)); } unknownFields.writeTo(output); } @@ -11217,9 +9455,9 @@ public final class Monitoring { if (size != -1) return size; size = 0; - for (int i = 0; i < kpiList_.size(); i++) { + for (int i = 0; i < kpiDescriptorList_.size(); i++) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, kpiList_.get(i)); + .computeMessageSize(1, kpiDescriptorList_.get(i)); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -11231,13 +9469,13 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.KpiList)) { + if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) { return super.equals(obj); } - monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj; + monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj; - if (!getKpiListList() - .equals(other.getKpiListList())) return false; + if (!getKpiDescriptorListList() + .equals(other.getKpiDescriptorListList())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -11249,78 +9487,78 @@ 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 (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.KpiList parseFrom( + public static monitoring.Monitoring.KpiDescriptorList parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiList 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.KpiList 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.KpiList 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.KpiList parseFrom(byte[] data) + public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiList 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.KpiList 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.KpiList 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.KpiList 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.KpiList 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.KpiList 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.KpiList parseFrom( + public static monitoring.Monitoring.KpiDescriptorList parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -11333,7 +9571,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.KpiDescriptorList prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -11349,26 +9587,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.KpiList} + * Protobuf type {@code monitoring.KpiDescriptorList} */ 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.KpiDescriptorList) + monitoring.Monitoring.KpiDescriptorListOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_KpiList_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_KpiList_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class); + monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class); } - // Construct using monitoring.Monitoring.KpiList.newBuilder() + // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -11381,17 +9619,17 @@ public final class Monitoring { private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { - getKpiListFieldBuilder(); + getKpiDescriptorListFieldBuilder(); } } @java.lang.Override public Builder clear() { super.clear(); - if (kpiListBuilder_ == null) { - kpiList_ = java.util.Collections.emptyList(); + if (kpiDescriptorListBuilder_ == null) { + kpiDescriptorList_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000001); } else { - kpiListBuilder_.clear(); + kpiDescriptorListBuilder_.clear(); } return this; } @@ -11399,17 +9637,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_KpiDescriptorList_descriptor; } @java.lang.Override - public monitoring.Monitoring.KpiList getDefaultInstanceForType() { - return monitoring.Monitoring.KpiList.getDefaultInstance(); + public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() { + return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.KpiList build() { - monitoring.Monitoring.KpiList result = buildPartial(); + public monitoring.Monitoring.KpiDescriptorList build() { + monitoring.Monitoring.KpiDescriptorList result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -11417,17 +9655,17 @@ public final class Monitoring { } @java.lang.Override - public monitoring.Monitoring.KpiList buildPartial() { - monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this); + public monitoring.Monitoring.KpiDescriptorList buildPartial() { + monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this); int from_bitField0_ = bitField0_; - if (kpiListBuilder_ == null) { + if (kpiDescriptorListBuilder_ == null) { if (((bitField0_ & 0x00000001) != 0)) { - kpiList_ = java.util.Collections.unmodifiableList(kpiList_); + kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_); bitField0_ = (bitField0_ & ~0x00000001); } - result.kpiList_ = kpiList_; + result.kpiDescriptorList_ = kpiDescriptorList_; } else { - result.kpiList_ = kpiListBuilder_.build(); + result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build(); } onBuilt(); return result; @@ -11467,39 +9705,39 @@ 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.KpiDescriptorList) { + return mergeFrom((monitoring.Monitoring.KpiDescriptorList)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_; + 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 { - ensureKpiListIsMutable(); - kpiList_.addAll(other.kpiList_); + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.addAll(other.kpiDescriptorList_); } onChanged(); } } else { - if (!other.kpiList_.isEmpty()) { - if (kpiListBuilder_.isEmpty()) { - kpiListBuilder_.dispose(); - kpiListBuilder_ = null; - kpiList_ = other.kpiList_; + if (!other.kpiDescriptorList_.isEmpty()) { + if (kpiDescriptorListBuilder_.isEmpty()) { + kpiDescriptorListBuilder_.dispose(); + kpiDescriptorListBuilder_ = null; + kpiDescriptorList_ = other.kpiDescriptorList_; bitField0_ = (bitField0_ & ~0x00000001); - kpiListBuilder_ = + kpiDescriptorListBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getKpiListFieldBuilder() : null; + getKpiDescriptorListFieldBuilder() : null; } else { - kpiListBuilder_.addAllMessages(other.kpiList_); + kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_); } } } @@ -11518,11 +9756,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.KpiDescriptorList parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -11533,244 +9771,244 @@ public final class Monitoring { } private int bitField0_; - private java.util.List<monitoring.Monitoring.Kpi> kpiList_ = + private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ = java.util.Collections.emptyList(); - private void ensureKpiListIsMutable() { + private void ensureKpiDescriptorListIsMutable() { if (!((bitField0_ & 0x00000001) != 0)) { - kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_); + kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_); bitField0_ |= 0x00000001; } } private com.google.protobuf.RepeatedFieldBuilderV3< - monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_; + monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_; /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() { - if (kpiListBuilder_ == null) { - return java.util.Collections.unmodifiableList(kpiList_); + public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() { + if (kpiDescriptorListBuilder_ == null) { + return java.util.Collections.unmodifiableList(kpiDescriptorList_); } else { - return kpiListBuilder_.getMessageList(); + return kpiDescriptorListBuilder_.getMessageList(); } } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public int getKpiListCount() { - if (kpiListBuilder_ == null) { - return kpiList_.size(); + public int getKpiDescriptorListCount() { + if (kpiDescriptorListBuilder_ == null) { + return kpiDescriptorList_.size(); } else { - return kpiListBuilder_.getCount(); + return kpiDescriptorListBuilder_.getCount(); } } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public monitoring.Monitoring.Kpi getKpiList(int index) { - if (kpiListBuilder_ == null) { - return kpiList_.get(index); + public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) { + if (kpiDescriptorListBuilder_ == null) { + return kpiDescriptorList_.get(index); } else { - return kpiListBuilder_.getMessage(index); + return kpiDescriptorListBuilder_.getMessage(index); } } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder setKpiList( - int index, monitoring.Monitoring.Kpi value) { - if (kpiListBuilder_ == null) { + public Builder setKpiDescriptorList( + int index, monitoring.Monitoring.KpiDescriptor value) { + if (kpiDescriptorListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureKpiListIsMutable(); - kpiList_.set(index, value); + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.set(index, value); onChanged(); } else { - kpiListBuilder_.setMessage(index, value); + kpiDescriptorListBuilder_.setMessage(index, value); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder setKpiList( - int index, monitoring.Monitoring.Kpi.Builder builderForValue) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.set(index, builderForValue.build()); + public Builder setKpiDescriptorList( + int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) { + if (kpiDescriptorListBuilder_ == null) { + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.set(index, builderForValue.build()); onChanged(); } else { - kpiListBuilder_.setMessage(index, builderForValue.build()); + kpiDescriptorListBuilder_.setMessage(index, builderForValue.build()); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder addKpiList(monitoring.Monitoring.Kpi value) { - if (kpiListBuilder_ == null) { + public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) { + if (kpiDescriptorListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureKpiListIsMutable(); - kpiList_.add(value); + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.add(value); onChanged(); } else { - kpiListBuilder_.addMessage(value); + kpiDescriptorListBuilder_.addMessage(value); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder addKpiList( - int index, monitoring.Monitoring.Kpi value) { - if (kpiListBuilder_ == null) { + public Builder addKpiDescriptorList( + int index, monitoring.Monitoring.KpiDescriptor value) { + if (kpiDescriptorListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureKpiListIsMutable(); - kpiList_.add(index, value); + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.add(index, value); onChanged(); } else { - kpiListBuilder_.addMessage(index, value); + kpiDescriptorListBuilder_.addMessage(index, value); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder addKpiList( - monitoring.Monitoring.Kpi.Builder builderForValue) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.add(builderForValue.build()); + public Builder addKpiDescriptorList( + monitoring.Monitoring.KpiDescriptor.Builder builderForValue) { + if (kpiDescriptorListBuilder_ == null) { + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.add(builderForValue.build()); onChanged(); } else { - kpiListBuilder_.addMessage(builderForValue.build()); + kpiDescriptorListBuilder_.addMessage(builderForValue.build()); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder addKpiList( - int index, monitoring.Monitoring.Kpi.Builder builderForValue) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.add(index, builderForValue.build()); + public Builder addKpiDescriptorList( + int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) { + if (kpiDescriptorListBuilder_ == null) { + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.add(index, builderForValue.build()); onChanged(); } else { - kpiListBuilder_.addMessage(index, builderForValue.build()); + kpiDescriptorListBuilder_.addMessage(index, builderForValue.build()); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder addAllKpiList( - java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); + public Builder addAllKpiDescriptorList( + java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) { + if (kpiDescriptorListBuilder_ == null) { + ensureKpiDescriptorListIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, kpiList_); + values, kpiDescriptorList_); onChanged(); } else { - kpiListBuilder_.addAllMessages(values); + kpiDescriptorListBuilder_.addAllMessages(values); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder clearKpiList() { - if (kpiListBuilder_ == null) { - kpiList_ = java.util.Collections.emptyList(); + public Builder clearKpiDescriptorList() { + if (kpiDescriptorListBuilder_ == null) { + kpiDescriptorList_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000001); onChanged(); } else { - kpiListBuilder_.clear(); + kpiDescriptorListBuilder_.clear(); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public Builder removeKpiList(int index) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.remove(index); + public Builder removeKpiDescriptorList(int index) { + if (kpiDescriptorListBuilder_ == null) { + ensureKpiDescriptorListIsMutable(); + kpiDescriptorList_.remove(index); onChanged(); } else { - kpiListBuilder_.remove(index); + kpiDescriptorListBuilder_.remove(index); } return this; } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public monitoring.Monitoring.Kpi.Builder getKpiListBuilder( + public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder( int index) { - return getKpiListFieldBuilder().getBuilder(index); + return getKpiDescriptorListFieldBuilder().getBuilder(index); } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder( + public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder( int index) { - if (kpiListBuilder_ == null) { - return kpiList_.get(index); } else { - return kpiListBuilder_.getMessageOrBuilder(index); + if (kpiDescriptorListBuilder_ == null) { + return kpiDescriptorList_.get(index); } else { + return kpiDescriptorListBuilder_.getMessageOrBuilder(index); } } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> - getKpiListOrBuilderList() { - if (kpiListBuilder_ != null) { - return kpiListBuilder_.getMessageOrBuilderList(); + public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> + getKpiDescriptorListOrBuilderList() { + if (kpiDescriptorListBuilder_ != null) { + return kpiDescriptorListBuilder_.getMessageOrBuilderList(); } else { - return java.util.Collections.unmodifiableList(kpiList_); + return java.util.Collections.unmodifiableList(kpiDescriptorList_); } } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() { - return getKpiListFieldBuilder().addBuilder( - monitoring.Monitoring.Kpi.getDefaultInstance()); + public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() { + return getKpiDescriptorListFieldBuilder().addBuilder( + monitoring.Monitoring.KpiDescriptor.getDefaultInstance()); } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public monitoring.Monitoring.Kpi.Builder addKpiListBuilder( + public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder( int index) { - return getKpiListFieldBuilder().addBuilder( - index, monitoring.Monitoring.Kpi.getDefaultInstance()); + return getKpiDescriptorListFieldBuilder().addBuilder( + index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance()); } /** - * <code>repeated .monitoring.Kpi kpi_list = 1;</code> + * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> */ - public java.util.List<monitoring.Monitoring.Kpi.Builder> - getKpiListBuilderList() { - return getKpiListFieldBuilder().getBuilderList(); + public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> + getKpiDescriptorListBuilderList() { + return getKpiDescriptorListFieldBuilder().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_, + 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()); - kpiList_ = null; + kpiDescriptorList_ = null; } - return kpiListBuilder_; + return kpiDescriptorListBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -11785,128 +10023,251 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.KpiList) + // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList) } - // @@protoc_insertion_point(class_scope:monitoring.KpiList) - private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList) + private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList(); + DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList(); } - public static monitoring.Monitoring.KpiList getDefaultInstance() { + public static monitoring.Monitoring.KpiDescriptorList 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<KpiDescriptorList> + PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() { @java.lang.Override - public KpiList parsePartialFrom( + public KpiDescriptorList parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new KpiList(input, extensionRegistry); + return new KpiDescriptorList(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<KpiList> parser() { + public static com.google.protobuf.Parser<KpiDescriptorList> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<KpiList> getParserForType() { + public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.KpiList getDefaultInstanceForType() { + public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface KpiDescriptorListOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList) + public interface SubsDescriptorOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor) com.google.protobuf.MessageOrBuilder { /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> + * @return Whether the subsId field is set. */ - java.util.List<monitoring.Monitoring.KpiDescriptor> - getKpiDescriptorListList(); + boolean hasSubsId(); /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> + * @return The subsId. */ - monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index); + monitoring.Monitoring.SubscriptionID getSubsId(); /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> */ - int getKpiDescriptorListCount(); + monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder(); + /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.KpiId kpi_id = 2;</code> + * @return Whether the kpiId field is set. */ - java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> - getKpiDescriptorListOrBuilderList(); + boolean hasKpiId(); /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.KpiId kpi_id = 2;</code> + * @return The kpiId. */ - monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder( - int index); + 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. + */ + context.ContextOuterClass.Timestamp getStartTimestamp(); + /** + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> + */ + context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder(); + + /** + * <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. + */ + boolean hasEndTimestamp(); + /** + * <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. + */ + context.ContextOuterClass.Timestamp getEndTimestamp(); + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> + */ + context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder(); } /** - * Protobuf type {@code monitoring.KpiDescriptorList} + * Protobuf type {@code monitoring.SubsDescriptor} */ - public static final class KpiDescriptorList extends + public static final class SubsDescriptor extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList) - KpiDescriptorListOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor) + SubsDescriptorOrBuilder { private static final long serialVersionUID = 0L; - // Use KpiDescriptorList.newBuilder() to construct. - private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use SubsDescriptor.newBuilder() to construct. + private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private KpiDescriptorList() { - kpiDescriptorList_ = java.util.Collections.emptyList(); + private SubsDescriptor() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new KpiDescriptorList(); + return new SubsDescriptor(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; } + private SubsDescriptor( + 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: { + 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: { - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private KpiDescriptorList( - 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; + samplingIntervalS_ = input.readFloat(); break; - case 10: { - if (!((mutable_bitField0_ & 0x00000001) != 0)) { - kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(); - mutable_bitField0_ |= 0x00000001; + } + case 42: { + context.ContextOuterClass.Timestamp.Builder subBuilder = null; + if (startTimestamp_ != null) { + subBuilder = startTimestamp_.toBuilder(); } - kpiDescriptorList_.add( - input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry)); + 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(); + } + break; } default: { @@ -11924,64 +10285,171 @@ 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_KpiDescriptorList_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_KpiDescriptorList_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class); + monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class); } - public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1; - private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_; + public static final int SUBS_ID_FIELD_NUMBER = 1; + private monitoring.Monitoring.SubscriptionID subsId_; /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> + * @return Whether the subsId field is set. */ @java.lang.Override - public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() { - return kpiDescriptorList_; + public boolean hasSubsId() { + return subsId_ != null; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> + * @return The subsId. */ @java.lang.Override - public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> - getKpiDescriptorListOrBuilderList() { - return kpiDescriptorList_; + public monitoring.Monitoring.SubscriptionID getSubsId() { + return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> */ @java.lang.Override - public int getKpiDescriptorListCount() { - return kpiDescriptorList_.size(); + public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() { + return getSubsId(); } + + public static final int KPI_ID_FIELD_NUMBER = 2; + private monitoring.Monitoring.KpiId kpiId_; /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.KpiId kpi_id = 2;</code> + * @return Whether the kpiId field is set. */ @java.lang.Override - public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) { - return kpiDescriptorList_.get(index); + public boolean hasKpiId() { + return kpiId_ != null; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.KpiId kpi_id = 2;</code> + * @return The kpiId. */ @java.lang.Override - public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder( - int index) { - return kpiDescriptorList_.get(index); + 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_; + } + + 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; + } + /** + * <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_; + } + /** + * <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 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_; + } + /** + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> + */ + @java.lang.Override + public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() { + return getEndTimestamp(); } private byte memoizedIsInitialized = -1; @@ -11998,8 +10466,23 @@ 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 (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()); } unknownFields.writeTo(output); } @@ -12010,9 +10493,29 @@ public final class Monitoring { if (size != -1) return size; size = 0; - for (int i = 0; i < kpiDescriptorList_.size(); i++) { + if (subsId_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, kpiDescriptorList_.get(i)); + .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) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, getEndTimestamp()); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -12024,13 +10527,37 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) { + if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) { return super.equals(obj); } - monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj; + monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj; - if (!getKpiDescriptorListList() - .equals(other.getKpiDescriptorListList())) return false; + 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 (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -12042,78 +10569,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(); + 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(); } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static monitoring.Monitoring.KpiDescriptorList parseFrom( + public static monitoring.Monitoring.SubsDescriptor parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList parseFrom(byte[] data) + public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList parseFrom( + public static monitoring.Monitoring.SubsDescriptor parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -12126,7 +10671,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.SubsDescriptor prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -12142,26 +10687,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.KpiDescriptorList} + * Protobuf type {@code monitoring.SubsDescriptor} */ 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.SubsDescriptor) + monitoring.Monitoring.SubsDescriptorOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_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_KpiDescriptorList_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class); + monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class); } - // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder() + // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -12174,17 +10719,38 @@ 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); + if (subsIdBuilder_ == null) { + subsId_ = null; } else { - kpiDescriptorListBuilder_.clear(); + 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; } @@ -12192,17 +10758,17 @@ public final class Monitoring { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor; + return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor; } @java.lang.Override - public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() { - return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance(); + public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() { + return monitoring.Monitoring.SubsDescriptor.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.KpiDescriptorList build() { - monitoring.Monitoring.KpiDescriptorList result = buildPartial(); + public monitoring.Monitoring.SubsDescriptor build() { + monitoring.Monitoring.SubsDescriptor result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -12210,17 +10776,29 @@ 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_; + public monitoring.Monitoring.SubsDescriptor buildPartial() { + monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this); + if (subsIdBuilder_ == null) { + result.subsId_ = subsId_; } else { - result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build(); + 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; @@ -12258,312 +10836,673 @@ public final class Monitoring { 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.KpiDescriptorList) { - return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other); + @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; + } + /** + * <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 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 { - super.mergeFrom(other); - return this; + return kpiIdBuilder_.getMessage(); } } - - 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(); + /** + * <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 { - 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_); - } - } + kpiIdBuilder_.setMessage(value); } - this.mergeUnknownFields(other.unknownFields); - onChanged(); + return this; } + /** + * <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()); + } - @java.lang.Override - public final boolean isInitialized() { - return true; + return this; } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - monitoring.Monitoring.KpiDescriptorList parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); + /** + * <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; } + onChanged(); + } else { + kpiIdBuilder_.mergeFrom(value); } - 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; - } + 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>.monitoring.KpiId kpi_id = 2;</code> */ - public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() { - if (kpiDescriptorListBuilder_ == null) { - return java.util.Collections.unmodifiableList(kpiDescriptorList_); + public Builder clearKpiId() { + if (kpiIdBuilder_ == null) { + kpiId_ = null; + onChanged(); } else { - return kpiDescriptorListBuilder_.getMessageList(); + kpiId_ = null; + kpiIdBuilder_ = null; } + + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.KpiId kpi_id = 2;</code> */ - public int getKpiDescriptorListCount() { - if (kpiDescriptorListBuilder_ == null) { - return kpiDescriptorList_.size(); + public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() { + + onChanged(); + return getKpiIdFieldBuilder().getBuilder(); + } + /** + * <code>.monitoring.KpiId kpi_id = 2;</code> + */ + public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() { + if (kpiIdBuilder_ != null) { + return kpiIdBuilder_.getMessageOrBuilder(); } else { - return kpiDescriptorListBuilder_.getCount(); + return kpiId_ == null ? + monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; } } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>.monitoring.KpiId kpi_id = 2;</code> */ - public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) { - if (kpiDescriptorListBuilder_ == null) { - return kpiDescriptorList_.get(index); - } else { - return kpiDescriptorListBuilder_.getMessage(index); + 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 float samplingDurationS_ ; /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <code>float sampling_duration_s = 3;</code> + * @return The samplingDurationS. */ - public Builder setKpiDescriptorList( - int index, monitoring.Monitoring.KpiDescriptor value) { - if (kpiDescriptorListBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureKpiDescriptorListIsMutable(); - kpiDescriptorList_.set(index, value); - onChanged(); + @java.lang.Override + public float getSamplingDurationS() { + return samplingDurationS_; + } + /** + * <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; + } + /** + * <code>float sampling_duration_s = 3;</code> + * @return This builder for chaining. + */ + public Builder clearSamplingDurationS() { + + samplingDurationS_ = 0F; + onChanged(); + return this; + } + + private float samplingIntervalS_ ; + /** + * <code>float sampling_interval_s = 4;</code> + * @return The samplingIntervalS. + */ + @java.lang.Override + public float getSamplingIntervalS() { + return samplingIntervalS_; + } + /** + * <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(); + return this; + } + /** + * <code>float sampling_interval_s = 4;</code> + * @return This builder for chaining. + */ + public Builder clearSamplingIntervalS() { + + samplingIntervalS_ = 0F; + onChanged(); + return this; + } + + 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. + */ + public boolean hasStartTimestamp() { + return startTimestampBuilder_ != null || startTimestamp_ != 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. + */ + public context.ContextOuterClass.Timestamp getStartTimestamp() { + if (startTimestampBuilder_ == null) { + return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_; } else { - kpiDescriptorListBuilder_.setMessage(index, value); + return startTimestampBuilder_.getMessage(); } - return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> */ - public Builder setKpiDescriptorList( - int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) { - if (kpiDescriptorListBuilder_ == null) { - ensureKpiDescriptorListIsMutable(); - kpiDescriptorList_.set(index, builderForValue.build()); + public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) { + if (startTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + startTimestamp_ = value; onChanged(); } else { - kpiDescriptorListBuilder_.setMessage(index, builderForValue.build()); + startTimestampBuilder_.setMessage(value); } + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> */ - public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) { - if (kpiDescriptorListBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureKpiDescriptorListIsMutable(); - kpiDescriptorList_.add(value); + public Builder setStartTimestamp( + context.ContextOuterClass.Timestamp.Builder builderForValue) { + if (startTimestampBuilder_ == null) { + startTimestamp_ = builderForValue.build(); onChanged(); } else { - kpiDescriptorListBuilder_.addMessage(value); + startTimestampBuilder_.setMessage(builderForValue.build()); } + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> */ - public Builder addKpiDescriptorList( - int index, monitoring.Monitoring.KpiDescriptor value) { - if (kpiDescriptorListBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); + 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; } - ensureKpiDescriptorListIsMutable(); - kpiDescriptorList_.add(index, value); onChanged(); } else { - kpiDescriptorListBuilder_.addMessage(index, value); + startTimestampBuilder_.mergeFrom(value); } + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> */ - public Builder addKpiDescriptorList( - monitoring.Monitoring.KpiDescriptor.Builder builderForValue) { - if (kpiDescriptorListBuilder_ == null) { - ensureKpiDescriptorListIsMutable(); - kpiDescriptorList_.add(builderForValue.build()); + public Builder clearStartTimestamp() { + if (startTimestampBuilder_ == null) { + startTimestamp_ = null; onChanged(); } else { - kpiDescriptorListBuilder_.addMessage(builderForValue.build()); + startTimestamp_ = null; + startTimestampBuilder_ = null; } + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</code> */ - public Builder addKpiDescriptorList( - int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) { - if (kpiDescriptorListBuilder_ == null) { - ensureKpiDescriptorListIsMutable(); - kpiDescriptorList_.add(index, builderForValue.build()); - onChanged(); + 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 { - kpiDescriptorListBuilder_.addMessage(index, builderForValue.build()); + return startTimestamp_ == null ? + context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_; } - return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples since X date/time" + * </pre> + * + * <code>.context.Timestamp start_timestamp = 5;</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 { - kpiDescriptorListBuilder_.addAllMessages(values); + 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 this; + return startTimestampBuilder_; } + + private context.ContextOuterClass.Timestamp endTimestamp_; + private com.google.protobuf.SingleFieldBuilderV3< + context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_; /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <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 Builder clearKpiDescriptorList() { - if (kpiDescriptorListBuilder_ == null) { - kpiDescriptorList_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); + 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. + */ + public context.ContextOuterClass.Timestamp getEndTimestamp() { + if (endTimestampBuilder_ == null) { + return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_; } else { - kpiDescriptorListBuilder_.clear(); + return endTimestampBuilder_.getMessage(); } - return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ - public Builder removeKpiDescriptorList(int index) { - if (kpiDescriptorListBuilder_ == null) { - ensureKpiDescriptorListIsMutable(); - kpiDescriptorList_.remove(index); + public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) { + if (endTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + endTimestamp_ = value; onChanged(); } else { - kpiDescriptorListBuilder_.remove(index); + endTimestampBuilder_.setMessage(value); } + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ - public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder( - int index) { - return getKpiDescriptorListFieldBuilder().getBuilder(index); + public Builder setEndTimestamp( + context.ContextOuterClass.Timestamp.Builder builderForValue) { + if (endTimestampBuilder_ == null) { + endTimestamp_ = builderForValue.build(); + onChanged(); + } else { + endTimestampBuilder_.setMessage(builderForValue.build()); + } + + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ - public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder( - int index) { - if (kpiDescriptorListBuilder_ == null) { - return kpiDescriptorList_.get(index); } else { - return kpiDescriptorListBuilder_.getMessageOrBuilder(index); + 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; + } + onChanged(); + } else { + endTimestampBuilder_.mergeFrom(value); } + + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ - public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> - getKpiDescriptorListOrBuilderList() { - if (kpiDescriptorListBuilder_ != null) { - return kpiDescriptorListBuilder_.getMessageOrBuilderList(); + public Builder clearEndTimestamp() { + if (endTimestampBuilder_ == null) { + endTimestamp_ = null; + onChanged(); } else { - return java.util.Collections.unmodifiableList(kpiDescriptorList_); + endTimestamp_ = null; + endTimestampBuilder_ = null; } + + return this; } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ - public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() { - return getKpiDescriptorListFieldBuilder().addBuilder( - monitoring.Monitoring.KpiDescriptor.getDefaultInstance()); + public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() { + + onChanged(); + return getEndTimestampFieldBuilder().getBuilder(); } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</code> */ - public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder( - int index) { - return getKpiDescriptorListFieldBuilder().addBuilder( - index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance()); + public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() { + if (endTimestampBuilder_ != null) { + return endTimestampBuilder_.getMessageOrBuilder(); + } else { + return endTimestamp_ == null ? + context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_; + } } /** - * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code> + * <pre> + * used when you want something like "get the samples until X date/time" + * </pre> + * + * <code>.context.Timestamp end_timestamp = 6;</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), + 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(), getParentForChildren(), isClean()); - kpiDescriptorList_ = null; + endTimestamp_ = null; } - return kpiDescriptorListBuilder_; + return endTimestampBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -12578,139 +11517,85 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList) + // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor) } - // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList) - private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor) + private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList(); + DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor(); } - public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() { + public static monitoring.Monitoring.SubsDescriptor 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<SubsDescriptor> + PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() { @java.lang.Override - public KpiDescriptorList parsePartialFrom( + public SubsDescriptor parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new KpiDescriptorList(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<KpiDescriptorList> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() { - return PARSER; - } - - @java.lang.Override - public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface SubsDescriptorOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor) - 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(); + return new SubsDescriptor(input, extensionRegistry); + } + }; - /** - * <code>float sampling_duration_s = 2;</code> - * @return The samplingDurationS. - */ - float getSamplingDurationS(); + public static com.google.protobuf.Parser<SubsDescriptor> parser() { + return PARSER; + } - /** - * <code>float sampling_interval_s = 3;</code> - * @return The samplingIntervalS. - */ - float getSamplingIntervalS(); + @java.lang.Override + public com.google.protobuf.Parser<SubsDescriptor> getParserForType() { + return PARSER; + } + + @java.lang.Override + public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface SubscriptionIDOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID) + com.google.protobuf.MessageOrBuilder { /** - * <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.String getStartDate(); - /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> + * @return Whether the subsId field is set. */ - com.google.protobuf.ByteString - getStartDateBytes(); - + boolean hasSubsId(); /** - * <pre> - * used when you want something like "get the samples until X date/time" - * </pre> - * - * <code>string end_date = 5;</code> - * @return The endDate. + * <code>.context.Uuid subs_id = 1;</code> + * @return The subsId. */ - java.lang.String getEndDate(); + context.ContextOuterClass.Uuid getSubsId(); /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ - com.google.protobuf.ByteString - getEndDateBytes(); + context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder(); } /** - * Protobuf type {@code monitoring.SubsDescriptor} + * Protobuf type {@code monitoring.SubscriptionID} */ - public static final class SubsDescriptor extends + public static final class SubscriptionID extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor) - SubsDescriptorOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID) + SubscriptionIDOrBuilder { private static final long serialVersionUID = 0L; - // Use SubsDescriptor.newBuilder() to construct. - private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use SubscriptionID.newBuilder() to construct. + private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private SubsDescriptor() { - startDate_ = ""; - endDate_ = ""; + private SubscriptionID() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new SubsDescriptor(); + return new SubscriptionID(); } @java.lang.Override @@ -12718,7 +11603,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private SubsDescriptor( + private SubscriptionID( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -12737,40 +11622,18 @@ public final class Monitoring { done = true; break; case 10: { - monitoring.Monitoring.KpiId.Builder subBuilder = null; - if (kpiId_ != null) { - subBuilder = kpiId_.toBuilder(); + context.ContextOuterClass.Uuid.Builder subBuilder = null; + if (subsId_ != null) { + subBuilder = subsId_.toBuilder(); } - kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry); + subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry); if (subBuilder != null) { - subBuilder.mergeFrom(kpiId_); - kpiId_ = subBuilder.buildPartial(); + subBuilder.mergeFrom(subsId_); + subsId_ = subBuilder.buildPartial(); } break; } - 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: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -12792,155 +11655,41 @@ public final class Monitoring { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_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_SubsDescriptor_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.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 SAMPLING_DURATION_S_FIELD_NUMBER = 2; - private float samplingDurationS_; - /** - * <code>float sampling_duration_s = 2;</code> - * @return The samplingDurationS. - */ - @java.lang.Override - public float getSamplingDurationS() { - return samplingDurationS_; - } - - public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 3; - private float samplingIntervalS_; - /** - * <code>float sampling_interval_s = 3;</code> - * @return The samplingIntervalS. - */ - @java.lang.Override - public float getSamplingIntervalS() { - return samplingIntervalS_; + monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class); } - public static final int START_DATE_FIELD_NUMBER = 4; - private volatile java.lang.Object startDate_; - /** - * <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 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; - } - } + public static final int SUBS_ID_FIELD_NUMBER = 1; + private context.ContextOuterClass.Uuid subsId_; /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> + * @return Whether the subsId field is set. */ @java.lang.Override - 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 boolean hasSubsId() { + return subsId_ != null; } - - public static final int END_DATE_FIELD_NUMBER = 5; - private volatile java.lang.Object endDate_; /** - * <pre> - * used when you want something like "get the samples until X date/time" - * </pre> - * - * <code>string end_date = 5;</code> - * @return The endDate. + * <code>.context.Uuid subs_id = 1;</code> + * @return The subsId. */ @java.lang.Override - 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; - } + public context.ContextOuterClass.Uuid getSubsId() { + return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_; } /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ @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; - } + public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() { + return getSubsId(); } private byte memoizedIsInitialized = -1; @@ -12957,20 +11706,8 @@ 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 (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_); + if (subsId_ != null) { + output.writeMessage(1, getSubsId()); } unknownFields.writeTo(output); } @@ -12981,23 +11718,9 @@ public final class Monitoring { if (size != -1) return size; size = 0; - if (kpiId_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getKpiId()); - } - if (samplingDurationS_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(2, samplingDurationS_); - } - if (samplingIntervalS_ != 0F) { + if (subsId_ != null) { 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_); + .computeMessageSize(1, getSubsId()); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -13009,26 +11732,16 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) { + if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) { return super.equals(obj); } - monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj; + monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj; - if (hasKpiId() != other.hasKpiId()) return false; - if (hasKpiId()) { - if (!getKpiId() - .equals(other.getKpiId())) return false; + if (hasSubsId() != other.hasSubsId()) return false; + if (hasSubsId()) { + if (!getSubsId() + .equals(other.getSubsId())) 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; } @@ -13040,88 +11753,78 @@ 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(); + if (hasSubsId()) { + hash = (37 * hash) + SUBS_ID_FIELD_NUMBER; + hash = (53 * hash) + getSubsId().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.SubsDescriptor parseFrom( + public static monitoring.Monitoring.SubscriptionID parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor parseFrom(byte[] data) + public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor parseFrom( + public static monitoring.Monitoring.SubscriptionID parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -13134,7 +11837,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.SubscriptionID prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -13150,26 +11853,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.SubsDescriptor} + * Protobuf type {@code monitoring.SubscriptionID} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor) - monitoring.Monitoring.SubsDescriptorOrBuilder { + // @@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_SubsDescriptor_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_SubsDescriptor_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class); + monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class); } - // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder() + // Construct using monitoring.Monitoring.SubscriptionID.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -13187,37 +11890,29 @@ public final class Monitoring { @java.lang.Override public Builder clear() { super.clear(); - if (kpiIdBuilder_ == null) { - kpiId_ = null; + if (subsIdBuilder_ == null) { + subsId_ = null; } else { - kpiId_ = null; - kpiIdBuilder_ = null; + subsId_ = null; + subsIdBuilder_ = 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_SubsDescriptor_descriptor; + return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor; } @java.lang.Override - public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() { - return monitoring.Monitoring.SubsDescriptor.getDefaultInstance(); + public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() { + return monitoring.Monitoring.SubscriptionID.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.SubsDescriptor build() { - monitoring.Monitoring.SubsDescriptor result = buildPartial(); + public monitoring.Monitoring.SubscriptionID build() { + monitoring.Monitoring.SubscriptionID result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -13225,17 +11920,13 @@ public final class Monitoring { } @java.lang.Override - public monitoring.Monitoring.SubsDescriptor buildPartial() { - monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this); - if (kpiIdBuilder_ == null) { - result.kpiId_ = kpiId_; + public monitoring.Monitoring.SubscriptionID buildPartial() { + monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this); + if (subsIdBuilder_ == null) { + result.subsId_ = subsId_; } else { - result.kpiId_ = kpiIdBuilder_.build(); + result.subsId_ = subsIdBuilder_.build(); } - result.samplingDurationS_ = samplingDurationS_; - result.samplingIntervalS_ = samplingIntervalS_; - result.startDate_ = startDate_; - result.endDate_ = endDate_; onBuilt(); return result; } @@ -13250,457 +11941,189 @@ public final class Monitoring { 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.hasKpiId()) { - mergeKpiId(other.getKpiId()); - } - 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(); - 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.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(); + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); } - /** - * <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 clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); } - /** - * <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_; + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); } - - private float samplingDurationS_ ; - /** - * <code>float sampling_duration_s = 2;</code> - * @return The samplingDurationS. - */ @java.lang.Override - public float getSamplingDurationS() { - return samplingDurationS_; + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); } - /** - * <code>float sampling_duration_s = 2;</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 mergeFrom(com.google.protobuf.Message other) { + if (other instanceof monitoring.Monitoring.SubscriptionID) { + return mergeFrom((monitoring.Monitoring.SubscriptionID)other); + } else { + super.mergeFrom(other); + return this; + } } - /** - * <code>float sampling_duration_s = 2;</code> - * @return This builder for chaining. - */ - public Builder clearSamplingDurationS() { - - samplingDurationS_ = 0F; + + 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(); return this; } - private float samplingIntervalS_ ; - /** - * <code>float sampling_interval_s = 3;</code> - * @return The samplingIntervalS. - */ @java.lang.Override - public float getSamplingIntervalS() { - return samplingIntervalS_; + public final boolean isInitialized() { + return true; } - /** - * <code>float sampling_interval_s = 3;</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.SubscriptionID parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } return this; } + + private context.ContextOuterClass.Uuid subsId_; + private com.google.protobuf.SingleFieldBuilderV3< + context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_; /** - * <code>float sampling_interval_s = 3;</code> - * @return This builder for chaining. + * <code>.context.Uuid subs_id = 1;</code> + * @return Whether the subsId field is set. */ - public Builder clearSamplingIntervalS() { - - samplingIntervalS_ = 0F; - onChanged(); - return this; + public boolean hasSubsId() { + return subsIdBuilder_ != null || subsId_ != null; } - - private java.lang.Object startDate_ = ""; /** - * <pre> - * used when you want something like "get the samples since X date/time" - * </pre> - * - * <code>string start_date = 4;</code> - * @return The startDate. + * <code>.context.Uuid subs_id = 1;</code> + * @return The subsId. */ - 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; + public context.ContextOuterClass.Uuid getSubsId() { + if (subsIdBuilder_ == null) { + return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_; } else { - return (java.lang.String) ref; + return subsIdBuilder_.getMessage(); } } /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ - 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; + public Builder setSubsId(context.ContextOuterClass.Uuid value) { + if (subsIdBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + subsId_ = value; + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + subsIdBuilder_.setMessage(value); } - } - /** - * <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; - } - /** - * <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 clearStartDate() { - - startDate_ = getDefaultInstance().getStartDate(); - onChanged(); + return this; } /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ - public Builder setStartDateBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - startDate_ = value; - onChanged(); + public Builder setSubsId( + context.ContextOuterClass.Uuid.Builder builderForValue) { + if (subsIdBuilder_ == null) { + subsId_ = builderForValue.build(); + onChanged(); + } else { + subsIdBuilder_.setMessage(builderForValue.build()); + } + return this; } - - private java.lang.Object endDate_ = ""; /** - * <pre> - * used when you want something like "get the samples until X date/time" - * </pre> - * - * <code>string end_date = 5;</code> - * @return The endDate. + * <code>.context.Uuid subs_id = 1;</code> */ - 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; + 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; + } + onChanged(); } else { - return (java.lang.String) ref; + subsIdBuilder_.mergeFrom(value); } + + return this; } /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ - 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; + public Builder clearSubsId() { + if (subsIdBuilder_ == null) { + subsId_ = null; + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + subsId_ = null; + subsIdBuilder_ = null; } + + return this; } /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ - public Builder setEndDate( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - endDate_ = value; + public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() { + onChanged(); - return this; + return getSubsIdFieldBuilder().getBuilder(); } /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ - public Builder clearEndDate() { - - endDate_ = getDefaultInstance().getEndDate(); - onChanged(); - return this; + public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() { + if (subsIdBuilder_ != null) { + return subsIdBuilder_.getMessageOrBuilder(); + } else { + return subsId_ == null ? + context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_; + } } /** - * <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. + * <code>.context.Uuid subs_id = 1;</code> */ - public Builder setEndDateBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - endDate_ = value; - onChanged(); - return this; + 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()); + subsId_ = null; + } + return subsIdBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -13715,85 +12138,110 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor) + // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID) } - // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor) - private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID) + private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor(); + DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID(); } - public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() { + public static monitoring.Monitoring.SubscriptionID 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<SubscriptionID> + PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() { @java.lang.Override - public SubsDescriptor parsePartialFrom( + public SubscriptionID parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new SubsDescriptor(input, extensionRegistry); + return new SubscriptionID(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<SubsDescriptor> parser() { + public static com.google.protobuf.Parser<SubscriptionID> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<SubsDescriptor> getParserForType() { + public com.google.protobuf.Parser<SubscriptionID> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() { + public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface SubscriptionIDOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID) + public interface SubsResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse) com.google.protobuf.MessageOrBuilder { /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> * @return Whether the subsId field is set. */ boolean hasSubsId(); /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> * @return The subsId. */ - context.ContextOuterClass.Uuid getSubsId(); + monitoring.Monitoring.SubscriptionID getSubsId(); /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> */ - context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder(); + monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder(); + + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + java.util.List<monitoring.Monitoring.KpiList> + getKpiListList(); + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + monitoring.Monitoring.KpiList getKpiList(int index); + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + int getKpiListCount(); + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> + getKpiListOrBuilderList(); + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder( + int index); } /** - * Protobuf type {@code monitoring.SubscriptionID} + * Protobuf type {@code monitoring.SubsResponse} */ - public static final class SubscriptionID extends + public static final class SubsResponse extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID) - SubscriptionIDOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.SubsResponse) + SubsResponseOrBuilder { private static final long serialVersionUID = 0L; - // Use SubscriptionID.newBuilder() to construct. - private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use SubsResponse.newBuilder() to construct. + private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private SubscriptionID() { + private SubsResponse() { + kpiList_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new SubscriptionID(); + return new SubsResponse(); } @java.lang.Override @@ -13801,7 +12249,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private SubscriptionID( + private SubsResponse( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -13809,6 +12257,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 { @@ -13820,11 +12269,11 @@ public final class Monitoring { done = true; break; case 10: { - context.ContextOuterClass.Uuid.Builder subBuilder = null; + monitoring.Monitoring.SubscriptionID.Builder subBuilder = null; if (subsId_ != null) { subBuilder = subsId_.toBuilder(); } - subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry); + subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry); if (subBuilder != null) { subBuilder.mergeFrom(subsId_); subsId_ = subBuilder.buildPartial(); @@ -13832,6 +12281,15 @@ public final class Monitoring { 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)); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -13847,27 +12305,30 @@ 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_SubscriptionID_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_SubscriptionID_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class); + monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class); } public static final int SUBS_ID_FIELD_NUMBER = 1; - private context.ContextOuterClass.Uuid subsId_; + private monitoring.Monitoring.SubscriptionID subsId_; /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> * @return Whether the subsId field is set. */ @java.lang.Override @@ -13875,21 +12336,61 @@ public final class Monitoring { return subsId_ != null; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> * @return The subsId. */ @java.lang.Override - public context.ContextOuterClass.Uuid getSubsId() { - return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_; + public monitoring.Monitoring.SubscriptionID getSubsId() { + return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>.monitoring.SubscriptionID subs_id = 1;</code> */ @java.lang.Override - public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() { + public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() { return getSubsId(); } + public static final int KPI_LIST_FIELD_NUMBER = 2; + private java.util.List<monitoring.Monitoring.KpiList> kpiList_; + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + @java.lang.Override + public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() { + return kpiList_; + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + @java.lang.Override + public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> + getKpiListOrBuilderList() { + return kpiList_; + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + @java.lang.Override + public int getKpiListCount() { + return kpiList_.size(); + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + @java.lang.Override + public monitoring.Monitoring.KpiList getKpiList(int index) { + return kpiList_.get(index); + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + @java.lang.Override + public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder( + int index) { + return kpiList_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -13907,6 +12408,9 @@ public final class Monitoring { if (subsId_ != null) { output.writeMessage(1, getSubsId()); } + for (int i = 0; i < kpiList_.size(); i++) { + output.writeMessage(2, kpiList_.get(i)); + } unknownFields.writeTo(output); } @@ -13920,6 +12424,10 @@ public final class Monitoring { size += com.google.protobuf.CodedOutputStream .computeMessageSize(1, getSubsId()); } + for (int i = 0; i < kpiList_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, kpiList_.get(i)); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -13930,16 +12438,18 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) { + if (!(obj instanceof monitoring.Monitoring.SubsResponse)) { return super.equals(obj); } - monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj; + monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj; 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; } @@ -13955,74 +12465,78 @@ public final class Monitoring { 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(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static monitoring.Monitoring.SubscriptionID parseFrom( + public static monitoring.Monitoring.SubsResponse parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubscriptionID 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.SubscriptionID 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.SubscriptionID 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.SubscriptionID parseFrom(byte[] data) + public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubscriptionID 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.SubscriptionID 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.SubscriptionID 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.SubscriptionID 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.SubscriptionID 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.SubscriptionID 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.SubscriptionID parseFrom( + public static monitoring.Monitoring.SubsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -14035,7 +12549,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.SubsResponse prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -14051,26 +12565,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.SubscriptionID} + * Protobuf type {@code monitoring.SubsResponse} */ 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.SubsResponse) + monitoring.Monitoring.SubsResponseOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_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_SubscriptionID_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class); + monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class); } - // Construct using monitoring.Monitoring.SubscriptionID.newBuilder() + // Construct using monitoring.Monitoring.SubsResponse.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -14083,6 +12597,7 @@ public final class Monitoring { private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { + getKpiListFieldBuilder(); } } @java.lang.Override @@ -14094,23 +12609,29 @@ public final class Monitoring { subsId_ = null; subsIdBuilder_ = null; } + if (kpiListBuilder_ == null) { + kpiList_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + kpiListBuilder_.clear(); + } return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor; + return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor; } @java.lang.Override - public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() { - return monitoring.Monitoring.SubscriptionID.getDefaultInstance(); + public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() { + return monitoring.Monitoring.SubsResponse.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.SubscriptionID build() { - monitoring.Monitoring.SubscriptionID result = buildPartial(); + public monitoring.Monitoring.SubsResponse build() { + monitoring.Monitoring.SubsResponse result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -14118,13 +12639,23 @@ public final class Monitoring { } @java.lang.Override - public monitoring.Monitoring.SubscriptionID buildPartial() { - monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this); + 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(); } + if (kpiListBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + kpiList_ = java.util.Collections.unmodifiableList(kpiList_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.kpiList_ = kpiList_; + } else { + result.kpiList_ = kpiListBuilder_.build(); + } onBuilt(); return result; } @@ -14163,19 +12694,45 @@ 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.SubsResponse) { + return mergeFrom((monitoring.Monitoring.SubsResponse)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) { - if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this; + public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) { + if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this; if (other.hasSubsId()) { mergeSubsId(other.getSubsId()); } + 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; @@ -14191,11 +12748,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.SubsResponse parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -14204,124 +12761,365 @@ public final class Monitoring { } return this; } - - private context.ContextOuterClass.Uuid subsId_; - private com.google.protobuf.SingleFieldBuilderV3< - context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_; + private int bitField0_; + + 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; + } + /** + * <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>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); + } + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + 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; + } /** - * <code>.context.Uuid subs_id = 1;</code> - * @return Whether the subsId field is set. + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> */ - public boolean hasSubsId() { - return subsIdBuilder_ != null || subsId_ != null; + 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()); + } + return this; } /** - * <code>.context.Uuid subs_id = 1;</code> - * @return The subsId. + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> */ - public context.ContextOuterClass.Uuid getSubsId() { - if (subsIdBuilder_ == null) { - return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_; + public Builder addKpiList(monitoring.Monitoring.KpiList value) { + if (kpiListBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKpiListIsMutable(); + kpiList_.add(value); + onChanged(); } else { - return subsIdBuilder_.getMessage(); + kpiListBuilder_.addMessage(value); } + return this; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> */ - public Builder setSubsId(context.ContextOuterClass.Uuid value) { - if (subsIdBuilder_ == null) { + public Builder addKpiList( + int index, monitoring.Monitoring.KpiList value) { + if (kpiListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - subsId_ = value; + ensureKpiListIsMutable(); + kpiList_.add(index, value); onChanged(); } else { - subsIdBuilder_.setMessage(value); + kpiListBuilder_.addMessage(index, value); } - return this; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> */ - public Builder setSubsId( - context.ContextOuterClass.Uuid.Builder builderForValue) { - if (subsIdBuilder_ == null) { - subsId_ = builderForValue.build(); + public Builder addKpiList( + monitoring.Monitoring.KpiList.Builder builderForValue) { + if (kpiListBuilder_ == null) { + ensureKpiListIsMutable(); + kpiList_.add(builderForValue.build()); onChanged(); } else { - subsIdBuilder_.setMessage(builderForValue.build()); + kpiListBuilder_.addMessage(builderForValue.build()); } - return this; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>repeated .monitoring.KpiList kpi_list = 2;</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 addKpiList( + int index, monitoring.Monitoring.KpiList.Builder builderForValue) { + if (kpiListBuilder_ == null) { + ensureKpiListIsMutable(); + kpiList_.add(index, builderForValue.build()); onChanged(); } else { - subsIdBuilder_.mergeFrom(value); + kpiListBuilder_.addMessage(index, builderForValue.build()); } - return this; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> */ - public Builder clearSubsId() { - if (subsIdBuilder_ == null) { - subsId_ = null; + 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 { - subsId_ = null; - subsIdBuilder_ = null; + kpiListBuilder_.addAllMessages(values); } - return this; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> */ - public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() { - - onChanged(); - return getSubsIdFieldBuilder().getBuilder(); + public Builder clearKpiList() { + if (kpiListBuilder_ == null) { + kpiList_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + kpiListBuilder_.clear(); + } + return this; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> */ - public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() { - if (subsIdBuilder_ != null) { - return subsIdBuilder_.getMessageOrBuilder(); + public Builder removeKpiList(int index) { + if (kpiListBuilder_ == null) { + ensureKpiListIsMutable(); + kpiList_.remove(index); + onChanged(); } else { - return subsId_ == null ? - context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_; + kpiListBuilder_.remove(index); } + return this; } /** - * <code>.context.Uuid subs_id = 1;</code> + * <code>repeated .monitoring.KpiList kpi_list = 2;</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.KpiList.Builder getKpiListBuilder( + int index) { + return getKpiListFieldBuilder().getBuilder(index); + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder( + int index) { + if (kpiListBuilder_ == null) { + return kpiList_.get(index); } else { + return kpiListBuilder_.getMessageOrBuilder(index); + } + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> + getKpiListOrBuilderList() { + if (kpiListBuilder_ != null) { + return kpiListBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(kpiList_); + } + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() { + return getKpiListFieldBuilder().addBuilder( + monitoring.Monitoring.KpiList.getDefaultInstance()); + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + public monitoring.Monitoring.KpiList.Builder addKpiListBuilder( + int index) { + return getKpiListFieldBuilder().addBuilder( + index, monitoring.Monitoring.KpiList.getDefaultInstance()); + } + /** + * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + */ + 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()); - subsId_ = null; + kpiList_ = null; } - return subsIdBuilder_; + return kpiListBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -14336,110 +13134,95 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID) + // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse) } - // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID) - private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.SubsResponse) + private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID(); + DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse(); } - public static monitoring.Monitoring.SubscriptionID getDefaultInstance() { + public static monitoring.Monitoring.SubsResponse 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<SubsResponse> + PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() { @java.lang.Override - public SubscriptionID parsePartialFrom( + public SubsResponse parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new SubscriptionID(input, extensionRegistry); + return new SubsResponse(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<SubscriptionID> parser() { + public static com.google.protobuf.Parser<SubsResponse> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<SubscriptionID> getParserForType() { + public com.google.protobuf.Parser<SubsResponse> getParserForType() { return PARSER; } - @java.lang.Override - public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface SubsResponseOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse) - 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(); - + @java.lang.Override + public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface SubsIDListOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList) + com.google.protobuf.MessageOrBuilder { + /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - java.util.List<monitoring.Monitoring.KpiList> - getKpiListList(); + java.util.List<monitoring.Monitoring.SubscriptionID> + getSubsListList(); /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - monitoring.Monitoring.KpiList getKpiList(int index); + monitoring.Monitoring.SubscriptionID getSubsList(int index); /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - int getKpiListCount(); + int getSubsListCount(); /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> - getKpiListOrBuilderList(); + java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> + getSubsListOrBuilderList(); /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder( + monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder( int index); } /** - * Protobuf type {@code monitoring.SubsResponse} + * Protobuf type {@code monitoring.SubsIDList} */ - public static final class SubsResponse extends + public static final class SubsIDList extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.SubsResponse) - SubsResponseOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.SubsIDList) + SubsIDListOrBuilder { private static final long serialVersionUID = 0L; - // Use SubsResponse.newBuilder() to construct. - private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use SubsIDList.newBuilder() to construct. + private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private SubsResponse() { - kpiList_ = java.util.Collections.emptyList(); + private SubsIDList() { + subsList_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new SubsResponse(); + return new SubsIDList(); } @java.lang.Override @@ -14447,7 +13230,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private SubsResponse( + private SubsIDList( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -14467,25 +13250,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: { if (!((mutable_bitField0_ & 0x00000001) != 0)) { - kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(); + subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(); mutable_bitField0_ |= 0x00000001; } - kpiList_.add( - input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry)); + subsList_.add( + input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry)); break; } default: { @@ -14504,7 +13274,7 @@ public final class Monitoring { e).setUnfinishedMessage(this); } finally { if (((mutable_bitField0_ & 0x00000001) != 0)) { - kpiList_ = java.util.Collections.unmodifiableList(kpiList_); + subsList_ = java.util.Collections.unmodifiableList(subsList_); } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); @@ -14512,81 +13282,55 @@ public final class Monitoring { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor; + return monitoring.Monitoring.internal_static_monitoring_SubsIDList_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_SubsIDList_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.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(); + monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class); } - public static final int KPI_LIST_FIELD_NUMBER = 2; - private java.util.List<monitoring.Monitoring.KpiList> kpiList_; + public static final int SUBS_LIST_FIELD_NUMBER = 1; + private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_; /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ @java.lang.Override - public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() { - return kpiList_; + public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() { + return subsList_; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ @java.lang.Override - public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> - getKpiListOrBuilderList() { - return kpiList_; + public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> + getSubsListOrBuilderList() { + return subsList_; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ @java.lang.Override - public int getKpiListCount() { - return kpiList_.size(); + public int getSubsListCount() { + return subsList_.size(); } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ @java.lang.Override - public monitoring.Monitoring.KpiList getKpiList(int index) { - return kpiList_.get(index); + public monitoring.Monitoring.SubscriptionID getSubsList(int index) { + return subsList_.get(index); } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ @java.lang.Override - public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder( + public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder( int index) { - return kpiList_.get(index); + return subsList_.get(index); } private byte memoizedIsInitialized = -1; @@ -14603,11 +13347,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 < kpiList_.size(); i++) { - output.writeMessage(2, kpiList_.get(i)); + for (int i = 0; i < subsList_.size(); i++) { + output.writeMessage(1, subsList_.get(i)); } unknownFields.writeTo(output); } @@ -14618,13 +13359,9 @@ public final class Monitoring { if (size != -1) return size; size = 0; - if (subsId_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getSubsId()); - } - for (int i = 0; i < kpiList_.size(); i++) { + for (int i = 0; i < subsList_.size(); i++) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, kpiList_.get(i)); + .computeMessageSize(1, subsList_.get(i)); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -14636,18 +13373,13 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.SubsResponse)) { + if (!(obj instanceof monitoring.Monitoring.SubsIDList)) { return super.equals(obj); } - monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj; + monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj; - if (hasSubsId() != other.hasSubsId()) return false; - if (hasSubsId()) { - if (!getSubsId() - .equals(other.getSubsId())) return false; - } - if (!getKpiListList() - .equals(other.getKpiListList())) return false; + if (!getSubsListList() + .equals(other.getSubsListList())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -14659,82 +13391,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 (getKpiListCount() > 0) { - hash = (37 * hash) + KPI_LIST_FIELD_NUMBER; - hash = (53 * hash) + getKpiListList().hashCode(); + if (getSubsListCount() > 0) { + hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER; + hash = (53 * hash) + getSubsListList().hashCode(); } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static monitoring.Monitoring.SubsResponse parseFrom( + public static monitoring.Monitoring.SubsIDList parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubsResponse parseFrom( + 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.SubsResponse parseFrom( + public static monitoring.Monitoring.SubsIDList 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.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.SubsResponse parseFrom(byte[] data) + public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubsResponse parseFrom( + 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.SubsResponse parseFrom(java.io.InputStream input) + 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.SubsResponse parseFrom( + 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.SubsResponse parseDelimitedFrom(java.io.InputStream input) + 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.SubsResponse parseDelimitedFrom( + 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.SubsResponse parseFrom( + 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.SubsResponse parseFrom( + public static monitoring.Monitoring.SubsIDList parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -14747,7 +13475,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.SubsIDList prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -14763,26 +13491,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.SubsResponse} + * Protobuf type {@code monitoring.SubsIDList} */ 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.SubsIDList) + monitoring.Monitoring.SubsIDListOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor; + return monitoring.Monitoring.internal_static_monitoring_SubsIDList_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_SubsIDList_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class); + monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class); } - // Construct using monitoring.Monitoring.SubsResponse.newBuilder() + // Construct using monitoring.Monitoring.SubsIDList.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -14795,23 +13523,17 @@ public final class Monitoring { private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { - getKpiListFieldBuilder(); + getSubsListFieldBuilder(); } } @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(); + if (subsListBuilder_ == null) { + subsList_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000001); } else { - kpiListBuilder_.clear(); + subsListBuilder_.clear(); } return this; } @@ -14819,40 +13541,35 @@ public final class Monitoring { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor; + return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor; } @java.lang.Override - public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() { - return monitoring.Monitoring.SubsResponse.getDefaultInstance(); + public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() { + return monitoring.Monitoring.SubsIDList.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.SubsResponse build() { - monitoring.Monitoring.SubsResponse result = buildPartial(); + public monitoring.Monitoring.SubsIDList build() { + monitoring.Monitoring.SubsIDList result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } return result; } - @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(); - } - if (kpiListBuilder_ == null) { + @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)) { - kpiList_ = java.util.Collections.unmodifiableList(kpiList_); + subsList_ = java.util.Collections.unmodifiableList(subsList_); bitField0_ = (bitField0_ & ~0x00000001); } - result.kpiList_ = kpiList_; + result.subsList_ = subsList_; } else { - result.kpiList_ = kpiListBuilder_.build(); + result.subsList_ = subsListBuilder_.build(); } onBuilt(); return result; @@ -14892,42 +13609,39 @@ 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.SubsIDList) { + return mergeFrom((monitoring.Monitoring.SubsIDList)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()); - } - if (kpiListBuilder_ == null) { - if (!other.kpiList_.isEmpty()) { - if (kpiList_.isEmpty()) { - kpiList_ = other.kpiList_; + 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 { - ensureKpiListIsMutable(); - kpiList_.addAll(other.kpiList_); + ensureSubsListIsMutable(); + subsList_.addAll(other.subsList_); } onChanged(); } } else { - if (!other.kpiList_.isEmpty()) { - if (kpiListBuilder_.isEmpty()) { - kpiListBuilder_.dispose(); - kpiListBuilder_ = null; - kpiList_ = other.kpiList_; + if (!other.subsList_.isEmpty()) { + if (subsListBuilder_.isEmpty()) { + subsListBuilder_.dispose(); + subsListBuilder_ = null; + subsList_ = other.subsList_; bitField0_ = (bitField0_ & ~0x00000001); - kpiListBuilder_ = + subsListBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getKpiListFieldBuilder() : null; + getSubsListFieldBuilder() : null; } else { - kpiListBuilder_.addAllMessages(other.kpiList_); + subsListBuilder_.addAllMessages(other.subsList_); } } } @@ -14946,11 +13660,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.SubsIDList parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -14961,363 +13675,244 @@ public final class Monitoring { } private int bitField0_; - 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; - } - /** - * <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_ = + private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ = java.util.Collections.emptyList(); - private void ensureKpiListIsMutable() { + private void ensureSubsListIsMutable() { if (!((bitField0_ & 0x00000001) != 0)) { - kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_); + subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_); bitField0_ |= 0x00000001; } } private com.google.protobuf.RepeatedFieldBuilderV3< - monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_; + monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_; /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() { - if (kpiListBuilder_ == null) { - return java.util.Collections.unmodifiableList(kpiList_); + public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() { + if (subsListBuilder_ == null) { + return java.util.Collections.unmodifiableList(subsList_); } else { - return kpiListBuilder_.getMessageList(); + return subsListBuilder_.getMessageList(); } } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public int getKpiListCount() { - if (kpiListBuilder_ == null) { - return kpiList_.size(); + public int getSubsListCount() { + if (subsListBuilder_ == null) { + return subsList_.size(); } else { - return kpiListBuilder_.getCount(); + return subsListBuilder_.getCount(); } } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public monitoring.Monitoring.KpiList getKpiList(int index) { - if (kpiListBuilder_ == null) { - return kpiList_.get(index); + public monitoring.Monitoring.SubscriptionID getSubsList(int index) { + if (subsListBuilder_ == null) { + return subsList_.get(index); } else { - return kpiListBuilder_.getMessage(index); + return subsListBuilder_.getMessage(index); } } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder setKpiList( - int index, monitoring.Monitoring.KpiList value) { - if (kpiListBuilder_ == null) { + public Builder setSubsList( + int index, monitoring.Monitoring.SubscriptionID value) { + if (subsListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureKpiListIsMutable(); - kpiList_.set(index, value); + ensureSubsListIsMutable(); + subsList_.set(index, value); onChanged(); } else { - kpiListBuilder_.setMessage(index, value); + subsListBuilder_.setMessage(index, value); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder setKpiList( - int index, monitoring.Monitoring.KpiList.Builder builderForValue) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.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 { - kpiListBuilder_.setMessage(index, builderForValue.build()); + subsListBuilder_.setMessage(index, builderForValue.build()); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder addKpiList(monitoring.Monitoring.KpiList value) { - if (kpiListBuilder_ == null) { + public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) { + if (subsListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureKpiListIsMutable(); - kpiList_.add(value); + ensureSubsListIsMutable(); + subsList_.add(value); onChanged(); } else { - kpiListBuilder_.addMessage(value); + subsListBuilder_.addMessage(value); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> - */ - public Builder addKpiList( - int index, monitoring.Monitoring.KpiList value) { - if (kpiListBuilder_ == null) { + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + */ + public Builder addSubsList( + int index, monitoring.Monitoring.SubscriptionID value) { + if (subsListBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureKpiListIsMutable(); - kpiList_.add(index, value); + ensureSubsListIsMutable(); + subsList_.add(index, value); onChanged(); } else { - kpiListBuilder_.addMessage(index, value); + subsListBuilder_.addMessage(index, value); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder addKpiList( - monitoring.Monitoring.KpiList.Builder builderForValue) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.add(builderForValue.build()); + public Builder addSubsList( + monitoring.Monitoring.SubscriptionID.Builder builderForValue) { + if (subsListBuilder_ == null) { + ensureSubsListIsMutable(); + subsList_.add(builderForValue.build()); onChanged(); } else { - kpiListBuilder_.addMessage(builderForValue.build()); + subsListBuilder_.addMessage(builderForValue.build()); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder addKpiList( - int index, monitoring.Monitoring.KpiList.Builder builderForValue) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.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 { - kpiListBuilder_.addMessage(index, builderForValue.build()); + subsListBuilder_.addMessage(index, builderForValue.build()); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder addAllKpiList( - java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); + public Builder addAllSubsList( + java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) { + if (subsListBuilder_ == null) { + ensureSubsListIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, kpiList_); + values, subsList_); onChanged(); } else { - kpiListBuilder_.addAllMessages(values); + subsListBuilder_.addAllMessages(values); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder clearKpiList() { - if (kpiListBuilder_ == null) { - kpiList_ = java.util.Collections.emptyList(); + public Builder clearSubsList() { + if (subsListBuilder_ == null) { + subsList_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000001); onChanged(); } else { - kpiListBuilder_.clear(); + subsListBuilder_.clear(); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public Builder removeKpiList(int index) { - if (kpiListBuilder_ == null) { - ensureKpiListIsMutable(); - kpiList_.remove(index); + public Builder removeSubsList(int index) { + if (subsListBuilder_ == null) { + ensureSubsListIsMutable(); + subsList_.remove(index); onChanged(); } else { - kpiListBuilder_.remove(index); + subsListBuilder_.remove(index); } return this; } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public monitoring.Monitoring.KpiList.Builder getKpiListBuilder( + public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder( int index) { - return getKpiListFieldBuilder().getBuilder(index); + return getSubsListFieldBuilder().getBuilder(index); } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder( + public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder( int index) { - if (kpiListBuilder_ == null) { - return kpiList_.get(index); } else { - return kpiListBuilder_.getMessageOrBuilder(index); + if (subsListBuilder_ == null) { + return subsList_.get(index); } else { + return subsListBuilder_.getMessageOrBuilder(index); } } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> - getKpiListOrBuilderList() { - if (kpiListBuilder_ != null) { - return kpiListBuilder_.getMessageOrBuilderList(); + public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> + getSubsListOrBuilderList() { + if (subsListBuilder_ != null) { + return subsListBuilder_.getMessageOrBuilderList(); } else { - return java.util.Collections.unmodifiableList(kpiList_); + return java.util.Collections.unmodifiableList(subsList_); } } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() { - return getKpiListFieldBuilder().addBuilder( - monitoring.Monitoring.KpiList.getDefaultInstance()); + public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() { + return getSubsListFieldBuilder().addBuilder( + monitoring.Monitoring.SubscriptionID.getDefaultInstance()); } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public monitoring.Monitoring.KpiList.Builder addKpiListBuilder( + public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder( int index) { - return getKpiListFieldBuilder().addBuilder( - index, monitoring.Monitoring.KpiList.getDefaultInstance()); + return getSubsListFieldBuilder().addBuilder( + index, monitoring.Monitoring.SubscriptionID.getDefaultInstance()); } /** - * <code>repeated .monitoring.KpiList kpi_list = 2;</code> + * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> */ - public java.util.List<monitoring.Monitoring.KpiList.Builder> - getKpiListBuilderList() { - return getKpiListFieldBuilder().getBuilderList(); + public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> + getSubsListBuilderList() { + return getSubsListFieldBuilder().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_, + 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()); - kpiList_ = null; + subsList_ = null; } - return kpiListBuilder_; + return subsListBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -15332,95 +13927,176 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse) + // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList) } - // @@protoc_insertion_point(class_scope:monitoring.SubsResponse) - private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.SubsIDList) + private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse(); + DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList(); } - public static monitoring.Monitoring.SubsResponse getDefaultInstance() { + public static monitoring.Monitoring.SubsIDList 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<SubsIDList> + PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() { @java.lang.Override - public SubsResponse parsePartialFrom( + public SubsIDList parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new SubsResponse(input, extensionRegistry); + return new SubsIDList(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<SubsResponse> parser() { + public static com.google.protobuf.Parser<SubsIDList> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<SubsResponse> getParserForType() { + public com.google.protobuf.Parser<SubsIDList> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() { + public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface SubsIDListOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList) + public interface AlarmDescriptorOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor) com.google.protobuf.MessageOrBuilder { /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>.monitoring.AlarmID alarm_id = 1;</code> + * @return Whether the alarmId field is set. */ - java.util.List<monitoring.Monitoring.SubscriptionID> - getSubsListList(); + boolean hasAlarmId(); /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>.monitoring.AlarmID alarm_id = 1;</code> + * @return The alarmId. */ - monitoring.Monitoring.SubscriptionID getSubsList(int index); + monitoring.Monitoring.AlarmID getAlarmId(); /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>.monitoring.AlarmID alarm_id = 1;</code> */ - int getSubsListCount(); + monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder(); + /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>string alarm_description = 2;</code> + * @return The alarmDescription. */ - java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> - getSubsListOrBuilderList(); + java.lang.String getAlarmDescription(); /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>string alarm_description = 2;</code> + * @return The bytes for alarmDescription. */ - monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder( + 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> + */ + int getKpiIdCount(); + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> + getKpiIdOrBuilderList(); + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder( + int index); + + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + java.util.List<monitoring.Monitoring.KpiValueRange> + getKpiValueRangeList(); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + monitoring.Monitoring.KpiValueRange getKpiValueRange(int index); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + int getKpiValueRangeCount(); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> + getKpiValueRangeOrBuilderList(); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder( 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.SubsIDList} + * Protobuf type {@code monitoring.AlarmDescriptor} */ - public static final class SubsIDList extends + public static final class AlarmDescriptor extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.SubsIDList) - SubsIDListOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor) + AlarmDescriptorOrBuilder { private static final long serialVersionUID = 0L; - // Use SubsIDList.newBuilder() to construct. - private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use AlarmDescriptor.newBuilder() to construct. + private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private SubsIDList() { - subsList_ = java.util.Collections.emptyList(); + private AlarmDescriptor() { + alarmDescription_ = ""; + name_ = ""; + kpiId_ = java.util.Collections.emptyList(); + kpiValueRange_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new SubsIDList(); + return new AlarmDescriptor(); } @java.lang.Override @@ -15428,7 +14104,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private SubsIDList( + private AlarmDescriptor( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -15448,12 +14124,59 @@ public final class Monitoring { done = true; break; case 10: { + monitoring.Monitoring.AlarmID.Builder subBuilder = null; + if (alarmId_ != null) { + subBuilder = alarmId_.toBuilder(); + } + alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(alarmId_); + alarmId_ = 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)) { - subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(); + kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(); mutable_bitField0_ |= 0x00000001; } - subsList_.add( - input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry)); + 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(); + } + break; } default: { @@ -15472,7 +14195,10 @@ public final class Monitoring { e).setUnfinishedMessage(this); } finally { if (((mutable_bitField0_ & 0x00000001) != 0)) { - subsList_ = java.util.Collections.unmodifiableList(subsList_); + kpiId_ = java.util.Collections.unmodifiableList(kpiId_); + } + if (((mutable_bitField0_ & 0x00000002) != 0)) { + kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_); } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); @@ -15480,55 +14206,223 @@ public final class Monitoring { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor; + return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_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_AlarmDescriptor_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class); + monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class); } - public static final int SUBS_LIST_FIELD_NUMBER = 1; - private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_; + public static final int ALARM_ID_FIELD_NUMBER = 1; + private monitoring.Monitoring.AlarmID alarmId_; /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>.monitoring.AlarmID alarm_id = 1;</code> + * @return Whether the alarmId field is set. */ @java.lang.Override - public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() { - return subsList_; + public boolean hasAlarmId() { + return alarmId_ != null; } /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>.monitoring.AlarmID alarm_id = 1;</code> + * @return The alarmId. */ @java.lang.Override - public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> - getSubsListOrBuilderList() { - return subsList_; + public monitoring.Monitoring.AlarmID getAlarmId() { + return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_; } /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>.monitoring.AlarmID alarm_id = 1;</code> */ @java.lang.Override - public int getSubsListCount() { - return subsList_.size(); + public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() { + return getAlarmId(); } + + public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 2; + private volatile java.lang.Object alarmDescription_; /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>string alarm_description = 2;</code> + * @return The alarmDescription. */ @java.lang.Override - public monitoring.Monitoring.SubscriptionID getSubsList(int index) { - return subsList_.get(index); + 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>repeated .monitoring.SubscriptionID subs_list = 1;</code> + * <code>string alarm_description = 2;</code> + * @return The bytes for alarmDescription. */ @java.lang.Override - public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder( + 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 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; + } + } + + 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_; + } + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + @java.lang.Override + public int getKpiIdCount() { + return kpiId_.size(); + } + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + @java.lang.Override + public monitoring.Monitoring.KpiId getKpiId(int index) { + return kpiId_.get(index); + } + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + @java.lang.Override + public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder( int index) { - return subsList_.get(index); + return kpiId_.get(index); + } + + public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 5; + private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_; + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + @java.lang.Override + public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() { + return kpiValueRange_; + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + @java.lang.Override + public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> + getKpiValueRangeOrBuilderList() { + return kpiValueRange_; + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + @java.lang.Override + public int getKpiValueRangeCount() { + return kpiValueRange_.size(); + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + @java.lang.Override + public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) { + return kpiValueRange_.get(index); + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + @java.lang.Override + public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder( + 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(); } private byte memoizedIsInitialized = -1; @@ -15545,21 +14439,54 @@ 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 (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 (timestamp_ != null) { + output.writeMessage(6, getTimestamp()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + 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)); } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < subsList_.size(); i++) { + for (int i = 0; i < kpiValueRange_.size(); i++) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, subsList_.get(i)); + .computeMessageSize(5, kpiValueRange_.get(i)); + } + if (timestamp_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, getTimestamp()); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -15571,13 +14498,29 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.SubsIDList)) { + if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) { return super.equals(obj); } - monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj; + monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj; - if (!getSubsListList() - .equals(other.getSubsListList())) return false; + 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 (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -15589,78 +14532,94 @@ 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 (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 (hasTimestamp()) { + hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getTimestamp().hashCode(); } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static monitoring.Monitoring.SubsIDList parseFrom( + public static monitoring.Monitoring.AlarmDescriptor parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubsIDList parseFrom( + 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); } - public static monitoring.Monitoring.SubsIDList parseFrom( + public static monitoring.Monitoring.AlarmDescriptor 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.AlarmDescriptor 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.AlarmDescriptor parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.SubsIDList parseFrom( + public static monitoring.Monitoring.AlarmDescriptor 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.AlarmDescriptor 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.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.SubsIDList parseDelimitedFrom(java.io.InputStream input) + public static monitoring.Monitoring.AlarmDescriptor 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.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.SubsIDList parseFrom( + 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.SubsIDList parseFrom( + public static monitoring.Monitoring.AlarmDescriptor parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -15673,7 +14632,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.AlarmDescriptor prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -15689,26 +14648,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.SubsIDList} + * Protobuf type {@code monitoring.AlarmDescriptor} */ 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.AlarmDescriptor) + monitoring.Monitoring.AlarmDescriptorOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor; + return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_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_AlarmDescriptor_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class); + monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class); } - // Construct using monitoring.Monitoring.SubsIDList.newBuilder() + // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -15721,1670 +14680,1731 @@ public final class Monitoring { private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { - getSubsListFieldBuilder(); + getKpiIdFieldBuilder(); + getKpiValueRangeFieldBuilder(); } } @java.lang.Override public Builder clear() { super.clear(); - if (subsListBuilder_ == null) { - subsList_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - } else { - subsListBuilder_.clear(); - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor; - } - - @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 result; - } - - @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 { - result.subsList_ = subsListBuilder_.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.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(); - } - } 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; - } - - @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.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 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_; - - /** - * <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_); + if (alarmIdBuilder_ == null) { + alarmId_ = null; } else { - return subsListBuilder_.getMessageList(); + alarmId_ = null; + alarmIdBuilder_ = null; } - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public int getSubsListCount() { - if (subsListBuilder_ == null) { - return subsList_.size(); + alarmDescription_ = ""; + + name_ = ""; + + if (kpiIdBuilder_ == null) { + kpiId_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); } else { - return subsListBuilder_.getCount(); + kpiIdBuilder_.clear(); } - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public monitoring.Monitoring.SubscriptionID getSubsList(int index) { - if (subsListBuilder_ == null) { - return subsList_.get(index); + if (kpiValueRangeBuilder_ == null) { + kpiValueRange_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); } else { - return subsListBuilder_.getMessage(index); + kpiValueRangeBuilder_.clear(); } - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public Builder setSubsList( - int index, monitoring.Monitoring.SubscriptionID value) { - if (subsListBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubsListIsMutable(); - subsList_.set(index, value); - onChanged(); + if (timestampBuilder_ == null) { + timestamp_ = null; } else { - subsListBuilder_.setMessage(index, value); + timestamp_ = null; + timestampBuilder_ = null; } 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()); - onChanged(); - } else { - subsListBuilder_.setMessage(index, builderForValue.build()); + + @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 this; + return result; } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) { - if (subsListBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubsListIsMutable(); - subsList_.add(value); - onChanged(); + + @java.lang.Override + public monitoring.Monitoring.AlarmDescriptor buildPartial() { + monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this); + int from_bitField0_ = bitField0_; + if (alarmIdBuilder_ == null) { + result.alarmId_ = alarmId_; } else { - subsListBuilder_.addMessage(value); + result.alarmId_ = alarmIdBuilder_.build(); } - return this; - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public Builder addSubsList( - int index, monitoring.Monitoring.SubscriptionID value) { - if (subsListBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); + result.alarmDescription_ = alarmDescription_; + result.name_ = name_; + if (kpiIdBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + kpiId_ = java.util.Collections.unmodifiableList(kpiId_); + bitField0_ = (bitField0_ & ~0x00000001); } - ensureSubsListIsMutable(); - subsList_.add(index, value); - onChanged(); + result.kpiId_ = kpiId_; } else { - subsListBuilder_.addMessage(index, value); + result.kpiId_ = kpiIdBuilder_.build(); } - 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(); + if (kpiValueRangeBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.kpiValueRange_ = kpiValueRange_; } else { - subsListBuilder_.addMessage(builderForValue.build()); + result.kpiValueRange_ = kpiValueRangeBuilder_.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(); + if (timestampBuilder_ == null) { + result.timestamp_ = timestamp_; } else { - subsListBuilder_.addMessage(index, builderForValue.build()); + result.timestamp_ = timestampBuilder_.build(); } - return this; + onBuilt(); + return result; } - /** - * <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(); + + @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 { - subsListBuilder_.addAllMessages(values); + super.mergeFrom(other); + return this; } - return this; } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public Builder clearSubsList() { - if (subsListBuilder_ == null) { - subsList_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); + + 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(); - } else { - subsListBuilder_.clear(); } - return this; - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public Builder removeSubsList(int index) { - if (subsListBuilder_ == null) { - ensureSubsListIsMutable(); - subsList_.remove(index); + if (!other.getName().isEmpty()) { + name_ = other.name_; onChanged(); - } else { - subsListBuilder_.remove(index); } - 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); + 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_); + } + } } - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> - getSubsListOrBuilderList() { - if (subsListBuilder_ != null) { - return subsListBuilder_.getMessageOrBuilderList(); + if (kpiValueRangeBuilder_ == null) { + if (!other.kpiValueRange_.isEmpty()) { + if (kpiValueRange_.isEmpty()) { + kpiValueRange_ = other.kpiValueRange_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureKpiValueRangeIsMutable(); + kpiValueRange_.addAll(other.kpiValueRange_); + } + onChanged(); + } } else { - return java.util.Collections.unmodifiableList(subsList_); + if (!other.kpiValueRange_.isEmpty()) { + if (kpiValueRangeBuilder_.isEmpty()) { + kpiValueRangeBuilder_.dispose(); + kpiValueRangeBuilder_ = null; + kpiValueRange_ = other.kpiValueRange_; + bitField0_ = (bitField0_ & ~0x00000002); + kpiValueRangeBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getKpiValueRangeFieldBuilder() : null; + } else { + kpiValueRangeBuilder_.addAllMessages(other.kpiValueRange_); + } + } } - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() { - return getSubsListFieldBuilder().addBuilder( - monitoring.Monitoring.SubscriptionID.getDefaultInstance()); - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code> - */ - public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder( - int index) { - return getSubsListFieldBuilder().addBuilder( - index, monitoring.Monitoring.SubscriptionID.getDefaultInstance()); - } - /** - * <code>repeated .monitoring.SubscriptionID subs_list = 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), - getParentForChildren(), - isClean()); - subsList_ = null; + if (other.hasTimestamp()) { + mergeTimestamp(other.getTimestamp()); } - return subsListBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; } @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public final boolean isInitialized() { + return true; } - - // @@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( + public Builder mergeFrom( 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(); + 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; } - 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(); - } + private int bitField0_; - 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(); - } + private monitoring.Monitoring.AlarmID alarmId_; + private com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_; + /** + * <code>.monitoring.AlarmID alarm_id = 1;</code> + * @return Whether the alarmId field is set. + */ + public boolean hasAlarmId() { + return alarmIdBuilder_ != null || alarmId_ != null; + } + /** + * <code>.monitoring.AlarmID alarm_id = 1;</code> + * @return The alarmId. + */ + public monitoring.Monitoring.AlarmID getAlarmId() { + if (alarmIdBuilder_ == null) { + return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_; + } else { + return alarmIdBuilder_.getMessage(); + } + } + /** + * <code>.monitoring.AlarmID alarm_id = 1;</code> + */ + public Builder setAlarmId(monitoring.Monitoring.AlarmID value) { + if (alarmIdBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + alarmId_ = value; + onChanged(); + } else { + alarmIdBuilder_.setMessage(value); + } - break; - } - case 42: { - java.lang.String s = input.readStringRequireUtf8(); + return this; + } + /** + * <code>.monitoring.AlarmID alarm_id = 1;</code> + */ + public Builder setAlarmId( + monitoring.Monitoring.AlarmID.Builder builderForValue) { + if (alarmIdBuilder_ == null) { + alarmId_ = builderForValue.build(); + onChanged(); + } else { + alarmIdBuilder_.setMessage(builderForValue.build()); + } - timestamp_ = s; - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } + return this; + } + /** + * <code>.monitoring.AlarmID 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(); + } else { + alarmId_ = value; } + onChanged(); + } else { + alarmIdBuilder_.mergeFrom(value); } - } 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 this; } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor; - } + /** + * <code>.monitoring.AlarmID alarm_id = 1;</code> + */ + public Builder clearAlarmId() { + if (alarmIdBuilder_ == null) { + alarmId_ = null; + onChanged(); + } else { + alarmId_ = null; + alarmIdBuilder_ = 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); - } + 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> + */ + public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() { + if (alarmIdBuilder_ != null) { + return alarmIdBuilder_.getMessageOrBuilder(); + } else { + return alarmId_ == null ? + monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_; + } + } + /** + * <code>.monitoring.AlarmID 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(), + getParentForChildren(), + isClean()); + alarmId_ = null; + } + return alarmIdBuilder_; + } - 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; + private java.lang.Object alarmDescription_ = ""; + /** + * <code>string alarm_description = 2;</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; + } } - } - /** - * <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>string alarm_description = 2;</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; + } + } + /** + * <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. + */ + public Builder clearAlarmDescription() { + + alarmDescription_ = getDefaultInstance().getAlarmDescription(); + onChanged(); + return this; + } + /** + * <code>string alarm_description = 2;</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; + } + + private java.lang.Object name_ = ""; + /** + * <code>string name = 3;</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; + } } - } - - 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>string name = 3;</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> - * @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>string name = 3;</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; } - } - - 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>string name = 3;</code> + * @return This builder for chaining. + */ + public Builder clearName() { + + name_ = getDefaultInstance().getName(); + onChanged(); + return this; } - } - /** - * <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; + /** + * <code>string name = 3;</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 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; - } + private com.google.protobuf.RepeatedFieldBuilderV3< + monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_; - @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>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(); + } } - if (!getNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_); + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + public int getKpiIdCount() { + if (kpiIdBuilder_ == null) { + return kpiId_.size(); + } else { + return kpiIdBuilder_.getCount(); + } } - if (kpiId_ != null) { - output.writeMessage(3, getKpiId()); + /** + * <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); + } + } + /** + * <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; } - if (kpiValueRange_ != null) { - output.writeMessage(4, getKpiValueRange()); + /** + * <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; } - if (!getTimestampBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timestamp_); + /** + * <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; } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getAlarmDescriptionBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, alarmDescription_); + /** + * <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; } - if (!getNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_); + /** + * <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()); + } + return this; } - if (kpiId_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, getKpiId()); + /** + * <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(); + } else { + kpiIdBuilder_.addMessage(index, builderForValue.build()); + } + return this; } - if (kpiValueRange_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, getKpiValueRange()); + /** + * <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; } - if (!getTimestampBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timestamp_); + /** + * <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(); + } + 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; + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + public Builder removeKpiId(int index) { + if (kpiIdBuilder_ == null) { + ensureKpiIdIsMutable(); + kpiId_.remove(index); + onChanged(); + } else { + kpiIdBuilder_.remove(index); + } + return this; } - if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) { - return super.equals(obj); + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder( + int index) { + return getKpiIdFieldBuilder().getBuilder(index); } - monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj; - - 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; + /** + * <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); + } } - if (hasKpiValueRange() != other.hasKpiValueRange()) return false; - if (hasKpiValueRange()) { - if (!getKpiValueRange() - .equals(other.getKpiValueRange())) return false; + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> + getKpiIdOrBuilderList() { + if (kpiIdBuilder_ != null) { + return kpiIdBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(kpiId_); + } } - if (!getTimestamp() - .equals(other.getTimestamp())) 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 monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() { + return getKpiIdFieldBuilder().addBuilder( + monitoring.Monitoring.KpiId.getDefaultInstance()); } - 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(); + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder( + int index) { + return getKpiIdFieldBuilder().addBuilder( + index, monitoring.Monitoring.KpiId.getDefaultInstance()); } - if (hasKpiValueRange()) { - hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER; - hash = (53 * hash) + getKpiValueRange().hashCode(); + /** + * <code>repeated .monitoring.KpiId kpi_id = 4;</code> + */ + public java.util.List<monitoring.Monitoring.KpiId.Builder> + getKpiIdBuilderList() { + return getKpiIdFieldBuilder().getBuilderList(); } - hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + getTimestamp().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static monitoring.Monitoring.AlarmDescriptor parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - 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); - } - public static monitoring.Monitoring.AlarmDescriptor parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - 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); - } - public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static monitoring.Monitoring.AlarmDescriptor 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) - 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 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 - 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); - } - @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.AlarmDescriptor} - */ - 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 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; + } + return kpiIdBuilder_; } - @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); + private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_ = + java.util.Collections.emptyList(); + private void ensureKpiValueRangeIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + kpiValueRange_ = new java.util.ArrayList<monitoring.Monitoring.KpiValueRange>(kpiValueRange_); + bitField0_ |= 0x00000002; + } } - // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + private com.google.protobuf.RepeatedFieldBuilderV3< + monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_; - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() { + if (kpiValueRangeBuilder_ == null) { + return java.util.Collections.unmodifiableList(kpiValueRange_); + } else { + return kpiValueRangeBuilder_.getMessageList(); + } } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public int getKpiValueRangeCount() { + if (kpiValueRangeBuilder_ == null) { + return kpiValueRange_.size(); + } else { + return kpiValueRangeBuilder_.getCount(); } } - @java.lang.Override - public Builder clear() { - super.clear(); - alarmDescription_ = ""; - - name_ = ""; - - if (kpiIdBuilder_ == null) { - kpiId_ = null; + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) { + if (kpiValueRangeBuilder_ == null) { + return kpiValueRange_.get(index); } else { - kpiId_ = null; - kpiIdBuilder_ = null; + return kpiValueRangeBuilder_.getMessage(index); } + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder setKpiValueRange( + int index, monitoring.Monitoring.KpiValueRange value) { if (kpiValueRangeBuilder_ == null) { - kpiValueRange_ = null; + if (value == null) { + throw new NullPointerException(); + } + ensureKpiValueRangeIsMutable(); + kpiValueRange_.set(index, value); + onChanged(); } else { - kpiValueRange_ = null; - kpiValueRangeBuilder_ = null; + kpiValueRangeBuilder_.setMessage(index, value); } - timestamp_ = ""; - return this; } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor; + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder setKpiValueRange( + int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) { + if (kpiValueRangeBuilder_ == null) { + ensureKpiValueRangeIsMutable(); + kpiValueRange_.set(index, builderForValue.build()); + onChanged(); + } else { + kpiValueRangeBuilder_.setMessage(index, builderForValue.build()); + } + return this; } - - @java.lang.Override - public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() { - return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance(); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder addKpiValueRange(monitoring.Monitoring.KpiValueRange value) { + if (kpiValueRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKpiValueRangeIsMutable(); + kpiValueRange_.add(value); + onChanged(); + } else { + kpiValueRangeBuilder_.addMessage(value); + } + return this; } - - @java.lang.Override - public monitoring.Monitoring.AlarmDescriptor build() { - monitoring.Monitoring.AlarmDescriptor result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder addKpiValueRange( + int index, monitoring.Monitoring.KpiValueRange value) { + if (kpiValueRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKpiValueRangeIsMutable(); + kpiValueRange_.add(index, value); + onChanged(); + } else { + kpiValueRangeBuilder_.addMessage(index, value); } - return result; + return this; } - - @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_; + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder addKpiValueRange( + monitoring.Monitoring.KpiValueRange.Builder builderForValue) { + if (kpiValueRangeBuilder_ == null) { + ensureKpiValueRangeIsMutable(); + kpiValueRange_.add(builderForValue.build()); + onChanged(); } else { - result.kpiId_ = kpiIdBuilder_.build(); + kpiValueRangeBuilder_.addMessage(builderForValue.build()); } + return this; + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder addKpiValueRange( + int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) { if (kpiValueRangeBuilder_ == null) { - result.kpiValueRange_ = kpiValueRange_; + ensureKpiValueRangeIsMutable(); + kpiValueRange_.add(index, builderForValue.build()); + onChanged(); } else { - result.kpiValueRange_ = kpiValueRangeBuilder_.build(); + kpiValueRangeBuilder_.addMessage(index, builderForValue.build()); } - result.timestamp_ = timestamp_; - onBuilt(); - return result; + return this; } - - @java.lang.Override - public Builder clone() { - return super.clone(); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder addAllKpiValueRange( + java.lang.Iterable<? extends monitoring.Monitoring.KpiValueRange> values) { + if (kpiValueRangeBuilder_ == null) { + ensureKpiValueRangeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, kpiValueRange_); + onChanged(); + } else { + kpiValueRangeBuilder_.addAllMessages(values); + } + return this; } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder clearKpiValueRange() { + if (kpiValueRangeBuilder_ == null) { + kpiValueRange_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + kpiValueRangeBuilder_.clear(); + } + return this; } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public Builder removeKpiValueRange(int index) { + if (kpiValueRangeBuilder_ == null) { + ensureKpiValueRangeIsMutable(); + kpiValueRange_.remove(index); + onChanged(); + } else { + kpiValueRangeBuilder_.remove(index); + } + return this; } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder( + int index) { + return getKpiValueRangeFieldBuilder().getBuilder(index); } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder( + int index) { + if (kpiValueRangeBuilder_ == null) { + return kpiValueRange_.get(index); } else { + return kpiValueRangeBuilder_.getMessageOrBuilder(index); + } } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> + getKpiValueRangeOrBuilderList() { + if (kpiValueRangeBuilder_ != null) { + return kpiValueRangeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(kpiValueRange_); + } } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof monitoring.Monitoring.AlarmDescriptor) { - return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other); + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder() { + return getKpiValueRangeFieldBuilder().addBuilder( + monitoring.Monitoring.KpiValueRange.getDefaultInstance()); + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder( + int index) { + return getKpiValueRangeFieldBuilder().addBuilder( + index, monitoring.Monitoring.KpiValueRange.getDefaultInstance()); + } + /** + * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code> + */ + public java.util.List<monitoring.Monitoring.KpiValueRange.Builder> + getKpiValueRangeBuilderList() { + return getKpiValueRangeFieldBuilder().getBuilderList(); + } + 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; + } + return kpiValueRangeBuilder_; + } + + 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; + } + /** + * <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>.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; + } + /** + * <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>.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 { - super.mergeFrom(other); - return this; + timestampBuilder_.mergeFrom(value); } - } - 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_; + return this; + } + /** + * <code>.context.Timestamp timestamp = 6;</code> + */ + public Builder clearTimestamp() { + if (timestampBuilder_ == null) { + timestamp_ = null; onChanged(); + } else { + timestamp_ = null; + timestampBuilder_ = null; } - if (other.hasKpiId()) { - mergeKpiId(other.getKpiId()); - } - if (other.hasKpiValueRange()) { - mergeKpiValueRange(other.getKpiValueRange()); + + return this; + } + /** + * <code>.context.Timestamp timestamp = 6;</code> + */ + public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() { + + onChanged(); + return getTimestampFieldBuilder().getBuilder(); + } + /** + * <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 (!other.getTimestamp().isEmpty()) { - timestamp_ = other.timestamp_; - onChanged(); + } + /** + * <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; } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; + return timestampBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); } @java.lang.Override - public final boolean isInitialized() { - return true; + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); } + + // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor) + } + + // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor) + private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor(); + } + + public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<AlarmDescriptor> + PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() { @java.lang.Override - public Builder mergeFrom( + public AlarmDescriptor parsePartialFrom( 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); + throws com.google.protobuf.InvalidProtocolBufferException { + return new AlarmDescriptor(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser<AlarmDescriptor> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() { + return PARSER; + } + + @java.lang.Override + public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + 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); + } + private AlarmID() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new AlarmID(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private AlarmID( + 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: { + 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; + } } } - return this; + } 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_AlarmID_descriptor; + } - 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; - } + @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 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; + } + /** + * <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_; + } + /** + * <code>.context.Uuid alarm_id = 1;</code> + */ + @java.lang.Override + public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() { + return getAlarmId(); + } + + 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 (alarmId_ != null) { + output.writeMessage(1, getAlarmId()); } - /** - * <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; - } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (alarmId_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getAlarmId()); } - /** - * <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; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; } - /** - * <code>string alarm_description = 1;</code> - * @return This builder for chaining. - */ - public Builder clearAlarmDescription() { - - alarmDescription_ = getDefaultInstance().getAlarmDescription(); - onChanged(); - return this; + if (!(obj instanceof monitoring.Monitoring.AlarmID)) { + return super.equals(obj); } - /** - * <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; + monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj; + + if (hasAlarmId() != other.hasAlarmId()) return false; + if (hasAlarmId()) { + if (!getAlarmId() + .equals(other.getAlarmId())) return false; } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } - 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 + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; } - /** - * <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; - } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasAlarmId()) { + hash = (37 * hash) + ALARM_ID_FIELD_NUMBER; + hash = (53 * hash) + getAlarmId().hashCode(); } - /** - * <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; + 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; } - /** - * <code>string name = 2;</code> - * @return This builder for chaining. - */ - public Builder clearName() { - - name_ = getDefaultInstance().getName(); - onChanged(); - return this; + + @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> - * @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; + + // Construct using monitoring.Monitoring.AlarmID.newBuilder() + private Builder() { + 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 Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); } - /** - * <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(); + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { } } - /** - * <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(); + @java.lang.Override + public Builder clear() { + super.clear(); + if (alarmIdBuilder_ == null) { + alarmId_ = null; } else { - kpiIdBuilder_.setMessage(value); + alarmId_ = null; + alarmIdBuilder_ = null; } - return this; } - /** - * <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 this; + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor; } - /** - * <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 { - kpiIdBuilder_.mergeFrom(value); - } - return this; + @java.lang.Override + public monitoring.Monitoring.AlarmID getDefaultInstanceForType() { + return monitoring.Monitoring.AlarmID.getDefaultInstance(); } - /** - * <code>.monitoring.KpiId kpi_id = 3;</code> - */ - public Builder clearKpiId() { - if (kpiIdBuilder_ == null) { - kpiId_ = null; - onChanged(); + + @java.lang.Override + public monitoring.Monitoring.AlarmID build() { + monitoring.Monitoring.AlarmID result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + 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_; } else { - kpiId_ = null; - kpiIdBuilder_ = null; + result.alarmId_ = alarmIdBuilder_.build(); } + onBuilt(); + return result; + } - return this; + @java.lang.Override + public Builder clone() { + return super.clone(); } - /** - * <code>.monitoring.KpiId kpi_id = 3;</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 = 3;</code> - */ - public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() { - if (kpiIdBuilder_ != null) { - return kpiIdBuilder_.getMessageOrBuilder(); + @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.AlarmID) { + return mergeFrom((monitoring.Monitoring.AlarmID)other); } else { - return kpiId_ == null ? - monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; + super.mergeFrom(other); + 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; + + public Builder mergeFrom(monitoring.Monitoring.AlarmID other) { + if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this; + if (other.hasAlarmId()) { + mergeAlarmId(other.getAlarmId()); } - return kpiIdBuilder_; + 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.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); + } + } + return this; } - private monitoring.Monitoring.KpiValueRange kpiValueRange_; + private context.ContextOuterClass.Uuid alarmId_; private com.google.protobuf.SingleFieldBuilderV3< - monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_; + context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_; /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> - * @return Whether the kpiValueRange field is set. + * <code>.context.Uuid alarm_id = 1;</code> + * @return Whether the alarmId field is set. */ - public boolean hasKpiValueRange() { - return kpiValueRangeBuilder_ != null || kpiValueRange_ != null; + public boolean hasAlarmId() { + return alarmIdBuilder_ != null || alarmId_ != null; } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> - * @return The kpiValueRange. + * <code>.context.Uuid alarm_id = 1;</code> + * @return The alarmId. */ - public monitoring.Monitoring.KpiValueRange getKpiValueRange() { - if (kpiValueRangeBuilder_ == null) { - return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_; + public context.ContextOuterClass.Uuid getAlarmId() { + if (alarmIdBuilder_ == null) { + return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_; } else { - return kpiValueRangeBuilder_.getMessage(); + return alarmIdBuilder_.getMessage(); } } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> + * <code>.context.Uuid alarm_id = 1;</code> */ - public Builder setKpiValueRange(monitoring.Monitoring.KpiValueRange value) { - if (kpiValueRangeBuilder_ == null) { + public Builder setAlarmId(context.ContextOuterClass.Uuid value) { + if (alarmIdBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - kpiValueRange_ = value; + alarmId_ = value; onChanged(); } else { - kpiValueRangeBuilder_.setMessage(value); + alarmIdBuilder_.setMessage(value); } return this; } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> + * <code>.context.Uuid alarm_id = 1;</code> */ - public Builder setKpiValueRange( - monitoring.Monitoring.KpiValueRange.Builder builderForValue) { - if (kpiValueRangeBuilder_ == null) { - kpiValueRange_ = builderForValue.build(); + public Builder setAlarmId( + context.ContextOuterClass.Uuid.Builder builderForValue) { + if (alarmIdBuilder_ == null) { + alarmId_ = builderForValue.build(); onChanged(); } else { - kpiValueRangeBuilder_.setMessage(builderForValue.build()); + alarmIdBuilder_.setMessage(builderForValue.build()); } return this; } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> + * <code>.context.Uuid alarm_id = 1;</code> */ - public Builder mergeKpiValueRange(monitoring.Monitoring.KpiValueRange value) { - if (kpiValueRangeBuilder_ == null) { - if (kpiValueRange_ != null) { - kpiValueRange_ = - monitoring.Monitoring.KpiValueRange.newBuilder(kpiValueRange_).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 { - kpiValueRange_ = value; + alarmId_ = value; } onChanged(); } else { - kpiValueRangeBuilder_.mergeFrom(value); + alarmIdBuilder_.mergeFrom(value); } return this; } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> + * <code>.context.Uuid alarm_id = 1;</code> */ - public Builder clearKpiValueRange() { - if (kpiValueRangeBuilder_ == null) { - kpiValueRange_ = null; + public Builder clearAlarmId() { + if (alarmIdBuilder_ == null) { + alarmId_ = null; onChanged(); } else { - kpiValueRange_ = null; - kpiValueRangeBuilder_ = null; + alarmId_ = null; + alarmIdBuilder_ = null; } return this; } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> + * <code>.context.Uuid alarm_id = 1;</code> */ - public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder() { + public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() { onChanged(); - return getKpiValueRangeFieldBuilder().getBuilder(); + return getAlarmIdFieldBuilder().getBuilder(); } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> + * <code>.context.Uuid alarm_id = 1;</code> */ - public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() { - if (kpiValueRangeBuilder_ != null) { - return kpiValueRangeBuilder_.getMessageOrBuilder(); + public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() { + if (alarmIdBuilder_ != null) { + return alarmIdBuilder_.getMessageOrBuilder(); } else { - return kpiValueRange_ == null ? - monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_; + return alarmId_ == null ? + context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_; } } /** - * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code> + * <code>.context.Uuid alarm_id = 1;</code> */ private com.google.protobuf.SingleFieldBuilderV3< - 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(), + 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()); - kpiValueRange_ = null; - } - 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; + alarmId_ = null; } - } - /** - * <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; + return alarmIdBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -17399,85 +16419,97 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor) + // @@protoc_insertion_point(builder_scope:monitoring.AlarmID) } - // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor) - private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.AlarmID) + private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor(); + DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID(); } - public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() { + public static monitoring.Monitoring.AlarmID getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser<AlarmDescriptor> - PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() { + private static final com.google.protobuf.Parser<AlarmID> + PARSER = new com.google.protobuf.AbstractParser<AlarmID>() { @java.lang.Override - public AlarmDescriptor parsePartialFrom( + public AlarmID parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new AlarmDescriptor(input, extensionRegistry); + return new AlarmID(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<AlarmDescriptor> parser() { + public static com.google.protobuf.Parser<AlarmID> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() { + public com.google.protobuf.Parser<AlarmID> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() { + public monitoring.Monitoring.AlarmID getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface AlarmIDOrBuilder extends - // @@protoc_insertion_point(interface_extends:monitoring.AlarmID) + public interface AlarmSubscriptionOrBuilder extends + // @@protoc_insertion_point(interface_extends:monitoring.AlarmSubscription) com.google.protobuf.MessageOrBuilder { /** - * <code>.context.Uuid alarm_id = 1;</code> - * @return Whether the alarmId field is set. + * <code>.monitoring.AlarmID alarmID = 1;</code> + * @return Whether the alarmID field is set. */ - boolean hasAlarmId(); + boolean hasAlarmID(); /** - * <code>.context.Uuid alarm_id = 1;</code> - * @return The alarmId. + * <code>.monitoring.AlarmID alarmID = 1;</code> + * @return The alarmID. */ - context.ContextOuterClass.Uuid getAlarmId(); + monitoring.Monitoring.AlarmID getAlarmID(); /** - * <code>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</code> */ - context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder(); + monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder(); + + /** + * <code>float subscription_timeout_s = 2;</code> + * @return The subscriptionTimeoutS. + */ + float getSubscriptionTimeoutS(); + + /** + * <code>float subscription_frequency_ms = 3;</code> + * @return The subscriptionFrequencyMs. + */ + float getSubscriptionFrequencyMs(); } /** - * Protobuf type {@code monitoring.AlarmID} + * Protobuf type {@code monitoring.AlarmSubscription} */ - public static final class AlarmID extends + public static final class AlarmSubscription extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:monitoring.AlarmID) - AlarmIDOrBuilder { + // @@protoc_insertion_point(message_implements:monitoring.AlarmSubscription) + AlarmSubscriptionOrBuilder { private static final long serialVersionUID = 0L; - // Use AlarmID.newBuilder() to construct. - private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + // Use AlarmSubscription.newBuilder() to construct. + private AlarmSubscription(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { super(builder); } - private AlarmID() { + private AlarmSubscription() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new AlarmID(); + return new AlarmSubscription(); } @java.lang.Override @@ -17485,7 +16517,7 @@ public final class Monitoring { getUnknownFields() { return this.unknownFields; } - private AlarmID( + private AlarmSubscription( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -17504,18 +16536,28 @@ public final class Monitoring { done = true; break; case 10: { - context.ContextOuterClass.Uuid.Builder subBuilder = null; - if (alarmId_ != null) { - subBuilder = alarmId_.toBuilder(); + monitoring.Monitoring.AlarmID.Builder subBuilder = null; + if (alarmID_ != null) { + subBuilder = alarmID_.toBuilder(); } - alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry); + alarmID_ = input.readMessage(monitoring.Monitoring.AlarmID.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)) { @@ -17537,41 +16579,63 @@ public final class Monitoring { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor; + return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class); + monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class); } - public static final int ALARM_ID_FIELD_NUMBER = 1; - private context.ContextOuterClass.Uuid alarmId_; + public static final int ALARMID_FIELD_NUMBER = 1; + private monitoring.Monitoring.AlarmID alarmID_; /** - * <code>.context.Uuid alarm_id = 1;</code> - * @return Whether the alarmId field is set. + * <code>.monitoring.AlarmID alarmID = 1;</code> + * @return Whether the alarmID field is set. */ @java.lang.Override - public boolean hasAlarmId() { - return alarmId_ != null; + public boolean hasAlarmID() { + return alarmID_ != null; } /** - * <code>.context.Uuid alarm_id = 1;</code> - * @return The alarmId. + * <code>.monitoring.AlarmID alarmID = 1;</code> + * @return The alarmID. */ @java.lang.Override - public context.ContextOuterClass.Uuid getAlarmId() { - return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_; + public monitoring.Monitoring.AlarmID getAlarmID() { + return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_; } /** - * <code>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</code> */ @java.lang.Override - public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() { - return getAlarmId(); + public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() { + return getAlarmID(); + } + + public static final int SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER = 2; + private float subscriptionTimeoutS_; + /** + * <code>float subscription_timeout_s = 2;</code> + * @return The subscriptionTimeoutS. + */ + @java.lang.Override + public float getSubscriptionTimeoutS() { + return subscriptionTimeoutS_; + } + + public static final int SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER = 3; + private float subscriptionFrequencyMs_; + /** + * <code>float subscription_frequency_ms = 3;</code> + * @return The subscriptionFrequencyMs. + */ + @java.lang.Override + public float getSubscriptionFrequencyMs() { + return subscriptionFrequencyMs_; } private byte memoizedIsInitialized = -1; @@ -17588,8 +16652,14 @@ 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 (alarmID_ != null) { + output.writeMessage(1, getAlarmID()); + } + if (subscriptionTimeoutS_ != 0F) { + output.writeFloat(2, subscriptionTimeoutS_); + } + if (subscriptionFrequencyMs_ != 0F) { + output.writeFloat(3, subscriptionFrequencyMs_); } unknownFields.writeTo(output); } @@ -17600,9 +16670,17 @@ public final class Monitoring { if (size != -1) return size; size = 0; - if (alarmId_ != null) { + if (alarmID_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getAlarmId()); + .computeMessageSize(1, getAlarmID()); + } + if (subscriptionTimeoutS_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(2, subscriptionTimeoutS_); + } + if (subscriptionFrequencyMs_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(3, subscriptionFrequencyMs_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -17614,16 +16692,22 @@ public final class Monitoring { if (obj == this) { return true; } - if (!(obj instanceof monitoring.Monitoring.AlarmID)) { + if (!(obj instanceof monitoring.Monitoring.AlarmSubscription)) { return super.equals(obj); } - monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj; + monitoring.Monitoring.AlarmSubscription other = (monitoring.Monitoring.AlarmSubscription) 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; } @@ -17635,78 +16719,84 @@ 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(); + if (hasAlarmID()) { + hash = (37 * hash) + ALARMID_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.AlarmID parseFrom( + public static monitoring.Monitoring.AlarmSubscription parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.AlarmID parseFrom( + public static monitoring.Monitoring.AlarmSubscription 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( + public static monitoring.Monitoring.AlarmSubscription parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.AlarmID parseFrom( + public static monitoring.Monitoring.AlarmSubscription 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) + public static monitoring.Monitoring.AlarmSubscription parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static monitoring.Monitoring.AlarmID parseFrom( + public static monitoring.Monitoring.AlarmSubscription 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) + public static monitoring.Monitoring.AlarmSubscription parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static monitoring.Monitoring.AlarmID parseFrom( + public static monitoring.Monitoring.AlarmSubscription 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) + public static monitoring.Monitoring.AlarmSubscription parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static monitoring.Monitoring.AlarmID parseDelimitedFrom( + public static monitoring.Monitoring.AlarmSubscription 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( + public static monitoring.Monitoring.AlarmSubscription parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static monitoring.Monitoring.AlarmID parseFrom( + public static monitoring.Monitoring.AlarmSubscription parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -17719,7 +16809,7 @@ public final class Monitoring { public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) { + public static Builder newBuilder(monitoring.Monitoring.AlarmSubscription prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -17735,26 +16825,26 @@ public final class Monitoring { return builder; } /** - * Protobuf type {@code monitoring.AlarmID} + * Protobuf type {@code monitoring.AlarmSubscription} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:monitoring.AlarmID) - monitoring.Monitoring.AlarmIDOrBuilder { + // @@protoc_insertion_point(builder_implements:monitoring.AlarmSubscription) + monitoring.Monitoring.AlarmSubscriptionOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor; + return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable + return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable .ensureFieldAccessorsInitialized( - monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class); + monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class); } - // Construct using monitoring.Monitoring.AlarmID.newBuilder() + // Construct using monitoring.Monitoring.AlarmSubscription.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -17772,29 +16862,33 @@ 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_AlarmID_descriptor; + return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor; } @java.lang.Override - public monitoring.Monitoring.AlarmID getDefaultInstanceForType() { - return monitoring.Monitoring.AlarmID.getDefaultInstance(); + public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() { + return monitoring.Monitoring.AlarmSubscription.getDefaultInstance(); } @java.lang.Override - public monitoring.Monitoring.AlarmID build() { - monitoring.Monitoring.AlarmID result = buildPartial(); + public monitoring.Monitoring.AlarmSubscription build() { + monitoring.Monitoring.AlarmSubscription result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -17802,13 +16896,15 @@ public final class Monitoring { } @java.lang.Override - public monitoring.Monitoring.AlarmID buildPartial() { - monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this); - if (alarmIdBuilder_ == null) { - result.alarmId_ = alarmId_; + public monitoring.Monitoring.AlarmSubscription buildPartial() { + monitoring.Monitoring.AlarmSubscription result = new monitoring.Monitoring.AlarmSubscription(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; } @@ -17847,18 +16943,24 @@ public final class Monitoring { } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof monitoring.Monitoring.AlarmID) { - return mergeFrom((monitoring.Monitoring.AlarmID)other); + if (other instanceof monitoring.Monitoring.AlarmSubscription) { + return mergeFrom((monitoring.Monitoring.AlarmSubscription)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(monitoring.Monitoring.AlarmID other) { - if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this; - if (other.hasAlarmId()) { - mergeAlarmId(other.getAlarmId()); + 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()); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -17875,11 +16977,11 @@ public final class Monitoring { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - monitoring.Monitoring.AlarmID parsedMessage = null; + monitoring.Monitoring.AlarmSubscription parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage(); + parsedMessage = (monitoring.Monitoring.AlarmSubscription) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -17889,123 +16991,185 @@ public final class Monitoring { return this; } - private context.ContextOuterClass.Uuid alarmId_; + private monitoring.Monitoring.AlarmID alarmID_; private com.google.protobuf.SingleFieldBuilderV3< - context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_; + monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIDBuilder_; /** - * <code>.context.Uuid alarm_id = 1;</code> - * @return Whether the alarmId field is set. + * <code>.monitoring.AlarmID alarmID = 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>.context.Uuid alarm_id = 1;</code> - * @return The alarmId. + * <code>.monitoring.AlarmID alarmID = 1;</code> + * @return The alarmID. */ - public context.ContextOuterClass.Uuid getAlarmId() { - if (alarmIdBuilder_ == null) { - return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_; + public monitoring.Monitoring.AlarmID getAlarmID() { + if (alarmIDBuilder_ == null) { + return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_; } else { - return alarmIdBuilder_.getMessage(); + return alarmIDBuilder_.getMessage(); } } /** - * <code>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</code> */ - public Builder setAlarmId(context.ContextOuterClass.Uuid value) { - if (alarmIdBuilder_ == null) { + public Builder setAlarmID(monitoring.Monitoring.AlarmID 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>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</code> */ - public Builder setAlarmId( - context.ContextOuterClass.Uuid.Builder builderForValue) { - if (alarmIdBuilder_ == null) { - alarmId_ = builderForValue.build(); + public Builder setAlarmID( + monitoring.Monitoring.AlarmID.Builder builderForValue) { + if (alarmIDBuilder_ == null) { + alarmID_ = builderForValue.build(); onChanged(); } else { - alarmIdBuilder_.setMessage(builderForValue.build()); + alarmIDBuilder_.setMessage(builderForValue.build()); } return this; } /** - * <code>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</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 mergeAlarmID(monitoring.Monitoring.AlarmID value) { + if (alarmIDBuilder_ == null) { + if (alarmID_ != null) { + alarmID_ = + monitoring.Monitoring.AlarmID.newBuilder(alarmID_).mergeFrom(value).buildPartial(); } else { - alarmId_ = value; + alarmID_ = value; } onChanged(); } else { - alarmIdBuilder_.mergeFrom(value); + alarmIDBuilder_.mergeFrom(value); } return this; } /** - * <code>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 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>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</code> */ - public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() { + public monitoring.Monitoring.AlarmID.Builder getAlarmIDBuilder() { onChanged(); - return getAlarmIdFieldBuilder().getBuilder(); + return getAlarmIDFieldBuilder().getBuilder(); } /** - * <code>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</code> */ - public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() { - if (alarmIdBuilder_ != null) { - return alarmIdBuilder_.getMessageOrBuilder(); + public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() { + if (alarmIDBuilder_ != null) { + return alarmIDBuilder_.getMessageOrBuilder(); } else { - return alarmId_ == null ? - context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_; + return alarmID_ == null ? + monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_; } } /** - * <code>.context.Uuid alarm_id = 1;</code> + * <code>.monitoring.AlarmID alarmID = 1;</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.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; + alarmID_ = null; } - return alarmIdBuilder_; + 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; } @java.lang.Override public final Builder setUnknownFields( @@ -18020,41 +17184,41 @@ public final class Monitoring { } - // @@protoc_insertion_point(builder_scope:monitoring.AlarmID) + // @@protoc_insertion_point(builder_scope:monitoring.AlarmSubscription) } - // @@protoc_insertion_point(class_scope:monitoring.AlarmID) - private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:monitoring.AlarmSubscription) + private static final monitoring.Monitoring.AlarmSubscription DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID(); + DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmSubscription(); } - public static monitoring.Monitoring.AlarmID getDefaultInstance() { + public static monitoring.Monitoring.AlarmSubscription 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<AlarmSubscription> + PARSER = new com.google.protobuf.AbstractParser<AlarmSubscription>() { @java.lang.Override - public AlarmID parsePartialFrom( + public AlarmSubscription parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new AlarmID(input, extensionRegistry); + return new AlarmSubscription(input, extensionRegistry); } }; - public static com.google.protobuf.Parser<AlarmID> parser() { + public static com.google.protobuf.Parser<AlarmSubscription> parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser<AlarmID> getParserForType() { + public com.google.protobuf.Parser<AlarmSubscription> getParserForType() { return PARSER; } @java.lang.Override - public monitoring.Monitoring.AlarmID getDefaultInstanceForType() { + public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -18105,6 +17269,21 @@ 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} @@ -18184,6 +17363,19 @@ 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)) { @@ -18306,6 +17498,32 @@ 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() { @@ -18329,6 +17547,9 @@ public final class Monitoring { if (kpiValue_ != null) { output.writeMessage(3, getKpiValue()); } + if (timestamp_ != null) { + output.writeMessage(4, getTimestamp()); + } unknownFields.writeTo(output); } @@ -18349,6 +17570,10 @@ 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; @@ -18376,6 +17601,11 @@ 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; } @@ -18397,6 +17627,10 @@ 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; @@ -18544,6 +17778,12 @@ public final class Monitoring { kpiValue_ = null; kpiValueBuilder_ = null; } + if (timestampBuilder_ == null) { + timestamp_ = null; + } else { + timestamp_ = null; + timestampBuilder_ = null; + } return this; } @@ -18581,6 +17821,11 @@ public final class Monitoring { } else { result.kpiValue_ = kpiValueBuilder_.build(); } + if (timestampBuilder_ == null) { + result.timestamp_ = timestamp_; + } else { + result.timestamp_ = timestampBuilder_.build(); + } onBuilt(); return result; } @@ -18639,6 +17884,9 @@ public final class Monitoring { if (other.hasKpiValue()) { mergeKpiValue(other.getKpiValue()); } + if (other.hasTimestamp()) { + mergeTimestamp(other.getTimestamp()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -18981,6 +18229,125 @@ 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) { @@ -19832,16 +19199,6 @@ 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 @@ -19912,6 +19269,11 @@ 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 @@ -19932,97 +19294,95 @@ public final class Monitoring { static { java.lang.String[] descriptorData = { "\n\020monitoring.proto\022\nmonitoring\032\rcontext." + - "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" + + "proto\032\026kpi_sample_types.proto\"\311\002\n\rKpiDes" + "criptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kpi" + - "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" + "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" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -20035,111 +19395,105 @@ 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(3); + getDescriptor().getMessageTypes().get(1); 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(4); + getDescriptor().getMessageTypes().get(2); internal_static_monitoring_KpiQuery_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_monitoring_KpiQuery_descriptor, - new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartDate", "EndDate", }); + new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartTimestamp", "EndTimestamp", }); internal_static_monitoring_KpiId_descriptor = - getDescriptor().getMessageTypes().get(5); + getDescriptor().getMessageTypes().get(3); 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(6); + getDescriptor().getMessageTypes().get(4); 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(7); + getDescriptor().getMessageTypes().get(5); internal_static_monitoring_KpiValueRange_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_monitoring_KpiValueRange_descriptor, - new java.lang.String[] { "KpiMinValue", "KpiMaxValue", }); + new java.lang.String[] { "KpiMinValue", "KpiMaxValue", "InRange", "IncludeMinValue", "IncludeMaxValue", }); internal_static_monitoring_KpiValue_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageTypes().get(6); internal_static_monitoring_KpiValue_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_monitoring_KpiValue_descriptor, - new java.lang.String[] { "IntVal", "FloatVal", "StringVal", "BoolVal", "Value", }); + new java.lang.String[] { "Int32Val", "Uint32Val", "Int64Val", "Uint64Val", "FloatVal", "StringVal", "BoolVal", "Value", }); internal_static_monitoring_KpiList_descriptor = - getDescriptor().getMessageTypes().get(9); + getDescriptor().getMessageTypes().get(7); 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(10); + getDescriptor().getMessageTypes().get(8); 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(11); + getDescriptor().getMessageTypes().get(9); internal_static_monitoring_SubsDescriptor_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_monitoring_SubsDescriptor_descriptor, - new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartDate", "EndDate", }); + new java.lang.String[] { "SubsId", "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartTimestamp", "EndTimestamp", }); internal_static_monitoring_SubscriptionID_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageTypes().get(10); 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(13); + getDescriptor().getMessageTypes().get(11); 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(14); + getDescriptor().getMessageTypes().get(12); 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(15); + getDescriptor().getMessageTypes().get(13); internal_static_monitoring_AlarmDescriptor_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_monitoring_AlarmDescriptor_descriptor, - new java.lang.String[] { "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", }); + new java.lang.String[] { "AlarmId", "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", }); internal_static_monitoring_AlarmID_descriptor = - getDescriptor().getMessageTypes().get(16); + getDescriptor().getMessageTypes().get(14); 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(17); + getDescriptor().getMessageTypes().get(16); internal_static_monitoring_AlarmResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_monitoring_AlarmResponse_descriptor, - new java.lang.String[] { "AlarmId", "Text", "KpiValue", }); + new java.lang.String[] { "AlarmId", "Text", "KpiValue", "Timestamp", }); internal_static_monitoring_AlarmIDList_descriptor = - getDescriptor().getMessageTypes().get(18); + getDescriptor().getMessageTypes().get(17); 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 f826e1167d1ed56567fc470ba70cc09003617eda..6372600680d57d0b351e7dd67b88c84f9d8e8cff 100644 --- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java +++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java @@ -8,18 +8,14 @@ comments = "Source: monitoring.proto") public interface MonitoringService extends MutinyService { - io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request); - - io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request); + io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor 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<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty 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); @@ -30,20 +26,24 @@ public interface MonitoringService extends MutinyService { io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty 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<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request); - io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request); + io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(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.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request); + io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request); - io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request); + io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request); diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java index c7f776e7bd0c56cabc7009e7b7bdb208669fb441..21f7f48acd6b6870584133dc3d665f681e78cf5e 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> createKpi(monitoring.Monitoring.KpiDescriptor request) { + public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) { try { - return delegate.createKpi(request); + return delegate.setKpi(request); } catch (UnsupportedOperationException e) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } } @Override - public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) { try { - return delegate.editKpiDescriptor(request); + return delegate.deleteKpi(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<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) { try { - return delegate.deleteKpi(request); + return delegate.getKpiDescriptor(request); } catch (UnsupportedOperationException e) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } @@ -48,115 +48,116 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin } } @Override - public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) { try { - return delegate.createBundleKpi(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.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) { try { - return delegate.getKpiDescriptor(request); + return delegate.monitorKpi(request); } catch (UnsupportedOperationException e) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } } @Override - public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) { + public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) { try { - return delegate.includeKpi(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> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) { + public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) { try { - return delegate.monitorKpi(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.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) { + public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) { try { - return delegate.queryKpiData(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.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) { try { - return delegate.getSubsDescriptor(request); + return delegate.deleteSubscription(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.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { try { - return delegate.getSubscriptions(request); + return delegate.setKpiAlarm(request); } catch (UnsupportedOperationException e) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } } @Override - public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) { + public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) { try { - return delegate.editKpiSubscription(request); + return delegate.getAlarms(request); } catch (UnsupportedOperationException e) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } } @Override - public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { + public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) { try { - return delegate.createKpiAlarm(request); + return delegate.getAlarmDescriptor(request); } catch (UnsupportedOperationException e) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } } @Override - public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) { try { - return delegate.editKpiAlarm(request); + return delegate.deleteAlarm(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<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) { try { - return delegate.getAlarms(request); + return delegate.getInstantKpi(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.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) { try { - return delegate.getAlarmDescriptor(request); + return delegate.setKpiSubscription(request); } catch (UnsupportedOperationException e) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } } @Override - public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) { + public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) { try { - return delegate.subscribeKpi(request); + return delegate.getAlarmResponseStream(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.AlarmID request) { + public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) { try { - return delegate.getAlarmResponseStream(request); + return delegate.getStreamKpi(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 35c98e8ff2c240e749e602c4d097c3bef81c8203..6b6dc38645931ad94287b4151019c3b42a1c098d 100644 --- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java +++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java @@ -21,30 +21,22 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient< } @Override - 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> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) { - return stub.editKpiDescriptor(request); + public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) { + return stub.setKpi(request); } @Override 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<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) { + return stub.getKpiDescriptorList(request); + } + @Override public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) { return stub.includeKpi(request); } @@ -65,16 +57,12 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient< return stub.getSubscriptions(request); } @Override - 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); + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) { + return stub.deleteSubscription(request); } @Override - public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { - return stub.editKpiAlarm(request); + public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { + return stub.setKpiAlarm(request); } @Override public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) { @@ -84,15 +72,28 @@ 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> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) { - return stub.subscribeKpi(request); + public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) { + return stub.setKpiSubscription(request); } @Override - public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) { + public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription 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 d4ae3510a2f622b195854e4c7d197b8e3ff4d5fd..fe92a7814166b65b12db5d50bb4baaf525c59146 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> getCreateKpiMethod; + monitoring.Monitoring.KpiId> getSetKpiMethod; @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "CreateKpi", + fullMethodName = SERVICE_NAME + '/' + "SetKpi", 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> getCreateKpiMethod() { - io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getCreateKpiMethod; - if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) { + monitoring.Monitoring.KpiId> getSetKpiMethod() { + io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getSetKpiMethod; + if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) { synchronized (MonitoringServiceGrpc.class) { - if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) { - MonitoringServiceGrpc.getCreateKpiMethod = getCreateKpiMethod = + if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) { + MonitoringServiceGrpc.getSetKpiMethod = getSetKpiMethod = io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>newBuilder() .setType(io.grpc.MethodDescriptor.MethodType.UNARY) - .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpi")) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpi")) .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("CreateKpi")) + .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpi")) .build(); } } } - return getCreateKpiMethod; + return getSetKpiMethod; } - private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor, - context.ContextOuterClass.Empty> getEditKpiDescriptorMethod; + private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, + context.ContextOuterClass.Empty> getDeleteKpiMethod; @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "EditKpiDescriptor", - requestType = monitoring.Monitoring.EditedKpiDescriptor.class, + fullMethodName = SERVICE_NAME + '/' + "DeleteKpi", + requestType = monitoring.Monitoring.KpiId.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY) - 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) { + 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) { synchronized (MonitoringServiceGrpc.class) { - if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) { - MonitoringServiceGrpc.getEditKpiDescriptorMethod = getEditKpiDescriptorMethod = - io.grpc.MethodDescriptor.<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty>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, "EditKpiDescriptor")) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi")) .setSampledToLocalTracing(true) .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( - monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance())) + monitoring.Monitoring.KpiId.getDefaultInstance())) .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( context.ContextOuterClass.Empty.getDefaultInstance())) - .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiDescriptor")) + .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi")) .build(); } } } - return getEditKpiDescriptorMethod; + return getDeleteKpiMethod; } private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, - context.ContextOuterClass.Empty> getDeleteKpiMethod; + monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod; @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "DeleteKpi", + fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor", requestType = monitoring.Monitoring.KpiId.class, - responseType = context.ContextOuterClass.Empty.class, + responseType = monitoring.Monitoring.KpiDescriptor.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) { + monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() { + io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod; + if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) { synchronized (MonitoringServiceGrpc.class) { - if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) { - MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod = - io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder() + 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, "DeleteKpi")) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor")) .setSampledToLocalTracing(true) .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( monitoring.Monitoring.KpiId.getDefaultInstance())) .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( - context.ContextOuterClass.Empty.getDefaultInstance())) - .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi")) + monitoring.Monitoring.KpiDescriptor.getDefaultInstance())) + .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor")) .build(); } } } - return getDeleteKpiMethod; + return getGetKpiDescriptorMethod; } private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, @@ -138,68 +138,6 @@ 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; @@ -294,34 +232,34 @@ public final class MonitoringServiceGrpc { } private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, - monitoring.Monitoring.KpiList> getSubscribeKpiMethod; + monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod; @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "SubscribeKpi", + fullMethodName = SERVICE_NAME + '/' + "SetKpiSubscription", 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> getSubscribeKpiMethod() { - io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSubscribeKpiMethod; - if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) { + monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod() { + io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod; + if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) { synchronized (MonitoringServiceGrpc.class) { - if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) { - MonitoringServiceGrpc.getSubscribeKpiMethod = getSubscribeKpiMethod = + if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) { + MonitoringServiceGrpc.getSetKpiSubscriptionMethod = getSetKpiSubscriptionMethod = io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>newBuilder() .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) - .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SubscribeKpi")) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiSubscription")) .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("SubscribeKpi")) + .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiSubscription")) .build(); } } } - return getSubscribeKpiMethod; + return getSetKpiSubscriptionMethod; } private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID, @@ -386,97 +324,66 @@ public final class MonitoringServiceGrpc { return getGetSubscriptionsMethod; } - private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, - context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod; + private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID, + context.ContextOuterClass.Empty> getDeleteSubscriptionMethod; @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "EditKpiSubscription", - requestType = monitoring.Monitoring.SubsDescriptor.class, + fullMethodName = SERVICE_NAME + '/' + "DeleteSubscription", + requestType = monitoring.Monitoring.SubscriptionID.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY) - 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) { + 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) { synchronized (MonitoringServiceGrpc.class) { - if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) { - MonitoringServiceGrpc.getEditKpiSubscriptionMethod = getEditKpiSubscriptionMethod = - io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty>newBuilder() + if ((getDeleteSubscriptionMethod = MonitoringServiceGrpc.getDeleteSubscriptionMethod) == null) { + MonitoringServiceGrpc.getDeleteSubscriptionMethod = getDeleteSubscriptionMethod = + io.grpc.MethodDescriptor.<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>newBuilder() .setType(io.grpc.MethodDescriptor.MethodType.UNARY) - .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiSubscription")) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteSubscription")) .setSampledToLocalTracing(true) .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( - monitoring.Monitoring.SubsDescriptor.getDefaultInstance())) + monitoring.Monitoring.SubscriptionID.getDefaultInstance())) .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( context.ContextOuterClass.Empty.getDefaultInstance())) - .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiSubscription")) + .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteSubscription")) .build(); } } } - return getEditKpiSubscriptionMethod; + return getDeleteSubscriptionMethod; } private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, - monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod; + monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod; @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "CreateKpiAlarm", + fullMethodName = SERVICE_NAME + '/' + "SetKpiAlarm", 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> getCreateKpiAlarmMethod() { - io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod; - if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) { + monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod() { + io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod; + if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) { synchronized (MonitoringServiceGrpc.class) { - if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) { - MonitoringServiceGrpc.getCreateKpiAlarmMethod = getCreateKpiAlarmMethod = + if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) { + MonitoringServiceGrpc.getSetKpiAlarmMethod = getSetKpiAlarmMethod = io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>newBuilder() .setType(io.grpc.MethodDescriptor.MethodType.UNARY) - .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpiAlarm")) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiAlarm")) .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("CreateKpiAlarm")) + .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiAlarm")) .build(); } } } - 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; + return getSetKpiAlarmMethod; } private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, @@ -541,27 +448,27 @@ public final class MonitoringServiceGrpc { return getGetAlarmDescriptorMethod; } - private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, + private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod; @io.grpc.stub.annotations.RpcMethod( fullMethodName = SERVICE_NAME + '/' + "GetAlarmResponseStream", - requestType = monitoring.Monitoring.AlarmID.class, + requestType = monitoring.Monitoring.AlarmSubscription.class, responseType = monitoring.Monitoring.AlarmResponse.class, methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) - public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, + public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod() { - io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod; + io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription, 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.AlarmID, monitoring.Monitoring.AlarmResponse>newBuilder() + io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmSubscription, 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.AlarmID.getDefaultInstance())) + monitoring.Monitoring.AlarmSubscription.getDefaultInstance())) .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( monitoring.Monitoring.AlarmResponse.getDefaultInstance())) .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmResponseStream")) @@ -572,6 +479,99 @@ 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 createKpi(monitoring.Monitoring.KpiDescriptor request, + public void setKpi(monitoring.Monitoring.KpiDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) { - io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiMethod(), responseObserver); } /** */ - public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request, + public void deleteKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) { - io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiDescriptorMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver); } /** */ - public void deleteKpi(monitoring.Monitoring.KpiId request, - io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) { - io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver); + public void getKpiDescriptor(monitoring.Monitoring.KpiId request, + io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver); } /** @@ -648,20 +648,6 @@ 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, @@ -685,9 +671,9 @@ public final class MonitoringServiceGrpc { /** */ - public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request, + public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) { - io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSubscribeKpiMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiSubscriptionMethod(), responseObserver); } /** @@ -706,23 +692,16 @@ public final class MonitoringServiceGrpc { /** */ - public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request, + public void deleteSubscription(monitoring.Monitoring.SubscriptionID request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) { - io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiSubscriptionMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteSubscriptionMethod(), responseObserver); } /** */ - public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request, + public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> 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); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiAlarmMethod(), responseObserver); } /** @@ -741,34 +720,55 @@ public final class MonitoringServiceGrpc { /** */ - public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request, + public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription 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( - getCreateKpiMethod(), + getSetKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>( - this, METHODID_CREATE_KPI))) + this, METHODID_SET_KPI))) .addMethod( - getEditKpiDescriptorMethod(), + getDeleteKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< - monitoring.Monitoring.EditedKpiDescriptor, + monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>( - this, METHODID_EDIT_KPI_DESCRIPTOR))) + this, METHODID_DELETE_KPI))) .addMethod( - getDeleteKpiMethod(), + getGetKpiDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< monitoring.Monitoring.KpiId, - context.ContextOuterClass.Empty>( - this, METHODID_DELETE_KPI))) + monitoring.Monitoring.KpiDescriptor>( + this, METHODID_GET_KPI_DESCRIPTOR))) .addMethod( getGetKpiDescriptorListMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -776,20 +776,6 @@ 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( @@ -812,12 +798,12 @@ public final class MonitoringServiceGrpc { monitoring.Monitoring.KpiList>( this, METHODID_QUERY_KPI_DATA))) .addMethod( - getSubscribeKpiMethod(), + getSetKpiSubscriptionMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall( new MethodHandlers< monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>( - this, METHODID_SUBSCRIBE_KPI))) + this, METHODID_SET_KPI_SUBSCRIPTION))) .addMethod( getGetSubsDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -833,26 +819,19 @@ public final class MonitoringServiceGrpc { monitoring.Monitoring.SubsIDList>( this, METHODID_GET_SUBSCRIPTIONS))) .addMethod( - getEditKpiSubscriptionMethod(), + getDeleteSubscriptionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< - monitoring.Monitoring.SubsDescriptor, + monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>( - this, METHODID_EDIT_KPI_SUBSCRIPTION))) + this, METHODID_DELETE_SUBSCRIPTION))) .addMethod( - getCreateKpiAlarmMethod(), + getSetKpiAlarmMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>( - 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))) + this, METHODID_SET_KPI_ALARM))) .addMethod( getGetAlarmsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -871,9 +850,30 @@ public final class MonitoringServiceGrpc { getGetAlarmResponseStreamMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall( new MethodHandlers< - monitoring.Monitoring.AlarmID, + monitoring.Monitoring.AlarmSubscription, 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 createKpi(monitoring.Monitoring.KpiDescriptor request, + public void setKpi(monitoring.Monitoring.KpiDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) { io.grpc.stub.ClientCalls.asyncUnaryCall( - getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request, responseObserver); + getChannel().newCall(getSetKpiMethod(), getCallOptions()), request, responseObserver); } /** */ - public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request, + public void deleteKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) { io.grpc.stub.ClientCalls.asyncUnaryCall( - getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request, responseObserver); + getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver); } /** */ - public void deleteKpi(monitoring.Monitoring.KpiId request, - io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) { + public void getKpiDescriptor(monitoring.Monitoring.KpiId request, + io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) { io.grpc.stub.ClientCalls.asyncUnaryCall( - getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver); + getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver); } /** @@ -924,22 +924,6 @@ 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, @@ -966,10 +950,10 @@ public final class MonitoringServiceGrpc { /** */ - public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request, + public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) { io.grpc.stub.ClientCalls.asyncServerStreamingCall( - getChannel().newCall(getSubscribeKpiMethod(), getCallOptions()), request, responseObserver); + getChannel().newCall(getSetKpiSubscriptionMethod(), getCallOptions()), request, responseObserver); } /** @@ -990,26 +974,18 @@ public final class MonitoringServiceGrpc { /** */ - public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request, + public void deleteSubscription(monitoring.Monitoring.SubscriptionID request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) { io.grpc.stub.ClientCalls.asyncUnaryCall( - getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request, responseObserver); + getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request, responseObserver); } /** */ - public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request, + public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) { io.grpc.stub.ClientCalls.asyncUnaryCall( - 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); + getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request, responseObserver); } /** @@ -1030,11 +1006,35 @@ public final class MonitoringServiceGrpc { /** */ - public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request, + public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription 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,16 +1053,9 @@ public final class MonitoringServiceGrpc { /** */ - public monitoring.Monitoring.KpiId createKpi(monitoring.Monitoring.KpiDescriptor request) { + public monitoring.Monitoring.KpiId setKpi(monitoring.Monitoring.KpiDescriptor request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getCreateKpiMethod(), getCallOptions(), request); - } - - /** - */ - public context.ContextOuterClass.Empty editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getEditKpiDescriptorMethod(), getCallOptions(), request); + getChannel(), getSetKpiMethod(), getCallOptions(), request); } /** @@ -1074,23 +1067,16 @@ public final class MonitoringServiceGrpc { /** */ - public monitoring.Monitoring.KpiDescriptorList getKpiDescriptorList(context.ContextOuterClass.Empty request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getGetKpiDescriptorListMethod(), getCallOptions(), request); - } - - /** - */ - public monitoring.Monitoring.KpiId createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) { + public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getCreateBundleKpiMethod(), getCallOptions(), request); + getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request); } /** */ - public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) { + public monitoring.Monitoring.KpiDescriptorList getKpiDescriptorList(context.ContextOuterClass.Empty request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request); + getChannel(), getGetKpiDescriptorListMethod(), getCallOptions(), request); } /** @@ -1116,10 +1102,10 @@ public final class MonitoringServiceGrpc { /** */ - public java.util.Iterator<monitoring.Monitoring.KpiList> subscribeKpi( + public java.util.Iterator<monitoring.Monitoring.KpiList> setKpiSubscription( monitoring.Monitoring.SubsDescriptor request) { return io.grpc.stub.ClientCalls.blockingServerStreamingCall( - getChannel(), getSubscribeKpiMethod(), getCallOptions(), request); + getChannel(), getSetKpiSubscriptionMethod(), getCallOptions(), request); } /** @@ -1138,23 +1124,16 @@ public final class MonitoringServiceGrpc { /** */ - public context.ContextOuterClass.Empty editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) { + public context.ContextOuterClass.Empty deleteSubscription(monitoring.Monitoring.SubscriptionID request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getEditKpiSubscriptionMethod(), getCallOptions(), request); + getChannel(), getDeleteSubscriptionMethod(), getCallOptions(), request); } /** */ - public monitoring.Monitoring.AlarmID createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { + public monitoring.Monitoring.AlarmID setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getCreateKpiAlarmMethod(), getCallOptions(), request); - } - - /** - */ - public context.ContextOuterClass.Empty editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( - getChannel(), getEditKpiAlarmMethod(), getCallOptions(), request); + getChannel(), getSetKpiAlarmMethod(), getCallOptions(), request); } /** @@ -1174,10 +1153,32 @@ public final class MonitoringServiceGrpc { /** */ public java.util.Iterator<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream( - monitoring.Monitoring.AlarmID request) { + monitoring.Monitoring.AlarmSubscription 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); + } } /** @@ -1196,26 +1197,26 @@ public final class MonitoringServiceGrpc { /** */ - public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createKpi( + public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> setKpi( monitoring.Monitoring.KpiDescriptor request) { return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request); + getChannel().newCall(getSetKpiMethod(), getCallOptions()), request); } /** */ - public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiDescriptor( - monitoring.Monitoring.EditedKpiDescriptor request) { + public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi( + monitoring.Monitoring.KpiId request) { return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request); + getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request); } /** */ - public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi( + public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor( monitoring.Monitoring.KpiId request) { return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request); + getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request); } /** @@ -1226,22 +1227,6 @@ 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( @@ -1284,26 +1269,18 @@ public final class MonitoringServiceGrpc { /** */ - public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiSubscription( - monitoring.Monitoring.SubsDescriptor request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request); - } - - /** - */ - public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> createKpiAlarm( - monitoring.Monitoring.AlarmDescriptor request) { + public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteSubscription( + monitoring.Monitoring.SubscriptionID request) { return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request); + getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request); } /** */ - public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiAlarm( + public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> setKpiAlarm( monitoring.Monitoring.AlarmDescriptor request) { return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request); + getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request); } /** @@ -1321,26 +1298,42 @@ public final class MonitoringServiceGrpc { return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request); } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteAlarm( + 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); + } } - 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_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_GET_KPI_DESCRIPTOR_LIST = 3; - 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 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 class MethodHandlers<Req, Resp> implements io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>, @@ -1359,30 +1352,22 @@ public final class MonitoringServiceGrpc { @java.lang.SuppressWarnings("unchecked") public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) { switch (methodId) { - case METHODID_CREATE_KPI: - serviceImpl.createKpi((monitoring.Monitoring.KpiDescriptor) request, + case METHODID_SET_KPI: + serviceImpl.setKpi((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_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_GET_KPI_DESCRIPTOR_LIST: + serviceImpl.getKpiDescriptorList((context.ContextOuterClass.Empty) request, + (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver); + break; case METHODID_INCLUDE_KPI: serviceImpl.includeKpi((monitoring.Monitoring.Kpi) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver); @@ -1395,8 +1380,8 @@ public final class MonitoringServiceGrpc { serviceImpl.queryKpiData((monitoring.Monitoring.KpiQuery) request, (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver); break; - case METHODID_SUBSCRIBE_KPI: - serviceImpl.subscribeKpi((monitoring.Monitoring.SubsDescriptor) request, + case METHODID_SET_KPI_SUBSCRIPTION: + serviceImpl.setKpiSubscription((monitoring.Monitoring.SubsDescriptor) request, (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver); break; case METHODID_GET_SUBS_DESCRIPTOR: @@ -1407,18 +1392,14 @@ public final class MonitoringServiceGrpc { serviceImpl.getSubscriptions((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList>) responseObserver); break; - case METHODID_EDIT_KPI_SUBSCRIPTION: - serviceImpl.editKpiSubscription((monitoring.Monitoring.SubsDescriptor) request, + case METHODID_DELETE_SUBSCRIPTION: + serviceImpl.deleteSubscription((monitoring.Monitoring.SubscriptionID) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver); break; - case METHODID_CREATE_KPI_ALARM: - serviceImpl.createKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request, + case METHODID_SET_KPI_ALARM: + serviceImpl.setKpiAlarm((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); @@ -1428,9 +1409,21 @@ public final class MonitoringServiceGrpc { (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver); break; case METHODID_GET_ALARM_RESPONSE_STREAM: - serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmID) request, + serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmSubscription) 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(); } @@ -1492,24 +1485,24 @@ public final class MonitoringServiceGrpc { if (result == null) { serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) .setSchemaDescriptor(new MonitoringServiceFileDescriptorSupplier()) - .addMethod(getCreateKpiMethod()) - .addMethod(getEditKpiDescriptorMethod()) + .addMethod(getSetKpiMethod()) .addMethod(getDeleteKpiMethod()) - .addMethod(getGetKpiDescriptorListMethod()) - .addMethod(getCreateBundleKpiMethod()) .addMethod(getGetKpiDescriptorMethod()) + .addMethod(getGetKpiDescriptorListMethod()) .addMethod(getIncludeKpiMethod()) .addMethod(getMonitorKpiMethod()) .addMethod(getQueryKpiDataMethod()) - .addMethod(getSubscribeKpiMethod()) + .addMethod(getSetKpiSubscriptionMethod()) .addMethod(getGetSubsDescriptorMethod()) .addMethod(getGetSubscriptionsMethod()) - .addMethod(getEditKpiSubscriptionMethod()) - .addMethod(getCreateKpiAlarmMethod()) - .addMethod(getEditKpiAlarmMethod()) + .addMethod(getDeleteSubscriptionMethod()) + .addMethod(getSetKpiAlarmMethod()) .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 46f442b743ee176a83a416fe13711beda6baf937..d663b38c923a2b5401642db4e697e16be4720f05 100644 --- a/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java +++ b/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java @@ -36,13 +36,8 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim } - 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> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) { - return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiDescriptor); + public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpi); } @@ -51,18 +46,13 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim } - public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) { - return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptorList); - } - - - 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<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) { - return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor); + public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptorList); } @@ -91,18 +81,13 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim } - 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<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> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { - return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiAlarm); + public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpiAlarm); } @@ -116,15 +101,30 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim } - 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.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.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) { + public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription 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> createKpi(monitoring.Monitoring.KpiDescriptor request) { + public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } - public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId 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<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(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<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor 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.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId 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<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi 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> monitorKpi(monitoring.Monitoring.MonitorKpiRequest 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.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery 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.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID 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.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } - public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor 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.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor 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.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) { + public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID 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<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId 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.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } - public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) { + public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } - public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) { + public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId 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.getCreateKpiMethod(), + monitoring.MonitoringServiceGrpc.getSetKpiMethod(), asyncUnaryCall( new MethodHandlers< monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>( - this, METHODID_CREATE_KPI, compression))) + this, METHODID_SET_KPI, compression))) .addMethod( - monitoring.MonitoringServiceGrpc.getEditKpiDescriptorMethod(), + monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(), asyncUnaryCall( new MethodHandlers< - monitoring.Monitoring.EditedKpiDescriptor, + monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>( - this, METHODID_EDIT_KPI_DESCRIPTOR, compression))) + this, METHODID_DELETE_KPI, compression))) .addMethod( - monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(), + monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(), asyncUnaryCall( new MethodHandlers< monitoring.Monitoring.KpiId, - context.ContextOuterClass.Empty>( - this, METHODID_DELETE_KPI, compression))) + monitoring.Monitoring.KpiDescriptor>( + this, METHODID_GET_KPI_DESCRIPTOR, compression))) .addMethod( monitoring.MonitoringServiceGrpc.getGetKpiDescriptorListMethod(), asyncUnaryCall( @@ -262,20 +262,6 @@ 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( @@ -298,12 +284,12 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim monitoring.Monitoring.KpiList>( this, METHODID_QUERY_KPI_DATA, compression))) .addMethod( - monitoring.MonitoringServiceGrpc.getSubscribeKpiMethod(), + monitoring.MonitoringServiceGrpc.getSetKpiSubscriptionMethod(), asyncServerStreamingCall( new MethodHandlers< monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>( - this, METHODID_SUBSCRIBE_KPI, compression))) + this, METHODID_SET_KPI_SUBSCRIPTION, compression))) .addMethod( monitoring.MonitoringServiceGrpc.getGetSubsDescriptorMethod(), asyncUnaryCall( @@ -319,26 +305,19 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim monitoring.Monitoring.SubsIDList>( this, METHODID_GET_SUBSCRIPTIONS, compression))) .addMethod( - monitoring.MonitoringServiceGrpc.getEditKpiSubscriptionMethod(), + monitoring.MonitoringServiceGrpc.getDeleteSubscriptionMethod(), asyncUnaryCall( new MethodHandlers< - monitoring.Monitoring.SubsDescriptor, + monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>( - this, METHODID_EDIT_KPI_SUBSCRIPTION, compression))) + this, METHODID_DELETE_SUBSCRIPTION, compression))) .addMethod( - monitoring.MonitoringServiceGrpc.getCreateKpiAlarmMethod(), + monitoring.MonitoringServiceGrpc.getSetKpiAlarmMethod(), asyncUnaryCall( new MethodHandlers< monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>( - 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))) + this, METHODID_SET_KPI_ALARM, compression))) .addMethod( monitoring.MonitoringServiceGrpc.getGetAlarmsMethod(), asyncUnaryCall( @@ -357,31 +336,52 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim monitoring.MonitoringServiceGrpc.getGetAlarmResponseStreamMethod(), asyncServerStreamingCall( new MethodHandlers< - monitoring.Monitoring.AlarmID, + monitoring.Monitoring.AlarmSubscription, 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_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_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_GET_KPI_DESCRIPTOR_LIST = 3; - 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 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 class MethodHandlers<Req, Resp> implements io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>, @@ -402,17 +402,11 @@ 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_CREATE_KPI: + case METHODID_SET_KPI: io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiDescriptor) request, (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver, compression, - serviceImpl::createKpi); - break; - 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::editKpiDescriptor); + serviceImpl::setKpi); break; case METHODID_DELETE_KPI: io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request, @@ -420,24 +414,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim compression, serviceImpl::deleteKpi); break; - case METHODID_GET_KPI_DESCRIPTOR_LIST: - io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request, - (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver, - 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_GET_KPI_DESCRIPTOR_LIST: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request, + (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver, + compression, + serviceImpl::getKpiDescriptorList); + break; case METHODID_INCLUDE_KPI: io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.Kpi) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, @@ -456,11 +444,11 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim compression, serviceImpl::queryKpiData); break; - case METHODID_SUBSCRIBE_KPI: + case METHODID_SET_KPI_SUBSCRIPTION: io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.SubsDescriptor) request, (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver, compression, - serviceImpl::subscribeKpi); + serviceImpl::setKpiSubscription); break; case METHODID_GET_SUBS_DESCRIPTOR: io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request, @@ -474,23 +462,17 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim compression, serviceImpl::getSubscriptions); break; - case METHODID_EDIT_KPI_SUBSCRIPTION: - io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubsDescriptor) request, + case METHODID_DELETE_SUBSCRIPTION: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, - serviceImpl::editKpiSubscription); + serviceImpl::deleteSubscription); break; - case METHODID_CREATE_KPI_ALARM: + case METHODID_SET_KPI_ALARM: io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request, (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver, compression, - 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); + serviceImpl::setKpiAlarm); break; case METHODID_GET_ALARMS: io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request, @@ -505,11 +487,29 @@ 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.AlarmID) request, + io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmSubscription) 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 deleted file mode 100644 index 680929bc031df90594a743eb96316d3c99508cef..0000000000000000000000000000000000000000 --- a/src/policy/target/kubernetes/kubernetes.yml +++ /dev/null @@ -1,89 +0,0 @@ ---- -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 41a4c5d57722cb59ab3d3e505f9f79e68952ad5d..80316ac8965ebdbed99264127465488a946f6782 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_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, + 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, } 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 0ac5fbf24cf1937104646374f60ab9487ee1c84d..45df80e4265018e802be587285fce318fc6b0736 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 +from common.tools.object_factory.Constraint import json_constraint_custom 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('latency_ms', 15.2), - json_constraint('jitter_us', 1.2), + json_constraint_custom('latency_ms', 15.2), + json_constraint_custom('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 0797a4af5505e78e2af49cefc29970f9c8ff11e7..717536f6d1ee60564752f3107cd366796e3a36e2 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 +from common.tools.object_factory.Constraint import json_constraint_custom 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('latency_ms', 15.2), - json_constraint('jitter_us', 1.2), + json_constraint_custom('latency_ms', 15.2), + json_constraint_custom('jitter_us', 1.2), ] SERVICE_R1_R2_CONFIG_RULES = [ json_config_rule_set( diff --git a/src/slice/_docs/ietf-network-slice-service_2022-07-11.yang b/src/slice/_docs/ietf-network-slice-service_2022-07-11.yang new file mode 100644 index 0000000000000000000000000000000000000000..bff228d78f5277fe113d813414c5fd78bf54d98f --- /dev/null +++ b/src/slice/_docs/ietf-network-slice-service_2022-07-11.yang @@ -0,0 +1,1180 @@ +module ietf-network-slice-service { + yang-version 1.1; + namespace + "urn:ietf:params:xml:ns:yang:ietf-network-slice-service"; + prefix ietf-nss; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Types."; + } + import ietf-vpn-common { + prefix vpn-common; + reference + "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3 + VPNs."; + } + import ietf-te-types { + prefix te-types; + reference + "RFC 8776: Common YANG Data Types for Traffic Engineering."; + } + import ietf-te-packet-types { + prefix te-packet-types; + reference + "RFC 8776: Common YANG Data Types for Traffic Engineering."; + } + + organization + "IETF Traffic Engineering Architecture and Signaling (TEAS) + Working Group"; + contact + "WG Web: <https://tools.ietf.org/wg/teas/> + WG List: <mailto:teas@ietf.org> + + Editor: Bo Wu + <lana.wubo@huawei.com> + Editor: Dhruv Dhody + <dhruv.ietf@gmail.com> + Editor: Reza Rokui + <reza.rokui@nokia.com> + Editor: Tarek Saad + <tsaad@juniper.net> + Author: Liuyan Han + <hanliuyan@chinamobile.com>"; + description + "This module defines a model for the IETF Network Slice service. + + Copyright (c) 2022 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Revised BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see the + RFC itself for full legal notices."; + + revision 2022-07-11 { + description + "initial version."; + reference + "RFC XXXX: A Yang Data Model for IETF Network Slice service + operation"; + } + /* Features */ + /* Identities */ + + identity service-tag-type { + description + "Base identity for IETF Network Slice service tag type."; + } + + identity service-tag-customer { + base service-tag-type; + description + "The IETF Network Slice service customer ID tag type."; + } + + identity service-tag-service { + base service-tag-type; + description + "The IETF Network Slice service tag type."; + } + + identity service-tag-opaque { + base service-tag-type; + description + "The IETF Network Slice service opaque tag type."; + } + + identity attachment-circuit-tag-type { + description + "Base identity for the attachment circuit tag type."; + } + + identity attachment-circuit-tag-vlan-id { + base attachment-circuit-tag-type; + description + "The attachment circuit VLAN ID tag type."; + } + + identity attachment-circuit-tag-ip-mask { + base attachment-circuit-tag-type; + description + "The attachment circuit tag IP mask."; + } + + identity service-isolation-type { + description + "Base identity for IETF Network slice service isolation level."; + } + + identity service-isolation-shared { + base service-isolation-type; + description + "Shared resources (e.g. queues) are associated with the + slice service traffic. Hence, the traffic can be impacted + by effects of other services traffic + sharing the same resources."; + } + + identity service-isolation-dedicated { + base service-isolation-type; + description + "Dedicated resources (e.g. queues) are associated with the + Network Slice service traffic. Hence, the service traffic + is isolated from other servceis traffic + sharing the same resources."; + } + + identity service-security-type { + description + "Base identity for for slice service security level."; + } + + identity service-security-authenticate { + base service-security-type; + description + "Indicates the slice service requires authentication."; + } + + identity service-security-integrity { + base service-security-type; + description + "Indicates the slice service requires data integrity."; + } + + identity service-security-encryption { + base service-security-type; + description + "Indicates the slice service requires data encryption."; + } + + identity point-to-point { + base vpn-common:vpn-topology; + description + "Identity for point-to-point IETF Network Slice + service connectivity."; + } + + identity point-to-multipoint { + base vpn-common:vpn-topology; + description + "Identity for point-to-point IETF Network Slice + service connectivity."; + } + + identity multipoint-to-multipoint { + base vpn-common:vpn-topology; + description + "Identity for point-to-point IETF Network Slice + service connectivity."; + } + + identity multipoint-to-point { + base vpn-common:vpn-topology; + description + "Identity for point-to-point IETF Network Slice + service connectivity."; + } + + identity sender-role { + base vpn-common:role; + description + "A SDP is acting as a sender."; + } + + identity receiver-role { + base vpn-common:role; + description + "A SDP is acting as a receiver."; + } + + identity service-slo-metric-type { + description + "Base identity for IETF Network Slice service SLO metric type."; + } + + identity service-slo-one-way-bandwidth { + base service-slo-metric-type; + description + "SLO bandwidth metric. Minimum guaranteed bandwidth between + two SDPs at any time and is measured unidirectionally."; + } + + identity service-slo-two-way-bandwidth { + base service-slo-metric-type; + description + "SLO bandwidth metric. Minimum guaranteed bandwidth between + two SDPs at any time."; + } + + identity service-slo-shared-bandwidth { + base service-slo-metric-type; + description + "The shared SLO bandwidth bound. It is the limit on the + bandwidth that can be shared amongst a group of + connectivity constructs of a slice service."; + } + + identity service-slo-one-way-delay { + base service-slo-metric-type; + description + "SLO one-way-delay is the upper bound of network delay when + transmitting between two SDPs. The metric is defined in + RFC7679."; + } + + identity service-slo-two-way-delay { + base service-slo-metric-type; + description + "SLO two-way delay is the upper bound of network delay when + transmitting between two SDPs. The metric is defined in + RFC2681."; + } + + identity service-slo-one-way-delay-variation { + base service-slo-metric-type; + description + "SLO one-way delay variation is defined by RFC3393, is the + difference in the one-way delay between sequential packets + between two SDPs."; + } + + identity service-slo-two-way-delay-variation { + base service-slo-metric-type; + description + "SLO two-way delay variation is defined by RFC5481, is the + difference in the round-trip delay between sequential packets + between two SDPs."; + } + + identity service-slo-one-way-packet-loss { + base service-slo-metric-type; + description + "SLO loss metric. The ratio of packets dropped to packets + transmitted between two SDPs in one-way + over a period of time as specified in RFC7680."; + } + + identity service-slo-two-way-packet-loss { + base service-slo-metric-type; + description + "SLO loss metric. The ratio of packets dropped to packets + transmitted between two SDPs in two-way + over a period of time as specified in RFC7680."; + } + + identity service-slo-availability { + base service-slo-metric-type; + description + "SLO availability level."; + } + + identity service-match-type { + description + "Base identity for IETF Network Slice service traffic + match type."; + } + + identity service-phy-interface-match { + base service-match-type; + description + "Use the physical interface as match criteria for + slice service traffic."; + } + + identity service-vlan-match { + base service-match-type; + description + "Use the VLAN ID as match criteria for the slice service + traffic."; + } + + identity service-label-match { + base service-match-type; + description + "Use the MPLS label as match criteria for the slice service + traffic."; + } + + identity service-source-ip-match { + base service-match-type; + description + "Use source ip-address in the packet header as match criteria + for the slice service traffic."; + } + + identity service-destination-ip-match { + base service-match-type; + description + "Use destination ip-address in the packet header as + match criteria for the slice service traffic."; + } + + identity service-dscp-match { + base service-match-type; + description + "Use DSCP in the IP packet header as match criteria + for the slice service traffic."; + } + + identity service-any-match { + base service-match-type; + description + "Match all slice service traffic."; + } + + identity peering-protocol-type { + description + "Base identity for SDP peering protocol type."; + } + + identity peering-protocol-bgp { + base peering-protocol-type; + description + "Use BGP as protocol for SDP peering with customer device."; + } + + identity peering-static-routing { + base peering-protocol-type; + description + "Use static routing for SDP peering with customer device."; + } + + identity peering-attribute-type { + description + "Base identity for BGP peering"; + } + + identity remote-as { + base peering-attribute-type; + description + "Identity for remote-as attribute of BGP peering."; + } + + identity neighbor { + base peering-attribute-type; + description + "Identity for neighbor attribute of BGP peering."; + } + + identity local-as { + base peering-attribute-type; + description + "Identity for local-as attribute of BGP peering."; + } + + /* + * Identity for availability-type + */ + + identity availability-type { + description + "Base identity from which specific availability types are + derived."; + } + + identity level-1 { + base availability-type; + description + "level 1: 99.9999%"; + } + + identity level-2 { + base availability-type; + description + "level 2: 99.999%"; + } + + identity level-3 { + base availability-type; + description + "level 3: 99.99%"; + } + + identity level-4 { + base availability-type; + description + "level 4: 99.9%"; + } + + identity level-5 { + base availability-type; + description + "level 5: 99%"; + } + + /* grouping */ + + grouping service-match-criteria { + description + "A grouping for the slice service match definition."; + container service-match-criteria { + description + "Describes the slice service match criteria."; + list match-criterion { + key "index"; + description + "List of the slice service traffic match criteria."; + leaf index { + type uint32; + description + "The entry index."; + } + leaf match-type { + type identityref { + base service-match-type; + } + mandatory true; + description + "Identifies an entry in the list of the slice service + match criteria."; + } + leaf-list value { + type string; + description + "Describes the slice service match criteria, e.g. + IP address, VLAN, etc."; + } + leaf target-connection-group-id { + type leafref { + path + "/ietf-nss:network-slice-services" + + "/ietf-nss:slice-service" + + "/ietf-nss:connection-groups/ietf-nss:connection-group" + + "/ietf-nss:connection-group-id"; + } + mandatory true; + description + "Reference to the slice service connection group."; + } + leaf connection-group-sdp-role { + type identityref { + base vpn-common:role; + } + default "vpn-common:any-to-any-role"; + description + "Indicates the role in the connection group when + a slice service has multiple multipoint-to-multipoint + connection groups, e.g., hub-spoke."; + } + leaf target-connectivity-construct-id { + type leafref { + path + "/ietf-nss:network-slice-services/slice-service" + + "/ietf-nss:connection-groups" + + "/ietf-nss:connection-group[connection-group-id" + + "=current()/../target-connection-group-id]" + + "/ietf-nss:connectivity-construct/ietf-nss:cc-id"; + } + description + "Reference to a Network Slice connection construct."; + } + } + } + } + + grouping service-sles { + description + "Indirectly Measurable Objectives of a slice service."; + leaf-list security { + type identityref { + base service-security-type; + } + description + "The slice service security SLE(s)"; + } + leaf isolation { + type identityref { + base service-isolation-type; + } + default "service-isolation-shared"; + description + "The slice service isolation SLE requirement."; + } + leaf max-occupancy-level { + type uint8 { + range "1..100"; + } + description + "The maximal occupancy level specifies the number of flows to + be admitted."; + } + leaf mtu { + type uint16; + units "bytes"; + description + "The MTU specifies the maximum length in octets of data + packets that can be transmitted by the slice service. + The value needs to be less than or equal to the + minimum MTU value of all 'attachment-circuits' in the SDPs."; + } + container steering-constraints { + description + "Container for the policy of steering constraints + applicable to the slice service."; + container path-constraints { + description + "Container for the policy of path constraints + applicable to the slice service."; + } + container service-function { + description + "Container for the policy of service function + applicable to the slice service."; + } + } + } + + grouping service-metric-bounds { + description + "Slice service metric bounds grouping."; + container metric-bounds { + description + "Slice service metric bounds container."; + list metric-bound { + key "metric-type"; + description + "List of slice service metric bounds."; + leaf metric-type { + type identityref { + base service-slo-metric-type; + } + description + "Identifies an entry in the list of metric type + bounds for the slice service."; + } + leaf metric-unit { + type string; + mandatory true; + description + "The metric unit of the parameter. For example, + s, ms, ns, and so on."; + } + leaf value-description { + type string; + description + "The description of previous value."; + } + leaf bound { + type uint64; + default "0"; + description + "The Bound on the slice service connection metric. + A zero indicate an unbounded upper limit for the + specific metric-type."; + } + } + } + } + + grouping sdp-peering { + description + "A grouping for the slice service SDP peering."; + container sdp-peering { + description + "Describes SDP peering attributes."; + list protocol { + key "protocol-type"; + description + "List of the SDP peering protocol."; + leaf protocol-type { + type identityref { + base peering-protocol-type; + } + description + "Identifies an entry in the list of SDP peering + protocol type."; + } + list attribute { + key "attribute-type"; + description + "list of protocol attributes"; + leaf attribute-type { + type identityref { + base peering-attribute-type; + } + description + "identifies the attribute type"; + } + leaf-list value { + type string; + description + "Describes the value of protocol attribute, e.g. + nexthop address, peer address, etc."; + } + } + } + list opaque { + key "attribute-name"; + description + "List of protocol attributes."; + leaf attribute-name { + type string; + description + "The name of the attribute."; + } + leaf-list value { + type string; + description + "The value(s) of the attribute"; + } + } + } + } + + grouping sdp-attachment-circuits { + description + "Grouping for the SDP attachment circuit definition."; + container attachment-circuits { + description + "List of attachment circuit."; + list attachment-circuit { + key "ac-id"; + description + "The IETF Network Slice service SDP attachment circuit + related parameters."; + leaf ac-id { + type string; + description + "Uniquely identifier a attachment circuit."; + } + leaf ac-description { + type string; + description + "The attachment circuit description."; + } + leaf ac-node-id { + type string; + description + "The attachment circuit node ID in the case of + multi-homing."; + } + leaf ac-tp-id { + type string; + description + "The termination port ID of the attachment circuit."; + } + leaf ac-ip-address { + type inet:ip-address; + description + "The IP address of the attachment circuit."; + } + leaf ac-ip-prefix-length { + type uint8; + description + "The subnet prefix length expressed in bits."; + } + leaf ac-qos-policy-name { + type string; + description + "The name of the QoS policy that is applied to the + attachment circuit. The name can reference a QoS + profile that is pre-provisioned on the device."; + } + leaf mtu { + type uint16; + units "bytes"; + description + "Maximum size in octets of the slice service data packet + that can traverse a SDP."; + } + container ac-tags { + description + "Container for the attachment circuit tags."; + list ac-tags { + key "ac-tag-type"; + description + "The attachment circuit tags list."; + leaf ac-tag-type { + type identityref { + base attachment-circuit-tag-type; + } + description + "The attachment circuit tag type."; + } + leaf-list value { + type string; + description + "The attachment circuit tag value."; + } + } + list ac-tag-opaque { + key "tag-name"; + description + "The attachment circuit tag opaque list."; + leaf tag-name { + type string; + description + "The opaque tags name"; + } + leaf-list value { + type string; + description + "The opaque tags value"; + } + } + } + /* Per ac rate limits */ + uses service-match-criteria; + uses sdp-peering; + uses service-rate-limit; + } + } + } + + grouping sdp-monitoring-metrics { + description + "Grouping for the SDP monitoring metrics."; + container sdp-monitoring { + config false; + description + "Container for SDP monitoring metrics."; + leaf incoming-utilized-bandwidth { + type te-types:te-bandwidth; + description + "Incoming bandwidth utilization at a SDP."; + } + leaf incoming-bw-utilization { + type decimal64 { + fraction-digits 5; + range "0..100"; + } + units "percent"; + mandatory true; + description + "To be used to define the bandwidth utilization + as a percentage of the available bandwidth."; + } + leaf outgoing-utilized-bandwidth { + type te-types:te-bandwidth; + description + "Outoing service bandwidth utilization at a SDP."; + } + leaf outgoing-bw-utilization { + type decimal64 { + fraction-digits 5; + range "0..100"; + } + units "percent"; + mandatory true; + description + "To be used to define the service bandwidth utilization + as a percentage of the available bandwidth."; + } + } + } + + grouping connectivity-construct-monitoring-metrics { + description + "Grouping for connectivity construct monitoring metrics."; + uses te-packet-types:one-way-performance-metrics-packet; + uses te-packet-types:two-way-performance-metrics-packet; + } + + grouping geolocation-container { + description + "A grouping containing a GPS location."; + container location { + description + "A container containing a GPS location."; + leaf altitude { + type int64; + units "millimeter"; + description + "Distance above the sea level."; + } + leaf latitude { + type decimal64 { + fraction-digits 8; + range "-90..90"; + } + description + "Relative position north or south on the Earth's surface."; + } + leaf longitude { + type decimal64 { + fraction-digits 8; + range "-180..180"; + } + description + "Angular distance east or west on the Earth's surface."; + } + } + // gps-location + } + + // geolocation-container + + grouping bw-rate-limits { + description + "Bandwidth rate limits grouping."; + reference + "RFC 7640: Traffic Management Benchmarking"; + leaf cir { + type uint64; + units "bps"; + description + "Committed Information Rate. The maximum number of bits + that a port can receive or send during one-second over an + interface."; + } + leaf cbs { + type uint64; + units "bytes"; + description + "Committed Burst Size. CBS controls the bursty nature + of the traffic. Traffic that does not use the configured + CIR accumulates credits until the credits reach the + configured CBS."; + } + leaf eir { + type uint64; + units "bps"; + description + "Excess Information Rate, i.e., excess frame delivery + allowed not subject to SLA. The traffic rate can be + limited by EIR."; + } + leaf ebs { + type uint64; + units "bytes"; + description + "Excess Burst Size. The bandwidth available for burst + traffic from the EBS is subject to the amount of + bandwidth that is accumulated during periods when + traffic allocated by the EIR policy is not used."; + } + leaf pir { + type uint64; + units "bps"; + description + "Peak Information Rate, i.e., maximum frame delivery + allowed. It is equal to or less than sum of CIR and EIR."; + } + leaf pbs { + type uint64; + units "bytes"; + description + "Peak Burst Size."; + } + } + + grouping service-rate-limit { + description + "The rate limits grouping."; + container incoming-rate-limits { + description + "Container for the asymmetric traffic control."; + uses bw-rate-limits; + } + container outgoing-rate-limits { + description + "The rate-limit imposed on outgoing traffic."; + uses bw-rate-limits; + } + } + + grouping sdp { + description + "Slice service SDP related information"; + leaf sdp-id { + type string; + description + "Unique identifier for the referred slice service SDP."; + } + leaf sdp-description { + type string; + description + "Give more description of the SDP."; + } + uses geolocation-container; + leaf node-id { + type string; + description + "Uniquely identifies an edge node of the SDP."; + } + leaf sdp-ip { + type inet:ip-address; + description + "The IP address of the SDP."; + } + uses service-match-criteria; + uses sdp-peering; + uses sdp-attachment-circuits; + uses service-rate-limit; + /* Per SDP rate limits */ + uses vpn-common:service-status; + uses sdp-monitoring-metrics; + } + + //service-sdp + + grouping connectivity-construct { + description + "Grouping for slice service connectivity construct."; + list connectivity-construct { + key "cc-id"; + description + "List of connectivity constructs."; + leaf cc-id { + type uint32; + description + "The connectivity construct identifier."; + } + choice connectivity-construct-type { + default "p2p"; + description + "Choice for connectivity construct type."; + case p2p { + description + "P2P connectivity construct."; + leaf p2p-sender-sdp { + type leafref { + path "../../../../sdps/sdp/sdp-id"; + } + description + "Reference to a sender SDP."; + } + leaf p2p-receiver-sdp { + type leafref { + path "../../../../sdps/sdp/sdp-id"; + } + description + "Reference to a receiver SDP."; + } + } + case p2mp { + description + "P2MP connectivity construct."; + leaf p2mp-sender-sdp { + type leafref { + path "../../../../sdps/sdp/sdp-id"; + } + description + "Reference to a sender SDP."; + } + leaf-list p2mp-receiver-sdp { + type leafref { + path "../../../../sdps/sdp/sdp-id"; + } + description + "Reference to a receiver SDP."; + } + } + case a2a { + description + "A2A connectivity construct."; + list a2a-sdp { + key "sdp-id"; + description + "List of included A2A SDPs."; + leaf sdp-id { + type leafref { + path "../../../../../sdps/sdp/sdp-id"; + } + description + "Reference to a SDP."; + } + uses service-slo-sle-policy; + } + } + } + uses service-slo-sle-policy; + /* Per connectivity construct service-slo-sle-policy + * overrides the per slice service-slo-sle-policy. + */ + container connectivity-construct-monitoring { + config false; + description + "SLO status per connectivity construct."; + uses connectivity-construct-monitoring-metrics; + } + } + } + + //connectivity-construct + + grouping connection-group { + description + "Grouping for slice service connection group."; + leaf connection-group-id { + type string; + description + "The connection group identifier."; + } + leaf connectivity-type { + type identityref { + base vpn-common:vpn-topology; + } + default "vpn-common:any-to-any"; + description + "Connection group connectivity type."; + } + uses service-slo-sle-policy; + uses connectivity-construct; + /* Per connection group service-slo-sle-policy overrides + * the per slice service-slo-sle-policy. + */ + container connection-group-monitoring { + config false; + description + "SLO status per connection group."; + uses connectivity-construct-monitoring-metrics; + } + } + + //connection-group + + grouping slice-service-template { + description + "Grouping for slice service templates."; + container slo-sle-templates { + description + "Contains a set of slice service templates."; + list slo-sle-template { + key "id"; + leaf id { + type string; + description + "Identification of the Service Level Objective (SLO) + and Service Level Expectation (SLE) template to be used. + Local administration meaning."; + } + leaf template-description { + type string; + description + "Description of the SLO and SLE policy template."; + } + description + "List for SLO and SLE template identifiers."; + } + } + } + + /* Configuration data nodes */ + + grouping service-slo-sle-policy { + description + "Slice service policy grouping."; + choice slo-sle-policy { + description + "Choice for SLO and SLE policy template. + Can be standard template or customized template."; + case standard { + description + "Standard SLO template."; + leaf slo-sle-template { + type leafref { + path "/ietf-nss:network-slice-services" + + "/ietf-nss:slo-sle-templates" + + "/ietf-nss:slo-sle-template/id"; + } + description + "Standard SLO and SLE template to be used."; + } + } + case custom { + description + "Customized SLO and SLE template."; + container service-slo-sle-policy { + description + "Contains the SLO and SLE policy."; + leaf policy-description { + type string; + description + "Description of the SLO and SLE policy."; + } + uses service-metric-bounds; + uses service-sles; + } + } + } + } + + container network-slice-services { + description + "Containes a list of IETF network slice services"; + uses slice-service-template; + list slice-service { + key "service-id"; + description + "A slice service is identified by a service-id."; + leaf service-id { + type string; + description + "A unique slice service identifier."; + } + leaf service-description { + type string; + description + "Textual description of the slice service."; + } + container service-tags { + description + "Container for the list of service tags."; + list tag-type { + key "tag-type"; + description + "The service tag list."; + leaf tag-type { + type identityref { + base service-tag-type; + } + description + "Slice service tag type."; + } + leaf-list value { + type string; + description + "The tag value"; + } + } + list tag-opaque { + key "tag-name"; + description + "The service tag opaquelist."; + leaf tag-name { + type string; + description + "The opaque tag name"; + } + leaf-list value { + type string; + description + "The opaque tag value"; + } + } + } + uses service-slo-sle-policy; + uses vpn-common:service-status; + container sdps { + description + "Slice service SDPs."; + list sdp { + key "sdp-id"; + uses sdp; + description + "List of SDPs in this slice service."; + } + } + container connection-groups { + description + "Contains connections group."; + list connection-group { + key "connection-group-id"; + description + "List of connection groups."; + uses connection-group; + } + } + } + //ietf-network-slice-service list + } +} diff --git a/src/slice/requirements.in b/src/slice/requirements.in index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0a2c39895c9a1f642470bcc26cb67bd8dfb169b1 100644 --- a/src/slice/requirements.in +++ b/src/slice/requirements.in @@ -0,0 +1 @@ +#deepdiff==5.8.* diff --git a/src/slice/service/SliceServiceServicerImpl.py b/src/slice/service/SliceServiceServicerImpl.py index 275a201148940df10afcf446b57ab42e6c6a528c..30c2310b0136674ce3fa23c26b3c0812bbf3448a 100644 --- a/src/slice/service/SliceServiceServicerImpl.py +++ b/src/slice/service/SliceServiceServicerImpl.py @@ -12,11 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -import grpc, json, logging +import grpc, logging #, deepdiff from common.proto.context_pb2 import ( - ConfigActionEnum, Empty, Service, ServiceStatusEnum, ServiceTypeEnum, Slice, SliceId, SliceStatusEnum) + Empty, Service, ServiceId, 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 @@ -34,66 +39,73 @@ class SliceServiceServicerImpl(SliceServiceServicer): def create_update(self, request : Slice) -> SliceId: context_client = ContextClient() - - slice_id = context_client.SetSlice(request) - if len(request.slice_endpoint_ids) != 2: return slice_id + 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))) domains = set() for slice_endpoint_id in request.slice_endpoint_ids: device_uuid = slice_endpoint_id.device_id.device_uuid.uuid - domains.add(device_uuid.split('@')[1]) + 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))) - is_multi_domain = len(domains) == 2 if is_multi_domain: interdomain_client = InterdomainClient() slice_id = interdomain_client.RequestSlice(request) else: - # pylint: disable=no-member - service_request = 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 + 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() - 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) + 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) + service_request = Service() + service_request.CopyFrom(_service) + + 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_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') - 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 + 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 slice_ = context_client.GetSlice(slice_id) slice_active = Slice() @@ -132,4 +144,41 @@ 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 f77d86bffe9b722f414be4f85adcaf0ef2cc4a8e..a59c54b4b1b56865871d331409c1a7f60629aec6 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) + logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s") 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 e6f6ccbc96152eb7e3a33317293261e28c89d713..b31e868741a7996494d1f7763a3f7e237ca216a1 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_OPTICAL_LINE_SYSTEM.value +DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_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 40a954868620564aef7d60c5ec0023ea0a32337b..45296d107bcdb14472f05c677ba0c75113fd94cc 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_OPTICAL_LINE_SYSTEM.value +DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value @pytest.fixture(scope='session') diff --git a/src/tests/ofc22/descriptors_emulated.json b/src/tests/ofc22/descriptors_emulated.json index eb22506238e03a161f0e2b8aaeadf5fd31cf547b..6beb1427ebb22f22bcb24b73c173d33d4352cdb4 100644 --- a/src/tests/ofc22/descriptors_emulated.json +++ b/src/tests/ofc22/descriptors_emulated.json @@ -64,7 +64,7 @@ }, { "device_id": {"device_uuid": {"uuid": "O1-OLS"}}, - "device_type": "emu-optical-line-system", + "device_type": "emu-open-line-system", "device_config": {"config_rules": [ {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, diff --git a/src/tests/ofc22/tests/test_functional_create_service.py b/src/tests/ofc22/tests/test_functional_create_service.py index f3389fdbfce4e9262ffddbad876bb86f9b300551..31572e7ba0854a394607fb705aa52b9caeb08085 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_OPTICAL_LINE_SYSTEM.value +DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_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 51e91a5967e1696fa2fdfe7dd06d2efb46642248..b4bc621d294245a6286e77483e3074f95533fd4e 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_OPTICAL_LINE_SYSTEM.value +DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_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 c646efdec0d79148f9bd066116d6ca3985f6f909..1ddf1e1d03d8dbc8695e1a7850f5c911cae7e28e 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 => optical-line-system.png -https://symbols.getvecta.com/stencil_241/281_virtual-layer-switch.29420aff2f.png => emu-optical-line-system.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 diff --git a/src/webui/service/static/topology_icons/emu-optical-line-system.png b/src/webui/service/static/topology_icons/emu-open-line-system.png similarity index 100% rename from src/webui/service/static/topology_icons/emu-optical-line-system.png rename to src/webui/service/static/topology_icons/emu-open-line-system.png diff --git a/src/webui/service/static/topology_icons/optical-line-system.png b/src/webui/service/static/topology_icons/open-line-system.png similarity index 100% rename from src/webui/service/static/topology_icons/optical-line-system.png rename to src/webui/service/static/topology_icons/open-line-system.png