return os;
}
-struct CapInfoPayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_CAP_INFO;
+struct ClientMetricPayloadBase {
+ ClientMetricPayloadBase(ClientMetricType type) : metric_type(type) {}
+ ClientMetricType get_type() const {
+ return metric_type;
+ }
+
+ void print_type(ostream *out) const {
+ *out << metric_type;
+ }
+
+ private:
+ ClientMetricType metric_type;
+};
+
+struct CapInfoPayload : public ClientMetricPayloadBase {
uint64_t cap_hits = 0;
uint64_t cap_misses = 0;
uint64_t nr_caps = 0;
- CapInfoPayload() { }
+ CapInfoPayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_CAP_INFO) { }
CapInfoPayload(uint64_t cap_hits, uint64_t cap_misses, uint64_t nr_caps)
- : cap_hits(cap_hits), cap_misses(cap_misses), nr_caps(nr_caps) {
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_CAP_INFO),
+ cap_hits(cap_hits), cap_misses(cap_misses), nr_caps(nr_caps) {
}
void encode(bufferlist &bl) const {
}
};
-struct ReadLatencyPayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_READ_LATENCY;
-
+struct ReadLatencyPayload : public ClientMetricPayloadBase {
utime_t lat;
- ReadLatencyPayload() { }
+ ReadLatencyPayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_READ_LATENCY) { }
ReadLatencyPayload(utime_t lat)
- : lat(lat) {
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_READ_LATENCY), lat(lat) {
}
void encode(bufferlist &bl) const {
}
};
-struct WriteLatencyPayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_WRITE_LATENCY;
-
+struct WriteLatencyPayload : public ClientMetricPayloadBase {
utime_t lat;
- WriteLatencyPayload() { }
+ WriteLatencyPayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_WRITE_LATENCY) { }
WriteLatencyPayload(utime_t lat)
- : lat(lat) {
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_WRITE_LATENCY), lat(lat) {
}
void encode(bufferlist &bl) const {
}
};
-struct MetadataLatencyPayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_METADATA_LATENCY;
-
+struct MetadataLatencyPayload : public ClientMetricPayloadBase {
utime_t lat;
- MetadataLatencyPayload() { }
+ MetadataLatencyPayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_METADATA_LATENCY) { }
MetadataLatencyPayload(utime_t lat)
- : lat(lat) {
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_METADATA_LATENCY), lat(lat) {
}
void encode(bufferlist &bl) const {
}
};
-struct DentryLeasePayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_DENTRY_LEASE;
-
+struct DentryLeasePayload : public ClientMetricPayloadBase {
uint64_t dlease_hits = 0;
uint64_t dlease_misses = 0;
uint64_t nr_dentries = 0;
- DentryLeasePayload() { }
+ DentryLeasePayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_DENTRY_LEASE) { }
DentryLeasePayload(uint64_t dlease_hits, uint64_t dlease_misses, uint64_t nr_dentries)
- : dlease_hits(dlease_hits), dlease_misses(dlease_misses), nr_dentries(nr_dentries) {
- }
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_DENTRY_LEASE),
+ dlease_hits(dlease_hits), dlease_misses(dlease_misses), nr_dentries(nr_dentries) { }
void encode(bufferlist &bl) const {
using ceph::encode;
}
};
-struct OpenedFilesPayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_OPENED_FILES;
-
+struct OpenedFilesPayload : public ClientMetricPayloadBase {
uint64_t opened_files = 0;
uint64_t total_inodes = 0;
- OpenedFilesPayload() { }
+ OpenedFilesPayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_FILES) { }
OpenedFilesPayload(uint64_t opened_files, uint64_t total_inodes)
- : opened_files(opened_files), total_inodes(total_inodes) {
- }
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_FILES),
+ opened_files(opened_files), total_inodes(total_inodes) { }
void encode(bufferlist &bl) const {
using ceph::encode;
}
};
-struct PinnedIcapsPayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_PINNED_ICAPS;
-
+struct PinnedIcapsPayload : public ClientMetricPayloadBase {
uint64_t pinned_icaps = 0;
uint64_t total_inodes = 0;
- PinnedIcapsPayload() { }
+ PinnedIcapsPayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_PINNED_ICAPS) { }
PinnedIcapsPayload(uint64_t pinned_icaps, uint64_t total_inodes)
- : pinned_icaps(pinned_icaps), total_inodes(total_inodes) {
- }
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_PINNED_ICAPS),
+ pinned_icaps(pinned_icaps), total_inodes(total_inodes) { }
void encode(bufferlist &bl) const {
using ceph::encode;
}
};
-struct OpenedInodesPayload {
- static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_OPENED_INODES;
-
+struct OpenedInodesPayload : public ClientMetricPayloadBase {
uint64_t opened_inodes = 0;
uint64_t total_inodes = 0;
- OpenedInodesPayload() { }
+ OpenedInodesPayload()
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_INODES) { }
OpenedInodesPayload(uint64_t opened_inodes, uint64_t total_inodes)
- : opened_inodes(opened_inodes), total_inodes(total_inodes) {
- }
+ : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_INODES),
+ opened_inodes(opened_inodes), total_inodes(total_inodes) { }
void encode(bufferlist &bl) const {
using ceph::encode;
}
};
-struct UnknownPayload {
- static const ClientMetricType METRIC_TYPE = static_cast<ClientMetricType>(-1);
-
- UnknownPayload() { }
+struct UnknownPayload : public ClientMetricPayloadBase {
+ UnknownPayload()
+ : ClientMetricPayloadBase(static_cast<ClientMetricType>(-1)) { }
+ UnknownPayload(ClientMetricType metric_type)
+ : ClientMetricPayloadBase(metric_type) { }
void encode(bufferlist &bl) const {
}
template <typename ClientMetricPayload>
inline void operator()(const ClientMetricPayload &payload) const {
using ceph::encode;
- encode(static_cast<uint32_t>(ClientMetricPayload::METRIC_TYPE), m_bl);
+ encode(static_cast<uint32_t>(payload.get_type()), m_bl);
payload.encode(m_bl);
}
template <typename ClientMetricPayload>
inline void operator()(const ClientMetricPayload &payload) const {
- ClientMetricType metric_type = ClientMetricPayload::METRIC_TYPE;
- m_formatter->dump_string("client_metric_type", stringify(metric_type));
+ m_formatter->dump_string("client_metric_type", stringify(payload.get_type()));
payload.dump(m_formatter);
}
template <typename ClientMetricPayload>
inline void operator()(const ClientMetricPayload &payload) const {
- ClientMetricType metric_type = ClientMetricPayload::METRIC_TYPE;
- *_out << "[client_metric_type: " << metric_type;
+ *_out << "[client_metric_type: ";
+ payload.print_type(_out);
+ *_out << " ";
payload.print(_out);
*_out << "]";
}
payload = OpenedInodesPayload();
break;
default:
- payload = UnknownPayload();
+ payload = UnknownPayload(static_cast<ClientMetricType>(metric_type));
break;
}
}
void MetricsHandler::handle_payload(Session *session, const CapInfoPayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(CapInfoPayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", hits=" << payload.cap_hits << ", misses="
<< payload.cap_misses << dendl;
}
void MetricsHandler::handle_payload(Session *session, const ReadLatencyPayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(ReadLatencyPayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", latency=" << payload.lat << dendl;
auto it = client_metrics_map.find(session->info.inst);
}
void MetricsHandler::handle_payload(Session *session, const WriteLatencyPayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(WriteLatencyPayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", latency=" << payload.lat << dendl;
auto it = client_metrics_map.find(session->info.inst);
}
void MetricsHandler::handle_payload(Session *session, const MetadataLatencyPayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(MetadataLatencyPayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", latency=" << payload.lat << dendl;
auto it = client_metrics_map.find(session->info.inst);
}
void MetricsHandler::handle_payload(Session *session, const DentryLeasePayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(DentryLeasePayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", hits=" << payload.dlease_hits << ", misses="
<< payload.dlease_misses << dendl;
}
void MetricsHandler::handle_payload(Session *session, const OpenedFilesPayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(OpenedFilesPayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", opened_files=" << payload.opened_files
<< ", total_inodes=" << payload.total_inodes << dendl;
}
void MetricsHandler::handle_payload(Session *session, const PinnedIcapsPayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(PinnedIcapsPayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", pinned_icaps=" << payload.pinned_icaps
<< ", total_inodes=" << payload.total_inodes << dendl;
}
void MetricsHandler::handle_payload(Session *session, const OpenedInodesPayload &payload) {
- dout(20) << ": type=" << static_cast<ClientMetricType>(OpenedInodesPayload::METRIC_TYPE)
+ dout(20) << ": type=" << payload.get_type()
<< ", session=" << session << ", opened_inodes=" << payload.opened_inodes
<< ", total_inodes=" << payload.total_inodes << dendl;