std::string nick;
enum perfcounter_type_d type;
+ // For older clients that did not send priority, pretend everything
+ // is "useful" so that mgr plugins filtering on prio will get some
+ // data (albeit probably more than they wanted)
+ uint8_t priority = PerfCountersBuilder::PRIO_USEFUL;
+
void encode(bufferlist &bl) const
{
// TODO: decide whether to drop the per-type
// encoding here, we could rely on the MgrReport
// verisoning instead.
- ENCODE_START(1, 1, bl);
+ ENCODE_START(2, 1, bl);
::encode(path, bl);
::encode(description, bl);
::encode(nick, bl);
static_assert(sizeof(type) == 1, "perfcounter_type_d must be one byte");
::encode((uint8_t)type, bl);
+ ::encode(priority, bl);
ENCODE_FINISH(bl);
}
void decode(bufferlist::iterator &p)
{
- DECODE_START(1, p);
+ DECODE_START(2, p);
::decode(path, p);
::decode(description, p);
::decode(nick, p);
::decode((uint8_t&)type, p);
+ if (struct_v >= 2) {
+ ::decode(priority, p);
+ }
DECODE_FINISH(p);
}
};
type.nick = data.nick;
}
type.type = data.type;
+ type.priority = data.prio;
report->declare_types.push_back(std::move(type));
session->declared.insert(path);
}
}
PyFormatter f;
- f.open_object_section("perf_schema");
-
if (!daemons.empty()) {
for (auto statepair : daemons) {
auto key = statepair.first;
f.open_object_section(daemon_name.str().c_str());
Mutex::Locker l(state->lock);
- for (const auto &ctr_inst_iter : state->perf_counters.instances) {
- const auto &typestr = ctr_inst_iter.first;
-
- f.open_object_section(typestr.c_str());
- auto type = state->perf_counters.types[typestr];
+ for (auto ctr_inst_iter : state->perf_counters.instances) {
+ const auto &counter_name = ctr_inst_iter.first;
+ f.open_object_section(counter_name.c_str());
+ auto type = state->perf_counters.types[counter_name];
f.dump_string("description", type.description);
if (!type.nick.empty()) {
f.dump_string("nick", type.nick);
}
f.dump_unsigned("type", type.type);
+ f.dump_unsigned("priority", type.priority);
f.close_section();
}
f.close_section();
dout(4) << __func__ << ": No daemon state found for "
<< svc_type << "." << svc_id << ")" << dendl;
}
- f.close_section();
return f.get();
}