std::string counter;
cmd_getval(cmdmap, "logger", logger);
cmd_getval(cmdmap, "counter", counter);
- _perf_counters_collection->dump_formatted(f, false, false, logger, counter);
+ _perf_counters_collection->dump_formatted(f, false, select_labeled_t::unlabeled,
+ logger, counter);
}
else if (command == "perfcounters_schema" || command == "2" ||
command == "perf schema") {
- _perf_counters_collection->dump_formatted(f, true, false);
+ _perf_counters_collection->dump_formatted(f, true, select_labeled_t::unlabeled);
}
else if (command == "counter dump") {
- _perf_counters_collection->dump_formatted(f, false, true);
+ _perf_counters_collection->dump_formatted(f, false, select_labeled_t::labeled);
}
else if (command == "counter schema") {
- _perf_counters_collection->dump_formatted(f, true, true);
+ _perf_counters_collection->dump_formatted(f, true, select_labeled_t::labeled);
}
else if (command == "perf histogram dump") {
std::string logger;
Formatter *f,
bool schema,
bool histograms,
- bool dump_labeled,
+ select_labeled_t dump_labeled,
const std::string &logger,
const std::string &counter) const
{
f->open_object_section("perfcounter_collection");
-
- if (dump_labeled) {
+
+ if (dump_labeled == select_labeled_t::labeled) {
std::string prev_key_name;
for (auto l = m_loggers.begin(); l != m_loggers.end(); ++l) {
std::string_view key_name = ceph::perf_counters::key_name((*l)->get_name());
prev_key_name = key_name;
f->open_array_section(key_name);
- (*l)->dump_formatted_generic(f, schema, histograms, true, "");
+ (*l)->dump_formatted_generic(f, schema, histograms, select_labeled_t::labeled, "");
} else {
- (*l)->dump_formatted_generic(f, schema, histograms, true, "");
+ (*l)->dump_formatted_generic(f, schema, histograms, select_labeled_t::labeled, "");
}
}
if (!m_loggers.empty()) {
f->close_section(); // final array section
}
} else {
- for (auto l = m_loggers.begin(); l != m_loggers.end(); ++l) {
- // Optionally filter on logger name, pass through counter filter
- if (logger.empty() || (*l)->get_name() == logger) {
- (*l)->dump_formatted_generic(f, schema, histograms, false, counter);
+ // unlabeled
+ if (logger.empty()) {
+ // dump all loggers
+ for (auto& l : m_loggers) {
+ l->dump_formatted_generic(f, schema, histograms,
+ select_labeled_t::unlabeled, counter);
+ }
+ } else {
+ // dump only specified logger
+ auto l = m_loggers.find(logger);
+ if (l != m_loggers.end()) {
+ (*l)->dump_formatted_generic(f, schema, histograms,
+ select_labeled_t::unlabeled, counter);
}
}
}
}
}
+
void PerfCounters::dump_formatted_generic(Formatter *f, bool schema,
- bool histograms, bool dump_labeled, const std::string &counter) const
+ bool histograms, select_labeled_t dump_labeled,
+ const std::string &counter) const
{
- if (dump_labeled) {
+ if (dump_labeled == select_labeled_t::labeled) {
f->open_object_section(""); // should be enclosed by array
f->open_object_section("labels");
for (auto label : ceph::perf_counters::key_labels(m_name)) {
f->open_object_section(m_name.c_str());
}
-
+
for (perf_counter_data_vec_t::const_iterator d = m_data.begin();
d != m_data.end(); ++d) {
if (!counter.empty() && counter != d->name) {
f->dump_string("nick", "");
}
f->dump_int("priority", get_adjusted_priority(d->prio));
-
+
if (d->unit == UNIT_NONE) {
f->dump_string("units", "none");
} else if (d->unit == UNIT_BYTES) {
}
}
}
- if (dump_labeled) {
+ if (dump_labeled == select_labeled_t::labeled) {
f->close_section(); // counters
}
f->close_section();
UNIT_NONE
};
+/// Used to specify whether to dump the labeled counters
+enum class select_labeled_t {
+ labeled,
+ unlabeled
+};
+
/* Class for constructing a PerfCounters object.
*
* This class performs some validation that the parameters we have supplied are
void hinc(int idx, int64_t x, int64_t y);
void reset();
- void dump_formatted(ceph::Formatter *f, bool schema, bool dump_labeled,
- const std::string &counter = "") const {
+ void dump_formatted(
+ ceph::Formatter *f,
+ bool schema,
+ select_labeled_t dump_labeled,
+ const std::string &counter = "") const {
dump_formatted_generic(f, schema, false, dump_labeled, counter);
}
- void dump_formatted_histograms(ceph::Formatter *f, bool schema,
- const std::string &counter = "") const {
- dump_formatted_generic(f, schema, true, false, counter);
+ void dump_formatted_histograms(
+ ceph::Formatter *f,
+ bool schema,
+ const std::string &counter = "") const {
+ dump_formatted_generic(f, schema, true, select_labeled_t::unlabeled, counter);
}
std::pair<uint64_t, uint64_t> get_tavg_ns(int idx) const;
PerfCounters(const PerfCounters &rhs);
PerfCounters& operator=(const PerfCounters &rhs);
void dump_formatted_generic(ceph::Formatter *f, bool schema, bool histograms,
- bool dump_labeled,
+ select_labeled_t dump_labeled,
const std::string &counter = "") const;
typedef std::vector<perf_counter_data_any_d> perf_counter_data_vec_t;
// a parameter of "all" resets all counters
bool reset(std::string_view name);
- void dump_formatted(ceph::Formatter *f, bool schema, bool dump_labeled,
- const std::string &logger = "",
- const std::string &counter = "") const {
- dump_formatted_generic(f, schema, false, dump_labeled, logger, counter);
+ void dump_formatted(
+ ceph::Formatter *f,
+ bool schema,
+ select_labeled_t dump_labeled,
+ const std::string &logger = "",
+ const std::string &counter = "") const {
+ dump_formatted_generic(
+ f, schema, false, dump_labeled, logger, counter);
}
- void dump_formatted_histograms(ceph::Formatter *f, bool schema,
- const std::string &logger = "",
- const std::string &counter = "") const {
- dump_formatted_generic(f, schema, true, false, logger, counter);
+ void dump_formatted_histograms(
+ ceph::Formatter *f,
+ bool schema,
+ const std::string &logger = "",
+ const std::string &counter = "") const {
+ dump_formatted_generic(
+ f, schema, true, select_labeled_t::unlabeled, logger, counter);
}
// A reference to a perf_counter_data_any_d, with an accompanying
void with_counters(std::function<void(const CounterMap &)>) const;
private:
- void dump_formatted_generic(ceph::Formatter *f, bool schema, bool histograms,
- bool dump_labeled,
- const std::string &logger = "",
- const std::string &counter = "") const;
+ void dump_formatted_generic(
+ Formatter *f,
+ bool schema,
+ bool histograms,
+ select_labeled_t dump_labeled,
+ const std::string &logger,
+ const std::string &counter) const;
perf_counters_set_t m_loggers;
return perf_impl.reset(name);
}
void PerfCountersCollection::dump_formatted(ceph::Formatter *f, bool schema,
- bool dump_labeled,
+ select_labeled_t dump_labeled,
const std::string &logger,
const std::string &counter)
{
void clear();
bool reset(const std::string &name);
- void dump_formatted(ceph::Formatter *f, bool schema, bool dump_labeled,
+ void dump_formatted(ceph::Formatter *f, bool schema,
+ select_labeled_t dump_labeled,
const std::string &logger = "",
const std::string &counter = "");
void dump_formatted_histograms(ceph::Formatter *f, bool schema,
cmd_getval(cmdmap, "logger", logger);
cmd_getval(cmdmap, "counter", counter);
- crimson::common::local_perf_coll().dump_formatted(f.get(), false, false, logger, counter);
+ crimson::common::local_perf_coll().dump_formatted(f.get(), false,
+ select_labeled_t::unlabeled, logger, counter);
return seastar::make_ready_future<tell_result_t>(std::move(f));
}
};
}
void PerfCountersCollection::dump_formatted(ceph::Formatter *f, bool schema,
- bool dump_labeled,
+ select_labeled_t dump_labeled,
const std::string &logger,
const std::string &counter)
{
PerfCountersCollection();
~PerfCountersCollection();
PerfCountersCollectionImpl* get_perf_collection();
- void dump_formatted(ceph::Formatter *f, bool schema, bool dump_labeled,
+ void dump_formatted(ceph::Formatter *f, bool schema,
+ select_labeled_t dump_labeled,
const std::string &logger = "",
const std::string &counter = "");
};
f->close_section();
}
f->open_object_section("rocksdbstore_perf_counters");
- logger->dump_formatted(f, false, false);
+ logger->dump_formatted(f, false, select_labeled_t::unlabeled);
f->close_section();
}
if (cct->_conf->rocksdb_collect_memory_stats) {
auto&& appd = getdata(vfs);
JSONFormatter f(false);
f.open_object_section("ceph_perf");
- appd.logger->dump_formatted(&f, false, false);
- appd.striper_logger->dump_formatted(&f, false, false);
+ appd.logger->dump_formatted(&f, false, select_labeled_t::unlabeled);
+ appd.striper_logger->dump_formatted(&f, false, select_labeled_t::unlabeled);
f.close_section();
{
CachedStackStringStream css;
ss << "\"image\": \"" << m_image_ctx.name << "\",";
bl.append(ss);
bl.append("\"stats\": ");
- m_image_ctx.cct->get_perfcounters_collection()->dump_formatted(f, false, false);
+ m_image_ctx.cct->get_perfcounters_collection()->dump_formatted(
+ f, false, select_labeled_t::unlabeled);
f->flush(bl);
bl.append(",\n\"histograms\": ");
m_image_ctx.cct->get_perfcounters_collection()->dump_formatted_histograms(f, 0);
void BlueFS::dump_perf_counters(Formatter *f)
{
f->open_object_section("bluefs_perf_counters");
- logger->dump_formatted(f, false, false);
+ logger->dump_formatted(f, false, select_labeled_t::unlabeled);
f->close_section();
}
int flush_cache(std::ostream *os = NULL) override;
void dump_perf_counters(ceph::Formatter *f) override {
f->open_object_section("perf_counters");
- logger->dump_formatted(f, false, false);
+ logger->dump_formatted(f, false, select_labeled_t::unlabeled);
f->close_section();
}
}
void dump_perf_counters(ceph::Formatter *f) override {
f->open_object_section("perf_counters");
- logger->dump_formatted(f, false, false);
+ logger->dump_formatted(f, false, select_labeled_t::unlabeled);
f->close_section();
}
void get_db_statistics(ceph::Formatter *f) override {
Formatter* f;
f = Formatter::create("json-pretty");
- g_ceph_context->get_perfcounters_collection()->dump_formatted(f, false, false);
+ g_ceph_context->get_perfcounters_collection()->dump_formatted(
+ f, false, select_labeled_t::unlabeled);
ostr << ">>>>>>>>>>>>> PERFCOUNTERS BEGIN <<<<<<<<<<<<" << std::endl;
f->flush(ostr);
ostr << ">>>>>>>>>>>>> PERFCOUNTERS END <<<<<<<<<<<<" << std::endl;
Formatter* f = Formatter::create(
"json-pretty", "json-pretty", "json-pretty");
f->open_object_section("perf_output");
- cct->get_perfcounters_collection()->dump_formatted(f, false, false);
+ cct->get_perfcounters_collection()->dump_formatted(
+ f, false, select_labeled_t::unlabeled);
if (g_conf()->rocksdb_perf) {
f->open_object_section("rocksdb_perf");
os->get_db_statistics(f);
if (debug) {
ostringstream ostr;
Formatter* f = Formatter::create("json-pretty", "json-pretty", "json-pretty");
- cct->get_perfcounters_collection()->dump_formatted(f, false, false);
+ cct->get_perfcounters_collection()->dump_formatted(
+ f, false, select_labeled_t::unlabeled);
ostr << "ceph-objectstore-tool ";
f->flush(ostr);
delete f;