Revision 5afce44d
b/docs/quota-api-guide.rst | ||
---|---|---|
90 | 90 |
} |
91 | 91 |
|
92 | 92 |
Get Quotas per Service |
93 |
.......... |
|
93 |
......................
|
|
94 | 94 |
|
95 | 95 |
**GET** /astakos/api/service_quotas |
96 | 96 |
|
... | ... | |
100 | 100 |
X-Auth-Token Service authentication token |
101 | 101 |
==================== ============================ |
102 | 102 |
|
103 |
Optional GET parameter: ?user=<uuid> |
|
104 |
|
|
103 | 105 |
**Normal Response Code**: 200 |
104 | 106 |
|
105 | 107 |
**Error Response Codes**: |
b/snf-astakos-app/astakos/api/quotas.py | ||
---|---|---|
63 | 63 |
@api.api_method(http_method='GET', token_required=True, user_required=False) |
64 | 64 |
@service_from_token |
65 | 65 |
def service_quotas(request): |
66 |
result = get_service_quotas(request.service_instance) |
|
66 |
user = request.GET.get('user') |
|
67 |
users = [user] if user is not None else None |
|
68 |
result = get_service_quotas(request.service_instance, users=users) |
|
67 | 69 |
return json_response(result) |
68 | 70 |
|
69 | 71 |
|
b/snf-astakos-app/astakos/im/quotas.py | ||
---|---|---|
68 | 68 |
return quota |
69 | 69 |
|
70 | 70 |
|
71 |
def get_counters(users, resources=None, sources=None):
|
|
71 |
def get_counters(users, resources=None, sources=None): |
|
72 | 72 |
uuids = [user.uuid for user in users] |
73 | 73 |
|
74 |
counters = qh.get_holder_quota(holders=uuids,
|
|
75 |
resources=resources,
|
|
76 |
sources=sources)
|
|
74 |
counters = qh.get_quota(holders=uuids, |
|
75 |
resources=resources, |
|
76 |
sources=sources) |
|
77 | 77 |
return counters |
78 | 78 |
|
79 | 79 |
|
... | ... | |
95 | 95 |
return quotas[user.uuid] |
96 | 96 |
|
97 | 97 |
|
98 |
def get_service_quotas(service): |
|
98 |
def get_service_quotas(service, users=None):
|
|
99 | 99 |
resources = Resource.objects.filter(service=service.name) |
100 | 100 |
resource_names = [r.name for r in resources] |
101 |
counters = qh.get_resource_quota(resource_names)
|
|
101 |
counters = qh.get_quota(holders=users, resources=resource_names)
|
|
102 | 102 |
return transform_data(counters) |
103 | 103 |
|
104 | 104 |
|
b/snf-astakos-app/astakos/quotaholder/callpoint.py | ||
---|---|---|
52 | 52 |
|
53 | 53 |
class QuotaholderDjangoDBCallpoint(object): |
54 | 54 |
|
55 |
def get_holder_quota(self, holders=None, sources=None, resources=None): |
|
56 |
holdings = Holding.objects.filter(holder__in=holders) |
|
55 |
def get_quota(self, holders=None, sources=None, resources=None): |
|
56 |
holdings = Holding.objects.all() |
|
57 |
|
|
58 |
if holders is not None: |
|
59 |
holdings = holdings.filter(holder__in=holders) |
|
57 | 60 |
|
58 | 61 |
if sources is not None: |
59 | 62 |
holdings = holdings.filter(source__in=sources) |
... | ... | |
69 | 72 |
|
70 | 73 |
return quotas |
71 | 74 |
|
72 |
def get_resource_quota(self, resources, sources=None): |
|
73 |
holdings = Holding.objects.filter(resource__in=resources) |
|
74 |
|
|
75 |
if sources is not None: |
|
76 |
holdings = holdings.filter(source__in=sources) |
|
77 |
|
|
78 |
quotas = {} |
|
79 |
for holding in holdings: |
|
80 |
key = (holding.holder, holding.source, holding.resource) |
|
81 |
value = (holding.limit, holding.imported_min, holding.imported_max) |
|
82 |
quotas[key] = value |
|
83 |
|
|
84 |
return quotas |
|
85 |
|
|
86 | 75 |
def _get_holdings_for_update(self, holding_keys): |
87 | 76 |
holding_keys = sorted(holding_keys) |
88 | 77 |
holdings = {} |
Also available in: Unified diff