]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1336] updated behavior for reclaimed related counters
authorRazvan Becheriu <razvan@isc.org>
Wed, 5 Aug 2020 13:56:34 +0000 (16:56 +0300)
committerRazvan Becheriu <razvan@isc.org>
Thu, 13 Aug 2020 19:37:50 +0000 (22:37 +0300)
doc/sphinx/arm/dhcp4-srv.rst
doc/sphinx/arm/dhcp6-srv.rst
src/lib/dhcpsrv/lease_mgr.cc

index ed9040e65b7213a74f9c3747186c954c0a6f35f2..2802df14ec0a218543ca46f0745f21674d597379 100644 (file)
@@ -5722,9 +5722,16 @@ The DHCPv4 server supports the following statistics:
    |                                           |                | server startup. It is              |
    |                                           |                | incremented each time              |
    |                                           |                | an expired lease is                |
-   |                                           |                | reclaimed and is                   |
-   |                                           |                | reset when the server              |
-   |                                           |                | is reconfigured.                   |
+   |                                           |                | reclaimed.                         |
+   |                                           |                | This statistic never               |
+   |                                           |                | decreases. It can be               |
+   |                                           |                | used as a long-term                |
+   |                                           |                | indicator of how many              |
+   |                                           |                | actual leases have been            |
+   |                                           |                | reclaimed.                         |
+   |                                           |                | This is a global                   |
+   |                                           |                | statistic that covers              |
+   |                                           |                | all subnets.                       |
    +-------------------------------------------+----------------+------------------------------------+
    | subnet[id].reclaimed-leases               | integer        | Number of expired                  |
    |                                           |                | leases associated                  |
@@ -5735,9 +5742,13 @@ The DHCPv4 server supports the following statistics:
    |                                           |                | server startup. It is              |
    |                                           |                | incremented each time              |
    |                                           |                | an expired lease is                |
-   |                                           |                | reclaimed and is                   |
-   |                                           |                | reset when the server              |
-   |                                           |                | is reconfigured.                   |
+   |                                           |                | reclaimed.                         |
+   |                                           |                | The *id* is the                    |
+   |                                           |                | subnet-id of a                     |
+   |                                           |                | given subnet. This                 |
+   |                                           |                | statistic is exposed               |
+   |                                           |                | for each subnet                    |
+   |                                           |                | separately.                        |
    +-------------------------------------------+----------------+------------------------------------+
    | declined-addresses                        | integer        | Number of IPv4                     |
    |                                           |                | addresses that are                 |
index 04943166adf16f2d6c55dc88a31eb94093bfef9e..2c16ec8fcfc8fec1b9fa4daa84f00c698b607519 100644 (file)
@@ -5753,9 +5753,16 @@ The DHCPv6 server supports the following statistics:
    |                                         |                       | an expired lease is    |
    |                                         |                       | reclaimed (counting    |
    |                                         |                       | both NA and PD         |
-   |                                         |                       | reclamations) and is   |
-   |                                         |                       | reset when the server  |
-   |                                         |                       | is reconfigured.       |
+   |                                         |                       | reclamations).         |
+   |                                         |                       | This statistic never   |
+   |                                         |                       | decreases. It can be   |
+   |                                         |                       | used as a long-term    |
+   |                                         |                       | indicator of how many  |
+   |                                         |                       | actual leases have been|
+   |                                         |                       | reclaimed.             |
+   |                                         |                       | This is a global       |
+   |                                         |                       | statistic that covers  |
+   |                                         |                       | all subnets.           |
    +-----------------------------------------+-----------------------+------------------------+
    | subnet[id].reclaimed-leases             | integer               | Number of expired      |
    |                                         |                       | leases associated      |
@@ -5768,9 +5775,13 @@ The DHCPv6 server supports the following statistics:
    |                                         |                       | an expired lease is    |
    |                                         |                       | reclaimed (counting    |
    |                                         |                       | both NA and PD         |
-   |                                         |                       | reclamations) and is   |
-   |                                         |                       | reset when the server  |
-   |                                         |                       | is reconfigured.       |
+   |                                         |                       | reclamations).         |
+   |                                         |                       | The *id* is the        |
+   |                                         |                       | subnet-id of a         |
+   |                                         |                       | given subnet. This     |
+   |                                         |                       | statistic is exposed   |
+   |                                         |                       | for each subnet        |
+   |                                         |                       | separately.            |
    +-----------------------------------------+-----------------------+------------------------+
    | declined-addresses                      | integer               | Number of IPv6         |
    |                                         |                       | addresses that are     |
index c1e2f370ad9e6da7524e7e4cc35679a9deb9eb86..8f7856974f50d96f6449822b774210a92f019171 100644 (file)
@@ -74,10 +74,20 @@ LeaseMgr::recountLeaseStats4() {
     }
 
     // Zero out the global stats.
+    // Cumulative counters ("reclaimed-declined-addresses", "reclaimed-leases",
+    // "cumulative-assigned-addresses") never gets zeroed.
     int64_t zero = 0;
     stats_mgr.setValue("declined-addresses", zero);
-    stats_mgr.setValue("reclaimed-declined-addresses", zero);
-    stats_mgr.setValue("reclaimed-leases", zero);
+
+    // Create if it does not exit reclaimed declined leases global stats.
+    if (!stats_mgr.getObservation("reclaimed-declined-addresses")) {
+        stats_mgr.setValue("reclaimed-declined-addresses", zero);
+    }
+
+    // Create if it does not exit reclaimed leases global stats.
+    if (!stats_mgr.getObservation("reclaimed-leases")) {
+        stats_mgr.setValue("reclaimed-leases", zero);
+    }
 
     // Create if it does not exit cumulative global stats.
     if (!stats_mgr.getObservation("cumulative-assigned-addresses")) {
@@ -100,13 +110,23 @@ LeaseMgr::recountLeaseStats4() {
                                                   "declined-addresses"),
                            zero);
 
-        stats_mgr.setValue(StatsMgr::generateName("subnet", subnet_id,
-                                                  "reclaimed-declined-addresses"),
-                           zero);
+        if (!stats_mgr.getObservation(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-declined-addresses"))) {
+            stats_mgr.setValue(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-declined-addresses"),
+                zero);
+        }
 
-        stats_mgr.setValue(StatsMgr::generateName("subnet", subnet_id,
-                                                  "reclaimed-leases"),
-                           zero);
+        if (!stats_mgr.getObservation(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-leases"))) {
+            stats_mgr.setValue(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-leases"),
+                zero);
+        }
     }
 
     // Get counts per state per subnet. Iterate over the result set
@@ -128,6 +148,7 @@ LeaseMgr::recountLeaseStats4() {
             stats_mgr.addValue("declined-addresses", row.state_count_);
 
             // Add to subnet level value.
+            // Declined leases also count as assigned.
             stats_mgr.addValue(StatsMgr::generateName("subnet", row.subnet_id_,
                                                       "assigned-addresses"),
                                row.state_count_);
@@ -200,20 +221,26 @@ LeaseMgr::recountLeaseStats6() {
         return;
     }
 
-    // Zero out the global stats. (Ok, so currently there's only one
-    // that should be cleared.  "reclaimed-declined-addresses" never
-    // gets zeroed. @todo discuss with Tomek the rational of not
-    // clearing it when we clear the rest.
+    // Zero out the global stats.
+    // Cumulative counters ("reclaimed-declined-addresses", "reclaimed-leases",
+    // "cumulative-assigned-nas", "cumulative-assigned-pds") never gets zeroed.
     int64_t zero = 0;
     stats_mgr.setValue("declined-addresses", zero);
-    stats_mgr.setValue("reclaimed-declined-addresses", zero);
-    stats_mgr.setValue("reclaimed-leases", zero);
 
-    // Create if it does not exit cumulative global stats.
+    if (!stats_mgr.getObservation("reclaimed-declined-addresses")) {
+        stats_mgr.setValue("reclaimed-declined-addresses", zero);
+    }
+
+    if (!stats_mgr.getObservation("reclaimed-leases")) {
+        stats_mgr.setValue("reclaimed-leases", zero);
+    }
+
+    // Create if it does not exit cumulative nas global stats.
     if (!stats_mgr.getObservation("cumulative-assigned-nas")) {
         stats_mgr.setValue("cumulative-assigned-nas", zero);
     }
 
+    // Create if it does not exit cumulative pds global stats.
     if (!stats_mgr.getObservation("cumulative-assigned-pds")) {
         stats_mgr.setValue("cumulative-assigned-pds", zero);
     }
@@ -234,18 +261,27 @@ LeaseMgr::recountLeaseStats6() {
                                                   "declined-addresses"),
                            zero);
 
-        stats_mgr.setValue(StatsMgr::
-                           generateName("subnet", subnet_id,
-                                        "reclaimed-declined-addresses"),
-                           zero);
+        if (!stats_mgr.getObservation(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-declined-addresses"))) {
+            stats_mgr.setValue(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-declined-addresses"),
+                zero);
+        }
 
         stats_mgr.setValue(StatsMgr::generateName("subnet", subnet_id,
                                                   "assigned-pds"),
                            zero);
 
-        stats_mgr.setValue(StatsMgr::generateName("subnet", subnet_id,
-                                                  "reclaimed-leases"),
-                           zero);
+        if (!stats_mgr.getObservation(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-leases"))) {
+            stats_mgr.setValue(
+                StatsMgr::generateName("subnet", subnet_id,
+                                       "reclaimed-leases"),
+                zero);
+        }
     }
 
     // Get counts per state per subnet. Iterate over the result set
@@ -271,6 +307,7 @@ LeaseMgr::recountLeaseStats6() {
                     stats_mgr.addValue("declined-addresses", row.state_count_);
 
                     // Add subnet level value.
+                    // Declined leases also count as assigned.
                     stats_mgr.addValue(StatsMgr::
                                        generateName("subnet", row.subnet_id_,
                                                     "assigned-nas"),