Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / backend-list.py @ 56a1134d

History | View | Annotate | Download (3 kB)

1 1a894bfe Christos Stavrakakis
# Copyright 2012 GRNET S.A. All rights reserved.
2 1a894bfe Christos Stavrakakis
#
3 1a894bfe Christos Stavrakakis
# Redistribution and use in source and binary forms, with or
4 1a894bfe Christos Stavrakakis
# without modification, are permitted provided that the following
5 1a894bfe Christos Stavrakakis
# conditions are met:
6 1a894bfe Christos Stavrakakis
#
7 1a894bfe Christos Stavrakakis
#   1. Redistributions of source code must retain the above
8 1a894bfe Christos Stavrakakis
#      copyright notice, this list of conditions and the following
9 1a894bfe Christos Stavrakakis
#      disclaimer.
10 1a894bfe Christos Stavrakakis
#
11 1a894bfe Christos Stavrakakis
#   2. Redistributions in binary form must reproduce the above
12 1a894bfe Christos Stavrakakis
#      copyright notice, this list of conditions and the following
13 1a894bfe Christos Stavrakakis
#      disclaimer in the documentation and/or other materials
14 1a894bfe Christos Stavrakakis
#      provided with the distribution.
15 1a894bfe Christos Stavrakakis
#
16 1a894bfe Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 1a894bfe Christos Stavrakakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 1a894bfe Christos Stavrakakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 1a894bfe Christos Stavrakakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 1a894bfe Christos Stavrakakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 1a894bfe Christos Stavrakakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 1a894bfe Christos Stavrakakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 1a894bfe Christos Stavrakakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 1a894bfe Christos Stavrakakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 1a894bfe Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 1a894bfe Christos Stavrakakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 1a894bfe Christos Stavrakakis
# POSSIBILITY OF SUCH DAMAGE.
28 1a894bfe Christos Stavrakakis
#
29 1a894bfe Christos Stavrakakis
# The views and conclusions contained in the software and
30 1a894bfe Christos Stavrakakis
# documentation are those of the authors and should not be
31 1a894bfe Christos Stavrakakis
# interpreted as representing official policies, either expressed
32 1a894bfe Christos Stavrakakis
# or implied, of GRNET S.A.
33 1a894bfe Christos Stavrakakis
34 1a894bfe Christos Stavrakakis
from optparse import make_option
35 1a894bfe Christos Stavrakakis
from django.core.management.base import BaseCommand, CommandError
36 1a894bfe Christos Stavrakakis
37 1a894bfe Christos Stavrakakis
from synnefo.db.models import Backend
38 1a894bfe Christos Stavrakakis
39 1a894bfe Christos Stavrakakis
40 1a894bfe Christos Stavrakakis
class Command(BaseCommand):
41 1a894bfe Christos Stavrakakis
    help = "List backends"
42 1a894bfe Christos Stavrakakis
43 1a894bfe Christos Stavrakakis
    option_list = BaseCommand.option_list + (
44 1a894bfe Christos Stavrakakis
        make_option('-c',
45 1a894bfe Christos Stavrakakis
            action='store_true',
46 1a894bfe Christos Stavrakakis
            dest='csv',
47 1a894bfe Christos Stavrakakis
            default=False,
48 1a894bfe Christos Stavrakakis
            help="Use pipes to separate values"),
49 1a894bfe Christos Stavrakakis
        )
50 1a894bfe Christos Stavrakakis
51 1a894bfe Christos Stavrakakis
    def handle(self, *args, **options):
52 1a894bfe Christos Stavrakakis
        if args:
53 1a894bfe Christos Stavrakakis
            raise CommandError("Command doesn't accept any arguments")
54 1a894bfe Christos Stavrakakis
55 1a894bfe Christos Stavrakakis
        backends = Backend.objects.order_by('id')
56 1a894bfe Christos Stavrakakis
57 1a894bfe Christos Stavrakakis
        labels = ('id', 'clustername', 'port', 'username', "vm's", 'drained',
58 1a894bfe Christos Stavrakakis
                  'offline')
59 1a894bfe Christos Stavrakakis
        columns = (3, 50, 5, 10, 4, 6, 6)
60 1a894bfe Christos Stavrakakis
61 1a894bfe Christos Stavrakakis
        if not options['csv']:
62 1a894bfe Christos Stavrakakis
            line = ' '.join(l.rjust(w) for l, w in zip(labels, columns))
63 1a894bfe Christos Stavrakakis
            sep = '-' * len(line)
64 1a894bfe Christos Stavrakakis
            self.stdout.write(sep + '\n')
65 1a894bfe Christos Stavrakakis
            self.stdout.write(line + '\n')
66 1a894bfe Christos Stavrakakis
            self.stdout.write(sep + '\n')
67 1a894bfe Christos Stavrakakis
68 1a894bfe Christos Stavrakakis
        for backend in backends:
69 1a894bfe Christos Stavrakakis
            id = str(backend.id)
70 1a894bfe Christos Stavrakakis
            vms = str(backend.virtual_machines.filter(deleted=False).count())
71 1a894bfe Christos Stavrakakis
            fields = (id, backend.clustername, str(backend.port),
72 1a894bfe Christos Stavrakakis
                      backend.username, vms, str(backend.drained),
73 1a894bfe Christos Stavrakakis
                      str(backend.offline))
74 1a894bfe Christos Stavrakakis
75 1a894bfe Christos Stavrakakis
            if options['csv']:
76 1a894bfe Christos Stavrakakis
                line = '|'.join(fields)
77 1a894bfe Christos Stavrakakis
            else:
78 1a894bfe Christos Stavrakakis
                line = ' '.join(f.rjust(w) for f, w in zip(fields, columns))
79 1a894bfe Christos Stavrakakis
80 1a894bfe Christos Stavrakakis
            self.stdout.write(line.encode('utf8') + '\n')