diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index d23ad0b52f..d75b17dbe9 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -131,6 +131,7 @@ def run(self): './yang-models/sonic-feature.yang', './yang-models/sonic-fips.yang', './yang-models/sonic-hash.yang', + './yang-models/sonic-high-frequency-telemetry.yang', './yang-models/sonic-trimming.yang', './yang-models/sonic-system-defaults.yang', './yang-models/sonic-interface.yang', @@ -242,6 +243,7 @@ def run(self): './cvlyang-models/sonic-fine-grained-ecmp.yang', './cvlyang-models/sonic-fips.yang', './cvlyang-models/sonic-hash.yang', + './cvlyang-models/sonic-high-frequency-telemetry.yang', './cvlyang-models/sonic-trimming.yang', './cvlyang-models/sonic-system-defaults.yang', './cvlyang-models/sonic-interface.yang', diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index e3f712ec2d..fb974b23c5 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -2848,6 +2848,29 @@ "ASIC_SENSORS_POLLER_STATUS": { "admin_status": "enable" } + }, + "HIGH_FREQUENCY_TELEMETRY_PROFILE": { + "dummy": { + "stream_state": "disabled", + "poll_interval": "100000" + }, + "hft_profile": { + "stream_state": "enabled", + "poll_interval": "100000" + } + }, + "HIGH_FREQUENCY_TELEMETRY_GROUP": { + "dummy|PORT": {}, + "hft_profile|PORT": { + "object_names": [ + "Ethernet0", + "Ethernet4" + ], + "object_counters": [ + "IF_IN_OCTETS", + "OUT_CURR_OCCUPANCY_BYTES" + ] + } } }, "SAMPLE_CONFIG_DB_UNKNOWN": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/test_yang_model.py b/src/sonic-yang-models/tests/yang_model_tests/test_yang_model.py index 22cad816b1..37ac7b277e 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/test_yang_model.py +++ b/src/sonic-yang-models/tests/yang_model_tests/test_yang_model.py @@ -49,6 +49,7 @@ def initTest(self): 'MinElements': ['Too few'], 'MaxElements': ['Too many'], 'UnknownElement': ['Unknown element'], + "InvalidJSON": ['Invalid JSON data'], 'None': [] } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/high_frequency_telemetry.json b/src/sonic-yang-models/tests/yang_model_tests/tests/high_frequency_telemetry.json index e1d0aaf32c..3805d48eb4 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/high_frequency_telemetry.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/high_frequency_telemetry.json @@ -1,5 +1,21 @@ { "HIGH_FREQUENCY_TELEMETRY_VALID_CASE": { "desc": "Valid high frequency telemetry configuration." + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_PORT": { + "desc": "Invalid port.", + "eStrKey": "Must" + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_STATS": { + "desc": "Invalid stats.", + "eStrKey": "Must" + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_DUMMY_TABLE1": { + "desc": "Invalid dummy table1.", + "eStrKey": "InvalidJSON" + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_DUMMY_TABLE2": { + "desc": "Invalid dummy table2.", + "eStrKey": "InvalidJSON" } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/high_frequency_telemetry.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/high_frequency_telemetry.json index 0f8edca36a..1293747c98 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/high_frequency_telemetry.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/high_frequency_telemetry.json @@ -69,6 +69,16 @@ "name": "high_frequency_counters", "stream_state": "enabled", "poll_interval": 100 + }, + { + "name": "partial_objects", + "stream_state": "disabled", + "poll_interval": 100000 + }, + { + "name": "dummy_profile", + "stream_state": "disabled", + "poll_interval": 100000 } ] }, @@ -120,6 +130,156 @@ "CURR_OCCUPANCY_BYTES", "XOFF_ROOM_WATERMARK_BYTES" ] + }, + { + "profile_name": "partial_objects", + "group_name": "PORT", + "object_names": [ + "Ethernet0" + ], + "object_counters": [ + "IF_IN_OCTETS", + "OUT_CURR_OCCUPANCY_BYTES" + ] + }, + { + "profile_name": "dummy_profile", + "group_name": "PORT" + } + ] + } + } + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_PORT": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet0", + "lanes": "0", + "speed": 25000 + }, + { + "name": "Ethernet4", + "lanes": "4", + "speed": 25000 + } + ] + } + }, + "sonic-high-frequency-telemetry:sonic-high-frequency-telemetry": { + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_PROFILE": { + "HIGH_FREQUENCY_TELEMETRY_PROFILE_LIST": [ + { + "name": "invalid_port", + "stream_state": "enabled", + "poll_interval": 100 + } + ] + }, + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_GROUP": { + "HIGH_FREQUENCY_TELEMETRY_GROUP_LIST": [ + { + "profile_name": "invalid_port", + "group_name": "PORT", + "object_names": [ + "Ethernet1" + ], + "object_counters": [ + "IF_IN_OCTETS", + "OUT_CURR_OCCUPANCY_BYTES" + ] + } + ] + } + } + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_STATS": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet0", + "lanes": "0", + "speed": 25000 + }, + { + "name": "Ethernet4", + "lanes": "4", + "speed": 25000 + } + ] + } + }, + "sonic-high-frequency-telemetry:sonic-high-frequency-telemetry": { + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_PROFILE": { + "HIGH_FREQUENCY_TELEMETRY_PROFILE_LIST": [ + { + "name": "invalid_stats", + "stream_state": "enabled", + "poll_interval": 100 + } + ] + }, + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_GROUP": { + "HIGH_FREQUENCY_TELEMETRY_GROUP_LIST": [ + { + "profile_name": "invalid_stats", + "group_name": "PORT", + "object_names": [ + "Ethernet0" + ], + "object_counters": [ + "IF_IN_OCTETS", + "OUT_CURR_OCCUPANCY_BYTES", + "INVALID_STAT" + ] + } + ] + } + } + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_DUMMY_TABLE1": { + "sonic-high-frequency-telemetry:sonic-high-frequency-telemetry": { + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_PROFILE": { + "HIGH_FREQUENCY_TELEMETRY_PROFILE_LIST": [ + { + "name": "invalid_dummy", + "stream_state": "disabled", + "poll_interval": 100 + } + ] + }, + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_GROUP": { + "HIGH_FREQUENCY_TELEMETRY_GROUP_LIST": [ + { + "profile_name": "invalid_dummy", + "group_name": "BUFFER_POOL", + "object_names": "", + "object_counters": "" + } + ] + } + } + }, + "HIGH_FREQUENCY_TELEMETRY_INVALID_DUMMY_TABLE2": { + "sonic-high-frequency-telemetry:sonic-high-frequency-telemetry": { + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_PROFILE": { + "HIGH_FREQUENCY_TELEMETRY_PROFILE_LIST": [ + { + "name": "invalid_dummy", + "stream_state": "disabled", + "poll_interval": 100 + } + ] + }, + "sonic-high-frequency-telemetry:HIGH_FREQUENCY_TELEMETRY_GROUP": { + "HIGH_FREQUENCY_TELEMETRY_GROUP_LIST": [ + { + "profile_name": "invalid_dummy", + "group_name": "PORT", + "object_names": [], + "object_counters": [] } ] } diff --git a/src/sonic-yang-models/yang-models/sonic-high-frequency-telemetry.yang b/src/sonic-yang-models/yang-models/sonic-high-frequency-telemetry.yang index bcb58d7aab..b412c4dfdb 100644 --- a/src/sonic-yang-models/yang-models/sonic-high-frequency-telemetry.yang +++ b/src/sonic-yang-models/yang-models/sonic-high-frequency-telemetry.yang @@ -93,8 +93,6 @@ module sonic-high-frequency-telemetry { + " or ( ../group_name = 'QUEUE' and substring-before(current(), '|') = /bql:sonic-buffer-queue/bql:BUFFER_QUEUE/bql:BUFFER_QUEUE_LIST/bql:port and re-match(substring-after(current(), '|'), '[0-9]+') )"; } - must "count(object_names) > 0"; - leaf-list object_counters { type string; must "( ../group_name = 'PORT' and re-match(current(), 'IF_IN_OCTETS|IF_IN_UCAST_PKTS|IF_IN_DISCARDS|IF_IN_ERRORS|IN_CURR_OCCUPANCY_BYTES|IF_OUT_OCTETS|IF_OUT_DISCARDS|IF_OUT_ERRORS|IF_OUT_UCAST_PKTS|OUT_CURR_OCCUPANCY_BYTES|TRIM_PACKETS') )"