1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2024-12-27 00:25:22 +00:00
webvirtcloud/computes/templates/overview.html

248 lines
9.8 KiB
HTML
Raw Normal View History

2015-02-27 12:25:41 +00:00
{% extends "base.html" %}
2015-02-27 08:53:51 +00:00
{% load i18n %}
2021-06-15 06:42:55 +00:00
{% load static %}
{% load bootstrap_icons %}
2020-10-15 14:18:45 +00:00
2015-03-04 13:43:29 +00:00
{% block title %}{% trans "Overview" %} - {{ compute.name }}{% endblock %}
2020-10-15 14:18:45 +00:00
{% block page_heading %}{{ compute.name }}{% endblock page_heading %}
2015-02-27 12:25:41 +00:00
{% block content %}
2019-07-31 08:03:48 +00:00
<div class="row">
<nav aria-label="breadcrumb">
<ol class="breadcrumb shadow-sm">
<li class="breadcrumb-item" aria-current="page">
<span class="fw-bold">{% bs_icon 'laptop' %} {% trans "Overview" %}</span>
</li>
<li class="breadcrumb-item">
<a href="{% url 'instances' compute.id %}">{% bs_icon 'server' %} {% trans "Instances" %}</a>
</li>
<li class="breadcrumb-item">
<a href="{% url 'storages' compute.id %}">{% bs_icon 'device-hdd' %} {% trans "Storages" %}</a>
</li>
<li class="breadcrumb-item">
<a href="{% url 'networks' compute.id %}">{% bs_icon 'hdd-network' %} {% trans "Networks" %}</a>
</li>
<li class="breadcrumb-item">
<a href="{% url 'interfaces' compute.id %}">{% bs_icon 'wifi' %} {% trans "Interfaces" %}</a>
</li>
<li class="breadcrumb-item">
<a href="{% url 'nwfilters' compute.id %}">{% bs_icon 'filter' %} {% trans "NWFilters" %}</a>
</li>
<li class="breadcrumb-item">
<a href="{% url 'virtsecrets' compute.id %}">{% bs_icon 'key' %} {% trans "Secrets" %}</a>
</li>
</ol>
</nav>
2019-07-31 08:03:48 +00:00
</div>
2015-02-27 08:53:51 +00:00
2020-05-19 16:53:54 +00:00
<div class="shadow-sm">
2019-07-31 08:03:48 +00:00
<h3 class="page-header">{% trans "Basic details" %}</h3>
2020-05-19 16:53:54 +00:00
<dl class="mx-3 row">
<dt class="col-3">{% trans "Hostname" %}</dt>
<dd class="col-9">{{ hostname }}</dd>
<dt class="col-3">{% trans "Hypervisors" %}</dt>
<dd class="col-9">
<div class="dropdown">
{% for arch, hpv in hypervisor.items|slice:":4" %}
<button class="btn btn-sm btn-outline-primary dropdown-toggle" type="button" id="hpvArchDrop{{ forloop.counter0 }}" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
2020-05-19 16:53:54 +00:00
{{ arch }}
</button>
<div class="dropdown-menu" aria-labelledby="hpvArchDrop{{ forloop.counter0 }}">
2020-05-19 16:53:54 +00:00
{% for h in hpv %}
<a class="dropdown-item" href="#">{{ h }}</a>
{% endfor %}
</div>
2020-05-19 16:53:54 +00:00
{% endfor %}
</div>
<div class="dropdown">
{% if hypervisor.items|length > 4 %}
<button class="btn btn-sm btn-outline-primary dropdown-toggle" type="button" id="hpvDrop{{ forloop.counter0 }}" data-bs-toggle="dropdown">
{{ hypervisor.items|slice:"4:"|length }} {% trans 'more' %}...
</button>
<div class="dropdown-menu" aria-labelledby="hpvDrop{{ forloop.counter0 }}" role="menu">
{% for arc in hypervisor.keys|slice:"4:" %}
2020-05-19 16:53:54 +00:00
<a class="dropdown-item" tabindex="-1" href="#">{{ arc }}</a>
{% endfor %}
2015-03-19 13:37:16 +00:00
</div>
2020-05-19 16:53:54 +00:00
{% endif %}
2019-07-31 08:03:48 +00:00
</div>
2020-05-19 16:53:54 +00:00
</dd>
<dt class="col-3">{% trans "Emulator" %}</dt>
<dd class="col-9">{{ emulator }}</dd>
<dt class="col-3">{% trans "Version" %}</dt>
<dd class="col-9">
<span class="badge bg-secondary">{% trans 'Qemu' %} </span>
<span class="badge bg-primary">{{ version }}</span> &nbsp;
<span class="badge bg-secondary">{% trans 'Libvirt' %} </span>
<span class="badge bg-primary">{{ lib_version }}</span> &nbsp;
2020-05-19 16:53:54 +00:00
</dd>
<dt class="col-3">{% trans "Memory" %}</dt>
<dd class="col-9">{{ host_memory|filesizeformat }}</dd>
<dt class="col-3">{% trans "Architecture" %}</dt>
<dd class="col-9">{{ host_arch }}</dd>
<dt class="col-3">{% trans "Logical CPUs" %}</dt>
<dd class="col-9">{{ logical_cpu }}</dd>
<dt class="col-3">{% trans "Processor" %}</dt>
<dd class="col-9">{{ model_cpu }}</dd>
<dt class="col-3">{% trans "Connection" %}</dt>
<dd class="col-9">{{ uri_conn }}</dd>
<dt class="col-3">{% trans "Details" %}</dt>
<dd class="col-9">{{ compute.details }}</dd>
</dl>
<h3 class="page-header">{% trans "Performance" %}</h3>
<div class="mx-3 shadow-sm">
<div class="my-3 card border-success">
<div class="card-body">
<h5 class="card-title">
{% bs_icon 'arrow-right' %}
2020-05-19 16:53:54 +00:00
{% trans "CPU Utilization" %}
</h5>
<canvas id="cpuChart" width="735" height="160"></canvas>
2019-07-31 08:03:48 +00:00
</div>
2020-05-19 16:53:54 +00:00
</div>
<div class="my-3 card border-primary">
<div class="card-body">
<h5 class="card-title ">
{% bs_icon 'arrow-right'%} {% trans "RAM Utilization" %}
2020-05-19 16:53:54 +00:00
</h5>
<canvas id="memChart" width="735" height="160"></canvas>
2015-03-19 13:37:16 +00:00
</div>
</div>
</div>
2019-07-31 08:03:48 +00:00
</div>
</div>
2015-03-19 13:37:16 +00:00
{% endblock %}
{% block script %}
2019-05-21 06:10:32 +00:00
<script src="{% static "js/Chart.bundle.min.js" %}"></script>
2015-03-19 13:37:16 +00:00
<script>
var cpu_ctx = document.getElementById("cpuChart").getContext("2d");
2019-05-21 06:10:32 +00:00
var cpuChart = new Chart(cpu_ctx, {
type: 'line',
data: {
datasets : [{
label: 'Usage',
backgroundColor: "rgba(241,72,70,0.5)",
pointRadius: 2,
}]
},
options: {
responsive: true,
legend: {
display: false
},
scales: {
xAxes:[{
offset: false,
ticks: {
beginAtZero: false,
autoSkip: true,
maxTicksLimit: 10,
maxRotation: 0,
minRotation: 0,
stepSize: 10,
},
}],
yAxes: [{
ticks: {
max: 100,
min: 0,
stepSize: 20,
callback: function(value, index, values) {
return value + ' %';
}
},
}],
},
tooltips: {
callbacks: {
label: function (tooltipItem, chart) {
var label = chart.datasets[tooltipItem.datasetIndex].label || '';
if (label) {
label += ': ';
}
return label += tooltipItem.yLabel + ' %';
}
}
}
}
2015-03-19 13:37:16 +00:00
});
2019-05-21 06:10:32 +00:00
var mem_ctx = document.getElementById("memChart").getContext("2d");
var memChart = new Chart(mem_ctx, {
type: 'line',
data: {
datasets: [{
pointRadius: 2,
}]
},
options: {
responsive: true,
legend: {
display: false
},
scales: {
xAxes:[{
offset: false,
ticks: {
beginAtZero: false,
autoSkip: true,
maxTicksLimit: 10,
maxRotation: 0,
minRotation: 0
}
}],
yAxes: [{
ticks:{
suggestedMin: 0,
suggestedMax: 100,
callback: function(value, index, values) {
return value + ' MB';
}
},
}],
},
tooltips: {
callbacks: {
label: function (tooltipItem, chart) {
var label = chart.datasets[tooltipItem.datasetIndex].label || '';
if (label) {
label += ': ';
}
return label += tooltipItem.yLabel + ' MB';
}
}
2015-03-19 13:37:16 +00:00
}
2019-05-21 06:10:32 +00:00
}
2015-03-19 13:37:16 +00:00
});
if (Boolean({{ status }}) === true) {
window.setInterval(function graph_usage() {
$.getJSON('{% url 'compute_graph' compute_id %}', function (data) {
cpuChart.data.labels.push(data.timeline);
memChart.data.labels.push(data.timeline);
2015-03-19 13:37:16 +00:00
cpuChart.data.datasets[0].data.push(data.cpudata);
if (cpuChart.data.datasets[0].data.length > 10){
cpuChart.data.labels.shift();
cpuChart.data.datasets[0].data.shift();
}
memChart.options.scales.yAxes[0].ticks.max = parseInt(data.memdata.total / 1048576);
memChart.options.scales.yAxes[0].ticks.stepSize = parseInt(data.memdata.total / (1048576 * 5));
memChart.data.datasets[0].data.push(parseInt(data.memdata.usage / 1048576));
2019-05-21 06:10:32 +00:00
if (memChart.data.datasets[0].data.length > 10){
memChart.data.labels.shift();
memChart.data.datasets[0].data.shift();
}
2019-05-21 06:10:32 +00:00
cpuChart.update();
memChart.update();
});
}, 5000);
}
2015-03-19 13:37:16 +00:00
</script>
{% endblock %}