}
template<typename T, typename Comp>
-unsigned int StatRing<T,Comp>::getSize()
+uint64_t StatRing<T,Comp>::getSize() const
{
std::lock_guard<std::mutex> l(d_lock);
return d_items.capacity();
}
+template<typename T, typename Comp>
+uint64_t StatRing<T,Comp>::getEntriesCount() const
+{
+ std::lock_guard<std::mutex> l(d_lock);
+ return d_items.size();
+}
+
template<typename T, typename Comp>
void StatRing<T,Comp>::resize(unsigned int newsize)
{
d_items.set_capacity(newsize);
}
-
template<typename T, typename Comp>
void StatRing<T,Comp>::setHelp(const string &str)
{
return tmp;
}
+void StatBag::registerRingStats(const string& name)
+{
+ declare("ring-" + name + "-size", "Number of entries in the " + name + " ring", [this,name](const std::string&) { return static_cast<uint64_t>(getRingEntriesCount(name)); });
+ declare("ring-" + name + "-capacity", "Maximum number of entries in the " + name + " ring", [this,name](const std::string&) { return static_cast<uint64_t>(getRingSize(name)); });
+}
+
void StatBag::declareRing(const string &name, const string &help, unsigned int size)
{
d_rings.emplace(name, size);
d_rings[name].setHelp(help);
+ registerRingStats(name);
}
void StatBag::declareComboRing(const string &name, const string &help, unsigned int size)
{
- d_comborings.emplace(name, size);
- d_comborings[name].setHelp(help);
+ d_comboRings.emplace(name, size);
+ d_comboRings[name].setHelp(help);
+ registerRingStats(name);
}
void StatBag::declareDNSNameQTypeRing(const string &name, const string &help, unsigned int size)
{
d_dnsnameqtyperings.emplace(name, size);
d_dnsnameqtyperings[name].setHelp(help);
+ registerRingStats(name);
}
-
vector<pair<string, unsigned int> > StatBag::getRing(const string &name)
{
if(d_rings.count(name)) {
}
vector<pair<string, unsigned int> > ret;
- if (d_comborings.count(name)) {
+ if (d_comboRings.count(name)) {
typedef pair<SComboAddress, unsigned int> stor_t;
- vector<stor_t> raw =d_comborings[name].get();
+ vector<stor_t> raw =d_comboRings[name].get();
for(const stor_t& stor : raw) {
ret.push_back(make_pair(stor.first.ca.toString(), stor.second));
}
{
if(d_rings.count(name))
d_rings[name].reset();
- if(d_comborings.count(name))
- d_comborings[name].reset();
+ if(d_comboRings.count(name))
+ d_comboRings[name].reset();
if(d_dnsnameqtyperings.count(name))
d_dnsnameqtyperings[name].reset();
}
{
if(d_rings.count(name))
d_rings[name].resize(newsize);
- if(d_comborings.count(name))
- d_comborings[name].resize(newsize);
+ if(d_comboRings.count(name))
+ d_comboRings[name].resize(newsize);
if(d_dnsnameqtyperings.count(name))
return d_dnsnameqtyperings[name].resize(newsize);
}
-unsigned int StatBag::getRingSize(const string &name)
+uint64_t StatBag::getRingSize(const string &name)
{
if(d_rings.count(name))
return d_rings[name].getSize();
- if(d_comborings.count(name))
- return d_comborings[name].getSize();
+ if(d_comboRings.count(name))
+ return d_comboRings[name].getSize();
if(d_dnsnameqtyperings.count(name))
return d_dnsnameqtyperings[name].getSize();
return 0;
}
+uint64_t StatBag::getRingEntriesCount(const string &name)
+{
+ if(d_rings.count(name))
+ return d_rings[name].getEntriesCount();
+ if(d_comboRings.count(name))
+ return d_comboRings[name].getEntriesCount();
+ if(d_dnsnameqtyperings.count(name))
+ return d_dnsnameqtyperings[name].getEntriesCount();
+ return 0;
+}
+
string StatBag::getRingTitle(const string &name)
{
if(d_rings.count(name))
return d_rings[name].getHelp();
- if(d_comborings.count(name))
- return d_comborings[name].getHelp();
+ if(d_comboRings.count(name))
+ return d_comboRings[name].getHelp();
if(d_dnsnameqtyperings.count(name))
return d_dnsnameqtyperings[name].getHelp();
return "";
vector<string> ret;
for(auto i=d_rings.begin();i!=d_rings.end();++i)
ret.push_back(i->first);
- for(auto i=d_comborings.begin();i!=d_comborings.end();++i)
+ for(auto i=d_comboRings.begin();i!=d_comboRings.end();++i)
ret.push_back(i->first);
for(const auto &i : d_dnsnameqtyperings)
ret.push_back(i.first);
bool StatBag::ringExists(const string &name)
{
- return d_rings.count(name) || d_comborings.count(name) || d_dnsnameqtyperings.count(name);
+ return d_rings.count(name) || d_comboRings.count(name) || d_dnsnameqtyperings.count(name);
}
void StatBag::blacklist(const string& str) {