kea-exporter icon indicating copy to clipboard operation
kea-exporter copied to clipboard

Evaluate shared networks

Open mweinelt opened this issue 4 years ago • 1 comments

Found a patch on a downstream fork, let's check if it satisfies our understanding of shared networks and integrate it.

From ab7475a6dc1d93f479f0a827742bb5ce584f481a Mon Sep 17 00:00:00 2001
From: masem <[email protected]>
Date: Mon, 15 Jun 2020 16:05:51 +0200
Subject: [PATCH] Added shared_network label to exported prom subnet stats

---
 kea_exporter/kea.py | 40 ++++++++++++++++++++++++++++------------
 1 file changed, 28 insertions(+), 12 deletions(-)

diff --git a/kea_exporter/kea.py b/kea_exporter/kea.py
index 502544b..2485875 100644
--- a/kea_exporter/kea.py
+++ b/kea_exporter/kea.py
@@ -59,9 +59,23 @@ def reload(self):
         if 'Dhcp4' in self.config:
             self.dhcp_version = DHCPVersion.DHCP4
             subnets = self.config['Dhcp4']['subnet4']
+            for shared_network in self.config['Dhcp4']['shared-networks']:
+                shared_network4 = []
+                for subnet4 in shared_network['subnet4']:
+                    subnet4['shared_network'] = shared_network['name']
+                    shared_network4.append(subnet4)
+                subnets += shared_network4
+
         elif 'Dhcp6' in self.config:
             self.dhcp_version = DHCPVersion.DHCP6
             subnets = self.config['Dhcp6']['subnet6']
+            for shared_network in self.config['Dhcp6']['shared-networks']:
+                shared_network6 = []
+                for subnet6 in shared_network['subnet6']:
+                    subnet6['shared_network'] = shared_network['name']
+                    shared_network6.append(subnet6)
+                subnets += shared_network6
+
         else:
             click.echo(f'Socket {self.sock_path} has no supported configuration', file=sys.stderr)
             sys.exit(1)
@@ -109,23 +123,23 @@ def setup_dhcp4_metrics(self):
             'addresses_assigned_total': Gauge(
                 f'{self.prefix_dhcp4}_addresses_assigned_total',
                 'Assigned addresses',
-                ['subnet']),
+                ['subnet', 'network']),
             'addresses_declined_total': Gauge(
                 f'{self.prefix_dhcp4}_addresses_declined_total',
                 'Declined counts',
-                ['subnet']),
+                ['subnet', 'network']),
             'addresses_declined_reclaimed_total': Gauge(
                 f'{self.prefix_dhcp4}_addresses_declined_reclaimed_total',
                 'Declined addresses that were reclaimed',
-                ['subnet']),
+                ['subnet', 'network']),
             'addresses_reclaimed_total': Gauge(
                 f'{self.prefix_dhcp4}_addresses_reclaimed_total',
                 'Expired addresses that were reclaimed',
-                ['subnet']),
+                ['subnet', 'network']),
             'addresses_total': Gauge(
                 f'{self.prefix_dhcp4}_addresses_total',
                 'Size of subnet address pool',
-                ['subnet']
+                ['subnet', 'network']
             )
         }
 
@@ -278,36 +292,36 @@ def setup_dhcp6_metrics(self):
             'addresses_declined_total': Gauge(
                 f'{self.prefix_dhcp6}_addresses_declined_total',
                 'Declined addresses',
-                ['subnet']),
+                ['subnet', 'network']),
             'addresses_declined_reclaimed_total': Gauge(
                 f'{self.prefix_dhcp6}_addresses_declined_reclaimed_total',
                 'Declined addresses that were reclaimed',
-                ['subnet']),
+                ['subnet', 'network']),
             'addresses_reclaimed_total': Gauge(
                 f'{self.prefix_dhcp6}_addresses_reclaimed_total',
                 'Expired addresses that were reclaimed',
-                ['subnet']),
+                ['subnet', 'network']),
 
             # IA_NA
             'na_assigned_total': Gauge(
                 f'{self.prefix_dhcp6}_na_assigned_total',
                 'Assigned non-temporary addresses (IA_NA)',
-                ['subnet']),
+                ['subnet', 'network']),
             'na_total': Gauge(
                 f'{self.prefix_dhcp6}_na_total',
                 'Size of non-temporary address pool',
-                ['subnet']
+                ['subnet', 'network']
             ),
 
             # IA_PD
             'pd_assigned_total': Gauge(
                 f'{self.prefix_dhcp6}_pd_assigned_total',
                 'Assigned prefix delegations (IA_PD)',
-                ['subnet']),
+                ['subnet', 'network']),
             'pd_total': Gauge(
                 f'{self.prefix_dhcp6}_pd_total',
                 'Size of prefix delegation pool',
-                ['subnet']
+                ['subnet', 'network']
             ),
 
         }
@@ -494,6 +508,8 @@ def update(self):
                                 )
                             continue
                         labels['subnet'] = subnet['subnet']
+                        labels['network'] = subnet['shared_network']                                              
+                                                
                     else:
                         click.echo(f'subnet pattern failed for metric: {key}',
                                    file=sys.stderr)

via https://github.com/masem/kea-exporter/commit/ab7475a6dc1d93f479f0a827742bb5ce584f481a

mweinelt avatar Jul 08 '20 15:07 mweinelt

I updated it this way by managing the shared networks with id only.

diff --git a/kea_exporter/kea.py b/kea_exporter/kea.py
index 6821585..bad8fbc 100644
--- a/kea_exporter/kea.py
+++ b/kea_exporter/kea.py
@@ -58,10 +58,22 @@ class KeaSocket:

         if 'Dhcp4' in self.config:
             self.dhcp_version = DHCPVersion.DHCP4
-            subnets = self.config['Dhcp4']['subnet4']
+            subnets = []
+            if "shared-networks" in self.config['Dhcp4']:
+                for j in range(len(self.config['Dhcp4']["shared-networks"])):
+                    for k in range(len(self.config['Dhcp4']["shared-networks"][j]['subnet4'])):
+                        subnets.append(self.config['Dhcp4']["shared-networks"][j]['subnet4'][k])
+            if len(self.config['Dhcp4']["subnet4"])>0:
+                subnets.append(self.config['Dhcp4']['subnet4'])
         elif 'Dhcp6' in self.config:
             self.dhcp_version = DHCPVersion.DHCP6
-            subnets = self.config['Dhcp6']['subnet6']
+            subnets = []
+            if "shared-networks" in self.config['Dhcp6']:
+                for j in range(len(self.config['Dhcp6']["shared-networks"])):
+                    for k in range(len(self.config['Dhcp6']["shared-networks"][j]['subnet6'])):
+                        subnets.append(self.config['Dhcp6']["shared-networks"][j]['subnet6'][k])
+            if len(self.config['Dhcp6']["subnet6"])>0:
+                subnets.append(self.config['Dhcp6']['subnet6'])
         else:
             click.echo(f'Socket {self.sock_path} has no supported configuration', file=sys.stderr)
             sys.exit(1)

dorancemc avatar Jun 21 '22 21:06 dorancemc