Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / backend-list.py @ 12cb6933

History | View | Annotate | Download (3.1 kB)

1 5aeb4e93 Christos Stavrakakis
# Copyright 2012-2013 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 5aeb4e93 Christos Stavrakakis
from synnefo.db.models import Backend
35 b0e7f310 Christos Stavrakakis
from synnefo.webproject.management.commands import ListCommand
36 5aeb4e93 Christos Stavrakakis
from synnefo.api import util
37 1a894bfe Christos Stavrakakis
38 1a894bfe Christos Stavrakakis
39 b0e7f310 Christos Stavrakakis
class Command(ListCommand):
40 b0e7f310 Christos Stavrakakis
    help = "List Ganeti backends"
41 b0e7f310 Christos Stavrakakis
    object_class = Backend
42 1a894bfe Christos Stavrakakis
43 b0e7f310 Christos Stavrakakis
    def get_vms(backend):
44 b0e7f310 Christos Stavrakakis
        return backend.virtual_machines.filter(deleted=False).count()
45 1a894bfe Christos Stavrakakis
46 b0e7f310 Christos Stavrakakis
    def get_mem(backend):
47 b0e7f310 Christos Stavrakakis
        return "%s/%s" % (backend.mfree, backend.mtotal)
48 1a894bfe Christos Stavrakakis
49 b0e7f310 Christos Stavrakakis
    def get_disk(backend):
50 b0e7f310 Christos Stavrakakis
        return "%s/%s" % (backend.dfree, backend.dtotal)
51 1a894bfe Christos Stavrakakis
52 b0e7f310 Christos Stavrakakis
    def get_ips(backend):
53 b0e7f310 Christos Stavrakakis
        free_ips = 0
54 b0e7f310 Christos Stavrakakis
        total_ips = 0
55 5aeb4e93 Christos Stavrakakis
        for network in util.backend_public_networks(backend):
56 5aeb4e93 Christos Stavrakakis
            pool = network.get_pool(with_lock=False)
57 5aeb4e93 Christos Stavrakakis
            free_ips += pool.count_available()
58 5aeb4e93 Christos Stavrakakis
            total_ips += pool.pool_size
59 b0e7f310 Christos Stavrakakis
        return "%s/%s" % (free_ips, total_ips)
60 1a894bfe Christos Stavrakakis
61 b0e7f310 Christos Stavrakakis
    FIELDS = {
62 b0e7f310 Christos Stavrakakis
        "id": ("id", "Backend's unique ID"),
63 b0e7f310 Christos Stavrakakis
        "clustername": ("clustername", "The name of the Ganeti cluster"),
64 b0e7f310 Christos Stavrakakis
        "port": ("port", ""),
65 b0e7f310 Christos Stavrakakis
        "username": ("username", "The RAPI user"),
66 b0e7f310 Christos Stavrakakis
        "drained": ("drained", "Whether backend is marked as drained"),
67 b0e7f310 Christos Stavrakakis
        "offline": ("offline", "Whether backend if marked as offline"),
68 b0e7f310 Christos Stavrakakis
        "vms": (get_vms, "Number of VMs that this backend hosts"),
69 b0e7f310 Christos Stavrakakis
        "ips": (get_ips, "free/total number of public IPs"),
70 b0e7f310 Christos Stavrakakis
        "mem": (get_mem, "free/total memory (MB)"),
71 b0e7f310 Christos Stavrakakis
        "disk": (get_mem, "free/total disk (GB)"),
72 7f79fa49 Christos Stavrakakis
        "hypervisor": ("hypervisor", "The hypervisor the backend is using"),
73 b0e7f310 Christos Stavrakakis
    }
74 1a894bfe Christos Stavrakakis
75 b0e7f310 Christos Stavrakakis
    fields = ["id", "clustername", "port", "username", "drained", "offline",
76 7f79fa49 Christos Stavrakakis
              "vms", "hypervisor", "ips"]