From f70719d46f9cf29551005eb3bc7082c77a5786e8 Mon Sep 17 00:00:00 2001 From: Arseniy Kuznetsov Date: Sun, 3 Mar 2024 14:20:03 +0100 Subject: [PATCH] BGP session metrics --- mktxp/collector/bgp_collector.py | 12 ++++++------ mktxp/datasource/base_ds.py | 17 +++++++++++++---- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/mktxp/collector/bgp_collector.py b/mktxp/collector/bgp_collector.py index cb55ebb..e82c2c0 100644 --- a/mktxp/collector/bgp_collector.py +++ b/mktxp/collector/bgp_collector.py @@ -24,7 +24,7 @@ class BGPCollector(BaseCollector): if not router_entry.config_entry.bgp: return - bgp_labels = ['name', 'remote.address', 'remote.as', 'local.as', 'remote.afi', 'local.afi', 'remote.messages', 'remote.bytes', 'local.messages', 'local.bytes', 'prefix_count', 'established', 'uptime'] + bgp_labels = ['name', 'remote_address', 'remote_as', 'local_as', 'remote_afi', 'local_afi', 'remote_messages', 'remote_bytes', 'local_messages', 'local_bytes', 'prefix_count', 'established', 'uptime'] bgp_records = BGPMetricsDataSource.metric_records(router_entry, metric_labels=bgp_labels) @@ -37,23 +37,23 @@ class BGPCollector(BaseCollector): if value: bgp_record[translated_field] = BGPCollector._translated_values(translated_field, value) - session_id_labes = ['name', 'remote.address', 'remote.as', 'local.as', 'remote.afi', 'local.afi'] + session_id_labes = ['name', 'remote_address', 'remote_as', 'local_as', 'remote_afi', 'local_afi'] bgp_sessions_metrics = BaseCollector.info_collector('bgp_sessions_info', 'BGP sessions info', bgp_records, session_id_labes) yield bgp_sessions_metrics - remote_messages_metrics = BaseCollector.counter_collector('bgp_remote_messages', 'Number of remote messages', bgp_records, 'remote.messages', session_id_labes) + remote_messages_metrics = BaseCollector.counter_collector('bgp_remote_messages', 'Number of remote messages', bgp_records, 'remote_messages', session_id_labes) yield remote_messages_metrics - local_messages_metrics = BaseCollector.counter_collector('bgp_local_messages', 'Number of local messages', bgp_records, 'local.messages', session_id_labes) + local_messages_metrics = BaseCollector.counter_collector('bgp_local_messages', 'Number of local messages', bgp_records, 'local_messages', session_id_labes) yield local_messages_metrics - remote_bytes_metrics = BaseCollector.counter_collector('bgp_remote_bytes', 'Number of remote bytes', bgp_records, 'remote.bytes', session_id_labes) + remote_bytes_metrics = BaseCollector.counter_collector('bgp_remote_bytes', 'Number of remote bytes', bgp_records, 'remote_bytes', session_id_labes) yield remote_bytes_metrics - local_bytes_metrics = BaseCollector.counter_collector('bgp_local_bytes', 'Number of local bytes', bgp_records, 'local.bytes', session_id_labes) + local_bytes_metrics = BaseCollector.counter_collector('bgp_local_bytes', 'Number of local bytes', bgp_records, 'local_bytes', session_id_labes) yield local_bytes_metrics diff --git a/mktxp/datasource/base_ds.py b/mktxp/datasource/base_ds.py index a656e42..32a6b42 100644 --- a/mktxp/datasource/base_ds.py +++ b/mktxp/datasource/base_ds.py @@ -23,15 +23,14 @@ class BaseDSProcessor: if metric_labels is None: metric_labels = [] if translation_table is None: - translation_table = {} - dash2_ = lambda x : x.replace('-', '_') + translation_table = {} if len(metric_labels) == 0 and len(router_records) > 0: - metric_labels = [dash2_(key) for key in router_records[0].keys()] + metric_labels = [BaseDSProcessor._normalise_keys(key) for key in router_records[0].keys()] metric_labels = set(metric_labels) labeled_records = [] for router_record in router_records: - translated_record = {dash2_(key): value for (key, value) in router_record.items() if dash2_(key) in metric_labels} + translated_record = {BaseDSProcessor._normalise_keys(key): value for (key, value) in router_record.items() if BaseDSProcessor._normalise_keys(key) in metric_labels} if add_router_id: for key, value in router_entry.router_id.items(): @@ -43,3 +42,13 @@ class BaseDSProcessor: labeled_records.append(translated_record) return labeled_records + + + @staticmethod + def _normalise_keys(key): + chars = ".-" + for chr in chars: + if chr in key: + key = key.replace(chr, "_") + return key +