Retrieve repo information via json requests
This commit is contained in:
parent
3821a52092
commit
0515ff91fc
|
@ -1,8 +1,41 @@
|
|||
function inflateRepo(repo_json, label, template_id, container_id) {
|
||||
const template_copy = $(template_id).clone();
|
||||
$(template_copy).find(".repo-label").html(label);
|
||||
$(template_copy).find(".repo-location").html(repo_json.location);
|
||||
$(template_copy).find(".repo-latest-backup").html(repo_json.latest_backup);
|
||||
$(template_copy).find(".repo-size").html(repo_json.size);
|
||||
$(template_copy).find(".repo-recent-errors").html(repo_json.recent_errors);
|
||||
|
||||
let bg_class = "bg-primary";
|
||||
if (repo_json.error) {
|
||||
bg_class = "bg-danger";
|
||||
} else if (repo_json.warning) {
|
||||
bg_class = "bg-warning";
|
||||
}
|
||||
$(template_copy).addClass(bg_class);
|
||||
|
||||
$(container_id).append(template_copy);
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener("DOMContentLoaded", function () {
|
||||
$.getJSON( "repo_daily.json", function( json ) {
|
||||
// todo: inflate each repo and colour background accordingly
|
||||
const template = $('#repo-template').html();
|
||||
const container = $('#repo-container');
|
||||
|
||||
$.getJSON(`/repo_list.json`, function (repo_list) {
|
||||
repo_list.labels.forEach(function (repo_label) {
|
||||
$.getJSON(`/repo/${repo_label}.json`, function (repo_json) {
|
||||
inflateRepo(repo_json, repo_label, template, container);
|
||||
})
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
$.getJSON("repo_daily.json", function (json) {
|
||||
draw_time_graph("daily_backup_size", json.repos, json.dates, json.units);
|
||||
});
|
||||
$.getJSON( "repo_monthly.json", function( json ) {
|
||||
$.getJSON("repo_monthly.json", function (json) {
|
||||
draw_time_graph("monthly_backup_size", json.repos, json.dates, json.units);
|
||||
});
|
||||
}, false);
|
||||
|
|
|
@ -26,50 +26,18 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% if repo_list %}
|
||||
<div class="grid mx-auto d-flex justify-content-center flex-wrap">
|
||||
{% for repo in repo_list %}
|
||||
<div style="width: 600px;" class="repo-container shadow rounded overflow-hidden
|
||||
{% if repo.error %}bg-danger{% elif repo.warning %}bg-warning{% else %}bg-primary{% endif %}">
|
||||
<div class="row me-1 overflow-hidden text-truncate">
|
||||
<h2 class="h2"><a href="/repo/{{ repo.label }}">{{ repo.label }}</a>
|
||||
<small class="text-muted"> {{ repo.location }}</small>
|
||||
</h2>
|
||||
</div>
|
||||
<dl class="att-label row ps-3">
|
||||
<dt class="col-4">Latest backup:</dt>
|
||||
<dd class="col-8">{{ repo.last_backup }}</dd>
|
||||
</dl>
|
||||
<dl class="att-label row ps-3">
|
||||
<dt class="col-4">Size:</dt>
|
||||
<dd class="col-8">{{ repo.size_string }}</dd>
|
||||
</dl>
|
||||
{% if repo.recent_errors|length > 0 %}
|
||||
<dl class="att-label row">
|
||||
<dt class="col-12 h4">Recent errors:</dt>
|
||||
</dl>
|
||||
<dl class="att-label row ps-3">
|
||||
{% for error in repo.recent_errors %}
|
||||
<dt class="col-4">{{ error.time_ago }}</dt>
|
||||
<dd class="col-8 text-truncate">{{ error.error }}</dd>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</dl>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div id="repo-container" class="grid mx-auto d-flex justify-content-center flex-wrap">
|
||||
<div style="width: 600px;" class="repo-container shadow rounded bg-info overflow-hidden">
|
||||
<canvas id="daily_backup_size" width="400" height="200"></canvas>
|
||||
</div>
|
||||
<div style="width: 600px;" class="repo-container shadow rounded bg-info overflow-hidden">
|
||||
<canvas id="monthly_backup_size" width="400" height="200"></canvas>
|
||||
</div>
|
||||
{% else %}
|
||||
<div style="width: 600px;" class="repo-container shadow rounded bg-primary overflow-hidden">
|
||||
<div style="width: 600px;" class="repo-container bg-primary overflow-hidden">
|
||||
<h2 class="h2">No repositories found</h2>
|
||||
{# <div style="width: 600px;" class="repo-container shadow rounded bg-primary overflow-hidden">#}
|
||||
{# <div style="width: 600px;" class="repo-container bg-primary overflow-hidden">#}
|
||||
{# <h2 class="h2">No repositories found</h2>#}
|
||||
{# </div>#}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<script id="repo-template" type="text/x-custom-template">
|
||||
<div style="width: 600px;" class="repo-container shadow rounded overflow-hidden">
|
||||
<div class="row me-1 overflow-hidden text-truncate">
|
||||
<h2 class="repo-label h2">
|
||||
<h2 class="h2"> <span class="repo-label"></span>
|
||||
<small class="repo-location text-muted"></small>
|
||||
</h2>
|
||||
</div>
|
||||
|
|
|
@ -7,7 +7,8 @@ urlpatterns = [
|
|||
path('', cache_page(60)(views.index), name='index'),
|
||||
path('repo_daily.json', cache_page(3600)(views.repo_daily_json), name='daily repo json'),
|
||||
path('repo_monthly.json', cache_page(3600 * 12)(views.repo_monthly_json), name='monthly repo json'),
|
||||
path('repo_list.json', cache_page(3600)(views.repo_list), name='repo list'),
|
||||
path('repo_list.json', cache_page(60)(views.repo_list_json), name='repo list'),
|
||||
path('repo/<str:repo_label>.json', cache_page(60)(views.repo_json), name='repo json'),
|
||||
path('repo/<str:repo_label>', cache_page(60)(views.repo), name='repo'),
|
||||
path('post/repo', views.post_repo, name='post repo'),
|
||||
path('post/archive', views.post_archive, name='post archive'),
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
from .views import index, repo, axes
|
||||
from .post import post_repo, post_archive, post_error, post_location
|
||||
from .json import repo_daily_json, repo_monthly_json, repo_list
|
||||
from .json import repo_daily_json, repo_monthly_json, repo_list_json, repo_json
|
||||
|
|
|
@ -1,11 +1,23 @@
|
|||
from datetime import datetime, timedelta
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.http import JsonResponse
|
||||
from ..models import Repo, Label
|
||||
from ..utility import data
|
||||
from ..utility.time import last_day_previous_months
|
||||
|
||||
|
||||
def repo_list(request):
|
||||
def repo_json(request, repo_label):
|
||||
repo = get_object_or_404(Repo, label__label=repo_label)
|
||||
repo_dict = {'location': repo.location,
|
||||
'latest_backup': repo.last_backup(),
|
||||
'size': repo.size_string(),
|
||||
'recent_errors': "not implemented",
|
||||
'warning': repo.warning(),
|
||||
'error': repo.error()}
|
||||
return JsonResponse(repo_dict)
|
||||
|
||||
|
||||
def repo_list_json(request):
|
||||
return JsonResponse({'labels': [repo.label.label for repo in Repo.objects.all()]})
|
||||
|
||||
|
||||
|
|
|
@ -3,12 +3,7 @@ from ..models import Repo
|
|||
|
||||
|
||||
def index(request):
|
||||
repo_list = Repo.objects.all()
|
||||
|
||||
context = {
|
||||
'repo_list': repo_list,
|
||||
}
|
||||
return render(request, 'borg/index.html', context)
|
||||
return render(request, 'borg/index.html', {})
|
||||
|
||||
|
||||
def repo(request, repo_label: str):
|
||||
|
|
Loading…
Reference in New Issue
Block a user