Initial commit with sources
This commit is contained in:
14
front/dashboard/templates/404.html
Normal file
14
front/dashboard/templates/404.html
Normal file
@@ -0,0 +1,14 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1>404 <small>page not found</small></h1>
|
||||
<br><br>
|
||||
<a href="{% url 'index' %}" class="btn btn-primary">Back to main page</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
12
front/dashboard/templates/generic.html
Normal file
12
front/dashboard/templates/generic.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
{{ content|safe }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
108
front/dashboard/templates/history.html
Normal file
108
front/dashboard/templates/history.html
Normal file
@@ -0,0 +1,108 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{% for y in years %}
|
||||
<div class="col-md-6">
|
||||
<ul class="pagination">
|
||||
<li class="disabled"><a>{{ y }}</a></li>
|
||||
{% for m in months %}
|
||||
<li {% if m == month and y == year %}class="active"{% endif %}>
|
||||
<a href="{% url 'history' obj y m %}">{{ m }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1 class="page-header"><i class="fa fa-{{ fa_icon }} fa-fw"></i> {{ title }}</h1>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
{% if mean_pc_ok %}
|
||||
<h4>{{ title1 }} - Mean : {{ mean_pc_ok|floatformat }}</h4>
|
||||
{% else %}
|
||||
<h4>{{ title1 }}</h4>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="panel-body history-panel">
|
||||
{% if some_results %}
|
||||
<div id="chart-pc"></div>
|
||||
<div class="legend green">{{ legend1.0 }}</div>
|
||||
<div class="legend orange">{{ legend1.1}}</div>
|
||||
<div class="legend red">{{ legend1.2 }}</div>
|
||||
<div class="legend blue">{{ legend1.3 }}</div>
|
||||
{% else %}
|
||||
<p>No results</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% if mean_js_data %}
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4>{{ title2 }}</h4>
|
||||
</div>
|
||||
<div class="panel-body history-panel">
|
||||
<div id="chart-mean"></div>
|
||||
<div class="legend blue">{{ legend2.0 }}</div>
|
||||
<div class="legend purple">{{ legend2.1}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
{% block scripts %}
|
||||
{% load static %}
|
||||
<script src="{% static 'js/plugins/morris/raphael.min.js' %}"></script>
|
||||
<script src="{% static 'js/plugins/morris/morris.min.js' %}"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
Morris.Area({
|
||||
element: 'chart-pc',
|
||||
data: [
|
||||
{{ pc_js_data|safe }}
|
||||
],
|
||||
xkey: 'period',
|
||||
ykeys: ['ok', 'warn', 'crit', 'unknown'],
|
||||
labels: [ {{ js_labels|safe }}],
|
||||
lineColors: ['#059e0c', '#f0a124', '#e32f2f', '#5d85e9'],
|
||||
pointSize: 2,
|
||||
hideHover: 'auto',
|
||||
smooth: true,
|
||||
ymax: 100,
|
||||
ymin: 0,
|
||||
xLabels: 'day',
|
||||
resize: true
|
||||
});
|
||||
|
||||
{% if mean_js_data %}
|
||||
Morris.Line({
|
||||
element: 'chart-mean',
|
||||
data: [
|
||||
{{ mean_js_data|safe }}
|
||||
],
|
||||
xkey: 'period',
|
||||
ykeys: ['mean', 'median'],
|
||||
labels: ['Mean', 'Median'],
|
||||
lineColors: ['#628be3', '#e850ad'],
|
||||
pointSize: 2,
|
||||
hideHover: 'auto',
|
||||
xLabels: 'day',
|
||||
resize: true
|
||||
});
|
||||
{% endif %}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
181
front/dashboard/templates/index.html
Normal file
181
front/dashboard/templates/index.html
Normal file
@@ -0,0 +1,181 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1 class="page-header"><i class="fa fa-dashboard fa-fw"></i> Updates dashboard</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
<!-- server list -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-green">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3"><i class="fa fa-list-alt fa-5x"></i></div>
|
||||
<div class="col-xs-9 text-right huge">Server list</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'server-list' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Go to the most recent list</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- packages list -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-green">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3"><i class="fa fa-archive fa-5x"></i></div>
|
||||
<div class="col-xs-9 text-right huge">Packages list</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'packages-list' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Go to the list</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- OS stats -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-green">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3"> <i class="fa fa-pie-chart fa-5x"></i> </div>
|
||||
<div class="col-xs-9 text-right huge">OS statistics</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'os-statistics' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Go to last stats</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Manage -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3">
|
||||
<i class="fa fa-gears fa-5x"></i>
|
||||
</div>
|
||||
<div class="col-xs-9 text-right huge">Manage</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'manage' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Manage</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- manage-packages -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3">
|
||||
<i class="fa fa-gears fa-5x"></i>
|
||||
</div>
|
||||
<div class="col-xs-9 text-right huge">Manage Packages</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'manage-packages' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Manage Packages</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
<!-- server list -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-yellow">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3"><i class="fa fa-list-alt fa-5x"></i></div>
|
||||
<div class="col-xs-9 text-right huge">Updates history</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'history' 'updates' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Go to last month history</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- history uptime -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-yellow">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3"> <i class="fa fa-clock-o fa-5x"></i> </div>
|
||||
<div class="col-xs-9 text-right huge">Uptime history</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'history' 'uptime' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Go to last month history</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- history OS -->
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-yellow">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-xs-3">
|
||||
<i class="fa fa-linux fa-5x"></i>
|
||||
</div>
|
||||
<div class="col-xs-9 text-right huge">OS history</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'history' 'os' %}">
|
||||
<div class="panel-footer">
|
||||
<span class="pull-left">Go to last month history</span>
|
||||
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
40
front/dashboard/templates/manage-packages.html
Normal file
40
front/dashboard/templates/manage-packages.html
Normal file
@@ -0,0 +1,40 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1 class="page-header"> <i class="fa fa-archive fa-fw"></i> Manage Packages Import</h1>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4><i class="fa fa-file"></i> Manage files and imports</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="col-md-6">
|
||||
<div class="table-responsive">
|
||||
<table id="packages-list" class="table table-bordered table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='text-center'>Date</th>
|
||||
<th class='text-center'>(re)Import</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for d in all_dates %}
|
||||
<tr>
|
||||
<td class='text-center'>{{ d.year }}-{{ d.month|stringformat:"02d" }}-{{ d.day|stringformat:"02d" }}</td>
|
||||
<td class='text-center'><a href="{% url 'import-packages' d.year d.month d.day %}" title="Import"><i class="fa fa-plus text-success fa-lg"></i></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
57
front/dashboard/templates/manage.html
Normal file
57
front/dashboard/templates/manage.html
Normal file
@@ -0,0 +1,57 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1 class="page-header"> <i class="fa fa-gears fa-fw"></i> Manage dashboard</h1>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4><i class="fa fa-user"></i> Manage groups</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<a href="{% url 'update_groups' %}" class="btn btn-primary">Update groups</a>
|
||||
<a href="/admin" class="btn btn-primary">Admin page</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4><i class="fa fa-file"></i> Manage files and imports</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="col-md-6">
|
||||
<div class="table-responsive">
|
||||
<table id="server-list" class="table table-bordered table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='text-center'>Date</th>
|
||||
<th class='text-center'>(re)Import</th>
|
||||
<th class='text-center'>Clear from database</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for d in all_dates_status %}
|
||||
<tr>
|
||||
<td class='text-center'>{{ d.0.year }}-{{ d.0.month|stringformat:"02d" }}-{{ d.0.day|stringformat:"02d" }}</td>
|
||||
{% if d.1 %}
|
||||
<td class='text-center'><a href="{% url 'import' d.0.year d.0.month d.0.day %}" title="Re-import"><i class="fa fa-refresh text-info fa-lg"></i></a></td>
|
||||
<td class='text-center'><a href="{% url 'purge_statuses_by_date' d.0.year d.0.month d.0.day %}" title="Delete"><i class="fa fa-trash text-danger fa-lg"></i></a></td>
|
||||
{% else %}
|
||||
<td class='text-center'><a href="{% url 'import' d.0.year d.0.month d.0.day %}" title="Import"><i class="fa fa-plus text-success fa-lg"></i></a></td>
|
||||
<td class='text-center'><a href="#" class='disabled' title="Delete"><span class="danger"><i class="fa fa-trash fa-lg text-muted"></i></span></a></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
78
front/dashboard/templates/os-statistics.html
Normal file
78
front/dashboard/templates/os-statistics.html
Normal file
@@ -0,0 +1,78 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<div class="row" id="updates-stats">
|
||||
<div class="col-md-12">
|
||||
<h1 class="page-header"><i class="fa fa-pie-chart fa-fw"></i> OS statistics ({{ last_date|date:"Y-m-d" }})</h1>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4>OS repartition</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="col-md-5">
|
||||
<div id="os-stat"></div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-7">
|
||||
<table id="os-list" class="table table-bordered table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Hostname</th>
|
||||
<th>Number</th>
|
||||
<th>Percentage</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for stat in os_stat %}
|
||||
<tr>
|
||||
<td>{{ stat.0 }}</td>
|
||||
<td>{{ stat.1 }}</td>
|
||||
<td>{{ stat.2|floatformat:2 }}%</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
{% block scripts %}
|
||||
{% load static %}
|
||||
<script src="{% static 'js/plugins/morris/raphael.min.js' %}"></script>
|
||||
<script src="{% static 'js/plugins/morris/morris.min.js' %}"></script>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
Morris.Donut({
|
||||
element: 'os-stat',
|
||||
data: [
|
||||
{{ js_data|safe }}
|
||||
],
|
||||
{# colors: ['#0066cc', '#6666ff', '#9900cc', '#ff0066', '#ff3300', '#ff9900', '#ccff33', '#99ff66', '#00cc00', '#009999', '#99ffcc', '#ccccff'], #}
|
||||
resize: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="{% static 'js/datatables.min.js' %}"></script>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#os-list').DataTable({
|
||||
info: false,
|
||||
paging: false,
|
||||
searching: false,
|
||||
order: [[ 2, "desc" ]],
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
73
front/dashboard/templates/packages-list.html
Normal file
73
front/dashboard/templates/packages-list.html
Normal file
@@ -0,0 +1,73 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<!-- Statistic summary -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1 class="page-header"><i class="fa fa-archive fa-fw"></i> Packages Details</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<a href="#" id ="export-to-csv" class="btn btn-primary"><i class="fa fa-table"></i> Exports results to CSV</a>
|
||||
<div class="table-responsive">
|
||||
<table id="packages-list" class="table table-bordered table-hover table-striped">
|
||||
<!--<table id="server-list" class="display" cellspacing="0" width="100%">-->
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='text-center'><i class="fa fa-archive"></i> Packages name </th>
|
||||
<th class='text-center'><i class="fa fa-star"></i> Number of servers </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for p in packages_list %}
|
||||
<tr>
|
||||
<td ><a href="{% url 'packages-by-package' p.0 %}">{{ p.0 }}</td>
|
||||
<td class=text-center>{{ p.1 }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="to-top"><a href="#top"><i class="fa fa-lg fa-2x fa-arrow-up"></i></a></div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
{% block scripts %}
|
||||
|
||||
{% load static %}
|
||||
<!-- export to CSV -->
|
||||
<!-- source: https://bl.ocks.org/kalebdf/ee7a5e7f44416b2116c0 -->
|
||||
<script type="text/javascript" src="{% static 'js/html-to-csv.js' %}"></script>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$("#export-to-csv").click(function (event) {
|
||||
// var outputFile = 'export'
|
||||
var outputFile = 'export';
|
||||
outputFile = outputFile.replace('.csv','') + '.csv'
|
||||
// CSV
|
||||
exportTableToCSV.apply(this, [$('#packages-list'), outputFile]);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- cool server table -->
|
||||
<script type="text/javascript" src="{% static 'js/datatables.min.js' %}"></script>
|
||||
<script>
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#packages-list').DataTable({
|
||||
"paging": false,
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
79
front/dashboard/templates/packages.html
Normal file
79
front/dashboard/templates/packages.html
Normal file
@@ -0,0 +1,79 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<!-- Statistic summary -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1 class="page-header"><i class="fa fa-archive fa-fw"></i> Packages Details</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<a href="#" id ="export-to-csv" class="btn btn-primary"><i class="fa fa-table"></i> Exports results to CSV</a>
|
||||
<div class="table-responsive">
|
||||
<table id="packages-list" class="table table-bordered table-hover table-striped">
|
||||
<!--<table id="server-list" class="display" cellspacing="0" width="100%">-->
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='text-center'>Hostname</th>
|
||||
<th class='text-center'><i class="fa fa-archive"></i> Packages name </th>
|
||||
<th class='text-center'><i class="fa fa-asterisk"></i> Version</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for stat in packages %}
|
||||
<tr>
|
||||
<td><a href="{% url 'packages-by-host' stat.server %}">{{ stat.server }}</a></td>
|
||||
<td ><a href="{% url 'packages-by-package' stat.package_name %}">{{ stat.package_name }}</td>
|
||||
<td >{{ stat.package_version }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="to-top"><a href="#top"><i class="fa fa-lg fa-2x fa-arrow-up"></i></a></div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
{% block scripts %}
|
||||
|
||||
{% load static %}
|
||||
<!-- export to CSV -->
|
||||
<!-- source: https://bl.ocks.org/kalebdf/ee7a5e7f44416b2116c0 -->
|
||||
<script type="text/javascript" src="{% static 'js/html-to-csv.js' %}"></script>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$("#export-to-csv").click(function (event) {
|
||||
// var outputFile = 'export'
|
||||
var outputFile = 'export';
|
||||
outputFile = outputFile.replace('.csv','') + '.csv'
|
||||
// CSV
|
||||
exportTableToCSV.apply(this, [$('#packages-list'), outputFile]);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- cool server table -->
|
||||
<script type="text/javascript" src="{% static 'js/datatables.min.js' %}"></script>
|
||||
<script>
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#packages-list').DataTable({
|
||||
"paging": false,
|
||||
"order": [[ 1, "asc" ]],
|
||||
"aoColumns": [
|
||||
null, null, null
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
87
front/dashboard/templates/registration/login.html
Normal file
87
front/dashboard/templates/registration/login.html
Normal file
@@ -0,0 +1,87 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
{% load static %}
|
||||
<link href="{% static 'css/custom.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'css/sb-admin.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
|
||||
<link rel="shortcut-icon" type="image/x-icon" href="{% static 'images/favicon.ico' %}">
|
||||
<link rel="icon" type="image/x-icon" href="{% static 'images/favicon.ico' %}">
|
||||
|
||||
<title>Updates Dashboard</title>
|
||||
</head>
|
||||
|
||||
|
||||
<body>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="{% url 'index' %}">Smile Outsourcing Lyon - Servers information</a>
|
||||
</div>
|
||||
<div class="nav navbar-right top-nav">
|
||||
<!-- <button class="btn btn-lg btn-danger disabled">Confidential information</button> -->
|
||||
<li><a id="confidential-notice" class="disabled"><i class="fa fa-fw fa-warning"></i> Confidential information</a></li>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<!-- Page -->
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row text-center">
|
||||
<h1 class="page-header"><i class="fa fa-sign-in fa-fw"></i> Login</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<form method=post class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
{% if form.non_field_errors %}
|
||||
<div class="alert alert-danger">
|
||||
{{ form.non_field_errors }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="form-group{% if form.username.errors %} has-error{% endif %}">
|
||||
{{ form.username.errors }}
|
||||
<label for="{{ form.username.id_for_label }}" class="col-sm-3 control-label">Username</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" name="username" class="form-control" id="id_username" placeholder="Username" autofocus>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group{% if form.password.errors %} has-error{% endif %}">
|
||||
{{ form.password.errors }}
|
||||
<label for="{{ form.password.id_for_label }}" class="col-sm-3 control-label">Password</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="password" name="password" class="form-control" id="id_password" placeholder="Password">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-9">
|
||||
<button type="submit" class="btn btn-success">Sign in</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{% static 'js/jquery.js' %}"></script>
|
||||
<script src="{% static 'js/bootstrap.min.js' %}"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
141
front/dashboard/templates/server-list.html
Normal file
141
front/dashboard/templates/server-list.html
Normal file
@@ -0,0 +1,141 @@
|
||||
{% extends "squeleton.html" %}
|
||||
|
||||
|
||||
{% block page_content %}
|
||||
|
||||
<!-- Statistic summary -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{% if group %}
|
||||
<h1 class="page-header"><i class="fa fa-list-alt fa-fw"></i> Details for {{ group }} ({{ results_date|date:"Y-m-d" }} - {{ status_list|length }} servers)</h1>
|
||||
{% else %}
|
||||
<h1 class="page-header"><i class="fa fa-list-alt fa-fw"></i> Details ({{ results_date|date:"Y-m-d" }} - {{ status_list|length }} servers)</h1>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<ul class="pagination">
|
||||
{% if previous_result_date %}
|
||||
<li><a href="{% url 'server-list-by-date' previous_result_date.year previous_result_date.month previous_result_date.day %}"> <i class="fa fa-caret-left"></i> Previous result</a></li>
|
||||
{% else %}
|
||||
<li class="disabled"><a href="#"><i class="fa fa-caret-left"></i> Previous result</a></li>
|
||||
{% endif %}
|
||||
{% if next_result_date %}
|
||||
<li><a href="{% url 'server-list-by-date' next_result_date.year next_result_date.month next_result_date.day %}">Next result <i class="fa fa-caret-right"></i> </a></li>
|
||||
{% else %}
|
||||
<li class="disabled"><a href="#">Next result <i class="fa fa-caret-right"></i></a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<a href="#" id ="export-to-csv" class="btn btn-primary"><i class="fa fa-table"></i> Exports results to CSV</a>
|
||||
<div class="table-responsive">
|
||||
<table id="server-list" class="table table-bordered table-hover table-striped">
|
||||
<!--<table id="server-list" class="display" cellspacing="0" width="100%">-->
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='text-center'>OS</th>
|
||||
<th class='text-center'>Group</th>
|
||||
<th class='text-center'>Team</th>
|
||||
<th class='text-center'>Hostname</th>
|
||||
<th class='text-center'>Updates #</th>
|
||||
<th class='text-center'>Uptime</th>
|
||||
<th class='text-center'>Auto-update</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for stat in status_list %}
|
||||
<tr>
|
||||
<td class='status-{{ stat.os_status }} text-center'>{{ stat.server.os }}</td>
|
||||
<td class='text-center'><a href="{% url 'server-list-by-group' stat.server.group.name results_date.year results_date.month results_date.day %}">{{ stat.server.group }}</a></td>
|
||||
<td class='text-center'><a href="{% url 'server-list-by-team' stat.server.team.color results_date.year results_date.month results_date.day %}">{{ stat.server.team }}</a></td>
|
||||
<td><a href="{% url 'packages-by-host' stat.server.hostname %}">{{ stat.server.hostname }}</b></td>
|
||||
<td class='status-{{ stat.updates_status }} text-center'>{{ stat.updates }}</td>
|
||||
<td class='status-{{ stat.uptime_status }} text-center'>{{ stat.uptime }}</td>
|
||||
<td class='status-{{ stat.auto_updates_status }} text-center'>{{ stat.get_auto_updates_display }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="to-top"><a href="#top"><i class="fa fa-lg fa-2x fa-arrow-up"></i></a></div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
{% block scripts %}
|
||||
|
||||
{% load static %}
|
||||
<!-- export to CSV -->
|
||||
<!-- source: https://bl.ocks.org/kalebdf/ee7a5e7f44416b2116c0 -->
|
||||
<script type="text/javascript" src="{% static 'js/html-to-csv.js' %}"></script>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$("#export-to-csv").click(function (event) {
|
||||
// var outputFile = 'export'
|
||||
var outputFile = 'export';
|
||||
outputFile = outputFile.replace('.csv','') + '.csv'
|
||||
// CSV
|
||||
exportTableToCSV.apply(this, [$('#server-list'), outputFile]);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- cool server table -->
|
||||
<script type="text/javascript" src="{% static 'js/datatables.min.js' %}"></script>
|
||||
<script>
|
||||
// sort updates and uptime by number and put None at the end
|
||||
jQuery.fn.dataTableExt.oSort['num-none-asc'] = function(x,y) {
|
||||
if (x == y) return 0;
|
||||
else if (x == 'None') return 1;
|
||||
else if (y == 'None') return -1;
|
||||
else return ((parseInt(x) < parseInt(y)) ? -1 : ((parseInt(x) > parseInt(y)) ? 1 : 0));
|
||||
};
|
||||
jQuery.fn.dataTableExt.oSort['num-none-desc'] = function(x,y) {
|
||||
if (x == y) return 0;
|
||||
else if (x == 'None') return 1;
|
||||
else if (y == 'None') return -1;
|
||||
else return ((parseInt(x) < parseInt(y)) ? 1 : ((parseInt(x) > parseInt(y)) ? -1 : 0));
|
||||
};
|
||||
|
||||
// sort auto-updates status: Ok < Unkown < Error < N/A
|
||||
// Error < Unkown < Ok < N/A
|
||||
jQuery.fn.dataTableExt.oSort['auto-updates-asc'] = function(x,y) {
|
||||
if (x == y) return 0;
|
||||
else if (x == 'N/A') return 1;
|
||||
else if (y == 'N/A') return -1;
|
||||
else if (x == 'Ok') return -1;
|
||||
else if (y == 'Ok') return 1;
|
||||
else if (x == 'Error') return 1;
|
||||
else if (y == 'Error') return -1;
|
||||
};
|
||||
jQuery.fn.dataTableExt.oSort['auto-updates-desc'] = function(x,y) {
|
||||
if (x == y) return 0;
|
||||
else if (x == 'N/A') return 1;
|
||||
else if (y == 'N/A') return -1;
|
||||
else if (x == 'Ok') return 1;
|
||||
else if (y == 'Ok') return -1;
|
||||
else if (x == 'Error') return -1;
|
||||
else if (y == 'Error') return 1;
|
||||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#server-list').DataTable({
|
||||
"paging": false,
|
||||
"order": [[ 1, "asc" ]],
|
||||
"aoColumns": [
|
||||
null, null, null, null, {"sType": "num-none"}, {"sType": "num-none"}, {"sType": "auto-updates"}
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
83
front/dashboard/templates/squeleton.html
Normal file
83
front/dashboard/templates/squeleton.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
{% load static %}
|
||||
<link href="{% static 'css/custom.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'css/sb-admin.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'css/plugins/morris.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" type="text/css" href="{% static 'css/datatables.min.css' %}">
|
||||
<link rel="shortcut-icon" type="image/x-icon" href="{% static 'images/favicon.ico' %}">
|
||||
<link rel="icon" type="image/x-icon" href="{% static 'images/favicon.ico' %}">
|
||||
|
||||
{% block head %}
|
||||
{% endblock %}
|
||||
|
||||
<title>Updates Dashboard</title>
|
||||
</head>
|
||||
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="{% url 'index' %}">Smile Outsourcing Lyon - Servers information</a>
|
||||
</div>
|
||||
<div class="nav navbar-right top-nav">
|
||||
<!-- <button class="btn btn-lg btn-danger disabled">Confidential information</button> -->
|
||||
<li><a href="{% url 'logout' %}?next=/"><i class="fa fa-fw fa-sign-out"></i> Log out</a></li>
|
||||
<li><a id="confidential-notice" class="disabled"><i class="fa fa-fw fa-warning"></i> Confidential information</a></li>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar Menu Items -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
<li> <a href="{% url 'server-list' %}"><i class="fa fa-fw fa-list-alt"></i> Detailed list</a> </li>
|
||||
<li> <a href="{% url 'packages-list' %}"><i class="fa fa-fw fa-archive"></i> Packages list</a> </li>
|
||||
<li> <a href="{% url 'os-statistics' %}"><i class="fa fa-fw fa-pie-chart"></i> OS statistics</a> </li>
|
||||
|
||||
<li>
|
||||
<a class="disabled"><i class="fa fa-fw fa-area-chart"></i> Monthly charts</a></a>
|
||||
<ul class="collapse visible">
|
||||
<li> <a href="{% url 'history' 'updates' %}"><i class="fa fa-fw fa-refresh"></i> Updates status</a> </li>
|
||||
<li> <a href="{% url 'history' 'uptime' %}"><i class="fa fa-fw fa-clock-o"></i> Uptime status</a> </li>
|
||||
<li> <a href="{% url 'history' 'os' %}"><i class="fa fa-fw fa-linux"></i> OS status</a> </li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li> <a href="{% url 'manage' %}"><i class="fa fa-fw fa-gears"></i> Manage</a> </li>
|
||||
<li> <a href="{% url 'manage-packages' %}"><i class="fa fa-fw fa-gears"></i> Manage Packages</a> </li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<!-- Page -->
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
|
||||
{% block page_content %}
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{% static 'js/jquery.js' %}"></script>
|
||||
<script src="{% static 'js/bootstrap.min.js' %}"></script>
|
||||
|
||||
{% block scripts %}
|
||||
{% endblock %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user