From bbaa11309d4224e60befcc2887913715095c3fd3 Mon Sep 17 00:00:00 2001 From: Ved-vampir Date: Fri, 20 Feb 2015 18:04:49 +0300 Subject: [PATCH] common: add description in PerfCounter class Signed-off-by: Kiseleva Alyona --- src/common/perf_counters.cc | 24 +++++++++++++----------- src/common/perf_counters.h | 29 +++++++++++++++++------------ src/test/perf_counters.cc | 5 +++-- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/common/perf_counters.cc b/src/common/perf_counters.cc index 61242727f3bc..f520e1fb1756 100644 --- a/src/common/perf_counters.cc +++ b/src/common/perf_counters.cc @@ -292,6 +292,7 @@ void PerfCounters::dump_formatted(Formatter *f, bool schema, 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) { @@ -356,32 +357,32 @@ PerfCountersBuilder::~PerfCountersBuilder() 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); @@ -390,6 +391,7 @@ void PerfCountersBuilder::add_impl(int idx, const char *name, int ty) &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; } diff --git a/src/common/perf_counters.h b/src/common/perf_counters.h index 8850138a23fa..c11e8c2a6bdf 100644 --- a/src/common/perf_counters.h +++ b/src/common/perf_counters.h @@ -114,25 +114,29 @@ private: 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 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; @@ -149,6 +153,7 @@ private: perf_counter_data_any_d& operator=(const perf_counter_data_any_d& other) { name = other.name; + description = other.description; type = other.type; pair a = other.read_avg(); u64.set(a.first); @@ -234,16 +239,16 @@ public: 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; }; diff --git a/src/test/perf_counters.cc b/src/test/perf_counters.cc index 9b6bd71b5144..1a93db42f784 100644 --- a/src/test/perf_counters.cc +++ b/src/test/perf_counters.cc @@ -181,8 +181,9 @@ TEST(PerfCounters, MultiplePerfCounters) { 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)); -- 2.47.3