From d37df2d372597d98ca632ba45854a91b13b16dd9 Mon Sep 17 00:00:00 2001 From: Razvan Becheriu Date: Tue, 2 Sep 2025 14:53:00 +0300 Subject: [PATCH] [#3239] added global assigned leases counters --- doc/sphinx/arm/dhcp4-srv.rst | 13 +- doc/sphinx/arm/dhcp6-srv.rst | 28 +++- doc/sphinx/arm/stats.rst | 18 +++ src/bin/dhcp4/dhcp4_srv.cc | 2 + src/bin/dhcp6/dhcp6_srv.cc | 4 + src/bin/dhcp6/tests/addr_reg_unittest.cc | 6 +- src/bin/dhcp6/tests/dhcp6_test_utils.cc | 98 ++++++++++---- src/hooks/dhcp/lease_cmds/lease_cmds.cc | 69 +++++++++- .../libloadtests/lease_cmds_unittest.h | 2 + .../tests/limits_unit_tests_lease_limiting.cc | 3 +- src/hooks/dhcp/stat_cmds/stat_cmds.cc | 4 +- src/lib/dhcpsrv/alloc_engine.cc | 61 +++++++-- src/lib/dhcpsrv/lease_mgr.cc | 23 ++++ src/lib/dhcpsrv/lease_mgr.h | 1 + .../dhcpsrv/tests/alloc_engine4_unittest.cc | 40 +++++- .../dhcpsrv/tests/alloc_engine6_unittest.cc | 126 +++++++++++++++++- .../tests/alloc_engine_expiration_unittest.cc | 52 ++++++-- .../dhcpsrv/tests/cfg_subnets4_unittest.cc | 9 ++ .../dhcpsrv/tests/cfg_subnets6_unittest.cc | 18 +++ .../testutils/generic_lease_mgr_unittest.cc | 7 + src/share/api/statistic-get-all.json | 18 +++ 21 files changed, 533 insertions(+), 69 deletions(-) diff --git a/doc/sphinx/arm/dhcp4-srv.rst b/doc/sphinx/arm/dhcp4-srv.rst index 335337bca3..0564bff4a6 100644 --- a/doc/sphinx/arm/dhcp4-srv.rst +++ b/doc/sphinx/arm/dhcp4-srv.rst @@ -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 | diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst index 2bc7ded5f2..04f2c9bf16 100644 --- a/doc/sphinx/arm/dhcp6-srv.rst +++ b/doc/sphinx/arm/dhcp6-srv.rst @@ -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. | diff --git a/doc/sphinx/arm/stats.rst b/doc/sphinx/arm/stats.rst index c2a641688a..d716f0be53 100644 --- a/doc/sphinx/arm/stats.rst +++ b/doc/sphinx/arm/stats.rst @@ -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, diff --git a/src/bin/dhcp4/dhcp4_srv.cc b/src/bin/dhcp4/dhcp4_srv.cc index aa6fe8d9bf..6cadcf4012 100644 --- a/src/bin/dhcp4/dhcp4_srv.cc +++ b/src/bin/dhcp4/dhcp4_srv.cc @@ -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(-1)); + StatsMgr::instance().addValue( StatsMgr::generateName("subnet", lease->subnet_id_, "assigned-addresses"), static_cast(-1)); diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 417960b126..331adcd1ff 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -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(-1)); + StatsMgr::instance().addValue( StatsMgr::generateName("subnet", lease->subnet_id_, "assigned-nas"), static_cast(-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(-1)); + StatsMgr::instance().addValue( StatsMgr::generateName("subnet", lease->subnet_id_, "assigned-pds"), static_cast(-1)); diff --git a/src/bin/dhcp6/tests/addr_reg_unittest.cc b/src/bin/dhcp6/tests/addr_reg_unittest.cc index 1eca341b3d..9b08088171 100644 --- a/src/bin/dhcp6/tests/addr_reg_unittest.cc +++ b/src/bin/dhcp6/tests/addr_reg_unittest.cc @@ -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); diff --git a/src/bin/dhcp6/tests/dhcp6_test_utils.cc b/src/bin/dhcp6/tests/dhcp6_test_utils.cc index 7ea1fea27f..88c7bc27a5 100644 --- a/src/bin/dhcp6/tests/dhcp6_test_utils.cc +++ b/src/bin/dhcp6/tests/dhcp6_test_utils.cc @@ -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(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(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 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(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(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 diff --git a/src/hooks/dhcp/lease_cmds/lease_cmds.cc b/src/hooks/dhcp/lease_cmds/lease_cmds.cc index 423fe0c2da..68ad2a144f 100644 --- a/src/hooks/dhcp/lease_cmds/lease_cmds.cc +++ b/src/hooks/dhcp/lease_cmds/lease_cmds.cc @@ -523,6 +523,8 @@ public: void LeaseCmdsImpl::updateStatsOnAdd(const Lease4Ptr& lease) { if (!lease->stateExpiredReclaimed()) { + StatsMgr::instance().addValue("assigned-addresses", static_cast(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(1)); } else if (!lease->stateExpiredReclaimed()) { + StatsMgr::instance().addValue(lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds", + static_cast(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(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(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(-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(-1)); } else if (!lease->stateExpiredReclaimed()) { + StatsMgr::instance().addValue(lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds", + static_cast(-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(0)); + StatsMgr::instance().setValue("declined-addresses", static_cast(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(0)); + + StatsMgr::instance().setValue("assigned-pds", static_cast(0)); + StatsMgr::instance().setValue("declined-addresses", static_cast(0)); } diff --git a/src/hooks/dhcp/lease_cmds/libloadtests/lease_cmds_unittest.h b/src/hooks/dhcp/lease_cmds/libloadtests/lease_cmds_unittest.h index a97f6e932c..ddde5909ef 100644 --- a/src/hooks/dhcp/lease_cmds/libloadtests/lease_cmds_unittest.h +++ b/src/hooks/dhcp/lease_cmds/libloadtests/lease_cmds_unittest.h @@ -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)); } } } diff --git a/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc b/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc index 25c8037875..8289e073f5 100644 --- a/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc +++ b/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc @@ -348,8 +348,7 @@ LeaseLimitFixture::addLease(LeaseTPtr 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(1)); } diff --git a/src/hooks/dhcp/stat_cmds/stat_cmds.cc b/src/hooks/dhcp/stat_cmds/stat_cmds.cc index 65a81a9fdd..3e9f29f4f0 100644 --- a/src/hooks/dhcp/stat_cmds/stat_cmds.cc +++ b/src/hooks/dhcp/stat_cmds/stat_cmds.cc @@ -695,7 +695,7 @@ LeaseStatCmdsImpl::addValueRow4(ElementPtr value_rows, const SubnetID &subnet_id row->add(Element::create(static_cast(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(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"))); diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc index a86e338f58..e9f953b46d 100644 --- a/src/lib/dhcpsrv/alloc_engine.cc +++ b/src/lib/dhcpsrv/alloc_engine.cc @@ -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(-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(-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(-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(1)); } + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds", + static_cast(1)); + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? "cumulative-assigned-nas" : "cumulative-assigned-pds", static_cast(1)); @@ -2172,6 +2188,10 @@ Lease6Ptr AllocEngine::createLease6(ClientContext6& ctx, static_cast(1)); } + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds", + static_cast(1)); + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? "cumulative-assigned-nas" : "cumulative-assigned-pds", static_cast(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(-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(1)); } + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds", + static_cast(1)); + + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? "cumulative-assigned-nas" : "cumulative-assigned-pds", static_cast(1)); @@ -2673,6 +2701,10 @@ AllocEngine::updateLeaseData(ClientContext6& ctx, const Lease6Collection& leases static_cast(1)); } + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds", + static_cast(1)); + StatsMgr::instance().addValue(ctx.currentIA().type_ == Lease::TYPE_NA ? "cumulative-assigned-nas" : "cumulative-assigned-pds", static_cast(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(-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(-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(-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(-1)); + StatsMgr::instance().addValue(StatsMgr::generateName("subnet", lease->subnet_id_, "assigned-addresses"), static_cast(-1)); @@ -4644,8 +4685,10 @@ AllocEngine::createLease4(const ClientContext4& ctx, const IOAddress& addr, static_cast(1)); } - StatsMgr::instance().addValue("cumulative-assigned-addresses", - static_cast(1)); + + StatsMgr::instance().addValue("assigned-addresses", static_cast(1)); + + StatsMgr::instance().addValue("cumulative-assigned-addresses", static_cast(1)); return (lease); } else { @@ -4804,8 +4847,9 @@ AllocEngine::renewLease4(const Lease4Ptr& lease, static_cast(1)); } - StatsMgr::instance().addValue("cumulative-assigned-addresses", - static_cast(1)); + StatsMgr::instance().addValue("assigned-addresses", static_cast(1)); + + StatsMgr::instance().addValue("cumulative-assigned-addresses", static_cast(1)); } } if (skip) { @@ -4931,8 +4975,9 @@ AllocEngine::reuseExpiredLease4(Lease4Ptr& expired, static_cast(1)); } - StatsMgr::instance().addValue("cumulative-assigned-addresses", - static_cast(1)); + StatsMgr::instance().addValue("assigned-addresses", static_cast(1)); + + StatsMgr::instance().addValue("cumulative-assigned-addresses", static_cast(1)); } // We do nothing for SOLICIT. We'll just update database when diff --git a/src/lib/dhcpsrv/lease_mgr.cc b/src/lib/dhcpsrv/lease_mgr.cc index 579b477a37..9ac34b8bda 100644 --- a/src/lib/dhcpsrv/lease_mgr.cc +++ b/src/lib/dhcpsrv/lease_mgr.cc @@ -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"), diff --git a/src/lib/dhcpsrv/lease_mgr.h b/src/lib/dhcpsrv/lease_mgr.h index dd6b4a975e..364ffd65ff 100644 --- a/src/lib/dhcpsrv/lease_mgr.h +++ b/src/lib/dhcpsrv/lease_mgr.h @@ -625,6 +625,7 @@ public: /// - assigned-addresses /// - declined-addresses /// global: + /// - assigned-addresses /// - declined-addresses /// /// It invokes the virtual method, startLeaseStatsQuery4(), which diff --git a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc index 56cf3dc8ae..eadc17f550 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc @@ -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(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(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(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_); } diff --git a/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc index 008387d826..d436efbffb 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc @@ -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(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)); diff --git a/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc index 5370e35c07..231266c50b 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc @@ -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(3000)); + stats_mgr.setValue("declined-addresses", static_cast(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. diff --git a/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc b/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc index cb02517d7a..8ec0f51248 100644 --- a/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc @@ -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); diff --git a/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc b/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc index 51f38cee85..3e622cbc56 100644 --- a/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc @@ -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); diff --git a/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc b/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc index 008ccaf89f..6948114113 100644 --- a/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc @@ -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")); diff --git a/src/share/api/statistic-get-all.json b/src/share/api/statistic-get-all.json index b30b6a814c..74a30433b6 100644 --- a/src/share/api/statistic-get-all.json +++ b/src/share/api/statistic-get-all.json @@ -17,6 +17,12 @@ "{", " \"result\": 0,", " \"arguments\": {", + " \"assigned-addresses\": [", + " [", + " 0,", + " \"2023-06-13 20:42:46.836096\"", + " ]", + " ],", " \"cumulative-assigned-addresses\": [", " [", " 0,", @@ -271,6 +277,18 @@ "{", " \"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,", -- 2.47.3