MT#7247 panel: add latest_uuid view

* shortcut like /<release>/<project>/latest/
* link added in project block
* add 404 responses for views
* format job date to UTC
* align to right date and number of jobs

Change-Id: Ia89662d17d3c6c9448ce91f9ca435ede37b7f705
changes/26/7526/1
Victor Seva 9 years ago
parent afb792a69c
commit 00f24c53b5

@ -154,7 +154,7 @@ function set_uuid_status(project, uuid, job, value) {
} }
} }
} }
div_uuid_date.html(new Date(value.date)); div_uuid_date.html(new Date(value.date).toUTCString());
$('#' + id + '-badge').html(jobs); $('#' + id + '-badge').html(jobs);
if (uuid == $.release[project].last_uuid) { if (uuid == $.release[project].last_uuid) {
set_project_status(project); set_project_status(project);
@ -257,6 +257,15 @@ function create_new_project_panel(project) {
var div_title = $('.project-name', div_project); var div_title = $('.project-name', div_project);
div_title.html('<a name="' + project +'" href="./' + project + '">' + project + '</a>'); div_title.html('<a name="' + project +'" href="./' + project + '">' + project + '</a>');
var latest_uuid_url;
if ($.panel == 'project_uuid') {
latest_uuid_url = '../latest';
} else if ($.panel == 'release') {
latest_uuid_url = project + '/latest';
} else {
latest_uuid_url = 'latest';
}
$('.latest-uuid-url', div_project).attr('href', latest_uuid_url);
$('.error', div_project).attr('id', project + '-error').removeClass('error'); $('.error', div_project).attr('id', project + '-error').removeClass('error');
div_project.appendTo('#project-list'); div_project.appendTo('#project-list');
console.debug('project ' + project + ' created'); console.debug('project ' + project + ' created');

@ -1,21 +1,24 @@
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title project-name"></h3> <span class="panel-title project-name"></span>
<div class="pull-right">
<a class="badge latest-uuid-url" href="">latest</a>
</div>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="panel panel-default hidden uuid-clone"> <div class="panel panel-default hidden uuid-clone">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title"> <div class="panel-title">
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-8">
<a class="uuid-name">uuid</a> <a class="uuid-name">uuid</a>
<span class="label label-primary uuid-latest hidden">Latest</span> <span class="label label-primary uuid-latest hidden">Latest</span>
</div> </div>
<div class="col-md-4 text-info uuid-date">date</div> <div class="col-md-4">
<div class="col-md-4 test-info"> <span class="text-info uuid-date">date</span>
<span class="badge uuid-badge"></span> <span class="badge test-info uuid-badge"/>
</div> </div>
</div> </div>
</h3> </div>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<ul class="list-group list-inline uuid-list"> <ul class="list-group list-inline uuid-list">

@ -21,6 +21,8 @@ urlpatterns = [
url(r'^(?P<_release>[^/]+)/$', views.release, name='release-view'), url(r'^(?P<_release>[^/]+)/$', views.release, name='release-view'),
url(r'^(?P<_release>[^/]+)/(?P<_project>[^/]+)/$', url(r'^(?P<_release>[^/]+)/(?P<_project>[^/]+)/$',
views.project, name='project-view'), views.project, name='project-view'),
url(r'^(?P<_release>[^/]+)/(?P<_project>[^/]+)/latest/$',
views.latest_uuid, name='latest_uuid-view'),
url(r'^(?P<_release>[^/]+)/(?P<_project>[^/]+)/(?P<_uuid>[^/]+)/$', url(r'^(?P<_release>[^/]+)/(?P<_project>[^/]+)/(?P<_uuid>[^/]+)/$',
views.uuid, name='uuid-view'), views.uuid, name='uuid-view'),
] ]

@ -14,6 +14,7 @@
# with this program. If not, see <http://www.gnu.org/licenses/>. # with this program. If not, see <http://www.gnu.org/licenses/>.
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponseNotFound
from repoapi.models import JenkinsBuildInfo as jbi from repoapi.models import JenkinsBuildInfo as jbi
@ -23,29 +24,55 @@ def index(request):
def release(request, _release): def release(request, _release):
projects = jbi.objects.release_projects_full(_release) if jbi.objects.is_release(_release):
context = {'release': _release, projects = jbi.objects.release_projects_full(_release)
'projects': projects} context = {'release': _release,
return render(request, 'panel/release.html', context) 'projects': projects}
return render(request, 'panel/release.html', context)
else:
return HttpResponseNotFound('release {} not found'.format(_release))
def project(request, _release, _project): def project(request, _release, _project):
latest_uuid = jbi.objects.latest_uuid_js(_release, _project) if jbi.objects.is_project(_release, _project):
uuids = jbi.objects.release_project_uuids_set(_release, _project) latest_uuid = jbi.objects.latest_uuid_js(_release, _project)
context = { uuids = jbi.objects.release_project_uuids_set(_release, _project)
'project': _project, context = {
'release': _release, 'project': _project,
'uuids': uuids, 'release': _release,
'latest_uuid': latest_uuid} 'uuids': uuids,
return render(request, 'panel/project.html', context) 'latest_uuid': latest_uuid}
return render(request, 'panel/project.html', context)
else:
return HttpResponseNotFound('project {} not found'.format(_project))
def uuid(request, _release, _project, _uuid): def uuid(request, _release, _project, _uuid):
latest_uuid = jbi.objects.is_latest_uuid_js(_release, _project, _uuid) if jbi.objects.is_uuid(_release, _project, _uuid):
context = { latest_uuid = jbi.objects.is_latest_uuid_js(_release, _project, _uuid)
'project': _project, context = {
'release': _release, 'project': _project,
'uuid': _uuid, 'release': _release,
'latest_uuid': latest_uuid, 'uuid': _uuid,
} 'latest_uuid': latest_uuid,
return render(request, 'panel/project_uuid.html', context) }
return render(request, 'panel/project_uuid.html', context)
else:
return HttpResponseNotFound('uuid {} not found'.format(_uuid))
def latest_uuid(request, _release, _project):
if jbi.objects.is_project(_release, _project):
latest_uuid = jbi.objects.latest_uuid_js(_release, _project)
if latest_uuid is not None:
context = {
'project': _project,
'release': _release,
'uuid': latest_uuid['tag'],
'latest_uuid': latest_uuid,
}
return render(request, 'panel/project_uuid.html', context)
else:
return HttpResponseNotFound('no latest uuid')
else:
return HttpResponseNotFound('project {} not found'.format(_project))

@ -45,26 +45,42 @@ class JenkinsBuildInfoManager(models.Manager):
def releases(self, flat=True): def releases(self, flat=True):
res = self.get_queryset().values('param_release').distinct() res = self.get_queryset().values('param_release').distinct()
if flat: if res.exists():
return res.values_list('param_release', flat=True) if flat:
else: return res.values_list('param_release', flat=True)
return res.values('param_release') else:
return res.values('param_release')
def is_release(self, release):
res = self.get_queryset().filter(
param_release=release,
tag__isnull=False)
return res.exists()
def release_projects(self, release, flat=True): def release_projects(self, release, flat=True):
res = self.get_queryset().filter( res = self.get_queryset().filter(
param_release=release, param_release=release,
tag__isnull=False).values('projectname').distinct() tag__isnull=False).values('projectname').distinct()
if flat: if res.exists():
return res.values_list('projectname', flat=True) if flat:
else: return res.values_list('projectname', flat=True)
return res.values('projectname') else:
return res.values('projectname')
def is_project(self, release, project):
res = self.get_queryset().filter(
param_release=release,
projectname=project,
tag__isnull=False)
return res.exists()
def release_project_uuids_set(self, release, project): def release_project_uuids_set(self, release, project):
res = self.get_queryset().filter( res = self.get_queryset().filter(
param_release=release, param_release=release,
projectname=project, projectname=project,
tag__isnull=False).distinct() tag__isnull=False).distinct()
return res.order_by('projectname') if res.exists():
return res.order_by('projectname')
def release_project_uuids(self, release, project, flat=True): def release_project_uuids(self, release, project, flat=True):
res = self.get_queryset().filter( res = self.get_queryset().filter(
@ -76,6 +92,13 @@ class JenkinsBuildInfoManager(models.Manager):
else: else:
return res.order_by('projectname').values('tag') return res.order_by('projectname').values('tag')
def is_uuid(self, release, project, uuid):
res = self.get_queryset().filter(
param_release=release,
projectname=project,
tag=uuid)
return res.exists()
def jobs_by_uuid(self, release, project, uuid): def jobs_by_uuid(self, release, project, uuid):
return self.get_queryset().filter(tag=uuid, param_release=release, return self.get_queryset().filter(tag=uuid, param_release=release,
projectname=project).order_by('date') projectname=project).order_by('date')
@ -86,7 +109,7 @@ class JenkinsBuildInfoManager(models.Manager):
param_release=release, param_release=release,
projectname=project, projectname=project,
tag__isnull=False) tag__isnull=False)
if res is not None: if res.exists():
return res.latest('date') return res.latest('date')
def latest_uuid(self, release, project): def latest_uuid(self, release, project):

Loading…
Cancel
Save