Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / resources.py @ 08043775

History | View | Annotate | Download (3.3 kB)

1 b1ea24f3 Giorgos Korfiatis
# Copyright 2013 GRNET S.A. All rights reserved.
2 b1ea24f3 Giorgos Korfiatis
#
3 b1ea24f3 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 b1ea24f3 Giorgos Korfiatis
# without modification, are permitted provided that the following
5 b1ea24f3 Giorgos Korfiatis
# conditions are met:
6 b1ea24f3 Giorgos Korfiatis
#
7 b1ea24f3 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 b1ea24f3 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 b1ea24f3 Giorgos Korfiatis
#      disclaimer.
10 b1ea24f3 Giorgos Korfiatis
#
11 b1ea24f3 Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 b1ea24f3 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 b1ea24f3 Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 b1ea24f3 Giorgos Korfiatis
#      provided with the distribution.
15 b1ea24f3 Giorgos Korfiatis
#
16 b1ea24f3 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 b1ea24f3 Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 b1ea24f3 Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 b1ea24f3 Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 b1ea24f3 Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 b1ea24f3 Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 b1ea24f3 Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 b1ea24f3 Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 b1ea24f3 Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 b1ea24f3 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 b1ea24f3 Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 b1ea24f3 Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 b1ea24f3 Giorgos Korfiatis
#
29 b1ea24f3 Giorgos Korfiatis
# The views and conclusions contained in the software and
30 b1ea24f3 Giorgos Korfiatis
# documentation are those of the authors and should not be
31 b1ea24f3 Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 b1ea24f3 Giorgos Korfiatis
# or implied, of GRNET S.A.
33 b1ea24f3 Giorgos Korfiatis
34 b1ea24f3 Giorgos Korfiatis
from astakos.im.models import Service, Resource
35 9747707e Giorgos Korfiatis
from astakos.im.quotas import qh_add_resource_limit, qh_sync_new_resource
36 9747707e Giorgos Korfiatis
import logging
37 b1ea24f3 Giorgos Korfiatis
38 9747707e Giorgos Korfiatis
logger = logging.getLogger(__name__)
39 b1ea24f3 Giorgos Korfiatis
40 9747707e Giorgos Korfiatis
41 9747707e Giorgos Korfiatis
def add_resource(service, resource, uplimit):
42 b1ea24f3 Giorgos Korfiatis
    try:
43 b1ea24f3 Giorgos Korfiatis
        s = Service.objects.get(name=service)
44 b1ea24f3 Giorgos Korfiatis
    except Service.DoesNotExist:
45 b1ea24f3 Giorgos Korfiatis
        raise Exception("Service %s is not registered." % (service))
46 b1ea24f3 Giorgos Korfiatis
47 9747707e Giorgos Korfiatis
    name = resource['name']
48 9747707e Giorgos Korfiatis
    try:
49 9747707e Giorgos Korfiatis
        r = Resource.objects.get_for_update(name=name)
50 9747707e Giorgos Korfiatis
        old_uplimit = r.uplimit
51 9747707e Giorgos Korfiatis
    except Resource.DoesNotExist:
52 9747707e Giorgos Korfiatis
        r = Resource()
53 9747707e Giorgos Korfiatis
        old_uplimit = None
54 b1ea24f3 Giorgos Korfiatis
55 9747707e Giorgos Korfiatis
    r.uplimit = uplimit
56 75380308 Kostas Papadimitriou
    r.service = service
57 9747707e Giorgos Korfiatis
    for key, value in resource.iteritems():
58 9747707e Giorgos Korfiatis
        setattr(r, key, value)
59 b1ea24f3 Giorgos Korfiatis
60 9747707e Giorgos Korfiatis
    r.save()
61 b1ea24f3 Giorgos Korfiatis
62 9747707e Giorgos Korfiatis
    if old_uplimit is not None:
63 9747707e Giorgos Korfiatis
        logger.info("Updated resource %s with limit %s." % (name, uplimit))
64 9747707e Giorgos Korfiatis
    else:
65 9747707e Giorgos Korfiatis
        logger.info("Added resource %s with limit %s." % (name, uplimit))
66 b1ea24f3 Giorgos Korfiatis
67 9747707e Giorgos Korfiatis
    if old_uplimit is not None:
68 9747707e Giorgos Korfiatis
        diff = uplimit - old_uplimit
69 9747707e Giorgos Korfiatis
        if diff != 0:
70 ae16bcad Giorgos Korfiatis
            qh_add_resource_limit(r, diff)
71 9747707e Giorgos Korfiatis
    else:
72 ae16bcad Giorgos Korfiatis
        qh_sync_new_resource(r, uplimit)
73 720955ff Giorgos Korfiatis
74 720955ff Giorgos Korfiatis
75 720955ff Giorgos Korfiatis
def update_resource(name, uplimit):
76 720955ff Giorgos Korfiatis
    r = Resource.objects.get_for_update(name=name)
77 720955ff Giorgos Korfiatis
    old_uplimit = r.uplimit
78 720955ff Giorgos Korfiatis
    r.uplimit = uplimit
79 720955ff Giorgos Korfiatis
    r.save()
80 720955ff Giorgos Korfiatis
81 720955ff Giorgos Korfiatis
    logger.info("Updated resource %s with limit %s." % (name, uplimit))
82 720955ff Giorgos Korfiatis
    diff = uplimit - old_uplimit
83 720955ff Giorgos Korfiatis
    if diff != 0:
84 ae16bcad Giorgos Korfiatis
        qh_add_resource_limit(r, diff)
85 08043775 Giorgos Korfiatis
86 08043775 Giorgos Korfiatis
87 08043775 Giorgos Korfiatis
def get_resources(resources=None, services=None):
88 08043775 Giorgos Korfiatis
    if resources is None:
89 08043775 Giorgos Korfiatis
        rs = Resource.objects.all()
90 08043775 Giorgos Korfiatis
    else:
91 08043775 Giorgos Korfiatis
        rs = Resource.objects.filter(name__in=resources)
92 08043775 Giorgos Korfiatis
93 08043775 Giorgos Korfiatis
    if services is not None:
94 08043775 Giorgos Korfiatis
        rs = rs.filter(service__in=services)
95 08043775 Giorgos Korfiatis
96 08043775 Giorgos Korfiatis
    resource_dict = {}
97 08043775 Giorgos Korfiatis
    for r in rs:
98 08043775 Giorgos Korfiatis
        resource_dict[r.full_name()] = r.get_info()
99 08043775 Giorgos Korfiatis
100 08043775 Giorgos Korfiatis
    return resource_dict