]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3239] added global assigned leases counters
authorRazvan Becheriu <razvan@isc.org>
Tue, 2 Sep 2025 11:53:00 +0000 (14:53 +0300)
committerRazvan Becheriu <razvan@isc.org>
Fri, 5 Sep 2025 14:05:14 +0000 (14:05 +0000)
21 files changed:
doc/sphinx/arm/dhcp4-srv.rst
doc/sphinx/arm/dhcp6-srv.rst
doc/sphinx/arm/stats.rst
src/bin/dhcp4/dhcp4_srv.cc
src/bin/dhcp6/dhcp6_srv.cc
src/bin/dhcp6/tests/addr_reg_unittest.cc
src/bin/dhcp6/tests/dhcp6_test_utils.cc
src/hooks/dhcp/lease_cmds/lease_cmds.cc
src/hooks/dhcp/lease_cmds/libloadtests/lease_cmds_unittest.h
src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc
src/hooks/dhcp/stat_cmds/stat_cmds.cc
src/lib/dhcpsrv/alloc_engine.cc
src/lib/dhcpsrv/lease_mgr.cc
src/lib/dhcpsrv/lease_mgr.h
src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc
src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc
src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc
src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc
src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc
src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc
src/share/api/statistic-get-all.json

index 335337bca38f8db2c5f69cdf0e096c8cde9837c3..0564bff4a6ca92e76d24533831a36c923b5f40fa 100644 (file)
@@ -7418,12 +7418,21 @@ The DHCPv4 server supports the following statistics:
    |                                                    |                | separately, and is reset during a  |
    |                                                    |                | reconfiguration event.             |
    +----------------------------------------------------+----------------+------------------------------------+
+   | assigned-addresses                                 | integer        | Number of assigned addresses. It   |
+   |                                                    |                | increases every time a new lease is|
+   |                                                    |                | allocated (as a result of receiving|
+   |                                                    |                | a DHCPREQUEST message) and         |
+   |                                                    |                | decreases every time a lease is    |
+   |                                                    |                | released (a DHCPRELEASE message is |
+   |                                                    |                | received) or expires and is reset  |
+   |                                                    |                | during a reconfiguration event.    |
+   +----------------------------------------------------+----------------+------------------------------------+
    | cumulative-assigned-addresses                      | integer        | Cumulative number of addresses     |
    |                                                    |                | that have been assigned since      |
    |                                                    |                | server startup. It is incremented  |
    |                                                    |                | each time an address is assigned   |
-   |                                                    |                | and is not reset when the server   |
-   |                                                    |                | is reconfigured.                   |
+   |                                                    |                | and is not reset during a          |
+   |                                                    |                | reconfiguration event.             |
    +----------------------------------------------------+----------------+------------------------------------+
    | subnet[id].cumulative-assigned-addresses           | integer        | Cumulative number of assigned      |
    |                                                    |                | addresses in a given subnet. It    |
index 2bc7ded5f20b618ae3e35a6412828456fc5a30c7..04f2c9bf16996a88972898638fd3f0f41c28c44c 100644 (file)
@@ -7154,7 +7154,7 @@ The DHCPv6 server supports the following statistics:
    |                                                   |                | to grow in most cases after a      |
    |                                                   |                | ADDR-REG-INFORM is processed.      |
    |                                                   |                | There are certain cases where      |
-   |                                                   |                | there is n response.               |
+   |                                                   |                | there is no response.              |
    +---------------------------------------------------+----------------+------------------------------------+
    | subnet[id].total-nas                              | big integer    | Total number of NA addresses       |
    |                                                   |                | available for DHCPv6 management    |
@@ -7188,6 +7188,15 @@ The DHCPv6 server supports the following statistics:
    |                                                   |                | separately, and is reset during a  |
    |                                                   |                | reconfiguration event.             |
    +---------------------------------------------------+----------------+------------------------------------+
+   | assigned-nas                                      | integer        | Number of NA addresses that are    |
+   |                                                   |                | assigned. It increases every time a|
+   |                                                   |                | new lease is allocated (as a result|
+   |                                                   |                | of receiving a REQUEST message) and|
+   |                                                   |                | decreases every time a lease is    |
+   |                                                   |                | released (a RELEASE message is     |
+   |                                                   |                | received) or expires and is reset  |
+   |                                                   |                | during a reconfiguration event.    |
+   +---------------------------------------------------+----------------+------------------------------------+
    | cumulative-assigned-nas                           | integer        | Cumulative number of NA addresses  |
    |                                                   |                | that have been assigned since      |
    |                                                   |                | server startup. It is incremented  |
@@ -7226,7 +7235,7 @@ The DHCPv6 server supports the following statistics:
    |                                                   |                | increases every time a new lease   |
    |                                                   |                | is allocated (as a result of       |
    |                                                   |                | receiving a REQUEST message) and   |
-   |                                                   |                | is decreased every time a lease is |
+   |                                                   |                | decreases every time a lease is    |
    |                                                   |                | released (a RELEASE message is     |
    |                                                   |                | received) or expires. The *id* is  |
    |                                                   |                | the subnet ID of a given subnet.   |
@@ -7239,7 +7248,7 @@ The DHCPv6 server supports the following statistics:
    |                                                   |                | increases every time a new lease   |
    |                                                   |                | is allocated (as a result of       |
    |                                                   |                | receiving a REQUEST message) and   |
-   |                                                   |                | is decreased every time a lease is |
+   |                                                   |                | decreases every time a lease is    |
    |                                                   |                | released (a RELEASE message is     |
    |                                                   |                | received) or expires. The *id* is  |
    |                                                   |                | the subnet ID of a given subnet.   |
@@ -7281,6 +7290,15 @@ The DHCPv6 server supports the following statistics:
    |                                                   |                | separately, and is reset during a  |
    |                                                   |                | reconfiguration event.             |
    +---------------------------------------------------+----------------+------------------------------------+
+   | assigned-pds                                      | integer        | Number of PD prefixes that are     |
+   |                                                   |                | assigned. It increases every time a|
+   |                                                   |                | new lease is allocated (as a result|
+   |                                                   |                | of receiving a REQUEST message) and|
+   |                                                   |                | decreases every time a lease is    |
+   |                                                   |                | released (a RELEASE message is     |
+   |                                                   |                | received) or expires and is reset  |
+   |                                                   |                | during a reconfiguration event.    |
+   +---------------------------------------------------+----------------+------------------------------------+
    | cumulative-assigned-pds                           | integer        | Cumulative number of PD prefixes   |
    |                                                   |                | that have been assigned since      |
    |                                                   |                | server startup. It is incremented  |
@@ -7319,7 +7337,7 @@ The DHCPv6 server supports the following statistics:
    |                                                   |                | increases every time a new lease   |
    |                                                   |                | is allocated (as a result of       |
    |                                                   |                | receiving a REQUEST message) and   |
-   |                                                   |                | is decreased every time a lease is |
+   |                                                   |                | decreases every time a lease is    |
    |                                                   |                | released (a RELEASE message is     |
    |                                                   |                | received) or expires. The *id* is  |
    |                                                   |                | the subnet ID of a given subnet.   |
@@ -7332,7 +7350,7 @@ The DHCPv6 server supports the following statistics:
    |                                                   |                | It increases every time a new      |
    |                                                   |                | lease is allocated (as a result of |
    |                                                   |                | receiving a REQUEST message) and   |
-   |                                                   |                | is decreased every time a lease is |
+   |                                                   |                | decreases every time a lease is    |
    |                                                   |                | released (a RELEASE message is     |
    |                                                   |                | received) or expires. The *id* is  |
    |                                                   |                | the subnet ID of a given subnet.   |
index c2a641688af5e1eaf9d69c54b7bc0a21de0be6e7..d716f0be53c5a24f056f12f05fbcf30996d7ca86 100644 (file)
@@ -230,6 +230,12 @@ Here is an example response returning all collected statistics:
    {
        "command": "statistic-get-all",
        "arguments": {
+           "assigned-addresses": [
+               [
+                   0,
+                   "2023-06-13 20:42:46.836096"
+               ]
+           ],
            "cumulative-assigned-addresses": [
                [
                    0,
@@ -487,6 +493,18 @@ or
    {
        "command": "statistic-get-all",
        "arguments": {
+           "assigned-nas": [
+               [
+                   0,
+                   "2023-06-13 21:28:57.196757"
+               ]
+           ],
+           "assigned-pds": [
+               [
+                   0,
+                   "2023-06-13 21:28:57.196757"
+               ]
+           ],
            "cumulative-assigned-nas": [
                [
                    0,
index aa6fe8d9bfc465d0efc15b8871cf2e0c31f3e26c..6cadcf40127d6aaeab9a4ed7502be48e1db664d5 100644 (file)
@@ -4124,6 +4124,8 @@ Dhcpv4Srv::processRelease(Pkt4Ptr& release, AllocEngine::ClientContext4Ptr& cont
                 }
 
                 // Need to decrease statistic for assigned addresses.
+                StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(-1));
+
                 StatsMgr::instance().addValue(
                     StatsMgr::generateName("subnet", lease->subnet_id_, "assigned-addresses"),
                     static_cast<int64_t>(-1));
index 417960b1263492cc02157ef83047567bb37babeb..331adcd1ffc8048d3e0c3b397a4c120022ad345a 100644 (file)
@@ -3550,6 +3550,8 @@ Dhcpv6Srv::releaseIA_NA(const DuidPtr& duid, const Pkt6Ptr& query,
         }
 
         // Need to decrease statistic for assigned addresses.
+        StatsMgr::instance().addValue("assigned-nas", static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", lease->subnet_id_, "assigned-nas"),
             static_cast<int64_t>(-1));
@@ -3759,6 +3761,8 @@ Dhcpv6Srv::releaseIA_PD(const DuidPtr& duid, const Pkt6Ptr& query,
         }
 
         // Need to decrease statistic for assigned prefixes.
+        StatsMgr::instance().addValue("assigned-pds", static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", lease->subnet_id_, "assigned-pds"),
             static_cast<int64_t>(-1));
index 1eca341b3d9592eb4cff605ccc1821834ebb4f8e..9b08088171b6d9bf082537fb94d8aa82dcfb5030 100644 (file)
@@ -1666,7 +1666,7 @@ TEST_F(AddrRegTest, calloutDrop) {
     EXPECT_EQ(1, countFile("DHCP6_HOOK_ADDR6_REGISTER_DROP"));
 }
 
-// Check the statictics for the basic scenario.
+// Check the statistics for the basic scenario.
 TEST_F(AddrRegTest, stats) {
     IfaceMgrTestConfig test_config(true);
 
@@ -1693,7 +1693,7 @@ TEST_F(AddrRegTest, stats) {
     EXPECT_EQ(21, stat->getInteger().first);
 }
 
-// Check the statictics for the renew scenario.
+// Check the statistics for the renew scenario.
 TEST_F(AddrRegTest, statsRenew) {
     IfaceMgrTestConfig test_config(true);
 
@@ -1720,7 +1720,7 @@ TEST_F(AddrRegTest, statsRenew) {
     EXPECT_EQ(20, stat->getInteger().first);
 }
 
-// Check the statictics for the another subnet scenario.
+// Check the statistics for the another subnet scenario.
 TEST_F(AddrRegTest, statsAnotherSubnet) {
     IfaceMgrTestConfig test_config(true);
 
index 7ea1fea27fc5ee62a0957d8866e616c958c39431..88c7bc27a5e32e8cb0bdb1958971fa282383465d 100644 (file)
@@ -631,9 +631,13 @@ Dhcpv6SrvTest::testReleaseBasic(Lease::Type type, const IOAddress& existing,
     ASSERT_TRUE(l);
 
     // And prepopulate the stats counter
+    StatsMgr::instance().setValue(type == Lease::TYPE_NA ?
+                                  "assigned-nas" : "assigned-pds",
+                                  static_cast<int64_t>(1));
+
     std::string name = StatsMgr::generateName("subnet", subnet_->getID(),
-                                              type == Lease::TYPE_NA ? "assigned-nas" :
-                                              "assigned-pds");
+                                              type == Lease::TYPE_NA ?
+                                              "assigned-nas" : "assigned-pds");
     StatsMgr::instance().setValue(name, static_cast<int64_t>(1));
 
     ObservationPtr stat = StatsMgr::instance().getObservation(name);
@@ -678,11 +682,6 @@ Dhcpv6SrvTest::testReleaseBasic(Lease::Type type, const IOAddress& existing,
         l = LeaseMgrFactory::instance().getLease6(type, *duid_, iaid,
                                                   subnet_->getID());
         ASSERT_FALSE(l);
-
-        // We should have decremented the address counter
-        stat = StatsMgr::instance().getObservation(name);
-        ASSERT_TRUE(stat);
-        EXPECT_EQ(0, stat->getInteger().first);
     } else {
         l = LeaseMgrFactory::instance().getLease6(type, release_addr);
         ASSERT_TRUE(l);
@@ -700,12 +699,17 @@ Dhcpv6SrvTest::testReleaseBasic(Lease::Type type, const IOAddress& existing,
         EXPECT_EQ(l->valid_lft_, 0);
         EXPECT_EQ(l->preferred_lft_, 0);
         EXPECT_EQ(Lease::STATE_RELEASED, l->state_);
-
-        // We should have decremented the address counter
-        stat = StatsMgr::instance().getObservation(name);
-        ASSERT_TRUE(stat);
-        EXPECT_EQ(0, stat->getInteger().first);
     }
+
+    // We should have decremented the address counter
+    stat = StatsMgr::instance().getObservation(type == Lease::TYPE_NA ?
+                                               "assigned-nas" : "assigned-pds");
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(0, stat->getInteger().first);
+
+    stat = StatsMgr::instance().getObservation(name);
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(0, stat->getInteger().first);
 }
 
 void
@@ -788,15 +792,20 @@ Dhcpv6SrvTest::testReleaseAndReclaim(Lease::Type type) {
 
     // And prepopulate the stats counter
     std::string name = StatsMgr::generateName("subnet", (*subnets->begin())->getID(),
-                                              type == Lease::TYPE_NA ? "assigned-nas" :
-                                              "assigned-pds");
+                                              type == Lease::TYPE_NA ?
+                                              "assigned-nas" : "assigned-pds");
 
     // Perform 4-way exchange.
     ASSERT_NO_THROW(client.doSARR());
 
-    ObservationPtr stat = StatsMgr::instance().getObservation(name);
+    ObservationPtr stat = StatsMgr::instance().getObservation(type == Lease::TYPE_NA ?
+                                                              "assigned-nas" : "assigned-pds");
+    ASSERT_TRUE(stat);
+    uint64_t global_before = stat->getInteger().first;
+
+    stat = StatsMgr::instance().getObservation(name);
     ASSERT_TRUE(stat);
-    uint64_t before = stat->getInteger().first;
+    uint64_t subnet_before = stat->getInteger().first;
 
     // Make sure that the client has acquired NA lease.
     std::vector<Lease6> leases = client.getLeasesByType(type);
@@ -849,20 +858,26 @@ Dhcpv6SrvTest::testReleaseAndReclaim(Lease::Type type) {
     EXPECT_EQ(l->preferred_lft_, 0);
     EXPECT_EQ(Lease::STATE_RELEASED, l->state_);
 
+    stat = StatsMgr::instance().getObservation(type == Lease::TYPE_NA ?
+                                               "assigned-nas" : "assigned-pds");
+    ASSERT_TRUE(stat);
+    uint64_t global_after = stat->getInteger().first;
+    ASSERT_EQ(global_after, global_before - 1);
+
     stat = StatsMgr::instance().getObservation(name);
     ASSERT_TRUE(stat);
-    uint64_t after = stat->getInteger().first;
-    ASSERT_EQ(after, before - 1);
+    uint64_t subnet_after = stat->getInteger().first;
+    ASSERT_EQ(subnet_after, subnet_before - 1);
     sleep(1);
     client.getServer()->getIOService()->poll();
 
     l = LeaseMgrFactory::instance().getLease6(type, leases[0].addr_);
-        ASSERT_TRUE(l);
+    ASSERT_TRUE(l);
 
-        EXPECT_EQ(l->valid_lft_, 0);
-        EXPECT_EQ(l->preferred_lft_, 0);
+    EXPECT_EQ(l->valid_lft_, 0);
+    EXPECT_EQ(l->preferred_lft_, 0);
 
-        EXPECT_EQ(Lease6::STATE_EXPIRED_RECLAIMED, l->state_);
+    EXPECT_EQ(Lease6::STATE_EXPIRED_RECLAIMED, l->state_);
 
     // get lease by subnetid/duid/iaid combination
     l = LeaseMgrFactory::instance().getLease6(type, *client.getDuid(), iaid,
@@ -873,10 +888,16 @@ Dhcpv6SrvTest::testReleaseAndReclaim(Lease::Type type) {
     EXPECT_EQ(l->preferred_lft_, 0);
     EXPECT_EQ(Lease::STATE_EXPIRED_RECLAIMED, l->state_);
 
-    stat = StatsMgr::instance().getObservation(name);
+    stat = StatsMgr::instance().getObservation(type == Lease::TYPE_NA ?
+                                               "assigned-nas" : "assigned-pds");
     ASSERT_TRUE(stat);
     uint64_t count = stat->getInteger().first;
-    ASSERT_EQ(count, after);
+    ASSERT_EQ(count, global_after);
+
+    stat = StatsMgr::instance().getObservation(name);
+    ASSERT_TRUE(stat);
+    count = stat->getInteger().first;
+    ASSERT_EQ(count, subnet_after);
 }
 
 void
@@ -1016,9 +1037,13 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
     OptionPtr clientid = generateClientId();
 
     // Pretend we have allocated 1 lease
+    StatsMgr::instance().setValue(type == Lease::TYPE_NA ?
+                                  "assigned-nas" : "assigned-pds",
+                                  static_cast<int64_t>(1));
+
     std::string name = StatsMgr::generateName("subnet", subnet_->getID(),
-                                              type == Lease::TYPE_NA ? "assigned-nas" :
-                                              "assigned-pds");
+                                              type == Lease::TYPE_NA ?
+                                              "assigned-nas" : "assigned-pds");
     StatsMgr::instance().setValue(name, static_cast<int64_t>(1));
 
     // Check that the lease is NOT in the database
@@ -1051,7 +1076,12 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
     ASSERT_FALSE(l);
 
     // Verify we didn't decrement the stats counter
-    ObservationPtr stat = StatsMgr::instance().getObservation(name);
+    ObservationPtr stat = StatsMgr::instance().getObservation(type == Lease::TYPE_NA ?
+                                                              "assigned-nas" : "assigned-pds");
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(1, stat->getInteger().first);
+
+    stat = StatsMgr::instance().getObservation(name);
     ASSERT_TRUE(stat);
     EXPECT_EQ(1, stat->getInteger().first);
 
@@ -1084,6 +1114,13 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
     ASSERT_TRUE(l);
 
     // Verify we didn't decrement the stats counter
+    stat = StatsMgr::instance().getObservation(type == Lease::TYPE_NA ?
+                                               "assigned-nas" : "assigned-pds");
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(1, stat->getInteger().first);
+
+    stat = StatsMgr::instance().getObservation(name);
+    ASSERT_TRUE(stat);
     EXPECT_EQ(1, stat->getInteger().first);
 
     // CASE 3: Lease belongs to a client with different client-id
@@ -1111,6 +1148,13 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
     ASSERT_TRUE(l);
 
     // Verify we didn't decrement the stats counter
+    stat = StatsMgr::instance().getObservation(type == Lease::TYPE_NA ?
+                                               "assigned-nas" : "assigned-pds");
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(1, stat->getInteger().first);
+
+    stat = StatsMgr::instance().getObservation(name);
+    ASSERT_TRUE(stat);
     EXPECT_EQ(1, stat->getInteger().first);
 
     // Finally, let's cleanup the database
index 423fe0c2da08ab21c92453db14c320790298f40e..68ad2a144fc787399711d327e6d8f0517a004f36 100644 (file)
@@ -523,6 +523,8 @@ public:
 void
 LeaseCmdsImpl::updateStatsOnAdd(const Lease4Ptr& lease) {
     if (!lease->stateExpiredReclaimed()) {
+        StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", lease->subnet_id_,
                                    "assigned-addresses"),
@@ -567,6 +569,10 @@ LeaseCmdsImpl::updateStatsOnAdd(const Lease6Ptr& lease) {
             StatsMgr::generateName("subnet", lease->subnet_id_, "registered-nas"),
             static_cast<int64_t>(1));
     } else if (!lease->stateExpiredReclaimed()) {
+        StatsMgr::instance().addValue(lease->type_ == Lease::TYPE_NA ?
+                                      "assigned-nas" : "assigned-pds",
+                                      static_cast<int64_t>(1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", lease->subnet_id_,
                                    lease->type_ == Lease::TYPE_NA ?
@@ -697,6 +703,8 @@ LeaseCmdsImpl::updateStatsOnUpdate(const Lease4Ptr& existing,
         // old lease is expired-reclaimed
         if (!lease->stateExpiredReclaimed()) {
             // new lease is non expired-reclaimed
+            StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(1));
+
             StatsMgr::instance().addValue(
                 StatsMgr::generateName("subnet", lease->subnet_id_,
                                        "assigned-addresses"),
@@ -844,6 +852,10 @@ LeaseCmdsImpl::updateStatsOnUpdate(const Lease6Ptr& existing,
         // old lease is expired-reclaimed
         if (!lease->stateExpiredReclaimed()) {
             // new lease is non expired-reclaimed
+            StatsMgr::instance().addValue(lease->type_ == Lease::TYPE_NA ?
+                                          "assigned-nas" : "assigned-pds",
+                                          static_cast<int64_t>(1));
+
             StatsMgr::instance().addValue(
                 StatsMgr::generateName("subnet", lease->subnet_id_,
                                        lease->type_ == Lease::TYPE_NA ?
@@ -889,6 +901,8 @@ LeaseCmdsImpl::updateStatsOnUpdate(const Lease6Ptr& existing,
 void
 LeaseCmdsImpl::updateStatsOnDelete(const Lease4Ptr& lease) {
     if (!lease->stateExpiredReclaimed()) {
+        StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", lease->subnet_id_,
                                    "assigned-addresses"),
@@ -934,6 +948,10 @@ LeaseCmdsImpl::updateStatsOnDelete(const Lease6Ptr& lease) {
                                    "registered-nas"),
             static_cast<int64_t>(-1));
     } else if (!lease->stateExpiredReclaimed()) {
+        StatsMgr::instance().addValue(lease->type_ == Lease::TYPE_NA ?
+                                      "assigned-nas" : "assigned-pds",
+                                      static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", lease->subnet_id_,
                                    lease->type_ == Lease::TYPE_NA ?
@@ -2317,13 +2335,22 @@ LeaseCmdsImpl::lease4WipeHandler(CalloutHandle& handle) {
             num = LeaseMgrFactory::instance().wipeLeases4(id);
             ids << " " << id;
 
-            auto observation = StatsMgr::instance().getObservation(
+            auto assigned_observation = StatsMgr::instance().getObservation(
+                StatsMgr::generateName("subnet", id, "assigned-addresses"));
+
+            int64_t previous_assigned = 0;
+
+            if (assigned_observation) {
+                previous_assigned = assigned_observation->getInteger().first;
+            }
+
+            auto declined_observation = StatsMgr::instance().getObservation(
                 StatsMgr::generateName("subnet", id, "declined-addresses"));
 
             int64_t previous_declined = 0;
 
-            if (observation) {
-                previous_declined = observation->getInteger().first;
+            if (declined_observation) {
+                previous_declined = declined_observation->getInteger().first;
             }
 
             StatsMgr::instance().setValue(
@@ -2353,6 +2380,8 @@ LeaseCmdsImpl::lease4WipeHandler(CalloutHandle& handle) {
                 }
             }
 
+            StatsMgr::instance().addValue("assigned-addresses", -previous_assigned);
+
             StatsMgr::instance().addValue("declined-addresses", -previous_declined);
         } else {
             // Wipe them all!
@@ -2389,6 +2418,8 @@ LeaseCmdsImpl::lease4WipeHandler(CalloutHandle& handle) {
                 }
             }
 
+            StatsMgr::instance().setValue("assigned-addresses", static_cast<int64_t>(0));
+
             StatsMgr::instance().setValue("declined-addresses", static_cast<int64_t>(0));
         }
 
@@ -2436,13 +2467,31 @@ LeaseCmdsImpl::lease6WipeHandler(CalloutHandle& handle) {
             num = LeaseMgrFactory::instance().wipeLeases6(id);
             ids << " " << id;
 
-            auto observation = StatsMgr::instance().getObservation(
+            auto assigned_na_observation = StatsMgr::instance().getObservation(
+                StatsMgr::generateName("subnet", id, "assigned-nas"));
+
+            int64_t previous_assigned_na = 0;
+
+            if (assigned_na_observation) {
+                previous_assigned_na = assigned_na_observation->getInteger().first;
+            }
+
+            auto assigned_pd_observation = StatsMgr::instance().getObservation(
+                StatsMgr::generateName("subnet", id, "assigned-pds"));
+
+            int64_t previous_assigned_pd = 0;
+
+            if (assigned_pd_observation) {
+                previous_assigned_na = assigned_pd_observation->getInteger().first;
+            }
+
+            auto declined_observation = StatsMgr::instance().getObservation(
                 StatsMgr::generateName("subnet", id, "declined-addresses"));
 
             int64_t previous_declined = 0;
 
-            if (observation) {
-                previous_declined = observation->getInteger().first;
+            if (declined_observation) {
+                previous_declined = declined_observation->getInteger().first;
             }
 
             StatsMgr::instance().setValue(
@@ -2489,6 +2538,10 @@ LeaseCmdsImpl::lease6WipeHandler(CalloutHandle& handle) {
                 }
             }
 
+            StatsMgr::instance().addValue("assigned-nas", -previous_assigned_na);
+
+            StatsMgr::instance().addValue("assigned-pds", -previous_assigned_pd);
+
             StatsMgr::instance().addValue("declined-addresses", -previous_declined);
         } else {
             // Wipe them all!
@@ -2542,6 +2595,10 @@ LeaseCmdsImpl::lease6WipeHandler(CalloutHandle& handle) {
                 }
             }
 
+            StatsMgr::instance().setValue("assigned-nas", static_cast<int64_t>(0));
+
+            StatsMgr::instance().setValue("assigned-pds", static_cast<int64_t>(0));
+
             StatsMgr::instance().setValue("declined-addresses", static_cast<int64_t>(0));
         }
 
index a97f6e932c54e20c8f27761fdfefb95d2a81f01b..ddde5909effa3d51aa193b382a093a27327d2731 100644 (file)
@@ -456,6 +456,7 @@ public:
                 isc::stats::StatsMgr::instance().setValue(
                         isc::stats::StatsMgr::generateName("subnet", 99, "assigned-nas" ),
                     int64_t(2));
+                isc::stats::StatsMgr::instance().setValue("assigned-nas", int64_t(4));
             } else {
                 lmptr_->addLease(createLease4("192.0.2.1", 44, 0x08, 0x42, declined));
                 lmptr_->addLease(createLease4("192.0.2.2", 44, 0x09, 0x56, declined, 5));
@@ -482,6 +483,7 @@ public:
                 isc::stats::StatsMgr::instance().setValue(
                         isc::stats::StatsMgr::generateName("subnet", 88, "assigned-addresses"),
                     int64_t(2));
+                isc::stats::StatsMgr::instance().setValue("assigned-addresses", int64_t(4));
             }
         }
     }
index 25c8037875d79f30d624ab72427aed39857fb248..8289e073f5290b27307f06e19b5e9a64a0c38f73 100644 (file)
@@ -348,8 +348,7 @@ LeaseLimitFixture<DHCPv6>::addLease(LeaseTPtr<DHCPv6> lease) {
     LeaseMgrFactory::instance().addLease(lease);
     StatsMgr::instance().addValue(StatsMgr::generateName("subnet", lease->subnet_id_,
                                                          lease->getType() == Lease::TYPE_PD ?
-                                                             "assigned-pds" :
-                                                             "assigned-nas"),
+                                                         "assigned-pds" : "assigned-nas"),
                                   static_cast<int64_t>(1));
 }
 
index 65a81a9fdd7c7708af1bc3ac480861126d455b8b..3e9f29f4f0aac382922044e928f7e45d60040519 100644 (file)
@@ -695,7 +695,7 @@ LeaseStatCmdsImpl::addValueRow4(ElementPtr value_rows, const SubnetID &subnet_id
     row->add(Element::create(static_cast<int64_t>(subnet_id)));
     row->add(Element::create(getSubnetStat(subnet_id, "total-addresses")));
     row->add(Element::create(getSubnetStat(subnet_id, "cumulative-assigned-addresses")));
-    row->add(Element::create(assigned));
+    row->add(Element::create(assigned + declined));
     row->add(Element::create(declined));
     value_rows->add(row);
 }
@@ -707,7 +707,7 @@ LeaseStatCmdsImpl::addValueRow6(ElementPtr value_rows, const SubnetID &subnet_id
     row->add(Element::create(static_cast<int64_t>(subnet_id)));
     row->add(Element::create(getBigSubnetStat(subnet_id, "total-nas")));
     row->add(Element::create(getSubnetStat(subnet_id, "cumulative-assigned-nas")));
-    row->add(Element::create(assigned));
+    row->add(Element::create(assigned + declined));
     row->add(Element::create(declined));
     row->add(Element::create(getBigSubnetStat(subnet_id, "total-pds")));
     row->add(Element::create(getSubnetStat(subnet_id, "cumulative-assigned-pds")));
index a86e338f58bbe8f0bb53c840726be55f58030844..e9f953b46dd07ad110db2eeeb8094a7b83ffc748 100644 (file)
@@ -1549,6 +1549,10 @@ AllocEngine::removeNonmatchingReservedLeases6(ClientContext6& ctx,
         queueNCR(CHG_REMOVE, candidate);
 
         // Need to decrease statistic for assigned addresses.
+        StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                      "assigned-nas" : "assigned-pds",
+                                      static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", candidate->subnet_id_,
                                    ctx.currentIA().type_ == Lease::TYPE_NA ?
@@ -1610,6 +1614,10 @@ AllocEngine::removeNonmatchingReservedNoHostLeases6(ClientContext6& ctx,
         queueNCR(CHG_REMOVE, candidate);
 
         // Need to decrease statistic for assigned addresses.
+        StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                      "assigned-nas" : "assigned-pds",
+                                      static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", candidate->subnet_id_,
                                    ctx.currentIA().type_ == Lease::TYPE_NA ?
@@ -1695,6 +1703,10 @@ AllocEngine::removeNonreservedLeases6(ClientContext6& ctx,
         queueNCR(CHG_REMOVE, *lease);
 
         // Need to decrease statistic for assigned addresses.
+        StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                      "assigned-nas" : "assigned-pds",
+                                      static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", (*lease)->subnet_id_,
                                    ctx.currentIA().type_ == Lease::TYPE_NA ?
@@ -1901,6 +1913,10 @@ AllocEngine::reuseExpiredLease(Lease6Ptr& expired, ClientContext6& ctx,
                     static_cast<int64_t>(1));
             }
 
+            StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                          "assigned-nas" : "assigned-pds",
+                                          static_cast<int64_t>(1));
+
             StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
                                           "cumulative-assigned-nas" : "cumulative-assigned-pds",
                                           static_cast<int64_t>(1));
@@ -2172,6 +2188,10 @@ Lease6Ptr AllocEngine::createLease6(ClientContext6& ctx,
                         static_cast<int64_t>(1));
                 }
 
+                StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                              "assigned-nas" : "assigned-pds",
+                                              static_cast<int64_t>(1));
+
                 StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
                                               "cumulative-assigned-nas" : "cumulative-assigned-pds",
                                               static_cast<int64_t>(1));
@@ -2371,6 +2391,9 @@ AllocEngine::extendLease6(ClientContext6& ctx, Lease6Ptr lease) {
         queueNCR(CHG_REMOVE, lease);
 
         // Need to decrease statistic for assigned addresses.
+        StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                      "assigned-nas" : "assigned-pds", static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(
             StatsMgr::generateName("subnet", ctx.subnet_->getID(),
                                    ctx.currentIA().type_ == Lease::TYPE_NA ?
@@ -2566,6 +2589,11 @@ AllocEngine::extendLease6(ClientContext6& ctx, Lease6Ptr lease) {
                     static_cast<int64_t>(1));
             }
 
+            StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                          "assigned-nas" : "assigned-pds",
+                                          static_cast<int64_t>(1));
+
+
             StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
                                           "cumulative-assigned-nas" : "cumulative-assigned-pds",
                                           static_cast<int64_t>(1));
@@ -2673,6 +2701,10 @@ AllocEngine::updateLeaseData(ClientContext6& ctx, const Lease6Collection& leases
                         static_cast<int64_t>(1));
                 }
 
+                StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
+                                              "assigned-nas" : "assigned-pds",
+                                              static_cast<int64_t>(1));
+
                 StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ?
                                               "cumulative-assigned-nas" : "cumulative-assigned-pds",
                                               static_cast<int64_t>(1));
@@ -3026,6 +3058,7 @@ AllocEngine::reclaimExpiredLease(const Lease6Ptr& lease,
     // will not update DNS nor update the database.
     bool skipped = false;
     bool released = (lease->state_ == Lease::STATE_RELEASED);
+    bool registered = (lease->state_ == Lease::STATE_REGISTERED);
     if (callout_handle) {
 
         // Use the RAII wrapper to make sure that the callout handle state is
@@ -3119,12 +3152,17 @@ AllocEngine::reclaimExpiredLease(const Lease6Ptr& lease,
 
     // Decrease number of registered or assigned leases.
 
-    if (lease->state_ == Lease::STATE_REGISTERED) {
+    if (registered) {
         StatsMgr::instance().addValue(StatsMgr::generateName("subnet",
                                                              lease->subnet_id_,
                                                              "registered-nas"),
                                       static_cast<int64_t>(-1));
     } else if (lease->type_ == Lease::TYPE_NA || lease->type_ == Lease::TYPE_PD) {
+        // Decrease number of assigned addresses.
+        StatsMgr::instance().addValue(lease->type_ == Lease::TYPE_NA ?
+                                      "assigned-nas" : "assigned-pds",
+                                      static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(StatsMgr::generateName("subnet",
                                                              lease->subnet_id_,
                                                              lease->type_ == Lease::TYPE_NA ?
@@ -3248,6 +3286,8 @@ AllocEngine::reclaimExpiredLease(const Lease4Ptr& lease,
     }
 
     // Decrease number of assigned addresses.
+    StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(-1));
+
     StatsMgr::instance().addValue(StatsMgr::generateName("subnet",
                                                          lease->subnet_id_,
                                                          "assigned-addresses"),
@@ -3428,7 +3468,6 @@ AllocEngine::reclaimDeclined(const Lease6Ptr& lease) {
 
     // Note that we do not touch assigned-nas counters. Those are
     // modified in whatever code calls this method.
-
     return (true);
 }
 
@@ -4157,6 +4196,8 @@ void deleteAssignedLease(Lease4Ptr lease) {
     if (LeaseMgrFactory::instance().deleteLease(lease) &&
         (lease->state_ != Lease4::STATE_RELEASED)) {
         // Need to decrease statistic for assigned addresses.
+        StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(-1));
+
         StatsMgr::instance().addValue(StatsMgr::generateName("subnet", lease->subnet_id_,
                                                              "assigned-addresses"),
                                       static_cast<int64_t>(-1));
@@ -4644,8 +4685,10 @@ AllocEngine::createLease4(const ClientContext4& ctx, const IOAddress& addr,
                     static_cast<int64_t>(1));
             }
 
-            StatsMgr::instance().addValue("cumulative-assigned-addresses",
-                                          static_cast<int64_t>(1));
+
+            StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(1));
+
+            StatsMgr::instance().addValue("cumulative-assigned-addresses", static_cast<int64_t>(1));
 
             return (lease);
         } else {
@@ -4804,8 +4847,9 @@ AllocEngine::renewLease4(const Lease4Ptr& lease,
                     static_cast<int64_t>(1));
             }
 
-            StatsMgr::instance().addValue("cumulative-assigned-addresses",
-                                          static_cast<int64_t>(1));
+            StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(1));
+
+            StatsMgr::instance().addValue("cumulative-assigned-addresses", static_cast<int64_t>(1));
         }
     }
     if (skip) {
@@ -4931,8 +4975,9 @@ AllocEngine::reuseExpiredLease4(Lease4Ptr& expired,
                 static_cast<int64_t>(1));
         }
 
-        StatsMgr::instance().addValue("cumulative-assigned-addresses",
-                                      static_cast<int64_t>(1));
+        StatsMgr::instance().addValue("assigned-addresses", static_cast<int64_t>(1));
+
+        StatsMgr::instance().addValue("cumulative-assigned-addresses", static_cast<int64_t>(1));
     }
 
     // We do nothing for SOLICIT. We'll just update database when
index 579b477a370bc74d1072988726d748227aad972f..9ac34b8bdaa518b29b43360999baee7d93b3d91a 100644 (file)
@@ -84,6 +84,9 @@ LeaseMgr::recountLeaseStats4() {
     // Cumulative counters ("reclaimed-declined-addresses", "reclaimed-leases",
     // "cumulative-assigned-addresses") never get zeroed.
     int64_t zero = 0;
+
+    stats_mgr.setValue("assigned-addresses", zero);
+
     stats_mgr.setValue("declined-addresses", zero);
 
     // Create if it does not exit reclaimed declined leases global stats.
@@ -164,6 +167,9 @@ LeaseMgr::recountLeaseStats4() {
     LeaseStatsRow row;
     while (query->getNextRow(row)) {
         if (row.lease_state_ == Lease::STATE_DEFAULT) {
+            // Add to the global value.
+            stats_mgr.addValue("assigned-addresses", row.state_count_);
+
             // Add to subnet level value.
             stats_mgr.addValue(StatsMgr::generateName("subnet", row.subnet_id_,
                                                       "assigned-addresses"),
@@ -174,6 +180,9 @@ LeaseMgr::recountLeaseStats4() {
                                                       "declined-addresses"),
                                row.state_count_);
 
+            // Add to the global value.
+            stats_mgr.addValue("assigned-addresses", row.state_count_);
+
             // Add to the global value.
             stats_mgr.addValue("declined-addresses", row.state_count_);
 
@@ -295,6 +304,11 @@ LeaseMgr::recountLeaseStats6() {
     // "cumulative-assigned-nas", "cumulative-assigned-pds",
     // "cumulative-registered-nas")) never get zeroed.
     int64_t zero = 0;
+
+    stats_mgr.setValue("assigned-nas", zero);
+
+    stats_mgr.setValue("assigned-pds", zero);
+
     stats_mgr.setValue("declined-addresses", zero);
 
     if (!stats_mgr.getObservation("reclaimed-declined-addresses")) {
@@ -420,6 +434,9 @@ LeaseMgr::recountLeaseStats6() {
         switch(row.lease_type_) {
             case Lease::TYPE_NA:
                 if (row.lease_state_ == Lease::STATE_DEFAULT) {
+                    // Add to the global value.
+                    stats_mgr.addValue("assigned-nas", row.state_count_);
+
                     // Add to subnet level value.
                     stats_mgr.addValue(StatsMgr::generateName("subnet", row.subnet_id_,
                                                               "assigned-nas"),
@@ -430,6 +447,9 @@ LeaseMgr::recountLeaseStats6() {
                                                               "declined-addresses"),
                                        row.state_count_);
 
+                    // Add to the global value.
+                    stats_mgr.addValue("assigned-nas", row.state_count_);
+
                     // Add to the global value.
                     stats_mgr.addValue("declined-addresses", row.state_count_);
 
@@ -448,6 +468,9 @@ LeaseMgr::recountLeaseStats6() {
 
             case Lease::TYPE_PD:
                 if (row.lease_state_ == Lease::STATE_DEFAULT) {
+                    // Add to the global value.
+                    stats_mgr.addValue("assigned-pds", row.state_count_);
+
                     // Set subnet level value.
                     stats_mgr.setValue(StatsMgr::generateName("subnet", row.subnet_id_,
                                                               "assigned-pds"),
index dd6b4a975e5dc16a44989c828bf108a6cbf50ebe..364ffd65ffc762d5ac6a38f779047639714f8839 100644 (file)
@@ -625,6 +625,7 @@ public:
     /// - assigned-addresses
     /// - declined-addresses
     /// global:
+    /// - assigned-addresses
     /// - declined-addresses
     ///
     /// It invokes the virtual method, startLeaseStatsQuery4(), which
index 56cf3dc8aedd44fc567e9236783f5d5102d7b2d3..eadc17f5507512fde46f18d9492618616b01eaea 100644 (file)
@@ -64,6 +64,8 @@ TEST_F(AllocEngine4Test, simpleAlloc4) {
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, IOAddress("0.0.0.0"),
@@ -92,6 +94,8 @@ TEST_F(AllocEngine4Test, simpleAlloc4) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
 
@@ -134,6 +138,8 @@ TEST_F(AllocEngine4Test, simpleAlloc4) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
 }
@@ -334,6 +340,8 @@ TEST_F(AllocEngine4Test, fakeAlloc4) {
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_,
@@ -360,6 +368,7 @@ TEST_F(AllocEngine4Test, fakeAlloc4) {
     EXPECT_TRUE(testStatistics("assigned-addresses", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
 }
 
@@ -555,6 +564,8 @@ TEST_F(AllocEngine4Test, simpleRenew4) {
     EXPECT_TRUE(testStatistics("assigned-addresses", 0, subnet_->getID()));
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, IOAddress("0.0.0.0"),
@@ -575,6 +586,8 @@ TEST_F(AllocEngine4Test, simpleRenew4) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
 
@@ -592,6 +605,7 @@ TEST_F(AllocEngine4Test, simpleRenew4) {
     EXPECT_TRUE(testStatistics("assigned-addresses", 1, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
 }
 
@@ -1726,7 +1740,10 @@ TEST_F(AllocEngine4Test, requestReuseExpiredLease4) {
     EXPECT_TRUE(testStatistics("assigned-addresses", 0, subnet_->getID()));
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
+
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0, subnet_->getID()));
 
@@ -1777,6 +1794,7 @@ TEST_F(AllocEngine4Test, requestReuseExpiredLease4) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 1));
@@ -1838,6 +1856,8 @@ TEST_F(AllocEngine4Test, discoverReuseDeclinedLease4Stats) {
     cfg_mgr.commit(); // so we will recalc stats
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     // Now create a declined lease, decline it and rewind its cltt, so it
@@ -1853,6 +1873,7 @@ TEST_F(AllocEngine4Test, discoverReuseDeclinedLease4Stats) {
     EXPECT_TRUE(testStatistics("assigned-addresses", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
     EXPECT_TRUE(testStatistics("declined-addresses", 0));
     EXPECT_TRUE(testStatistics("reclaimed-declined-addresses", 0));
@@ -1913,6 +1934,8 @@ TEST_F(AllocEngine4Test, requestReuseDeclinedLease4Stats) {
     cfg_mgr.commit();
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     // Now create a declined lease, decline it and rewind its cltt, so it
@@ -1933,6 +1956,7 @@ TEST_F(AllocEngine4Test, requestReuseDeclinedLease4Stats) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
     EXPECT_TRUE(testStatistics("declined-addresses", -1));
@@ -1952,7 +1976,10 @@ TEST_F(AllocEngine4Test, requestReuseReleasedLease4) {
     EXPECT_TRUE(testStatistics("assigned-addresses", 0, subnet_->getID()));
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
+
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0, subnet_->getID()));
 
@@ -2001,6 +2028,8 @@ TEST_F(AllocEngine4Test, requestReuseReleasedLease4) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 1));
@@ -3198,6 +3227,8 @@ TEST_F(AllocEngine4Test, simpleAlloc4Stats) {
     StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     Lease4Ptr lease = engine->allocateLease4(ctx);
@@ -3214,6 +3245,8 @@ TEST_F(AllocEngine4Test, simpleAlloc4Stats) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
 }
@@ -3236,6 +3269,8 @@ TEST_F(AllocEngine4Test, fakeAlloc4Stat) {
     StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     Lease4Ptr lease = engine->allocateLease4(ctx);
@@ -3253,6 +3288,7 @@ TEST_F(AllocEngine4Test, fakeAlloc4Stat) {
     EXPECT_EQ(100, stat->getInteger().first);
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
 }
 
@@ -3284,6 +3320,8 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseStat) {
     StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
     int64_t cumulative = getStatistics("cumulative-assigned-addresses",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-addresses");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-addresses");
 
     // Request allocation of the reserved address.
@@ -3306,9 +3344,9 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseStat) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-addresses", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-addresses", glbl_cumulative));
-
     // Lets' double check that the actual allocation took place.
     EXPECT_FALSE(ctx.fake_allocation_);
 }
index 008387d82630898501a64956fbb9d3d5def08021..d436efbffb1cd06cde04c0b13633b907492ce96c 100644 (file)
@@ -79,20 +79,25 @@ TEST_F(AllocEngine6Test, constructor) {
 // not interfere with the allocation.
 TEST_F(AllocEngine6Test, simpleAlloc6) {
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     simpleAlloc6Test(pool_, IOAddress("::"), false);
 
-    // We should have bumped the assigned counter by 1
+    // We should have bumped the assigned counter by 1.
     EXPECT_TRUE(testStatistics("assigned-nas", 1, subnet_->getID()));
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
@@ -107,11 +112,13 @@ TEST_F(AllocEngine6Test, simpleAlloc6) {
     DuidPtr duid(new DUID(std::vector<uint8_t>(8, 0x84)));
     simpleAlloc6Test(pool_, duid, IOAddress("::"), false);
 
-    // We should have bumped the assigned counter by 2
+    // We should have bumped the assigned counter by 1
     EXPECT_TRUE(testStatistics("assigned-nas", 2, subnet_->getID()));
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
@@ -140,11 +147,14 @@ TEST_F(AllocEngine6Test, maxAlloc6) {
 // and the stats counter is properly bumped by 1
 TEST_F(AllocEngine6Test, pdSimpleAlloc6) {
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-pds", 0));
     EXPECT_TRUE(testStatistics("assigned-pds", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned prefixes.
     int64_t cumulative = getStatistics("cumulative-assigned-pds",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-pds");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-pds");
 
     simpleAlloc6Test(pd_pool_, IOAddress("::"), false);
@@ -154,6 +164,8 @@ TEST_F(AllocEngine6Test, pdSimpleAlloc6) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-pds",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-pds", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-pds", glbl_cumulative));
 }
@@ -162,11 +174,14 @@ TEST_F(AllocEngine6Test, pdSimpleAlloc6) {
 // and the stats counter isn't bumped
 TEST_F(AllocEngine6Test, fakeAlloc6) {
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     simpleAlloc6Test(pool_, IOAddress("::"), true);
@@ -175,6 +190,7 @@ TEST_F(AllocEngine6Test, fakeAlloc6) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -182,11 +198,14 @@ TEST_F(AllocEngine6Test, fakeAlloc6) {
 // and the stats counter isn't bumped
 TEST_F(AllocEngine6Test, pdFakeAlloc6) {
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-pds", 0));
     EXPECT_TRUE(testStatistics("assigned-pds", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned prefixes.
     int64_t cumulative = getStatistics("cumulative-assigned-pds",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-pds");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-pds");
 
     simpleAlloc6Test(pd_pool_, IOAddress("::"), true);
@@ -195,6 +214,8 @@ TEST_F(AllocEngine6Test, pdFakeAlloc6) {
     EXPECT_TRUE(testStatistics("assigned-pds", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-pds",
                                cumulative, subnet_->getID()));
+
+    EXPECT_TRUE(testStatistics("assigned-pds", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-pds", glbl_cumulative));
 }
 
@@ -395,6 +416,7 @@ TEST_F(AllocEngine6Test, solicitReuseExpiredLease6) {
     initFqdn("myhost.example.com", true, true);
 
     // Verify the all of relevant stats are zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0, subnet_->getID()));
@@ -402,6 +424,8 @@ TEST_F(AllocEngine6Test, solicitReuseExpiredLease6) {
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Just a different duid
@@ -446,6 +470,7 @@ TEST_F(AllocEngine6Test, solicitReuseExpiredLease6) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0, subnet_->getID()));
@@ -798,6 +823,8 @@ TEST_F(AllocEngine6Test, requestReuseExpiredLease6) {
     cfg_mgr.commit();
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's create an expired lease
@@ -857,6 +884,7 @@ TEST_F(AllocEngine6Test, requestReuseExpiredLease6) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
     EXPECT_TRUE(testStatistics("assigned-nas", -1, other_subnetid));
@@ -978,6 +1006,8 @@ TEST_F(AllocEngine6Test, requestReuseReleasedLease6) {
     cfg_mgr.commit();
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's create a released lease
@@ -1042,6 +1072,8 @@ TEST_F(AllocEngine6Test, requestReuseReleasedLease6) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
     EXPECT_FALSE(testStatistics("cumulative-assigned-nas",
@@ -1482,11 +1514,14 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestNoHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     Lease6Ptr lease = simpleAlloc6Test(pool_, IOAddress("::"), false);
@@ -1498,6 +1533,8 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestNoHint) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
@@ -1520,11 +1557,14 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolSolicitValidHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1538,6 +1578,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolSolicitValidHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1559,11 +1600,14 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestValidHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1578,6 +1622,8 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestValidHint) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
@@ -1600,11 +1646,14 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolSolicitMatchingHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1618,6 +1667,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolSolicitMatchingHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1639,11 +1689,14 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestMatchingHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1658,6 +1711,8 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestMatchingHint) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
@@ -1680,11 +1735,14 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitNoHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     Lease6Ptr lease = simpleAlloc6Test(pool_, IOAddress("::"), true, false);
@@ -1695,6 +1753,7 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitNoHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1716,11 +1775,14 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestNoHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     Lease6Ptr lease = simpleAlloc6Test(pool_, IOAddress("::"), false, false);
@@ -1731,6 +1793,7 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestNoHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1752,11 +1815,14 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitValidHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1770,6 +1836,7 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitValidHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1791,11 +1858,14 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestValidHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1809,6 +1879,7 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestValidHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1830,11 +1901,14 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitMatchingHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1848,6 +1922,7 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitMatchingHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1869,11 +1944,14 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestMatchingHint) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's pretend the client sends hint 2001:db8:1::10.
@@ -1887,6 +1965,7 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestMatchingHint) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -1901,11 +1980,14 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedThis) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Client gets an address
@@ -1917,6 +1999,8 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedThis) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
@@ -1930,6 +2014,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedThis) {
     EXPECT_TRUE(testStatistics("assigned-nas", 1, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
     // Now admin creates a reservation for this client. This is in-pool
@@ -1966,6 +2051,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedThis) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
@@ -1980,11 +2066,14 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedOther) {
     AllocEngine engine(100);
 
     // Assigned count should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Client gets an address
@@ -1996,6 +2085,8 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedOther) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
@@ -2009,6 +2100,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedOther) {
     EXPECT_TRUE(testStatistics("assigned-nas", 1, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
     // Now admin creates a reservation for this client. Let's use the
@@ -2050,6 +2142,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedOther) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
@@ -2184,11 +2277,14 @@ TEST_F(AllocEngine6Test, addressRenewal) {
     AllocEngine engine(100);
 
     // Assigned count should zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     Lease6Collection leases;
@@ -2201,6 +2297,8 @@ TEST_F(AllocEngine6Test, addressRenewal) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
@@ -2224,6 +2322,7 @@ TEST_F(AllocEngine6Test, addressRenewal) {
     EXPECT_TRUE(testStatistics("assigned-nas", 1, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -2236,11 +2335,14 @@ TEST_F(AllocEngine6Test, reservedAddressRenewal) {
     AllocEngine engine(100);
 
     // Assigned count should zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
 
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     Lease6Collection leases;
@@ -2254,6 +2356,8 @@ TEST_F(AllocEngine6Test, reservedAddressRenewal) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
@@ -2269,6 +2373,7 @@ TEST_F(AllocEngine6Test, reservedAddressRenewal) {
     EXPECT_TRUE(testStatistics("assigned-nas", 1, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 }
 
@@ -2901,6 +3006,7 @@ TEST_F(AllocEngine6Test, solicitReuseDeclinedLease6Stats) {
     initSubnet(IOAddress("2001:db8:1::"), addr, addr);
 
     // Stats should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("declined-addresses", 0));
     EXPECT_TRUE(testStatistics("reclaimed-declined-addresses", 0));
@@ -2910,6 +3016,8 @@ TEST_F(AllocEngine6Test, solicitReuseDeclinedLease6Stats) {
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Now create a declined lease, decline it and rewind its cltt, so it
@@ -2925,6 +3033,7 @@ TEST_F(AllocEngine6Test, solicitReuseDeclinedLease6Stats) {
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
     EXPECT_TRUE(testStatistics("declined-addresses", 0));
     EXPECT_TRUE(testStatistics("reclaimed-declined-addresses", 0));
@@ -2946,6 +3055,7 @@ TEST_F(AllocEngine6Test, requestReuseDeclinedLease6Stats) {
     initSubnet(IOAddress("2001:db8::"), addr, addr);
 
     // Stats should be zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("declined-addresses", 0));
     EXPECT_TRUE(testStatistics("reclaimed-declined-addresses", 0));
@@ -2955,6 +3065,8 @@ TEST_F(AllocEngine6Test, requestReuseDeclinedLease6Stats) {
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Now create a declined lease, decline it and rewind its cltt, so it
@@ -2976,6 +3088,7 @@ TEST_F(AllocEngine6Test, requestReuseDeclinedLease6Stats) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
     EXPECT_TRUE(testStatistics("declined-addresses", -1));
@@ -3005,6 +3118,7 @@ TEST_F(AllocEngine6Test, reuseReclaimedExpiredViaRequest) {
     cfg_mgr.commit();
 
     // Verify relevant stats are zero.
+    EXPECT_TRUE(testStatistics("assigned-nas", 0));
     EXPECT_TRUE(testStatistics("assigned-nas", 0, subnet_->getID()));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0, subnet_->getID()));
@@ -3012,6 +3126,8 @@ TEST_F(AllocEngine6Test, reuseReclaimedExpiredViaRequest) {
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Let's create an expired lease
@@ -3055,6 +3171,8 @@ TEST_F(AllocEngine6Test, reuseReclaimedExpiredViaRequest) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
     EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
@@ -3444,6 +3562,8 @@ TEST_F(SharedNetworkAlloc6Test, requestSharedNetworkExistingLeases) {
     // Get the cumulative count of assigned addresses.
     int64_t cumulative = getStatistics("cumulative-assigned-nas",
                                        subnet2_->getID());
+
+    int64_t glbl_assigned = getStatistics("assigned-nas");
     int64_t glbl_cumulative = getStatistics("cumulative-assigned-nas");
 
     // Create a lease in subnet 2 for this client. The lease is in expired
@@ -3475,6 +3595,8 @@ TEST_F(SharedNetworkAlloc6Test, requestSharedNetworkExistingLeases) {
     cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas",
                                cumulative, subnet2_->getID()));
+    glbl_assigned += 1;
+    EXPECT_TRUE(testStatistics("assigned-nas", glbl_assigned));
     glbl_cumulative += 1;
     EXPECT_TRUE(testStatistics("cumulative-assigned-nas", glbl_cumulative));
 
index 5370e35c078bc027c38f13f2c7cbd4f337f3c76d..231266c50b4be6aa35c1e818db3f6247a73bca6a 100644 (file)
@@ -277,6 +277,15 @@ public:
             leases_[lease_index]->valid_lft_;
         leases_[lease_index]->state_ = Lease::STATE_EXPIRED_RECLAIMED;
         ASSERT_NO_THROW(updateLease(lease_index));
+        StatsMgr& stats_mgr = StatsMgr::instance();
+        auto observation = stats_mgr.getObservation("assigned-addresses");
+        if (observation) {
+            stats_mgr.addValue("assigned-addresses", int64_t(-1));
+        }
+        observation = stats_mgr.getObservation("assigned-nas");
+        if (observation) {
+            stats_mgr.addValue("assigned-nas", int64_t(-1));
+        }
     }
 
     /// @brief Declines specified lease
@@ -303,6 +312,7 @@ public:
         // Update the stats.
         StatsMgr& stats_mgr = StatsMgr::instance();
         auto subnet_id = leases_[lease_index]->subnet_id_;
+        stats_mgr.addValue("assigned-nas", int64_t(-1));
         stats_mgr.addValue(stats_mgr.generateName("subnet", subnet_id,
                                                   "assigned-nas"),
                            int64_t(-1));
@@ -1064,6 +1074,8 @@ public:
         // be used to easily detect whether a given stat was decreased or
         // increased. They are sufficiently high compared to number of leases
         // to avoid any chances of going into negative.
+        stats_mgr.setValue(stat_name, static_cast<int64_t>(3000));
+
         stats_mgr.setValue("declined-addresses", static_cast<int64_t>(1000));
 
         // Let's set global the counter for reclaimed declined addresses.
@@ -1090,7 +1102,11 @@ public:
         // in removal of all leases with even indexes.
         ASSERT_NO_THROW(reclaimExpiredLeases(0, 0, true));
 
-        // Declined-addresses should be decreased from its initial value (1000)
+        // The assigned-addresses should be decreased from its initial value (3000)
+        // for both recovered addresses from subnet1 and subnet2.
+        testStatistics(stat_name, 3000 - subnet1_cnt - subnet2_cnt);
+
+        // The declined-addresses should be decreased from its initial value (1000)
         // for both recovered addresses from subnet1 and subnet2.
         testStatistics("declined-addresses", 1000 - subnet1_cnt - subnet2_cnt);
 
@@ -1375,6 +1391,7 @@ ExpirationAllocEngine6Test::createLeases() {
         StatsMgr& stats_mgr = StatsMgr::instance();
         std::string stat_name =
             lease->type_ == Lease::TYPE_NA ? "assigned-nas" : "assigned-pds";
+        stats_mgr.addValue(stat_name, int64_t(1));
         stats_mgr.addValue(stats_mgr.generateName("subnet", lease->subnet_id_, stat_name),
                            int64_t(1));
     }
@@ -1419,12 +1436,14 @@ ExpirationAllocEngine6Test::setLeaseType(const uint16_t lease_index,
         StatsMgr& stats_mgr = StatsMgr::instance();
         std::string stats_name = (lease_type == Lease::TYPE_NA ?
                                   "assigned-nas" : "assigned-pds");
+        stats_mgr.addValue(stats_name, int64_t(1));
         stats_mgr.addValue(stats_mgr.generateName("subnet",
                                                   leases_[lease_index]->subnet_id_,
                                                   stats_name),
                            int64_t(1));
         stats_name = (leases_[lease_index]->type_ == Lease::TYPE_NA ?
                       "assigned-nas" : "assigned-pds");
+        stats_mgr.addValue(stats_name, int64_t(-1));
         stats_mgr.addValue(stats_mgr.generateName("subnet",
                                                   leases_[lease_index]->subnet_id_,
                                                   stats_name),
@@ -1467,10 +1486,10 @@ ExpirationAllocEngine6Test::testReclaimExpiredLeasesStats() {
         EXPECT_TRUE(testStatistics("reclaimed-leases", i / 2, 1));
         EXPECT_TRUE(testStatistics("reclaimed-leases", i / 2, 2));
         // Number of assigned leases should decrease as we reclaim them.
-        EXPECT_TRUE(testStatistics("assigned-nas",
-                                   (TEST_LEASES_NUM - i) / 2, 1));
-        EXPECT_TRUE(testStatistics("assigned-pds",
-                                   (TEST_LEASES_NUM - i) / 2, 2));
+        EXPECT_TRUE(testStatistics("assigned-nas", (TEST_LEASES_NUM - i) / 2));
+        EXPECT_TRUE(testStatistics("assigned-pds", (TEST_LEASES_NUM - i) / 2));
+        EXPECT_TRUE(testStatistics("assigned-nas", (TEST_LEASES_NUM - i) / 2, 1));
+        EXPECT_TRUE(testStatistics("assigned-pds", (TEST_LEASES_NUM - i) / 2, 2));
     }
 }
 
@@ -1529,14 +1548,19 @@ ExpirationAllocEngine6Test::testReclaimReusedLeases(const uint16_t msg_type,
     // initially reclaimed.
     if (use_reclaimed || (msg_type == DHCPV6_SOLICIT)) {
         EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
+        if (use_reclaimed && (msg_type == DHCPV6_SOLICIT)) {
+            EXPECT_TRUE(testStatistics("assigned-nas", 0));
+        } else {
+            EXPECT_TRUE(testStatistics("assigned-nas", TEST_LEASES_NUM));
+        }
     } else {
         EXPECT_TRUE(testStatistics("reclaimed-leases", TEST_LEASES_NUM));
+        EXPECT_TRUE(testStatistics("assigned-nas", TEST_LEASES_NUM));
         EXPECT_TRUE(testStatistics("assigned-nas", TEST_LEASES_NUM, subnet->getID()));
         // Leases should have been updated in the lease database and their
         // state should not be 'expired-reclaimed' anymore.
         EXPECT_TRUE(testLeases(&leaseNotReclaimed, &allLeaseIndexes));
     }
-
 }
 
 void
@@ -1603,6 +1627,7 @@ ExpirationAllocEngine6Test::testReclaimExpiredLeasesRegisteredStats() {
         ASSERT_NO_THROW(reclaimExpiredLeases(reclamation_group_size,
                                              0, false));
 
+        EXPECT_TRUE(testStatistics("assigned-nas", 0));
         // Number of reclaimed leases should increase as we loop.
         EXPECT_TRUE(testStatistics("reclaimed-leases", i));
         // Make sure that the number of reclaimed leases is also distributed
@@ -1997,6 +2022,7 @@ ExpirationAllocEngine4Test::createLeases() {
         // Note in the statistics that this lease has been added.
         StatsMgr& stats_mgr = StatsMgr::instance();
         std::string stat_name = "assigned-addresses";
+        stats_mgr.addValue(stat_name, int64_t(1));
         stats_mgr.addValue(stats_mgr.generateName("subnet", lease->subnet_id_, stat_name),
                            int64_t(1));
     }
@@ -2175,15 +2201,14 @@ ExpirationAllocEngine4Test::testReclaimExpiredLeasesStats() {
 
         // Number of reclaimed leases should increase as we loop.
         EXPECT_TRUE(testStatistics("reclaimed-leases", i));
+        EXPECT_TRUE(testStatistics("assigned-addresses", TEST_LEASES_NUM - i));
         // Make sure that the number of reclaimed leases is also distributed
         // across two subnets.
         EXPECT_TRUE(testStatistics("reclaimed-leases", i / 2, 1));
         EXPECT_TRUE(testStatistics("reclaimed-leases", i / 2, 2));
         // Number of assigned leases should decrease as we reclaim them.
-        EXPECT_TRUE(testStatistics("assigned-addresses",
-                                   (TEST_LEASES_NUM - i) / 2, 1));
-        EXPECT_TRUE(testStatistics("assigned-addresses",
-                                   (TEST_LEASES_NUM - i) / 2, 2));
+        EXPECT_TRUE(testStatistics("assigned-addresses", (TEST_LEASES_NUM - i) / 2, 1));
+        EXPECT_TRUE(testStatistics("assigned-addresses", (TEST_LEASES_NUM - i) / 2, 2));
     }
 }
 
@@ -2248,10 +2273,15 @@ ExpirationAllocEngine4Test::testReclaimReusedLeases(const uint8_t msg_type,
     // 'expired-reclaimed' state.
     if (use_reclaimed || (msg_type == DHCPDISCOVER)) {
         EXPECT_TRUE(testStatistics("reclaimed-leases", 0));
-
+        if (use_reclaimed && msg_type == DHCPDISCOVER) {
+            EXPECT_TRUE(testStatistics("assigned-addresses", 0));
+        } else {
+            EXPECT_TRUE(testStatistics("assigned-addresses", TEST_LEASES_NUM));
+        }
     } else if (msg_type == DHCPREQUEST) {
         // Re-allocation of expired leases should result in reclamations.
         EXPECT_TRUE(testStatistics("reclaimed-leases", TEST_LEASES_NUM));
+        EXPECT_TRUE(testStatistics("assigned-addresses", TEST_LEASES_NUM));
         EXPECT_TRUE(testStatistics("assigned-addresses", TEST_LEASES_NUM, subnet->getID()));
         // Leases should have been updated in the lease database and their
         // state should not be 'expired-reclaimed' anymore.
index cb02517d7af91e489f73925f37b447694e1d3e77..8ec0f51248d27bd559f0e2918f7895b6c8b27e90 100644 (file)
@@ -2047,6 +2047,10 @@ TEST(CfgSubnets4Test, updateStatistics) {
     // Add subnet.
     cfg->add(subnet);
 
+    observation = StatsMgr::instance().getObservation(
+        "assigned-addresses");
+    ASSERT_FALSE(observation);
+
     observation = StatsMgr::instance().getObservation(
         "cumulative-assigned-addresses");
     ASSERT_FALSE(observation);
@@ -2125,6 +2129,11 @@ TEST(CfgSubnets4Test, updateStatistics) {
 
     cfg->updateStatistics();
 
+    observation = StatsMgr::instance().getObservation(
+        "assigned-addresses");
+    ASSERT_TRUE(observation);
+    ASSERT_EQ(0, observation->getInteger().first);
+
     observation = StatsMgr::instance().getObservation(
         "cumulative-assigned-addresses");
     ASSERT_TRUE(observation);
index 51f38cee856836d7ad9370d5ed406498e6769ada..3e622cbc56b806b3d8f1dc6b501ea640d37aa8ea 100644 (file)
@@ -1823,10 +1823,18 @@ TEST(CfgSubnets6Test, updateStatistics) {
     // Add subnet.
     cfg->add(subnet);
 
+    observation = StatsMgr::instance().getObservation(
+        "assigned-nas");
+    ASSERT_FALSE(observation);
+
     observation = StatsMgr::instance().getObservation(
         "cumulative-assigned-nas");
     ASSERT_FALSE(observation);
 
+    observation = StatsMgr::instance().getObservation(
+        "assigned-pds");
+    ASSERT_FALSE(observation);
+
     observation = StatsMgr::instance().getObservation(
         "cumulative-assigned-pds");
     ASSERT_FALSE(observation);
@@ -1954,11 +1962,21 @@ TEST(CfgSubnets6Test, updateStatistics) {
 
     cfg->updateStatistics();
 
+    observation = StatsMgr::instance().getObservation(
+        "assigned-nas");
+    ASSERT_TRUE(observation);
+    ASSERT_EQ(0, observation->getInteger().first);
+
     observation = StatsMgr::instance().getObservation(
         "cumulative-assigned-nas");
     ASSERT_TRUE(observation);
     ASSERT_EQ(0, observation->getInteger().first);
 
+    observation = StatsMgr::instance().getObservation(
+        "assigned-pds");
+    ASSERT_TRUE(observation);
+    ASSERT_EQ(0, observation->getInteger().first);
+
     observation = StatsMgr::instance().getObservation(
         "cumulative-assigned-pds");
     ASSERT_TRUE(observation);
index 008ccaf89f6039c16ff4fb213d18c84e98a5bcf7..6948114113cba587d89638088e58581cca5f3c76 100644 (file)
@@ -3225,6 +3225,9 @@ GenericLeaseMgrTest::testRecountLeaseStats4() {
     // Make sure stats are as expected.
     ASSERT_NO_FATAL_FAILURE(checkLeaseStats(expectedStats));
 
+    // Check that assigned global stats always exist.
+    EXPECT_TRUE(StatsMgr::instance().getObservation("assigned-addresses"));
+
     // Check that cumulative global stats always exist.
     EXPECT_TRUE(StatsMgr::instance().getObservation("cumulative-assigned-addresses"));
 
@@ -3360,6 +3363,10 @@ GenericLeaseMgrTest::testRecountLeaseStats6() {
     // Make sure stats are as expected.
     ASSERT_NO_FATAL_FAILURE(checkLeaseStats(expectedStats));
 
+    // Check that global stats always exist.
+    EXPECT_TRUE(StatsMgr::instance().getObservation("assigned-nas"));
+    EXPECT_TRUE(StatsMgr::instance().getObservation("assigned-pds"));
+
     // Check that cumulative global stats always exist.
     EXPECT_TRUE(StatsMgr::instance().getObservation("cumulative-assigned-nas"));
     EXPECT_TRUE(StatsMgr::instance().getObservation("cumulative-assigned-pds"));
index b30b6a814ca6ad9f09d8fe8adfc3847fc5717442..74a30433b699eb35f29d20ede1a1d25a571f90a7 100644 (file)
         "{",
         "    \"result\": 0,",
         "    \"arguments\": {",
+        "        \"assigned-addresses\": [",
+        "            [",
+        "                0,",
+        "                \"2023-06-13 20:42:46.836096\"",
+        "            ]",
+        "        ],",
         "        \"cumulative-assigned-addresses\": [",
         "            [",
         "                0,",
         "{",
         "    \"result\": 0,",
         "    \"arguments\": {",
+        "        \"assigned-nas\": [",
+        "            [",
+        "                0,",
+        "                \"2023-06-13 21:28:57.196757\"",
+        "            ]",
+        "        ],",
+        "        \"assigned-pds\": [",
+        "            [",
+        "                0,",
+        "                \"2023-06-13 21:28:57.196757\"",
+        "            ]",
+        "        ],",
         "        \"cumulative-assigned-nas\": [",
         "            [",
         "                0,",