diff --git a/instances/templates/instances.html b/instances/templates/instances.html index aa70d35..48aa69d 100644 --- a/instances/templates/instances.html +++ b/instances/templates/instances.html @@ -3,293 +3,325 @@ {% load staticfiles %} {% block title %}{% trans "Instances" %}{% endblock %} {% block style %} - <link rel="stylesheet" href="{% static "css/sortable-theme-bootstrap.css" %}" /> + <link rel="stylesheet" href="{% static "css/sortable-theme-bootstrap.css" %}"/> {% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% if request.user.is_superuser %} - {% include 'create_inst_block.html' %} - {% endif %} - {% if all_host_vms or all_user_vms %} - <div class="pull-right search"> - <input id="filter" class="form-control" type="text" placeholder="Search"> - </div> - {% endif %} - <h1 class="page-header">{% trans "Instances" %}</h1> - </div> +<!-- Page Heading --> +<div class="row"> + <div class="col-lg-12"> + {% if request.user.is_superuser %} + {% include 'create_inst_block.html' %} + {% endif %} + {% if all_host_vms or all_user_vms %} + <div class="pull-right search"> + <input id="filter" class="form-control" type="text" placeholder="Search"> + </div> + {% endif %} + <h1 class="page-header">{% trans "Instances" %}</h1> + </div> +</div> +<!-- /.row --> + +{% include 'errors_block.html' %} + +<div class="row"> + <div class="col-lg-12"> + <div class="table-responsive"> + {% if request.user.is_superuser %} + {% if not all_host_vms %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> + <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instace" %} </div> - <!-- /.row --> - - {% include 'errors_block.html' %} - - <div class="row"> - <div class="col-lg-12"> - <div class="table-responsive"> - {% if request.user.is_superuser %} - {% if not all_host_vms %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instace" %} - </div> - </div> - {% else %} - <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> - <thead > - <tr> - <th>#</th> - <th>Name<br>Description</th> - <th>User</th> - <th>Status</th> - <th>VCPU</th> - <th>Memory</th> - <th data-sortable="false" style="width:205px;">Actions & Mem Usage</th> - </tr> - </thead> - <tbody class="searchable"> - {% for host, inst in all_host_vms.items %} - <!-- copied /--> - <tr class="success" style="font-size:16px"> - <td>{{ forloop.counter }}</td> - <td><a href="{% url 'overview' host.0 %}">{{ host.1 }}</a></td> - <td></td> - <td>{% ifequal host.2 1 %}<span class="label label-success">{% trans "Active" %} + </div> + {% else %} + <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> + <thead> + <tr> + <th>#</th> + <th>Name<br>Description</th> + <th>User</th> + <th>Status</th> + <th>VCPU</th> + <th>Memory</th> + <th data-sortable="false" style="width:205px;">Actions & Mem Usage</th> + </tr> + </thead> + <tbody class="searchable"> + {% for host, inst in all_host_vms.items %} + <tr class="success" style="font-size:16px"> + <td>{{ forloop.counter }}</td> + <td><a href="{% url 'overview' host.0 %}">{{ host.1 }}</a></td> + <td></td> + <td>{% ifequal host.2 1 %}<span class="label label-success">{% trans "Active" %} </span>{% endifequal %} - {% ifequal host.2 2 %}<span class="label label-danger">{% trans "Not Active" %} + {% ifequal host.2 2 %}<span class="label label-danger">{% trans "Not Active" %} </span>{% endifequal %} - {% ifequal host.2 3 %}<span class="label label-danger">{% trans "Connection Failed" %} + {% ifequal host.2 3 %}<span class="label label-danger">{% trans "Connection Failed" %} </span>{% endifequal %} - </td> - <td style="text-align:center;">{{ host.3 }}</td> - <td style="text-align:right;">{{ host.4|filesizeformat }}</td> - <td style="text-align:left;"> - <div class="progress-bar-success" role="progressbar" style="width: {{ host.5 }}%" aria-valuenow="{{ host.5 }}" aria-valuemin="0" aria-valuemax="100">{{ host.5 }}%</div> - </td> - </tr> - <!-- copied /--> - {% for vm, info in inst.items %} - <tr> - <td></td> - <td>{{ forloop.counter }}   <a href="{% url 'instance' host.0 vm %}">{{ vm }}</a><br><small><em>{{ info.title }}</em></small></td> - <td><small><em>{% if info.userinstances.count > 0 %}{{ info.userinstances.first_user.user.username }}{% if info.userinstances.count > 1 %} (+{{ info.userinstances.count|add:"-1" }}){% endif %}{% endif %}</em></small></td> - <td>{% ifequal info.status 1 %} - <span class="text-success">{% trans "Active" %}</span> - {% endifequal %} - {% ifequal info.status 5 %} - <span class="text-danger">{% trans "Off" %}</span> - {% endifequal %} - {% ifequal info.status 3 %} - <span class="text-warning">{% trans "Suspend" %}</span> - {% endifequal %} - </td> - <td style="text-align:center;">{{ info.vcpu }}</td> - <td style="text-align:right;">{{ info.memory |filesizeformat }}</td> - <td><form action="" method="post" role="form">{% csrf_token %} - <input type="hidden" name="name" value="{{ vm }}"/> - <input type="hidden" name="compute_id" value="{{ host.0 }}"/> - {% ifequal info.status 5 %} - {% if info.is_template %} - <button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ host.0 }}, '{{ vm }}');"> - <span class="glyphicon glyphicon-duplicate"></span> - </button> - {% else %} - <button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - {% endif %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}"> - <span class="glyphicon glyphicon-pause"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal info.status 3 %} - <button class="btn btn-sm btn-default" type="submit" name="resume" title="{% trans "Resume" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}"> - <span class="glyphicon glyphicon-pause"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal info.status 1 %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="suspend" title="{% trans "Suspend" %}"> - <span class="glyphicon glyphicon-pause"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}" onclick="return confirm('Are you sure?')"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <a href="#" class="btn btn-sm btn-default" onclick='open_console("{{ host.0 }}-{{ info.uuid }}")' title="{% trans "Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </a> - {% endifequal %} - </form> - </td> - </tr> - {% endfor %} - {% endfor %} - </tbody> - </table> + </td> + <td style="text-align:center;">{{ host.3 }}</td> + <td style="text-align:right;">{{ host.4|filesizeformat }}</td> + <td style="text-align:left;"> + <div class="progress-bar-success" role="progressbar" style="width: {{ host.5 }}%" + aria-valuenow="{{ host.5 }}" aria-valuemin="0" aria-valuemax="100">{{ host.5 }}% + </div> + </td> + </tr> + <td></td> + <td>{{ forloop.counter }}   <a href="{% url 'instance' host.0 vm %}">{{ vm }}</a><br> + <small><em>{{ info.title }}</em></small> + </td> + <td> + <small><em> + {% if info.userinstances.count > 0 %}{{ info.userinstances.first_user.user.username }} + {% if info.userinstances.count > 1 %} (+{{ info.userinstances.count|add:"-1" }}) + {% endif %}{% endif %}</em></small> + </td> + <td>{% ifequal info.status 1 %} + <span class="text-success">{% trans "Active" %}</span> + {% endifequal %} + {% ifequal info.status 5 %} + <span class="text-danger">{% trans "Off" %}</span> + {% endifequal %} + {% ifequal info.status 3 %} + <span class="text-warning">{% trans "Suspend" %}</span> + {% endifequal %} + </td> + <td style="text-align:center;">{{ info.vcpu }}</td> + <td style="text-align:right;">{{ info.memory |filesizeformat }}</td> + <td> + <form action="" method="post" role="form">{% csrf_token %} + <input type="hidden" name="name" value="{{ vm }}"/> + <input type="hidden" name="compute_id" value="{{ host.0 }}"/> + {% ifequal info.status 5 %} + {% if info.is_template %} + <button class="btn btn-sm btn-default" type="button" name="clone" + title="{% trans "Clone" %}" + onclick="goto_instance_clone({{ host.0 }}, '{{ vm }}');"> + <span class="glyphicon glyphicon-duplicate"></span> + </button> + {% else %} + <button class="btn btn-sm btn-default" type="submit" name="poweron" + title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> {% endif %} - {% else %} - {% if not all_user_vms %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instace" %} - </div> - </div> - {% else %} - <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> - <thead> - <tr> - <th>Name</th> - <th>Status</th> - <th>VCPU</th> - <th>Memory</th> - <th data-sortable="false" style="width: 165px;">Actions</th> - </tr> - </thead> - <tbody class="searchable"> - {% for inst, vm in all_user_vms.items %} - <tr> - <td><a href="{% url 'instance' vm.compute_id vm.name %}">{{ vm.name }}</a><br><small><em>{{ vm.title }}</em></small></td> - <td>{% ifequal vm.status 1 %} - <span class="text-success">{% trans "Active" %}</span> - {% endifequal %} - {% ifequal vm.status 5 %} - <span class="text-danger">{% trans "Off" %}</span> - {% endifequal %} - {% ifequal vm.status 3 %} - <span class="text-warning">{% trans "Suspend" %}</span> - {% endifequal %} - </td> - <td>{{ vm.vcpu }}</td> - <td>{{ vm.memory }} {% trans "MB" %}</td> - <td><form action="" method="post" role="form">{% csrf_token %} - <input type="hidden" name="name" value="{{ vm.name }}"/> - <input type="hidden" name="compute_id" value="{{ vm.compute_id }}"/> - {% ifequal vm.status 5 %} - {% if inst.instance.is_template %} - <button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ vm.compute_id }}, '{{ vm.name }}');"> - <span class="glyphicon glyphicon-duplicate"></span> - </button> - {% else %} - <button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - {% endif %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal vm.status 3 %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal vm.status 1 %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <a href="#" class="btn btn-sm btn-default" onclick='open_console("{{ vm.compute_id }}-{{ vm.uuid }}")' title="{% trans "Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </a> - {% endifequal %} - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - {% endif %} - {% endif %} - </div> + <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}"> + <span class="glyphicon glyphicon-pause"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal info.status 3 %} + <button class="btn btn-sm btn-default" type="submit" name="resume" + title="{% trans "Resume" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}"> + <span class="glyphicon glyphicon-pause"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal info.status 1 %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="suspend" + title="{% trans "Suspend" %}"> + <span class="glyphicon glyphicon-pause"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="poweroff" + title="{% trans "Power Off" %}" onclick="return confirm('Are you sure?')"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="powercycle" + title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <a href="#" class="btn btn-sm btn-default" + onclick='open_console("{{ host.0 }}-{{ info.uuid }}")' title="{% trans "Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </a> + {% endifequal %} + </form> + </td> + </tr> + {% endfor %} + {% endfor %} + </tbody> + </table> + {% endif %} + {% else %} + {% if not all_user_vms %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> + <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %} </div> </div> + {% else %} + <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> + <thead> + <tr> + <th>Name</th> + <th>Status</th> + <th>VCPU</th> + <th>Memory</th> + <th data-sortable="false" style="width: 165px;">Actions</th> + </tr> + </thead> + <tbody class="searchable"> + {% for inst, vm in all_user_vms.items %} + <tr> + <td><a href="{% url 'instance' vm.compute_id vm.name %}">{{ vm.name }}</a><br> + <small><em>{{ vm.title }}</em></small> + </td> + <td>{% ifequal vm.status 1 %} + <span class="text-success">{% trans "Active" %}</span> + {% endifequal %} + {% ifequal vm.status 5 %} + <span class="text-danger">{% trans "Off" %}</span> + {% endifequal %} + {% ifequal vm.status 3 %} + <span class="text-warning">{% trans "Suspend" %}</span> + {% endifequal %} + </td> + <td>{{ vm.vcpu }}</td> + <td>{{ vm.memory }} {% trans "MB" %}</td> + <td> + <form action="" method="post" role="form">{% csrf_token %} + <input type="hidden" name="name" value="{{ vm.name }}"/> + <input type="hidden" name="compute_id" value="{{ vm.compute_id }}"/> + {% ifequal vm.status 5 %} + {% if inst.instance.is_template %} + <button class="btn btn-sm btn-default" type="button" name="clone" + title="{% trans "Clone" %}" + onclick="goto_instance_clone({{ vm.compute_id }}, '{{ vm.name }}');"> + <span class="glyphicon glyphicon-duplicate"></span> + </button> + {% else %} + <button class="btn btn-sm btn-default" type="submit" name="poweron" + title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + {% endif %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" + title="{% trans "Power Cycle" %}"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" + title="{% trans "VNC Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal vm.status 3 %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" + title="{% trans "Power Cycle" %}"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" + title="{% trans "VNC Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal vm.status 1 %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="poweroff" + title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="powercycle" + title="{% trans "Power Cycle" %}" + onclick="return confirm('Are you sure?')"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <a href="#" class="btn btn-sm btn-default" + onclick='open_console("{{ vm.compute_id }}-{{ vm.uuid }}")' + title="{% trans "Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </a> + {% endifequal %} + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> + {% endif %} + {% endif %} + </div> + </div> +</div> {% endblock %} {% block script %} -<script src="{% static "js/sortable.min.js" %}"></script> -<script> - function open_console(uuid) { - window.open("{% url 'console' %}?token=" + uuid, "", "width=850,height=485"); - } -</script> -<script> - function filter_table() { - var rex = new RegExp($(this).val(), 'i'); - $('.searchable tr').hide(); - $('.searchable tr').filter(function () { - return rex.test($(this).text()); - }).show(); - Cookies.set("instances_filter", $(this).val(), { expires: 1 }); - } - $(document).ready(function () { - instances_filter_cookie = Cookies.get("instances_filter"); - if (instances_filter_cookie) { - $('#filter').val(instances_filter_cookie); - $('#filter').each(filter_table); - } - (function ($) { - $('#filter').keyup(filter_table) - }(jQuery)); - }); -</script> -<script> - function goto_instance_clone(compute, instance) { - window.location = "/instance/" + compute + "/" + instance + "/#clone"; - } -</script> -{% if request.user.is_superuser %} + <script src="{% static "js/sortable.min.js" %}"></script> <script> - function goto_compute() { - var compute = $("#compute_select").val(); - window.location = "/compute/" + compute + "/create/"; + function open_console(uuid) { + window.open("{% url 'console' %}?token=" + uuid, "", "width=850,height=485"); } </script> -{% endif %} + <script> + function filter_table() { + var rex = new RegExp($(this).val(), 'i'); + $('.searchable tr').hide(); + $('.searchable tr').filter(function () { + return rex.test($(this).text()); + }).show(); + Cookies.set("instances_filter", $(this).val(), {expires: 1}); + } + + $(document).ready(function () { + instances_filter_cookie = Cookies.get("instances_filter"); + if (instances_filter_cookie) { + $('#filter').val(instances_filter_cookie); + $('#filter').each(filter_table); + } + (function ($) { + $('#filter').keyup(filter_table) + }(jQuery)); + }); + </script> + <script> + function goto_instance_clone(compute, instance) { + window.location = "/instance/" + compute + "/" + instance + "/#clone"; + } + </script> + {% if request.user.is_superuser %} + <script> + function goto_compute() { + var compute = $("#compute_select").val(); + window.location = "/compute/" + compute + "/create/"; + } + </script> + {% endif %} {% endblock %}