uint64_t num_objects;
RGWStorageStats() : category(RGW_OBJ_CATEGORY_NONE), num_kb(0), num_kb_rounded(0), num_objects(0) {}
+
+ void dump(Formatter *f) const;
};
struct req_state;
}
}
+void RGWStorageStats::dump(Formatter *f) const
+{
+ encode_json("num_kb", num_kb, f);
+ encode_json("num_kb_rounded", num_kb_rounded, f);
+ encode_json("num_objects", num_objects, f);
+}
+
void RGWBucketInfo::dump(Formatter *f) const
{
encode_json("bucket", bucket, f);
RGWUserAdminOpState op_state;
std::string uid;
+ bool fetch_stats;
RESTArgs::get_string(s, "uid", uid, &uid);
+ RESTArgs::get_bool(s, "stats", false, &fetch_stats);
op_state.set_user_id(uid);
+ op_state.set_fetch_stats(fetch_stats);
http_ret = RGWUserAdminOp_User::info(store, op_state, flusher);
}
f->close_section();
}
-static void dump_user_info(Formatter *f, RGWUserInfo &info)
+static void dump_user_info(Formatter *f, RGWUserInfo &info,
+ RGWStorageStats *stats = NULL)
{
f->open_object_section("user_info");
dump_access_keys_info(f, info);
dump_swift_keys_info(f, info);
info.caps.dump(f);
+ if (stats) {
+ encode_json("stats", *stats, f);
+ }
f->close_section();
}
if (ret < 0)
return ret;
+ RGWStorageStats stats;
+ RGWStorageStats *arg_stats = NULL;
+ if (op_state.fetch_stats) {
+ int ret = store->get_user_stats(info.user_id, stats);
+ if (ret < 0) {
+ return ret;
+ }
+
+ arg_stats = &stats;
+ }
+
flusher.start(0);
- dump_user_info(formatter, info);
+ dump_user_info(formatter, info, arg_stats);
flusher.flush();
return 0;
__u8 suspended;
__u8 system;
__u8 exclusive;
+ __u8 fetch_stats;
std::string caps;
RGWObjVersionTracker objv;
uint32_t op_mask;
void set_exclusive(__u8 is_exclusive) {
exclusive = is_exclusive;
}
+ void set_fetch_stats(__u8 is_fetch_stats) {
+ fetch_stats = is_fetch_stats;
+ }
void set_user_info(RGWUserInfo& user_info) {
user_id = user_info.user_id;
info = user_info;
suspended = 0;
system = 0;
exclusive = 0;
+ fetch_stats = 0;
op_mask = 0;
existing_user = false;