Commit caf8f033 by Kálmán Viktor

Merge branch 'master' into feature-django18

Conflicts:
	requirements/base.txt
parents a43c9ead 0ac5aa0b
...@@ -156,6 +156,7 @@ STATIC_URL = get_env_variable('DJANGO_STATIC_URL', default='/static/') ...@@ -156,6 +156,7 @@ STATIC_URL = get_env_variable('DJANGO_STATIC_URL', default='/static/')
STATICFILES_FINDERS = ( STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'pipeline.finders.PipelineFinder',
) )
########## END STATIC FILE CONFIGURATION ########## END STATIC FILE CONFIGURATION
STATICFILES_DIRS = [normpath(join(SITE_ROOT, 'bower_components'))] STATICFILES_DIRS = [normpath(join(SITE_ROOT, 'bower_components'))]
......
...@@ -110,8 +110,8 @@ if DEBUG: ...@@ -110,8 +110,8 @@ if DEBUG:
from django.dispatch import Signal from django.dispatch import Signal
Signal.send_robust = Signal.send Signal.send_robust = Signal.send
PIPELINE_DISABLED_COMPILERS = ( PIPELINE_COMPILERS = (
'pipeline.compilers.less.LessCompiler', 'dashboard.compilers.DummyLessCompiler',
) )
ADMIN_ENABLED = True ADMIN_ENABLED = True
# 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/>.
from pipeline.compilers.less import LessCompiler
class DummyLessCompiler(LessCompiler):
def compile_file(self, *args, **kwargs):
pass
...@@ -145,11 +145,13 @@ $(function() { ...@@ -145,11 +145,13 @@ $(function() {
$("#dashboard-vm-details-connect-button").removeClass('disabled'); $("#dashboard-vm-details-connect-button").removeClass('disabled');
} }
$("[data-target=#_console]").attr("data-toggle", "pill").attr("href", "#console").parent("li").removeClass("disabled"); $("[data-target=#_console]").attr("data-toggle", "pill").attr("href", "#console").parent("li").removeClass("disabled");
$("#getScreenshotButton").prop("disabled", false);
} else { } else {
if(data.connect_uri) { if(data.connect_uri) {
$("#dashboard-vm-details-connect-button").addClass('disabled'); $("#dashboard-vm-details-connect-button").addClass('disabled');
} }
$("[data-target=#_console]").attr("data-toggle", "_pill").attr("href", "#").parent("li").addClass("disabled"); $("[data-target=#_console]").attr("data-toggle", "_pill").attr("href", "#").parent("li").addClass("disabled");
$("#getScreenshotButton").prop("disabled", true);
} }
if(data.status == "STOPPED" || data.status == "PENDING") { if(data.status == "STOPPED" || data.status == "PENDING") {
......
...@@ -10,10 +10,11 @@ $(function () { ...@@ -10,10 +10,11 @@ $(function () {
$(".not-tab-pane").removeClass("not-tab-pane").addClass("tab-pane"); $(".not-tab-pane").removeClass("not-tab-pane").addClass("tab-pane");
$('.vm-create').click(function(e) { $('.vm-create').click(function(e) {
var template = $(this).data("template"); var url = $(this).data("href");
if(!url) url = $(this).prop("href");
$.ajax({ $.ajax({
type: 'GET', type: 'GET',
url: $(this).attr('href'), url: url,
success: function(data) { success: function(data) {
$('body').append(data); $('body').append(data);
vmCreateLoaded(); vmCreateLoaded();
...@@ -140,7 +141,7 @@ $(function () { ...@@ -140,7 +141,7 @@ $(function () {
// success // success
}, },
error: function(xhr, textStatus, error) { error: function(xhr, textStatus, error) {
console.log("oh babám"); addMessage(gettext("An error occurred. (") + xhr.status + ")", 'danger');
} }
}); });
$(star).tooltip('destroy').tooltip({'placement': 'right'}); $(star).tooltip('destroy').tooltip({'placement': 'right'});
......
...@@ -10,6 +10,21 @@ html { ...@@ -10,6 +10,21 @@ html {
min-height: 100%; min-height: 100%;
} }
.navbar-nav img {
width: 46px;
height: 46px;
margin-top: -4px;
}
.profile-avatar {
width: 24px;
height: 24px;
}
.navbar-fixed-top {
border: 0px;
}
/* Set widths on the navbar form inputs since otherwise they're 100% wide */ /* Set widths on the navbar form inputs since otherwise they're 100% wide */
.navbar-form input[type="text"], .navbar-form input[type="text"],
.navbar-form input[type="password"] { .navbar-form input[type="password"] {
...@@ -32,7 +47,7 @@ html { ...@@ -32,7 +47,7 @@ html {
#dashboard-menu { #dashboard-menu {
margin-right: 15px; margin-right: 0px;
} }
/* we need this for mobile view */ /* we need this for mobile view */
...@@ -56,6 +71,9 @@ html { ...@@ -56,6 +71,9 @@ html {
padding-bottom: 12.5px; padding-bottom: 12.5px;
} }
#dashboard-menu > li:last-child > a {
padding: 4px 0 0 0;
}
} }
.no-margin { .no-margin {
...@@ -110,6 +128,11 @@ html { ...@@ -110,6 +128,11 @@ html {
background-color: black!important; background-color: black!important;
} }
.timeline img{
border-radius: 50%;
margin-bottom: 2px;
}
.timeline a { .timeline a {
color: black; color: black;
} }
...@@ -1321,3 +1344,7 @@ textarea[name="new_members"] { ...@@ -1321,3 +1344,7 @@ textarea[name="new_members"] {
padding-top: 5px; padding-top: 5px;
padding-bottom: 5px; padding-bottom: 5px;
} }
.acl-table td:first-child {
text-align: center;
}
...@@ -185,12 +185,13 @@ $(function() { ...@@ -185,12 +185,13 @@ $(function() {
$("i", this).addClass("fa-spinner fa-spin"); $("i", this).addClass("fa-spinner fa-spin");
$(this).prop("disabled", true); $(this).prop("disabled", true);
ct.slideDown(); ct.slideDown();
var img = $("img", ct).prop("src", '/dashboard/vm/' + vm + '/screenshot/'); var img = $("img", ct).prop("src", '/dashboard/vm/' + vm + '/screenshot/?rnd=' + Math.random());
}); });
// if the image is loaded remove the spinning stuff // if the image is loaded remove the spinning stuff
// note: this should not work if the image is cached, but it's not // note: this should not work if the image is cached, but it's not
// see: http://stackoverflow.com/a/3877079/1112653 // see: http://stackoverflow.com/a/3877079/1112653
// note #2: it actually gets cached, so a random number is appended
$("#vm-console-screenshot img").load(function(e) { $("#vm-console-screenshot img").load(function(e) {
$("#getScreenshotButton").prop("disabled", false) $("#getScreenshotButton").prop("disabled", false)
.find("i").removeClass("fa-spinner fa-spin"); .find("i").removeClass("fa-spinner fa-spin");
...@@ -200,7 +201,7 @@ $(function() { ...@@ -200,7 +201,7 @@ $(function() {
// screenshot close // screenshot close
$("#vm-console-screenshot button").click(function() { $("#vm-console-screenshot button").click(function() {
$(this).parent("div").slideUp(); $(this).closest("div").slideUp();
}); });
// select connection string // select connection string
......
...@@ -55,6 +55,9 @@ html { ...@@ -55,6 +55,9 @@ html {
.bigbig { .bigbig {
font-size: 3em; font-size: 3em;
} }
.big-tag {
font-size: 1.2em;
}
/* small buttons for tags, copied from Bootstraps input-sm, bnt-sm */ /* small buttons for tags, copied from Bootstraps input-sm, bnt-sm */
.btn-tags, .btn-traits { .btn-tags, .btn-traits {
padding: 3px 6px; padding: 3px 6px;
...@@ -148,3 +151,7 @@ footer a, footer a:hover, footer a:visited { ...@@ -148,3 +151,7 @@ footer a, footer a:hover, footer a:visited {
.btn-toolbar { .btn-toolbar {
margin-bottom: 5px; margin-bottom: 5px;
} }
.vm-details-home-edit-description {
font-size: 85%; /* ~ small tag */
}
{% load i18n %} {% load i18n %}
{% load staticfiles %} {% load staticfiles %}
{% load cache %} {% load cache %}
{% load compressed %} {% load pipeline %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="{{lang}}"> <html lang="{{lang}}">
<head> <head>
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<title>{% block title %}{% block title-page %}{% endblock %} | {% block title-site %}CIRCLE{% endblock %}{% endblock %}</title> <title>{% block title %}{% block title-page %}{% endblock %} | {% block title-site %}CIRCLE{% endblock %}{% endblock %}</title>
{% compressed_css 'all' %} {% stylesheet 'all' %}
<!-- HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
...@@ -28,7 +28,12 @@ ...@@ -28,7 +28,12 @@
<body> <body>
<div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-header"> <div class="navbar-header">
{% block navbar-brand %}{% endblock %} {% block navbar-brand %}
<a class="navbar-brand" href="{% url "dashboard.index" %}" style="padding: 10px 15px;">
{% include "branding.html" %}
</a>
{% endblock %}
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
...@@ -84,7 +89,7 @@ ...@@ -84,7 +89,7 @@
<script src="{% static "jquery/dist/jquery.min.js" %}"></script> <script src="{% static "jquery/dist/jquery.min.js" %}"></script>
<script src="{{ STATIC_URL }}jsi18n/{{ LANGUAGE_CODE }}/djangojs.js"></script> <script src="{{ STATIC_URL }}jsi18n/{{ LANGUAGE_CODE }}/djangojs.js"></script>
{% compressed_js 'all' %} {% javascript 'all' %}
{% block extra_script %} {% block extra_script %}
{% endblock %} {% endblock %}
......
{% load i18n %} {% load i18n %}
{% if user and user.pk %} {% if user and user.pk %}
{% if show_pic %}
<img class="profile-avatar" src="{{ user.profile.get_avatar_url }}" />
{% endif%}
{% if user.get_full_name %}{{ user.get_full_name }}{% else %}{{ user.username }}{% endif %}{% if new_line %}<br />{% endif %} {% if user.get_full_name %}{{ user.get_full_name }}{% else %}{{ user.username }}{% endif %}{% if new_line %}<br />{% endif %}
{% if show_org %} {% if show_org %}
...@@ -10,4 +14,5 @@ ...@@ -10,4 +14,5 @@
({% trans "username" %}: {{ user.username }}) ({% trans "username" %}: {{ user.username }})
{% endif %} {% endif %}
{% endif %} {% endif %}
{% endif %} {% endif %}
{% load i18n %} {% load i18n %}
<form action="{{ acl.url }}" method="post">{% csrf_token %} <form action="{{ acl.url }}" method="post">{% csrf_token %}
<table class="table table-striped table-with-form-fields" id="{{table_id}}"> <table class="table table-striped table-with-form-fields acl-table" id="{{table_id}}">
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
{% for i in acl.users %} {% for i in acl.users %}
<tr> <tr>
<td> <td>
<i class="fa fa-user"></i> <img class="profile-avatar" src="{{ i.user.profile.get_avatar_url }}"/>
</td> </td>
<td> <td>
<a href="{% url "dashboard.views.profile" username=i.user.username %}" <a href="{% url "dashboard.views.profile" username=i.user.username %}"
......
...@@ -10,12 +10,6 @@ ...@@ -10,12 +10,6 @@
{% endblock %} {% endblock %}
{% block navbar-brand %}
<a class="navbar-brand" href="{% url "dashboard.index" %}" style="padding: 10px 15px;">
{% include "branding.html" %}
</a>
{% endblock %}
{% block navbar %} {% block navbar %}
{% if user.is_authenticated and user.pk and not request.token_user %} {% if user.is_authenticated and user.pk and not request.token_user %}
<ul class="nav navbar-nav navbar-right" id="dashboard-menu"> <ul class="nav navbar-nav navbar-right" id="dashboard-menu">
...@@ -93,6 +87,11 @@ ...@@ -93,6 +87,11 @@
<li>{% trans "Loading..." %}</li> <li>{% trans "Loading..." %}</li>
</ul> </ul>
</li> </li>
<li class="hidden-xs">
<a href="{% url "dashboard.views.profile-preferences" %}">
<img class="profile-avatar" src="{{ user.profile.get_avatar_url }}" />
</a>
</li>
</ul> </ul>
{% else %} {% else %}
......
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
{% for i in users %} {% for i in users %}
<tr> <tr>
<td> <td>
<i class="fa fa-user"></i> <img class="profile-avatar" src="{{ i.profile.get_avatar_url}}"/>
</td> </td>
<td> <td>
<a href="{% url "dashboard.views.profile" username=i.username %}" title="{{ i.username }}" <a href="{% url "dashboard.views.profile" username=i.username %}" title="{{ i.username }}"
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<div class="col-xs-6"> <div class="col-xs-6">
<form action="{% url "dashboard.views.group-list" %}" method="GET" id="dashboard-group-search-form"> <form action="{% url "dashboard.views.group-list" %}" method="GET" id="dashboard-group-search-form">
<div class="input-group input-group-sm"> <div class="input-group input-group-sm">
<input id="dashboard-group-search-input" name="s" type="text" class="form-control" placeholder="{% trans "Search..." %}" /> <input name="s" type="text" class="form-control" placeholder="{% trans "Search..." %}" />
<div class="input-group-btn"> <div class="input-group-btn">
<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button> <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button>
</div> </div>
......
...@@ -72,11 +72,15 @@ ...@@ -72,11 +72,15 @@
value="{% widthratio node_num.running sum_node_num 100 %}"> value="{% widthratio node_num.running sum_node_num 100 %}">
</p> </p>
<p> <p>
{% blocktrans with running=node_num.running missing=node_num.missing disabled=node_num.disabled offline=node_num.offline %}
<span class="big"> <span class="big">
<big>{{ node_num.running }}</big> running <span class="big-tag">{{ running }}</span> running
</span> </span> +
+ <big>{{ node_num.missing }}</big> <span class="big-tag">{{ missing }}</span> missing +
missing + <br><big>{{ node_num.disabled }}</big> disabled + <big>{{ node_num.offline }}</big> offline <br>
<span class="big-tag">{{ disabled }}</span> disabled +
<span class="big-tag">{{ offline }}</span> offline
{% endblocktrans %}
</p> </p>
<ul class="list-inline" id="dashboard-node-taglist"> <ul class="list-inline" id="dashboard-node-taglist">
{% for i in nodes %} {% for i in nodes %}
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<i class="fa fa-{{ t.os_type }}"></i> {{ t.name }} <i class="fa fa-{{ t.os_type }}"></i> {{ t.name }}
</span> </span>
<small class="text-muted index-template-list-system">{{ t.system }}</small> <small class="text-muted index-template-list-system">{{ t.system }}</small>
<div href="{% url "dashboard.views.vm-create" %}?template={{ t.pk }}" class="pull-right vm-create"> <div data-href="{% url "dashboard.views.vm-create" %}?template={{ t.pk }}" class="pull-right vm-create">
<i data-container="body" title="{% trans "Start VM instance" %}" <i data-container="body" title="{% trans "Start VM instance" %}"
class="fa fa-play"></i> class="fa fa-play"></i>
</div> </div>
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<div class="col-xs-5 col-sm-6"> <div class="col-xs-5 col-sm-6">
<form action="{% url "dashboard.views.template-list" %}" method="GET" id="dashboard-template-search-form"> <form action="{% url "dashboard.views.template-list" %}" method="GET" id="dashboard-template-search-form">
<div class="input-group input-group-sm"> <div class="input-group input-group-sm">
<input id="dashboard-group-search-input" name="s" type="text" class="form-control" placeholder="{% trans "Search..." %}" /> <input name="s" type="text" class="form-control" placeholder="{% trans "Search..." %}" />
<div class="input-group-btn"> <div class="input-group-btn">
<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button> <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button>
</div> </div>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<div class="col-xs-5 col-sm-6"> <div class="col-xs-5 col-sm-6">
<form action="{% url "dashboard.views.user-list" %}" method="GET" id="dashboard-user-search-form"> <form action="{% url "dashboard.views.user-list" %}" method="GET" id="dashboard-user-search-form">
<div class="input-group input-group-sm"> <div class="input-group input-group-sm">
<input id="dashboard-group-search-input" name="s" type="text" class="form-control" placeholder="{% trans "Search..." %}" /> <input name="s" type="text" class="form-control" placeholder="{% trans "Search..." %}" />
<div class="input-group-btn"> <div class="input-group-btn">
<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button> <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button>
</div> </div>
......
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
<p class="pull-right"> <p class="pull-right">
<input class="knob" data-fgColor="chartreuse" data-thickness=".4" data-max="{{ request.user.profile.instance_limit }}" data-width="100" data-height="100" data-readOnly="true" value="{{ instances|length|add:more_instances }}"> <input class="knob" data-fgColor="chartreuse" data-thickness=".4" data-max="{{ request.user.profile.instance_limit }}" data-width="100" data-height="100" data-readOnly="true" value="{{ instances|length|add:more_instances }}">
</p> </p>
<span class="bigbig">{% blocktrans with count=running_vm_num %}<big>{{ count }}</big> running{% endblocktrans %}</span> <span class="bigbig">{% blocktrans with count=running_vm_num %}<span class="big-tag">{{ count }}</span> running{% endblocktrans %}</span>
<ul class="list-inline" style="max-height: 95px; overflow: hidden;"> <ul class="list-inline" style="max-height: 95px; overflow: hidden;">
{% for vm in running_vms %} {% for vm in running_vms %}
<li style="display: inline-block; padding: 2px;"> <li style="display: inline-block; padding: 2px;">
...@@ -111,7 +111,9 @@ ...@@ -111,7 +111,9 @@
<strong>{{ counter }}</strong> machines total <strong>{{ counter }}</strong> machines total
{% endblocktrans %} {% endblocktrans %}
</a> </a>
<p class="big text-warning">{% blocktrans with count=stopped_vm_num %}<big>{{ count }}</big> stopped{% endblocktrans %}</p> <p class="big text-warning">
{% blocktrans with count=stopped_vm_num %}{{ count }} stopped{% endblocktrans %}
</p>
</div> </div>
</div> </div>
</div> </div>
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
{% trans "Back" %}</a> {% trans "Back" %}</a>
</div> </div>
<h3 class="no-margin"> <h3 class="no-margin">
<i class="fa fa-user"></i>
{% include "dashboard/_display-name.html" with user=profile show_org=True %} {% include "dashboard/_display-name.html" with user=profile show_org=True %}
</h3> </h3>
</div> </div>
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<div class="text-right"> <div class="text-right">
<form class="pull-left" method="POST" action="{% url "dashboard.views.store-refresh-toplist" %}"> <form class="pull-left" method="POST" action="{% url "dashboard.views.store-refresh-toplist" %}">
{% csrf_token %} {% csrf_token %}
<button class="btn btn-success btn-xs" type="submit" title="{% trans "Refresh" %}"/> <button class="btn btn-success btn-xs" type="submit" title="{% trans "Refresh" %}">
<i class="fa fa-refresh"></i> <i class="fa fa-refresh"></i>
</button> </button>
</form> </form>
......
{% extends "dashboard/base.html" %} {% extends "dashboard/base.html" %}
{% load staticfiles %} {% load staticfiles %}
{% load i18n %} {% load i18n %}
{% load compressed %} {% load pipeline %}
{% block title-page %}{{ instance.name }} | vm{% endblock %} {% block title-page %}{{ instance.name }} | vm{% endblock %}
...@@ -242,5 +242,5 @@ ...@@ -242,5 +242,5 @@
{% endblock %} {% endblock %}
{% block extra_js %} {% block extra_js %}
{% compressed_js 'vm-detail' %} {% javascript 'vm-detail' %}
{% endblock %} {% endblock %}
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
- {{ a.percentage }}% - {{ a.percentage }}%
{% endif %} {% endif %}
</strong> </strong>
{% endspaceless %}{% if a.times < 2 %} <span title="{{ a.started }}">{{ a.started|arrowfilter:LANGUAGE_CODE }}</span>{% endif %}{% if a.user %}, {% endspaceless %}{% if a.times < 2 %}&nbsp;<span title="{{ a.started }}">{{ a.started|arrowfilter:LANGUAGE_CODE }}</span>{% endif %}{% if a.user %},
<a class="no-style-link" href="{% url "dashboard.views.profile" username=a.user.username %}"> <a class="no-style-link" href="{% url "dashboard.views.profile" username=a.user.username %}">
{% include "dashboard/_display-name.html" with user=a.user show_org=True %} {% include "dashboard/_display-name.html" with user=a.user show_org=True show_pic=True %}
</a> </a>
{% endif %} {% endif %}
{% if a.is_abortable_for_user %} {% if a.is_abortable_for_user %}
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
{{ s.finished|arrowfilter:LANGUAGE_CODE }} {{ s.finished|arrowfilter:LANGUAGE_CODE }}
</span> </span>
{% else %} {% else %}
<i class="fa fa-refresh fa-spin" class="sub-activity-loading-icon"></i> <i class="fa fa-refresh fa-spin"></i>
{% endif %} {% endif %}
{% if s.has_failed %} {% if s.has_failed %}
<div class="label label-danger">{% trans "failed" %}</div> <div class="label label-danger">{% trans "failed" %}</div>
......
{% load i18n %} {% load i18n %}
{% load staticfiles %} {% load staticfiles %}
<div class="btn-toolbar">
{% if perms.vm.access_console %} {% if not perms.vm.vm_access_console %}
<button id="sendCtrlAltDelButton" class="btn btn-danger btn-sm">{% trans "Send Ctrl+Alt+Del" %}</button> <div class="alert alert-warning">
<button id="sendPasswordButton" class="btn btn-default btn-sm">{% trans "Type password" %}</button> {% trans "You are not authorized to access the VNC console." %}
</div>
{% endif %} {% endif %}
<button id="getScreenshotButton" class="btn btn-info btn-sm pull-right" data-vm-pk="{{ instance.pk }}"><i class="fa fa-picture"></i> {% trans "Screenshot" %}</button> <div class="row">
<div class="col-xs-7">
<div class="btn-toolbar">
{% if perms.vm.access_console %}
<button id="sendCtrlAltDelButton" class="btn btn-danger btn-sm">
{% trans "Send Ctrl+Alt+Del" %}
</button>
<button id="sendPasswordButton" class="btn btn-default btn-sm">
{% trans "Type password" %}
</button>
{% endif %}
</div>
</div>
<div class="col-xs-5 text-right">
<button id="getScreenshotButton" class="btn btn-info btn-sm" data-vm-pk="{{ instance.pk }}">
<i class="fa fa-photo"></i> {% trans "Screenshot" %}
</button>
</div>
</div> </div>
{% if perms.vm.access_console %} {% if perms.vm.access_console %}
<div class="alert alert-info" id="noVNC_status"> <div class="alert alert-info" id="noVNC_status"></div>
</div>
{% endif %} {% endif %}
<div id="vm-console-screenshot"> <div id="vm-console-screenshot">
<h3>
<button class="btn btn-danger btn-sm pull-right">{% trans "Close" %}</button> <button class="btn btn-danger btn-sm pull-right">{% trans "Close" %}</button>
<h3>{% trans "Screenshot" %}</h3> {% trans "Screenshot" %}
<img /> </h3>
<img alt="{% trans "Screenshot" %}"/>
<hr /> <hr />
</div> </div>
{% if perms.vm.access_console %} {% if perms.vm.access_console %}
<canvas id="noVNC_canvas" width="640px" height="20px">Canvas not supported. <canvas id="noVNC_canvas" width="640" height="20">Canvas not supported.
</canvas> </canvas>
<script> <script>
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
<dd> <dd>
{% csrf_token %} {% csrf_token %}
<div class="vm-details-home-edit-description-click"> <div class="vm-details-home-edit-description-click">
<small class="vm-details-home-edit-description">{{ instance.description|linebreaks }}</small> <div class="vm-details-home-edit-description">{{ instance.description|linebreaks }}</div>
</div> </div>
<div id="vm-details-home-description" class="js-hidden"> <div id="vm-details-home-description" class="js-hidden">
<form method="POST"> <form method="POST">
...@@ -174,9 +174,12 @@ ...@@ -174,9 +174,12 @@
{% include "dashboard/_graph-time-buttons.html" %} {% include "dashboard/_graph-time-buttons.html" %}
</div> </div>
<div class="graph-images text-center"> <div class="graph-images text-center">
<img src="{% url "dashboard.views.vm-graph" instance.pk "cpu" graph_time %}"/> <img src="{% url "dashboard.views.vm-graph" instance.pk "cpu" graph_time %}"
<img src="{% url "dashboard.views.vm-graph" instance.pk "memory" graph_time %}"/> alt="{% trans "CPU usage" %}"/>
<img src="{% url "dashboard.views.vm-graph" instance.pk "network" graph_time %}"/> <img src="{% url "dashboard.views.vm-graph" instance.pk "memory" graph_time %}"
alt="{% trans "Memory usage" %}"/>
<img src="{% url "dashboard.views.vm-graph" instance.pk "network" graph_time %}"
alt="{% trans "Network usage" %}"/>
</div> </div>
{% endif %} {% endif %}
</div> </div>
......
{% load i18n %} {% load i18n %}
{% load network_tags %} {% load network_tags %}
<h2>
<div id="vm-details-add-interface"> <div id="vm-details-add-interface">
{% with op=op.add_interface %}{% if op %} {% with op=op.add_interface %}{% if op %}
<a href="{{op.get_url}}" class="btn btn-{{op.effect}} operation pull-right" <a href="{{op.get_url}}" class="btn btn-{{op.effect}} operation pull-right"
{% if op.disabled %}disabled{% endif %}> {% if op.disabled %}disabled{% endif %}>
<i class="fa fa-{{op.icon}}"></i> {% trans "add interface" %}</a> <i class="fa fa-{{op.icon}}"></i> {% trans "add interface" %}</a>
{% endif %}{% endwith %} {% endif %}{% endwith %}
</div> </div>
<h2>
{% trans "Interfaces" %} {% trans "Interfaces" %}
</h2> </h2>
......
...@@ -45,12 +45,12 @@ ...@@ -45,12 +45,12 @@
<div id="vm-details-resources-disk"> <div id="vm-details-resources-disk">
<h3> <h3>
{% trans "Disks" %}
<div class="pull-right"> <div class="pull-right">
<div id="disk-ops"> <div id="disk-ops">
{% include "dashboard/vm-detail/_disk-operations.html" %} {% include "dashboard/vm-detail/_disk-operations.html" %}
</div> </div>
</div> </div>
{% trans "Disks" %}
</h3> </h3>
<div class="clearfix"></div> <div class="clearfix"></div>
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
{% if user.is_superuser %} {% if user.is_superuser %}
<hr/> <hr/>
<div class="row" id=""> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<h3> <h3>
{% trans "Required traits" %} {% trans "Required traits" %}
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
<hr/> <hr/>
<div class="row" id=""> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<h3> <h3>
{% trans "Raw data" %} {% trans "Raw data" %}
......
...@@ -212,7 +212,7 @@ class VmNetwork(object): ...@@ -212,7 +212,7 @@ class VmNetwork(object):
'alias(scaleToSeconds(nonNegativeDerivative(' 'alias(scaleToSeconds(nonNegativeDerivative('
'%s.network.bytes_sent-%s), 10), "in - %s (bits/s)")' % ( '%s.network.bytes_sent-%s), 10), "in - %s (bits/s)")' % (
params)) params))
return 'group(%s)' % ','.join(metrics) return 'group(%s)' % ','.join(metrics) if metrics else None
register_graph(VmNetwork, 'network', VmGraphView) register_graph(VmNetwork, 'network', VmGraphView)
......
...@@ -74,13 +74,6 @@ ...@@ -74,13 +74,6 @@
{% endblock %} {% endblock %}
{% block navbar-brand %}
<a class="navbar-brand" href="{% url "dashboard.index" %}" style="padding: 10px 15px;">
<img src="{% static "dashboard/img/logo.png" %}" style="height: 25px;"/>
</a>
{% endblock %}
{% block content %} {% block content %}
<div class="content"> <div class="content">
{% block content_box %}{% endblock %} {% block content_box %}{% endblock %}
......
...@@ -10,12 +10,6 @@ ...@@ -10,12 +10,6 @@
{% include "open-graph.html" %} {% include "open-graph.html" %}
{% endblock %} {% endblock %}
{% block navbar-brand %}
<a class="navbar-brand" href="{% url "dashboard.index" %}" style="padding: 10px 15px;">
<img src="{% static "dashboard/img/logo.png" %}" style="height: 25px;"/>
</a>
{% endblock %}
{% block content_box %} {% block content_box %}
<div class="row"> <div class="row">
{% if form.password.errors or form.username.errors %} {% if form.password.errors or form.username.errors %}
...@@ -25,10 +19,7 @@ ...@@ -25,10 +19,7 @@
{% endif %} {% endif %}
<div class="col-xs-{% if saml2 %}6{% else %}12{% endif %}"> <div class="col-xs-{% if saml2 %}6{% else %}12{% endif %}">
<div class="login-form"> <div class="login-form">
<form action="" method="POST">
{% csrf_token %}
{% crispy form %} {% crispy form %}
</form>
</div> </div>
</div> </div>
{% if saml2 %} {% if saml2 %}
...@@ -37,11 +28,12 @@ ...@@ -37,11 +28,12 @@
<a href="{% url "saml2_login" %}">{% trans "Click here!" %}</a> <a href="{% url "saml2_login" %}">{% trans "Click here!" %}</a>
</div> </div>
{% endif %} {% endif %}
</div>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<a class="pull-right" href="{% url "accounts.password-reset" %}">{% trans "Forgot your password?" %}</a> <a class="pull-right" href="{% url "accounts.password-reset" %}" style="margin-right: 15px;">
{% trans "Forgot your password?" %}
</a>
</div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}
...@@ -39,6 +39,4 @@ six==1.9.0 ...@@ -39,6 +39,4 @@ six==1.9.0
slimit==0.8.1 slimit==0.8.1
sqlparse==0.1.15 sqlparse==0.1.15
pika==0.9.14 pika==0.9.14
Fabric==1.10.1 django-pipeline==1.4.7
lxml==3.4.4
git+https://github.com/BME-IK/django-pipeline.git
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment