]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #include "rgw_op.h" | |
5 | #include "rgw_usage.h" | |
6 | #include "rgw_rest_usage.h" | |
7 | ||
8 | #include "include/str_list.h" | |
9 | ||
10 | #define dout_subsys ceph_subsys_rgw | |
11 | ||
12 | class RGWOp_Usage_Get : public RGWRESTOp { | |
13 | ||
14 | public: | |
15 | RGWOp_Usage_Get() {} | |
16 | ||
17 | int check_caps(RGWUserCaps& caps) override { | |
18 | return caps.check_cap("usage", RGW_CAP_READ); | |
19 | } | |
20 | void execute() override; | |
21 | ||
22 | const string name() override { return "get_usage"; } | |
23 | }; | |
24 | ||
25 | void RGWOp_Usage_Get::execute() { | |
26 | map<std::string, bool> categories; | |
27 | ||
28 | string uid_str; | |
29 | uint64_t start, end; | |
30 | bool show_entries; | |
31 | bool show_summary; | |
32 | ||
33 | RESTArgs::get_string(s, "uid", uid_str, &uid_str); | |
34 | rgw_user uid(uid_str); | |
35 | ||
36 | RESTArgs::get_epoch(s, "start", 0, &start); | |
37 | RESTArgs::get_epoch(s, "end", (uint64_t)-1, &end); | |
38 | RESTArgs::get_bool(s, "show-entries", true, &show_entries); | |
39 | RESTArgs::get_bool(s, "show-summary", true, &show_summary); | |
40 | ||
41 | string cat_str; | |
42 | RESTArgs::get_string(s, "categories", cat_str, &cat_str); | |
43 | ||
44 | if (!cat_str.empty()) { | |
45 | list<string> cat_list; | |
46 | list<string>::iterator iter; | |
47 | get_str_list(cat_str, cat_list); | |
48 | for (iter = cat_list.begin(); iter != cat_list.end(); ++iter) { | |
49 | categories[*iter] = true; | |
50 | } | |
51 | } | |
52 | ||
53 | http_ret = RGWUsage::show(store, uid, start, end, show_entries, show_summary, &categories, flusher); | |
54 | } | |
55 | ||
56 | class RGWOp_Usage_Delete : public RGWRESTOp { | |
57 | ||
58 | public: | |
59 | RGWOp_Usage_Delete() {} | |
60 | ||
61 | int check_caps(RGWUserCaps& caps) override { | |
62 | return caps.check_cap("usage", RGW_CAP_WRITE); | |
63 | } | |
64 | void execute() override; | |
65 | ||
66 | const string name() override { return "trim_usage"; } | |
67 | }; | |
68 | ||
69 | void RGWOp_Usage_Delete::execute() { | |
70 | string uid_str; | |
71 | uint64_t start, end; | |
72 | ||
73 | RESTArgs::get_string(s, "uid", uid_str, &uid_str); | |
74 | rgw_user uid(uid_str); | |
75 | ||
76 | RESTArgs::get_epoch(s, "start", 0, &start); | |
77 | RESTArgs::get_epoch(s, "end", (uint64_t)-1, &end); | |
78 | ||
79 | if (uid.empty() && | |
80 | !start && | |
81 | end == (uint64_t)-1) { | |
82 | bool remove_all; | |
83 | RESTArgs::get_bool(s, "remove-all", false, &remove_all); | |
84 | if (!remove_all) { | |
85 | http_ret = -EINVAL; | |
86 | return; | |
87 | } | |
88 | } | |
89 | ||
90 | http_ret = RGWUsage::trim(store, uid, start, end); | |
91 | } | |
92 | ||
93 | RGWOp *RGWHandler_Usage::op_get() | |
94 | { | |
95 | return new RGWOp_Usage_Get; | |
96 | } | |
97 | ||
98 | RGWOp *RGWHandler_Usage::op_delete() | |
99 | { | |
100 | return new RGWOp_Usage_Delete; | |
101 | } | |
102 | ||
103 |