"v4-allocation-fail-shared-network",
"v4-allocation-fail-subnet",
"v4-allocation-fail-no-pools",
- "v4-allocation-fail-classes"
+ "v4-allocation-fail-classes",
+ "v4-reservation-conflicts"
};
} // end of anonymous namespace
testAssigned([this, &client2]() {
doRequest(client2, "10.0.0.1");
});
+
+ // Ensure stats are being recorded for HR conflicts
+ ObservationPtr subnet_conflicts = StatsMgr::instance().getObservation(
+ "subnet[100].reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
+ ObservationPtr global_conflicts = StatsMgr::instance().getObservation(
+ "v4-reservation-conflicts");
+ ASSERT_TRUE(global_conflicts);
+ ASSERT_EQ(1, global_conflicts->getInteger().first);
}
// Reserved address can't be assigned as long as access to a subnet is
.arg(ctx.currentHost()->getIPv4Reservation().toText())
.arg(ctx.conflicting_lease_ ? ctx.conflicting_lease_->toText() :
"(no lease info)");
+ StatsMgr::instance().addValue(StatsMgr::generateName(
+ "subnet",
+ new_lease->subnet_id_,
+ "reservation-conflicts"),
+ static_cast<int64_t>(1));
+ StatsMgr::instance().addValue("v4-reservation-conflicts",
+ static_cast<int64_t>(1));
}
} else {
generateName("subnet", subnet_id, "total-addresses"),
static_cast<int64_t>
(subnet4->getPoolCapacity(Lease::TYPE_V4)));
- const std::string& name =
+ std::string name =
StatsMgr::generateName("subnet", subnet_id, "cumulative-assigned-addresses");
if (!stats_mgr.getObservation(name)) {
stats_mgr.setValue(name, static_cast<int64_t>(0));
}
+ name = StatsMgr::generateName("subnet", subnet_id, "reservation-conflicts");
+ if (!stats_mgr.getObservation(name)) {
+ stats_mgr.setValue(name, static_cast<int64_t>(0));
+ }
}
// Only recount the stats if we have subnets.