Revision 140da2d1

/dev/null
1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

  
34
from optparse import make_option
35
from django.core.management.base import BaseCommand, CommandError
36
from django.db import transaction
37

  
38
from astakos.im.models import sync_all_users, sync_projects
39

  
40
import logging
41
logger = logging.getLogger(__name__)
42

  
43
class Command(BaseCommand):
44
    help = "Inspect quotaholder status and sync"
45

  
46
    option_list = BaseCommand.option_list + (
47
        make_option('--users',
48
                    action='store_true',
49
                    dest='users',
50
                    default=False,
51
                    help="Check if users and their quotas are in sync with quotaholder"),
52
        make_option('--projects',
53
                    action='store_true',
54
                    dest='projects',
55
                    default=False,
56
                    help="Check if projects are in sync with quotaholder"),
57
        make_option('--execute',
58
                    action='store_true',
59
                    dest='execute',
60
                    default=False,
61
                    help="Perform the actual operation"),
62
    )
63

  
64
    @transaction.commit_on_success
65
    def handle(self, *args, **options):
66
        execute = options['execute']
67

  
68
        try:
69
            if options['users']:
70
                log = sync_all_users(execute=execute)
71
            elif options['projects']:
72
                log = sync_projects(execute=execute)
73
        except BaseException, e:
74
            logger.exception(e)
75
            raise CommandError("Syncing failed.")
b/snf-astakos-app/astakos/im/management/commands/astakos-quota-verify.py
1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

  
34
from optparse import make_option
35
from django.core.management.base import BaseCommand, CommandError
36
from django.db import transaction
37

  
38
from astakos.im.models import sync_all_users, sync_projects
39

  
40
import logging
41
logger = logging.getLogger(__name__)
42

  
43
class Command(BaseCommand):
44
    help = "Inspect quotaholder status"
45

  
46
    option_list = BaseCommand.option_list + (
47
        make_option('--check',
48
                    action='store_true',
49
                    dest='check',
50
                    default=True,
51
                    help="Check if quotaholder is in sync with astakos (default)"),
52
        make_option('--sync',
53
                    action='store_true',
54
                    dest='sync',
55
                    default=False,
56
                    help="Sync quotaholder"),
57
    )
58

  
59
    @transaction.commit_on_success
60
    def handle(self, *args, **options):
61
        sync = options['sync']
62

  
63
        try:
64
            log = sync_all_users(sync=sync)
65
        except BaseException, e:
66
            logger.exception(e)
67
            raise CommandError("Syncing failed.")
b/snf-astakos-app/astakos/im/management/commands/project-sync.py
1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

  
34
from optparse import make_option
35
from django.core.management.base import BaseCommand, CommandError
36
from django.db import transaction
37

  
38
from astakos.im.models import sync_projects
39

  
40
import logging
41
logger = logging.getLogger(__name__)
42

  
43
class Command(BaseCommand):
44
    help = "Check for pending project synchronization"
45

  
46
    option_list = BaseCommand.option_list + (
47
        make_option('--check',
48
                    action='store_true',
49
                    dest='check',
50
                    default=True,
51
                    help="Check if projects are in sync with quotaholder (default)"),
52
        make_option('--trigger',
53
                    action='store_true',
54
                    dest='trigger',
55
                    default=False,
56
                    help="Sync projects to quotaholder"),
57
    )
58

  
59
    @transaction.commit_on_success
60
    def handle(self, *args, **options):
61
        trigger = options['trigger']
62

  
63
        try:
64
            log = sync_projects(sync=trigger)
65
        except BaseException, e:
66
            logger.exception(e)
67
            raise CommandError("Syncing failed.")
b/snf-astakos-app/astakos/im/models.py
2121 2121

  
2122 2122
    transaction.commit()
2123 2123

  
2124
def _sync_projects(execute):
2124
def _sync_projects(sync):
2125 2125
    sync_finish_serials()
2126
    if not execute:
2126
    if not sync:
2127 2127
        # Do some reporting and
2128 2128
        return
2129 2129

  
......
2132 2132
    sync_finish_serials([serial])
2133 2133
    post_sync_projects()
2134 2134

  
2135
def sync_projects(execute=True, retries=3, retry_wait=1.0):
2135
def sync_projects(sync=True, retries=3, retry_wait=1.0):
2136 2136
    return lock_sync(_sync_projects,
2137
                     args=[execute],
2137
                     args=[sync],
2138 2138
                     retries=retries,
2139 2139
                     retry_wait=retry_wait)
2140 2140

  
2141
def _sync_users(users, execute):
2141
def _sync_users(users, sync):
2142 2142
    sync_finish_serials()
2143 2143

  
2144 2144
    existing, nonexisting = qh_check_users(users)
2145 2145
    resources = get_resource_names()
2146 2146
    quotas = qh_get_quota_limits(existing, resources)
2147 2147

  
2148
    if execute:
2148
    if sync:
2149 2149
        r = register_users(nonexisting)
2150 2150
        r = register_quotas(users)
2151 2151

  
2152 2152
    # TODO: some proper reporting
2153 2153
    return (existing, nonexisting, quotas)
2154 2154

  
2155
def sync_users(users, execute=True, retries=3, retry_wait=1.0):
2155
def sync_users(users, sync=True, retries=3, retry_wait=1.0):
2156 2156
    return lock_sync(_sync_users,
2157
                     args=[users, execute],
2157
                     args=[users, sync],
2158 2158
                     retries=retries,
2159 2159
                     retry_wait=retry_wait)
2160 2160

  
2161
def sync_all_users(execute=True, retries=3, retry_wait=1.0):
2161
def sync_all_users(sync=True, retries=3, retry_wait=1.0):
2162 2162
    users = AstakosUser.objects.all()
2163
    return sync_users(users, execute, retries=retries, retry_wait=retry_wait)
2163
    return sync_users(users, sync, retries=retries, retry_wait=retry_wait)
2164 2164

  
2165 2165
def lock_sync(func, args=[], kwargs={}, retries=3, retry_wait=1.0):
2166 2166
    transaction.commit()

Also available in: Unified diff