tables.py 8.88 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# Copyright 2014 Budapest University of Technology and Economics (BME IK)
#
# This file is part of CIRCLE Cloud.
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE.  If not, see <http://www.gnu.org/licenses/>.

18 19
from __future__ import absolute_import

20
from django.contrib.auth.models import Group, User
21 22 23
from django_tables2 import Table, A
from django_tables2.columns import (TemplateColumn, Column, BooleanColumn,
                                    LinkColumn)
24

25
from vm.models import Node, InstanceTemplate, Lease
26
from django.utils.translation import ugettext_lazy as _
27
from django_sshkey.models import UserKey
28
from dashboard.models import ConnectCommand
29 30


31 32 33 34
class NodeListTable(Table):

    pk = Column(
        verbose_name="ID",
35
        attrs={'th': {'class': 'node-list-table-thin'}},
36 37
    )

38
    overcommit = Column(
39
        verbose_name=_("Overcommit"),
40
        attrs={'th': {'class': 'node-list-table-thin'}},
41 42
    )

43 44 45 46 47
    enabled = BooleanColumn(
        attrs={'th': {'class': 'node-list-table-thin'}},
    )

    name = TemplateColumn(
48 49
        template_name="dashboard/node-list/column-name.html",
        order_by="normalized_name"
50 51 52 53 54 55 56
    )

    priority = Column(
        attrs={'th': {'class': 'node-list-table-thin'}},
    )

    number_of_VMs = TemplateColumn(
57
        verbose_name=_("Number of VMs"),
58
        template_name='dashboard/node-list/column-vm.html',
59
        attrs={'th': {'class': 'node-list-table-thin'}},
60 61
    )

62
    monitor = TemplateColumn(
Kálmán Viktor committed
63
        verbose_name=_("Monitor"),
64 65
        template_name='dashboard/node-list/column-monitor.html',
        attrs={'th': {'class': 'node-list-table-monitor'}},
66
        orderable=False,
67 68 69
    )

    actions = TemplateColumn(
Kálmán Viktor committed
70
        verbose_name=_("Actions"),
71
        attrs={'th': {'class': 'node-list-table-thin'}},
72 73
        template_code=('{% include "dashboard/node-list/column-'
                       'actions.html" with btn_size="btn-xs" %}'),
74
        orderable=False,
75 76
    )

77 78 79 80
    class Meta:
        model = Node
        attrs = {'class': ('table table-bordered table-striped table-hover '
                           'node-list-table')}
81 82 83
        fields = ('pk', 'name', 'host', 'enabled', 'priority', 'overcommit',
                  'number_of_VMs', )

84

85
class GroupListTable(Table):
86 87 88 89 90 91 92 93 94 95 96
    pk = TemplateColumn(
        template_name='dashboard/group-list/column-id.html',
        verbose_name="ID",
        attrs={'th': {'class': 'group-list-table-thin'}},
    )

    name = TemplateColumn(
        template_name="dashboard/group-list/column-name.html"
    )

    number_of_users = TemplateColumn(
97
        orderable=False,
98 99 100 101 102
        template_name='dashboard/group-list/column-users.html',
        attrs={'th': {'class': 'group-list-table-admin'}},
    )

    admin = TemplateColumn(
103
        orderable=False,
104 105 106 107 108
        template_name='dashboard/group-list/column-admin.html',
        attrs={'th': {'class': 'group-list-table-admin'}},
    )

    actions = TemplateColumn(
109
        orderable=False,
110 111 112 113 114
        attrs={'th': {'class': 'group-list-table-thin'}},
        template_code=('{% include "dashboard/group-list/column-'
                       'actions.html" with btn_size="btn-xs" %}'),
    )

115 116 117 118
    class Meta:
        model = Group
        attrs = {'class': ('table table-bordered table-striped table-hover '
                           'group-list-table')}
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
        fields = ('pk', 'name', )


class UserListTable(Table):
    pk = TemplateColumn(
        template_name='dashboard/vm-list/column-id.html',
        verbose_name="ID",
        attrs={'th': {'class': 'vm-list-table-thin'}},
    )

    username = TemplateColumn(
        template_name="dashboard/group-list/column-username.html"
    )

    class Meta:
        model = User
        attrs = {'class': ('table table-bordered table-striped table-hover '
                           'vm-list-table')}
        fields = ('pk', 'username', )
138 139


140 141 142 143 144
class UserListTablex(Table):
    class Meta:
        model = User


145
class TemplateListTable(Table):
146 147
    name = TemplateColumn(
        template_name="dashboard/template-list/column-template-name.html",
148
        attrs={'th': {'data-sort': "string"}}
149
    )
150 151
    resources = TemplateColumn(
        template_name="dashboard/template-list/column-template-resources.html",
152
        verbose_name=_("Resources"),
153
        attrs={'th': {'data-sort': "int"}},
154
        order_by=("ram_size"),
155 156 157 158
    )
    lease = TemplateColumn(
        "{{ record.lease.name }}",
        verbose_name=_("Lease"),
159 160 161 162 163 164 165
        attrs={'th': {'data-sort': "string"}}
    )
    system = Column(
        attrs={'th': {'data-sort': "string"}}
    )
    access_method = Column(
        attrs={'th': {'data-sort': "string"}}
166
    )
167 168 169 170 171
    owner = TemplateColumn(
        template_name="dashboard/template-list/column-template-owner.html",
        verbose_name=_("Owner"),
        attrs={'th': {'data-sort': "string"}}
    )
172 173 174 175
    created = TemplateColumn(
        template_name="dashboard/template-list/column-template-created.html",
        verbose_name=_("Created at"),
    )
176 177 178 179 180
    running = TemplateColumn(
        template_name="dashboard/template-list/column-template-running.html",
        verbose_name=_("Running"),
        attrs={'th': {'data-sort': "int"}},
    )
181 182
    actions = TemplateColumn(
        verbose_name=_("Actions"),
183 184
        template_name="dashboard/template-list/column-template-actions.html",
        attrs={'th': {'class': 'template-list-table-thin'}},
185
        orderable=False,
186 187 188 189 190 191
    )

    class Meta:
        model = InstanceTemplate
        attrs = {'class': ('table table-bordered table-striped table-hover'
                           ' template-list-table')}
192 193
        fields = ('name', 'resources', 'system', 'access_method', 'lease',
                  'owner', 'created', 'running', 'actions', )
194

195
        prefix = "template-"
196 197 198


class LeaseListTable(Table):
199
    name = LinkColumn(
200 201 202 203
        'dashboard.views.lease-detail',
        args=[A('pk')],
    )

204
    suspend_interval_seconds = TemplateColumn(
205 206 207
        "{{ record.get_readable_suspend_time }}"
    )

208
    delete_interval_seconds = TemplateColumn(
209 210 211 212 213
        "{{ record.get_readable_delete_time }}"
    )

    actions = TemplateColumn(
        verbose_name=_("Actions"),
214 215
        template_name="dashboard/template-list/column-lease-actions.html",
        orderable=False,
216 217 218 219 220 221
    )

    class Meta:
        model = Lease
        attrs = {'class': ('table table-bordered table-striped table-hover'
                           ' lease-list-table')}
222 223
        fields = ('name', 'suspend_interval_seconds',
                  'delete_interval_seconds', )
224
        prefix = "lease-"
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252


class UserKeyListTable(Table):
    name = LinkColumn(
        'dashboard.views.userkey-detail',
        args=[A('pk')],
        verbose_name=_("Name"),
        attrs={'th': {'data-sort': "string"}}
    )

    fingerprint = Column(
        verbose_name=_("Fingerprint"),
        attrs={'th': {'data-sort': "string"}}
    )

    created = Column(
        verbose_name=_("Created at"),
        attrs={'th': {'data-sort': "string"}}
    )

    actions = TemplateColumn(
        verbose_name=_("Actions"),
        template_name="dashboard/userkey-list/column-userkey-actions.html",
        orderable=False,
    )

    class Meta:
        model = UserKey
253 254
        attrs = {'class': ('table table-bordered table-striped table-hover'),
                 'id': "profile-key-list-table"}
255
        fields = ('name', 'fingerprint', 'created', 'actions')
256 257
        prefix = "key-"
        empty_text = _("You haven't added any public keys yet.")
258 259 260


class ConnectCommandListTable(Table):
261 262 263
    name = LinkColumn(
        'dashboard.views.connect-command-detail',
        args=[A('pk')],
264 265
        attrs={'th': {'data-sort': "string"}}
    )
266 267
    access_method = Column(
        verbose_name=_("Access method"),
268 269 270 271 272 273 274 275
        attrs={'th': {'data-sort': "string"}}
    )
    template = Column(
        verbose_name=_("Template"),
        attrs={'th': {'data-sort': "string"}}
    )
    actions = TemplateColumn(
        verbose_name=_("Actions"),
276 277
        template_name=("dashboard/connect-command-list/column-command"
                       "-actions.html"),
278 279 280 281 282
        orderable=False,
    )

    class Meta:
        model = ConnectCommand
283 284 285
        attrs = {'class': ('table table-bordered table-striped table-hover'),
                 'id': "profile-command-list-table"}
        fields = ('name', 'access_method',  'template', 'actions')
286
        prefix = "cmd-"
287 288 289 290
        empty_text = _(
            "You don't have any custom connection commands yet. You can "
            "specify commands to be displayed on VM detail pages instead of "
            "the defaults.")