f->dump_int("cap_misses", cap_misses);
f->dump_int("num_caps", nr_caps);
}
+
+ void print(ostream *out) const {
+ *out << "cap_hits: " << cap_hits << " "
+ << "cap_misses: " << cap_misses << " "
+ << "num_caps: " << nr_caps;
+ }
};
struct ReadLatencyPayload {
void dump(Formatter *f) const {
f->dump_int("latency", lat);
}
+
+ void print(ostream *out) const {
+ *out << "latency: " << lat;
+ }
};
struct WriteLatencyPayload {
void dump(Formatter *f) const {
f->dump_int("latency", lat);
}
+
+ void print(ostream *out) const {
+ *out << "latency: " << lat;
+ }
};
struct MetadataLatencyPayload {
void dump(Formatter *f) const {
f->dump_int("latency", lat);
}
+
+ void print(ostream *out) const {
+ *out << "latency: " << lat;
+ }
};
struct UnknownPayload {
void dump(Formatter *f) const {
}
+
+ void print(ostream *out) const {
+ }
};
typedef boost::variant<CapInfoPayload,
Formatter *m_formatter;
};
+ class PrintPayloadVisitor : public boost::static_visitor<void> {
+ public:
+ explicit PrintPayloadVisitor(ostream *out) : _out(out) {
+ }
+
+ template <typename ClientMetricPayload>
+ inline void operator()(const ClientMetricPayload &payload) const {
+ ClientMetricType metric_type = ClientMetricPayload::METRIC_TYPE;
+ *_out << "[client_metric_type: " << metric_type;
+ payload.print(_out);
+ *_out << "]";
+ }
+
+ private:
+ ostream *_out;
+ };
+
void encode(bufferlist &bl) const {
boost::apply_visitor(EncodePayloadVisitor(bl), payload);
}
apply_visitor(DumpPayloadVisitor(f), payload);
}
+ void print(ostream *out) const {
+ apply_visitor(PrintPayloadVisitor(out), payload);
+ }
+
ClientMetricPayload payload;
};
WRITE_CLASS_ENCODER(ClientMetricMessage);