if (schema) {
f->open_object_section(d->name);
f->dump_int("type", d->type);
+ f->dump_string("description", d->description);
f->close_section();
} else {
if (d->type & PERFCOUNTER_LONGRUNAVG) {
m_perf_counters = NULL;
}
-void PerfCountersBuilder::add_u64_counter(int idx, const char *name)
+void PerfCountersBuilder::add_u64_counter(int idx, const char *name, const char *description)
{
- add_impl(idx, name, PERFCOUNTER_U64 | PERFCOUNTER_COUNTER);
+ add_impl(idx, name, description, PERFCOUNTER_U64 | PERFCOUNTER_COUNTER);
}
-void PerfCountersBuilder::add_u64(int idx, const char *name)
+void PerfCountersBuilder::add_u64(int idx, const char *name, const char *description)
{
- add_impl(idx, name, PERFCOUNTER_U64);
+ add_impl(idx, name, description, PERFCOUNTER_U64);
}
-void PerfCountersBuilder::add_u64_avg(int idx, const char *name)
+void PerfCountersBuilder::add_u64_avg(int idx, const char *name, const char *description)
{
- add_impl(idx, name, PERFCOUNTER_U64 | PERFCOUNTER_LONGRUNAVG);
+ add_impl(idx, name, description, PERFCOUNTER_U64 | PERFCOUNTER_LONGRUNAVG);
}
-void PerfCountersBuilder::add_time(int idx, const char *name)
+void PerfCountersBuilder::add_time(int idx, const char *name, const char *description)
{
- add_impl(idx, name, PERFCOUNTER_TIME);
+ add_impl(idx, name, description, PERFCOUNTER_TIME);
}
-void PerfCountersBuilder::add_time_avg(int idx, const char *name)
+void PerfCountersBuilder::add_time_avg(int idx, const char *name, const char *description)
{
- add_impl(idx, name, PERFCOUNTER_TIME | PERFCOUNTER_LONGRUNAVG);
+ add_impl(idx, name, description, PERFCOUNTER_TIME | PERFCOUNTER_LONGRUNAVG);
}
-void PerfCountersBuilder::add_impl(int idx, const char *name, int ty)
+void PerfCountersBuilder::add_impl(int idx, const char *name, const char *description, int ty)
{
assert(idx > m_perf_counters->m_lower_bound);
assert(idx < m_perf_counters->m_upper_bound);
&data(vec[idx - m_perf_counters->m_lower_bound - 1]);
assert(data.type == PERFCOUNTER_NONE);
data.name = name;
+ data.description = description;
data.type = (enum perfcounter_type_d)ty;
}
struct perf_counter_data_any_d {
perf_counter_data_any_d()
: name(NULL),
- type(PERFCOUNTER_NONE),
- u64(0),
- avgcount(0),
- avgcount2(0)
+ description(NULL),
+ type(PERFCOUNTER_NONE),
+ u64(0),
+ avgcount(0),
+ avgcount2(0)
{}
perf_counter_data_any_d(const perf_counter_data_any_d& other)
: name(other.name),
- type(other.type),
- u64(other.u64.read()) {
+ description(other.description),
+ type(other.type),
+ u64(other.u64.read()) {
pair<uint64_t,uint64_t> a = other.read_avg();
u64.set(a.first);
avgcount.set(a.second);
avgcount2.set(a.second);
}
+ // this functions are not used, for what are they?
void write_schema_json(char *buf, size_t buf_sz) const;
void write_json(char *buf, size_t buf_sz) const;
const char *name;
+ const char *description;
enum perfcounter_type_d type;
atomic64_t u64;
atomic64_t avgcount;
perf_counter_data_any_d& operator=(const perf_counter_data_any_d& other) {
name = other.name;
+ description = other.description;
type = other.type;
pair<uint64_t,uint64_t> a = other.read_avg();
u64.set(a.first);
PerfCountersBuilder(CephContext *cct, const std::string &name,
int first, int last);
~PerfCountersBuilder();
- void add_u64(int key, const char *name);
- void add_u64_counter(int key, const char *name);
- void add_u64_avg(int key, const char *name);
- void add_time(int key, const char *name);
- void add_time_avg(int key, const char *name);
+ void add_u64(int key, const char *name, const char *description = "NO_INFO_FIX");
+ void add_u64_counter(int key, const char *name, const char *description = "NO_INFO_FIX");
+ void add_u64_avg(int key, const char *name, const char *description = "NO_INFO_FIX");
+ void add_time(int key, const char *name, const char *description = "NO_INFO_FIX");
+ void add_time_avg(int key, const char *name, const char *description = "NO_INFO_FIX");
PerfCounters* create_perf_counters();
private:
PerfCountersBuilder(const PerfCountersBuilder &rhs);
PerfCountersBuilder& operator=(const PerfCountersBuilder &rhs);
- void add_impl(int idx, const char *name, int ty);
+ void add_impl(int idx, const char *name, const char *description, int ty);
PerfCounters *m_perf_counters;
};
ASSERT_EQ(sd("{\"test_perfcounter_1\":{\"element1\":13,\"element2\":0.000000000,"
"\"element3\":{\"avgcount\":0,\"sum\":0.000000000}}}"), msg);
ASSERT_EQ("", client.do_request("{ \"prefix\": \"perf schema\", \"format\": \"json\" }", &msg));
- ASSERT_EQ(sd("{\"test_perfcounter_1\":{\"element1\":{\"type\":2},"
- "\"element2\":{\"type\":1},\"element3\":{\"type\":5}}}"), msg);
+
+ ASSERT_EQ(sd("{\"test_perfcounter_1\":{\"element1\":{\"type\":2,\"description\":\"NO_INFO_FIX\"},"
+ "\"element2\":{\"type\":1,\"description\":\"NO_INFO_FIX\"},\"element3\":{\"type\":5,\"description\":\"NO_INFO_FIX\"}}}"), msg);
coll->clear();
ASSERT_EQ("", client.do_request("{ \"prefix\": \"perf dump\", \"format\": \"json\" }", &msg));