[telemetry] add API for TREL telemetry (#9710)

Create OT API to support trel telemetry which is supported through
platform API and also add cli support to get/reset trel counters.

Metrics we are adding are:
- trel_frames_tx
- trel_bytes_tx
- trel_frames_rx
- trel_bytes_rx
- trel_frames_tx_failed
- num_trel_peers

Metrics already supported through API:
- trel_enabled
This commit is contained in:
Yang Liu
2024-01-05 22:10:27 -08:00
committed by GitHub
parent 09d07a7c6a
commit d81c6fab98
14 changed files with 261 additions and 11 deletions
@@ -143,6 +143,23 @@ class TestTrelConnectivity(thread_cert.TestCase):
self.assertTrue(med1.ping(router2_mleid))
self.assertTrue(sed1.ping(router2_mleid))
counters = br1.get_trel_counters()
print('br1 trel counters', counters)
self.assertTrue(counters['Inbound']['packets'] > 0)
self.assertTrue(counters['Inbound']['bytes'] > 0)
self.assertTrue(counters['Outbound']['packets'] > 0)
self.assertTrue(counters['Outbound']['bytes'] > 0)
self.assertTrue(counters['Outbound']['failures'] >= 0)
br1.reset_trel_counters()
counters = br1.get_trel_counters()
print('br1 trel counters after reset', counters)
self.assertTrue(counters['Inbound']['packets'] == 0)
self.assertTrue(counters['Inbound']['bytes'] == 0)
self.assertTrue(counters['Outbound']['packets'] == 0)
self.assertTrue(counters['Outbound']['bytes'] == 0)
self.assertTrue(counters['Outbound']['failures'] == 0)
def verify(self, pv: PacketVerifier):
pkts: PacketFilter = pv.pkts
BR1_RLOC16 = pv.vars['BR1_RLOC16']
+24
View File
@@ -1390,6 +1390,30 @@ class NodeImpl:
raise
def get_trel_counters(self):
cmd = 'trel counters'
self.send_command(cmd)
result = self._expect_command_output()
counters = {}
for line in result:
m = re.match(r'(\w+)\:[^\d]+(\d+)[^\d]+(\d+)(?:[^\d]+(\d+))?', line)
if m:
groups = m.groups()
sub_counters = {
'packets': int(groups[1]),
'bytes': int(groups[2]),
}
if groups[3]:
sub_counters['failures'] = int(groups[3])
counters[groups[0]] = sub_counters
return counters
def reset_trel_counters(self):
cmd = 'trel counters reset'
self.send_command(cmd)
self._expect_done()
def _encode_txt_entry(self, entry):
"""Encodes the TXT entry to the DNS-SD TXT record format as a HEX string.