diff --git a/src/telemetry/backend/requirements.in b/src/telemetry/backend/requirements.in index a9e9b0afa630f6048dcf78ea05e39facfccdd7d8..617121b4491694b208e6e6c5c63038864dc32d45 100644 --- a/src/telemetry/backend/requirements.in +++ b/src/telemetry/backend/requirements.in @@ -14,8 +14,10 @@ anytree==2.8.0 confluent-kafka==2.3.* +pyang==2.6.* +git+https://github.com/robshakir/pyangbind.git libyang==2.8.4 numpy==2.0.1 APScheduler==3.10.1 deepdiff==6.7.* -pygnmi==0.8.14 \ No newline at end of file +pygnmi==0.8.14 diff --git a/src/telemetry/backend/service/ErrorMessages.py b/src/telemetry/backend/service/ErrorMessages.py new file mode 100644 index 0000000000000000000000000000000000000000..317de8cf600b387340dfe72788c63334b5c2ba50 --- /dev/null +++ b/src/telemetry/backend/service/ErrorMessages.py @@ -0,0 +1,40 @@ +# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# 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. + +_DEVICE_ID = 'DeviceId({device_uuid:s})' +_ENDPOINT_ID = 'EndpointId({endpoint_uuid:s})' +_KPI = 'Kpi({kpi_uuid:s})' +_DEVICE_ENDPOINT_ID = _DEVICE_ID + '/' + _ENDPOINT_ID +_RESOURCE = 'Resource({resource_data:s})' +_RESOURCE_KEY = 'Resource(key={resource_key:s})' +_RESOURCE_KEY_VALUE = 'Resource(key={resource_key:s}, value={resource_value:s})' +_SUBSCRIPTION = 'Subscription(key={subscr_key:s}, duration={subscr_duration:s}, interval={subscr_interval:s})' +_SAMPLE_TYPE = 'SampleType({sample_type_id:s}/{sample_type_name:s})' +_ERROR = 'Error({error:s})' + +ERROR_MISSING_DRIVER = _DEVICE_ID + ' has not been added to this Device instance' +ERROR_MISSING_KPI = _KPI + ' not found' + +ERROR_BAD_RESOURCE = _DEVICE_ID + ': GetConfig retrieved malformed ' + _RESOURCE +ERROR_UNSUP_RESOURCE = _DEVICE_ID + ': GetConfig retrieved unsupported ' + _RESOURCE + +ERROR_GET = _DEVICE_ID + ': Unable to Get ' + _RESOURCE_KEY + '; ' + _ERROR +ERROR_GET_INIT = _DEVICE_ID + ': Unable to Get Initial ' + _RESOURCE_KEY + '; ' + _ERROR +ERROR_DELETE = _DEVICE_ID + ': Unable to Delete ' + _RESOURCE_KEY_VALUE + '; ' + _ERROR +ERROR_SET = _DEVICE_ID + ': Unable to Set ' + _RESOURCE_KEY_VALUE + '; ' + _ERROR + +ERROR_SAMPLETYPE = _DEVICE_ENDPOINT_ID + ': ' + _SAMPLE_TYPE + ' not supported' + +ERROR_SUBSCRIBE = _DEVICE_ID + ': Unable to Subscribe ' + _SUBSCRIPTION + '; ' + _ERROR +ERROR_UNSUBSCRIBE = _DEVICE_ID + ': Unable to Unsubscribe ' + _SUBSCRIPTION + '; ' + _ERROR diff --git a/src/telemetry/backend/service/collectors/__init__.py b/src/telemetry/backend/service/collectors/__init__.py index 2d19a10a623c3c2c68e2d219b4cf3ecfe131ca28..084207f5107322636ef0bee4ff1b7ed3e5efc6df 100644 --- a/src/telemetry/backend/service/collectors/__init__.py +++ b/src/telemetry/backend/service/collectors/__init__.py @@ -25,7 +25,6 @@ DRIVERS.append( # TODO: multi-filter is not working { FilterFieldEnum.DEVICE_TYPE: [ - DeviceTypeEnum.EMULATED_P4_SWITCH, DeviceTypeEnum.EMULATED_PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_SWITCH, ], diff --git a/src/telemetry/backend/service/collectors/gnmi_openconfig/clone-yang-models.sh b/src/telemetry/backend/service/collectors/gnmi_openconfig/clone-yang-models.sh index eb97607847387beb2a1cb7cbe3f72fd29afed56e..10029b405e3f47f53df013a47ba3650f7fc027de 100755 --- a/src/telemetry/backend/service/collectors/gnmi_openconfig/clone-yang-models.sh +++ b/src/telemetry/backend/service/collectors/gnmi_openconfig/clone-yang-models.sh @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -BASE_PATH=~/tfs-ctrl/src/telemetry/backend/collectors/gnmi_openconfig +BASE_PATH=~/tfs-ctrl/src/telemetry/backend/service/collectors/gnmi_openconfig GIT_BASE_PATH=${BASE_PATH}/git/openconfig rm -rf ${GIT_BASE_PATH} diff --git a/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/YangHandler.py b/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/YangHandler.py index e7cff19eb901be4a85d4e31f8de9070fe5a7c277..15d9afac44af047f21a11a5241227889125ec984 100644 --- a/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/YangHandler.py +++ b/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/YangHandler.py @@ -42,10 +42,11 @@ YANG_MODULES = [ 'openconfig-types', 'openconfig-policy-types', 'openconfig-mpls-types', + 'openconfig-ospf-types', 'openconfig-network-instance-types', 'openconfig-network-instance', - 'openconfig-platform', + # 'openconfig-platform', 'openconfig-platform-controller-card', 'openconfig-platform-cpu', 'openconfig-platform-ext', diff --git a/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/__init__.py b/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/__init__.py index 0c803bb161d1303399cf9a3235e0b4874435922b..e230e12344c30c5596e7725c38122ccd4ff00177 100644 --- a/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/__init__.py +++ b/src/telemetry/backend/service/collectors/gnmi_openconfig/handlers/__init__.py @@ -15,16 +15,16 @@ import logging from typing import Any, Dict, List, Optional, Tuple, Union from telemetry.backend.service.collector_api._Collector import RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, RESOURCE_NETWORK_INSTANCES -from ._Handler import _Handler -from .Component import ComponentHandler -from .Interface import InterfaceHandler -from .InterfaceCounter import InterfaceCounterHandler -from .NetworkInstance import NetworkInstanceHandler -from .NetworkInstanceInterface import NetworkInstanceInterfaceHandler -from .NetworkInstanceProtocol import NetworkInstanceProtocolHandler +from ._Handler import _Handler +from .Component import ComponentHandler +from .Interface import InterfaceHandler +from .InterfaceCounter import InterfaceCounterHandler +from .NetworkInstance import NetworkInstanceHandler +from .NetworkInstanceInterface import NetworkInstanceInterfaceHandler +from .NetworkInstanceProtocol import NetworkInstanceProtocolHandler from .NetworkInstanceStaticRoute import NetworkInstanceStaticRouteHandler -from .Tools import get_schema -from .YangHandler import YangHandler +from .Tools import get_schema +from .YangHandler import YangHandler LOGGER = logging.getLogger(__name__) diff --git a/src/telemetry/backend/tests/gnmi_openconfig/messages_gnmi-openconfig.py b/src/telemetry/backend/tests/gnmi_openconfig/messages_gnmi_openconfig.py similarity index 92% rename from src/telemetry/backend/tests/gnmi_openconfig/messages_gnmi-openconfig.py rename to src/telemetry/backend/tests/gnmi_openconfig/messages_gnmi_openconfig.py index 99ea4bfbb96099620b296bc46f0f0660170e0553..09bc9088abe13fcc3b3d2b18c74c213bf6422ceb 100644 --- a/src/telemetry/backend/tests/gnmi_openconfig/messages_gnmi-openconfig.py +++ b/src/telemetry/backend/tests/gnmi_openconfig/messages_gnmi_openconfig.py @@ -22,7 +22,7 @@ def _create_kpi_pkt_recevied( device_uuid : uuid.UUID = uuid.UUID("a8695f53-ba2e-57bd-b586-edf2b5e054b1"), endpoint_uuid : uuid.UUID = uuid.UUID("c51c2784-0377-5851-993b-46804c89cfc9") ): - _create_kpi_descriptor( + return _create_kpi_descriptor( descriptor_name = descriptor_name, sample_type = sample_type, device_uuid = device_uuid, @@ -35,7 +35,7 @@ def _create_kpi_pkt_transmitted( device_uuid : uuid.UUID = uuid.UUID("a8695f53-ba2e-57bd-b586-edf2b5e054b1"), endpoint_uuid : uuid.UUID = uuid.UUID("c51c2784-0377-5851-993b-46804c89cfc9") ): - _create_kpi_descriptor( + return _create_kpi_descriptor( descriptor_name = descriptor_name, sample_type = sample_type, device_uuid = device_uuid, @@ -54,10 +54,10 @@ def _create_kpi_descriptor( # _create_kpi_request.kpi_id.kpi_id.uuid = "f974b6cc-095f-4767-b8c1-3457b383fb99" _create_kpi_request.kpi_description = descriptor_name _create_kpi_request.kpi_sample_type = sample_type - _create_kpi_request.device_id.device_uuid.uuid = device_uuid + _create_kpi_request.device_id.device_uuid.uuid = str(device_uuid) _create_kpi_request.service_id.service_uuid.uuid = 'SERVICE_ID_2' _create_kpi_request.slice_id.slice_uuid.uuid = 'SLICE_1' - _create_kpi_request.endpoint_id.endpoint_uuid.uuid = endpoint_uuid + _create_kpi_request.endpoint_id.endpoint_uuid.uuid = str(endpoint_uuid) _create_kpi_request.connection_id.connection_uuid.uuid = 'CONN_3' _create_kpi_request.link_id.link_uuid.uuid = 'LINK_5' return _create_kpi_request diff --git a/src/telemetry/backend/tests/gnmi_openconfig/test_gnmi_openconfig_collector.py b/src/telemetry/backend/tests/gnmi_openconfig/test_gnmi_openconfig_collector.py index c29798ccd8354479867dc50d17928048f00bd696..8f9061bb250c5c9c2f48956945bd7b0ae658a02b 100644 --- a/src/telemetry/backend/tests/gnmi_openconfig/test_gnmi_openconfig_collector.py +++ b/src/telemetry/backend/tests/gnmi_openconfig/test_gnmi_openconfig_collector.py @@ -23,14 +23,15 @@ from common.proto.context_pb2 import EndPointId, DeviceId, TopologyId, ContextId from src.telemetry.backend.service.collectors.gnmi_openconfig.GnmiOpenConfigCollector import GnmiOpenConfigCollector from .storage.Storage import Storage from common.proto.kpi_manager_pb2 import KpiDescriptor -from device.service.monitoring.ResourceKeyMapper import ResourceKeyMapper from telemetry.backend.service.collector_api._Collector import RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, RESOURCE_NETWORK_INSTANCES from .tools.manage_config import ( check_config_endpoints, check_config_interfaces, check_config_network_instances, get_config ) -# from .messages_gnmi-openconfig import _create_kpi_pkt_recevied, _create_kpi_pkt_transmitted +from .messages_gnmi_openconfig import ( + _create_kpi_pkt_recevied, _create_kpi_pkt_transmitted +) LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG)