Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Evaluate shared networks #17

Open
mweinelt opened this issue Jul 8, 2020 · 1 comment
Open

Evaluate shared networks #17

mweinelt opened this issue Jul 8, 2020 · 1 comment

Comments

@mweinelt
Copy link
Owner

mweinelt commented Jul 8, 2020

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 <nowhere@nowhere.zone>
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 masem@ab7475a

@dorancemc
Copy link

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)

str4nd pushed a commit to str4nd/kea-exporter that referenced this issue Jun 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants