From 5d2f57b75ba56d43d47f6b4f856668266e1777d0 Mon Sep 17 00:00:00 2001 From: Lu Qiuwen Date: Thu, 24 Aug 2023 16:38:32 +0800 Subject: 增加报文转发延迟和抖动的统计。 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/monit_device/monit_device.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'tools') diff --git a/tools/monit_device/monit_device.py b/tools/monit_device/monit_device.py index 0f8d7e6..8b906c8 100755 --- a/tools/monit_device/monit_device.py +++ b/tools/monit_device/monit_device.py @@ -23,7 +23,6 @@ TITLE_VECTOR = ['PhyRXFrame', 'PhyRXBits', 'PhyRXMissed', 'PhyRXError', 'PhyRXNoBUF', 'PhyTXFrame', 'PhyTXBits', 'PhyTXError', 'UsrRXDrops', 'UsrTXDrops'] - TITLE_MAP = {'PhyRXFrame': 'ipackets', 'PhyRXBits': 'ibytes', 'PhyRXMissed': 'imissed', @@ -62,6 +61,11 @@ TITLE_MAP_PROMETHEUS = { 'usr_tx_drop_total': 'usertxdrop' } +TITLE_MAP_PKT_LATENCY_PROMETHEUS = { + "avg_latency_ns": "pkt_latency_avg_ns", + "jitter_ns": "pkt_latency_jitter_ns", +} + def locate_vector_by_symbol(vector, symbol): return [s for s in vector if s['symbol'] == symbol] @@ -71,6 +75,17 @@ def list_all_phydev(json_fp): return [s['symbol'] for s in json_fp['device']] +def dump_pkt_latency_prometheus_output(json_fp): + resp = '' + try: + for item in TITLE_MAP_PKT_LATENCY_PROMETHEUS: + value = json_fp['pkt_latency'][item] + resp += '%s %u\n' % (item, value) + except KeyError: + resp = '' + return resp + + def phydev_value_read(json_fp, str_device, str_item): phydevs = locate_vector_by_symbol(json_fp['device'], str_device) return phydevs[0]['stats']['accumulative'][str_item] @@ -95,7 +110,6 @@ def trans_to_human_readable(value): def dump_human_table(json_fp, devsym, is_human_number=0): - print('\nTime: %s, Physical device: %s' % (time.strftime('%c'), devsym)) table_phydev = prettytable.PrettyTable([' '] + TITLE_VECTOR, @@ -129,6 +143,7 @@ def dump_human_table(json_fp, devsym, is_human_number=0): table_phydev.add_row(SpeedList) print(table_phydev) + # APM sendlog format def dump_prometheus_output(json_fp, devsym): @@ -140,7 +155,6 @@ def dump_prometheus_output(json_fp, devsym): def setup_argv_parser(phydev_list): - parser = argparse.ArgumentParser( description='Marsio ZeroCopy Tools -- Monitor NIC devices') @@ -181,11 +195,13 @@ class PrometheusClient(BaseHTTPRequestHandler): BaseHTTPRequestHandler.__init__(self, request, client_address, server) def do_GET(self): - if (self.path == '/metrics'): + if self.path == '/metrics': resp = '' + for devsym in self.phydev_list: resp += dump_prometheus_output(self.json_fp, devsym) + resp += dump_pkt_latency_prometheus_output(self.json_fp) self.send_response(200) self.send_header('Content-type', 'text/plain; version=0.0.4') self.end_headers() @@ -198,6 +214,7 @@ class PrometheusClient(BaseHTTPRequestHandler): def prometheus_client_init(json_fp, phydev_list, prometheus_client_port): HTTPServer(("", prometheus_client_port), PrometheusClient).serve_forever() + def main(): signal.signal(signal.SIGINT, sigint_handler) -- cgit v1.2.3