Revision 3a527b3a snf-astakos-app/astakos/im/resources.py
b/snf-astakos-app/astakos/im/resources.py | ||
---|---|---|
31 | 31 |
# interpreted as representing official policies, either expressed |
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 |
from astakos.im.models import Service, Resource
|
|
34 |
from astakos.im.models import Resource |
|
35 | 35 |
from astakos.im.quotas import qh_add_resource_limit, qh_sync_new_resource |
36 | 36 |
import logging |
37 | 37 |
|
38 | 38 |
logger = logging.getLogger(__name__) |
39 | 39 |
|
40 |
fields = ['name', 'desc', 'unit'] |
|
40 | 41 |
|
41 |
def add_resource(service, resource, uplimit): |
|
42 |
try: |
|
43 |
s = Service.objects.get(name=service) |
|
44 |
except Service.DoesNotExist: |
|
45 |
raise Exception("Service %s is not registered." % (service)) |
|
46 | 42 |
|
47 |
name = resource['name'] |
|
43 |
class ResourceException(Exception): |
|
44 |
pass |
|
45 |
|
|
46 |
|
|
47 |
def add_resource(service, resource_dict): |
|
48 |
name = resource_dict.get('name') |
|
49 |
if not name: |
|
50 |
raise ResourceException("Malformed resource dict.") |
|
51 |
|
|
48 | 52 |
try: |
49 | 53 |
r = Resource.objects.get_for_update(name=name) |
50 |
old_uplimit = r.uplimit
|
|
54 |
exists = True
|
|
51 | 55 |
except Resource.DoesNotExist: |
52 |
r = Resource() |
|
53 |
old_uplimit = None
|
|
56 |
r = Resource(uplimit=0)
|
|
57 |
exists = False
|
|
54 | 58 |
|
55 |
r.uplimit = uplimit |
|
56 |
r.service = s |
|
57 |
for key, value in resource.iteritems(): |
|
58 |
setattr(r, key, value) |
|
59 |
r.service = service |
|
60 |
for field in fields: |
|
61 |
value = resource_dict.get(field) |
|
62 |
if value is not None: |
|
63 |
setattr(r, field, value) |
|
59 | 64 |
|
60 | 65 |
r.save() |
66 |
if not exists: |
|
67 |
qh_sync_new_resource(r, 0) |
|
61 | 68 |
|
62 |
if old_uplimit is not None:
|
|
63 |
logger.info("Updated resource %s with limit %s." % (name, uplimit))
|
|
69 |
if exists:
|
|
70 |
logger.info("Updated resource %s." % (name))
|
|
64 | 71 |
else: |
65 |
logger.info("Added resource %s with limit %s." % (name, uplimit)) |
|
66 |
|
|
67 |
if old_uplimit is not None: |
|
68 |
diff = uplimit - old_uplimit |
|
69 |
if diff != 0: |
|
70 |
qh_add_resource_limit(r, diff) |
|
71 |
else: |
|
72 |
qh_sync_new_resource(r, uplimit) |
|
72 |
logger.info("Added resource %s." % (name)) |
|
73 |
return exists |
|
73 | 74 |
|
74 | 75 |
|
75 |
def update_resource(name, uplimit): |
|
76 |
r = Resource.objects.get_for_update(name=name) |
|
77 |
old_uplimit = r.uplimit |
|
78 |
r.uplimit = uplimit |
|
79 |
r.save() |
|
76 |
def update_resource(resource, uplimit): |
|
77 |
old_uplimit = resource.uplimit |
|
78 |
resource.uplimit = uplimit |
|
79 |
resource.save() |
|
80 | 80 |
|
81 |
logger.info("Updated resource %s with limit %s." % (name, uplimit)) |
|
81 |
logger.info("Updated resource %s with limit %s." |
|
82 |
% (resource.name, uplimit)) |
|
82 | 83 |
diff = uplimit - old_uplimit |
83 | 84 |
if diff != 0: |
84 |
qh_add_resource_limit(r, diff) |
|
85 |
qh_add_resource_limit(resource, diff)
|
|
85 | 86 |
|
86 | 87 |
|
87 | 88 |
def get_resources(resources=None, services=None): |
Also available in: Unified diff