MT#7247 add jobname field

- support get projects by release

Change-Id: Iab2729b3cd1e8934ce68495b9aae73556684c3d4
changes/45/2245/1
Victor Seva 10 years ago
parent d8fba8ade5
commit 282c1a265c

@ -179,7 +179,7 @@ function update_job_info(release, project, uuid, job) {
if (! $.project[uuid][job].failed ) {
$.ajax({
url: '/jenkinsbuildinfo/?format=json&tag=' + uuid
+ '&param_release={{ release}}&projectname=' + job,
+ '&param_release={{ release}}&jobname=' + job,
method: 'GET',
contentType: "application/json; charset=utf-8",
dataType: "json",
@ -203,7 +203,7 @@ function update_uuid_info(release, project, uuid) {
function successFunc(data, textStatus, jqXHR ) {
$(data).each(function() {
var job = this.projectname;
var job = this.jobname;
$.project[uuid].jobs.add(job);
if (! $.project[uuid][job]) {
@ -256,6 +256,9 @@ function get_uuids_for_project(release, project) {
console.warn(project + " skip null uuid");
return;
}
if ($.project.uuids.has(uuid)) {
return;
}
$.project.uuids.add(uuid);
if (! $.project[uuid] ) {
$.project[uuid] = { failed: false, jobs: new Set(),};
@ -283,6 +286,7 @@ function get_uuids_for_project(release, project) {
$('#' + project + '-error').html(error);
$.project.failed = true;
}
$.ajax({
url: '/release/{{ release }}/' + project + '/?format=json',
method: 'GET',

@ -181,7 +181,7 @@ function update_job_info(release, project, uuid, job) {
if (! $.release[project][uuid][job].failed ) {
$.ajax({
url: '/jenkinsbuildinfo/?format=json&tag=' + uuid
+ '&param_release={{ release}}&projectname=' + job,
+ '&param_release={{ release}}&jobname=' + job,
method: 'GET',
contentType: "application/json; charset=utf-8",
dataType: "json",
@ -205,7 +205,7 @@ function update_uuid_info(release, project, uuid) {
function successFunc(data, textStatus, jqXHR ) {
$(data).each(function() {
var job = this.projectname;
var job = this.jobname;
$.release[project][uuid].jobs.add(job);
if (! $.release[project][uuid][job]) {
@ -258,6 +258,9 @@ function get_uuids_for_project(release, project) {
console.warn(project + " skip null uuid");
return;
}
if ($.release[project].uuids.has(uuid)) {
return;
}
$.release[project].uuids.add(uuid);
if (! $.release[project][uuid] ) {
$.release[project][uuid] = { failed: false, jobs: new Set(),};
@ -285,6 +288,7 @@ function get_uuids_for_project(release, project) {
$('#' + project + '-error').html(error);
$.release[project].failed = true;
}
$.ajax({
url: '/release/{{ release }}/' + project + '/?format=json',
method: 'GET',

@ -12,7 +12,8 @@
"param_ppa": null,
"param_release": "mr3.1-fake",
"param_tag": null,
"projectname": "fake-source",
"projectname": "fake",
"jobname": "fake-source",
"repo_name": null,
"result": "FAILED",
"tag": "UUID1"
@ -33,7 +34,8 @@
"param_ppa": null,
"param_release": "mr3.1-fake",
"param_tag": null,
"projectname": "fake-get-code",
"projectname": "fake",
"jobname": "fake-get-code",
"repo_name": null,
"result": "FAILED",
"tag": "UUID0"
@ -54,7 +56,8 @@
"param_ppa": null,
"param_release": "mr3.1-fake",
"param_tag": null,
"projectname": "fake-source-tests",
"projectname": "fake",
"jobname": "fake-source-tests",
"repo_name": null,
"result": "SUCCESS",
"tag": "UUID1"
@ -75,7 +78,8 @@
"param_ppa": null,
"param_release": "mr3.1-fake",
"param_tag": null,
"projectname": "fake-get-code",
"projectname": "fake",
"jobname": "fake-get-code",
"repo_name": null,
"result": "SUCCESS",
"tag": "UUID1"

@ -13,25 +13,21 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='JenkinsBuildInfo',
fields=[
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('tag', models.CharField(max_length=32, null=True)),
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('tag', models.CharField(max_length=64, null=True)),
('projectname', models.CharField(max_length=100)),
('jobname', models.CharField(max_length=100)),
('buildnumber', models.IntegerField()),
('date', models.DateTimeField(auto_now_add=True)),
('result', models.CharField(max_length=50)),
('job_url', models.URLField()),
('gerrit_patchset', models.CharField(
max_length=50, null=True)),
('gerrit_patchset', models.CharField(max_length=50, null=True)),
('gerrit_change', models.CharField(max_length=50, null=True)),
('gerrit_eventtype', models.CharField(
max_length=50, null=True)),
('gerrit_eventtype', models.CharField(max_length=50, null=True)),
('param_tag', models.CharField(max_length=50, null=True)),
('param_branch', models.CharField(max_length=50, null=True)),
('param_release', models.CharField(max_length=50, null=True)),
('param_distribution', models.CharField(
max_length=50, null=True)),
('param_distribution', models.CharField(max_length=50, null=True)),
('param_ppa', models.CharField(max_length=50, null=True)),
('repo_name', models.CharField(max_length=50, null=True)),
],

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('repoapi', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='jenkinsbuildinfo',
name='tag',
field=models.CharField(max_length=64, null=True),
),
]

@ -25,26 +25,35 @@ class JenkinsBuildInfoManager(models.Manager):
else:
return res.values('param_release')
def release_uuids_by_project(self, release, project, flat=True):
def release_projects(self, release, flat=True):
res = self.get_queryset().filter(
param_release=release, projectname__startswith=project).distinct()
param_release=release).values('projectname').distinct()
if flat:
return res.values_list('projectname', flat=True)
else:
return res.values('projectname')
def release_project_uuids(self, release, project, flat=True):
res = self.get_queryset().filter(
param_release=release, projectname=project).distinct()
if flat:
return res.values_list('tag', flat=True)
else:
return res.values('tag')
def projects_by_uuid(self, release, project, uuid, flat=True):
def jobs_by_uuid(self, release, project, uuid, flat=True):
res = self.get_queryset().filter(tag=uuid, param_release=release,
projectname__startswith=project)
projectname=project)
if flat:
return res.order_by('-date').values_list('projectname', flat=True)
return res.order_by('-date').values_list('jobname', flat=True)
else:
return res.order_by('-date').values('projectname')
return res.order_by('-date').values('jobname')
class JenkinsBuildInfo(models.Model):
tag = models.CharField(max_length=64, null=True)
projectname = models.CharField(max_length=100)
jobname = models.CharField(max_length=100)
buildnumber = models.IntegerField()
date = models.DateTimeField(auto_now_add=True)
result = models.CharField(max_length=50)
@ -65,5 +74,5 @@ class JenkinsBuildInfo(models.Model):
objects = JenkinsBuildInfoManager()
def __str__(self):
return "%s:%d[%s]" % (self.projectname,
return "%s:%d[%s]" % (self.jobname,
self.buildnumber, self.tag)

@ -21,7 +21,3 @@ class JenkinsBuildInfoSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.JenkinsBuildInfo
class ReleaseListSerializer(serializers.Serializer):
param_release = serializers.CharField(max_length=50)

@ -22,6 +22,7 @@ class JenkinsBuildInfoTestCase(TestCase):
def test_creation_no_tag(self):
jbi = JenkinsBuildInfo.objects.create(
projectname='fake',
jobname='fake-get-code',
buildnumber=1,
result='OK')
self.assertIsNone(jbi.tag)
@ -29,6 +30,7 @@ class JenkinsBuildInfoTestCase(TestCase):
def test_empty_tag_with_release(self):
jbi = JenkinsBuildInfo.objects.create(
projectname='fake',
jobname='fake-get-code',
buildnumber=1,
result='OK',
param_release='release-mr4.0')

@ -24,22 +24,27 @@ class JBIQueriesTestCase(TestCase):
releases = JenkinsBuildInfo.objects.releases()
self.assertItemsEqual(releases, ['mr3.1-fake', ])
def test_release_uuids_by_project(self):
def test_release_projects(self):
projects = ['fake', ]
p = JenkinsBuildInfo.objects.release_projects('mr3.1-fake')
self.assertItemsEqual(p, projects)
def test_release_project_uuids(self):
projects = ['fake', ]
uuids_ok = dict()
uuids = dict()
uuids_ok['fake'] = ['UUID1', 'UUID0']
for p in projects:
uuids[p] = JenkinsBuildInfo.objects.release_uuids_by_project(
uuids[p] = JenkinsBuildInfo.objects.release_project_uuids(
'mr3.1-fake', p)
self.assertItemsEqual(uuids_ok[p], uuids[p])
def test_projects_by_uuid(self):
projects = JenkinsBuildInfo.objects.projects_by_uuid(
def test_jobs_by_uuid(self):
jobs = JenkinsBuildInfo.objects.jobs_by_uuid(
'mr3.1-fake', 'fake', 'UUID0')
self.assertItemsEqual(['fake-get-code', ], projects)
projects = JenkinsBuildInfo.objects.projects_by_uuid(
self.assertItemsEqual(['fake-get-code', ], jobs)
jobs = JenkinsBuildInfo.objects.jobs_by_uuid(
'mr3.1-fake', 'fake', 'UUID1')
self.assertItemsEqual(
['fake-get-code', 'fake-source-tests', 'fake-source'], projects)
['fake-get-code', 'fake-source-tests', 'fake-source'], jobs)

@ -27,6 +27,7 @@ class TestRest(APITestCase):
def test_jbi_creation(self):
data = {"url": "http://127.0.0.1:8000/jenkinsbuildinfo/1/",
"projectname": "fake",
"jobname": "fake-get-code",
"buildnumber": 1,
"result": "OK",
"job_url": "http://fake.org/gogo", }
@ -34,6 +35,7 @@ class TestRest(APITestCase):
"url": "http://testserver/jenkinsbuildinfo/1/",
"tag": None,
"projectname": "fake",
"jobname": "fake-get-code",
"buildnumber": 1,
"result": "OK",
"job_url": "http://fake.org/gogo",

@ -29,6 +29,9 @@ api_patterns = [
url(r'^release/$',
views.ReleaseList.as_view(),
name='release-list'),
url(r'^release/(?P<release>[\w\d\.-]+)/$',
views.ProjectList.as_view(),
name='project-list'),
url(r'^release/(?P<release>[\w\d\.-]+)/(?P<project>[\w\d\.-]+)/$',
views.ProjectUUIDList.as_view(),
name='projectuuid-list'),

@ -37,7 +37,7 @@ class JenkinsBuildInfoFilter(django_filters.FilterSet):
class Meta:
model = jbi
fields = ['tag', 'projectname', 'param_release', 'date']
fields = ['tag', 'projectname', 'jobname', 'param_release', 'date']
order_by = ['-date', ]
@ -52,22 +52,47 @@ class JenkinsBuildInfoDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = serializers.JenkinsBuildInfoSerializer
class ReleaseList(generics.ListAPIView):
queryset = jbi.objects.releases(flat=False)
serializer_class = serializers.ReleaseListSerializer
class ReleaseList(APIView):
def get(self, request, format=None):
res = jbi.objects.releases(flat=False)
for r in res:
r['url'] = reverse(
'project-list',
args=[r['param_release']],
request=request)
return Response(res)
class ProjectList(APIView):
def get(self, request, release, format=None):
res = jbi.objects.release_projects(
release, flat=False)
for r in res:
r['url'] = reverse(
'projectuuid-list',
args=[release, r['projectname']],
request=request)
return Response(res)
class ProjectUUIDList(APIView):
def get(self, request, release, project, format=None):
res = jbi.objects.release_uuids_by_project(
res = jbi.objects.release_project_uuids(
release, project, flat=False)
for r in res:
r['url'] = reverse(
'uuidinfo-list',
args=[release, project, r['tag']],
request=request)
return Response(res)
class UUIDInfoList(APIView):
def get(self, request, release, project, uuid, format=None):
res = jbi.objects.projects_by_uuid(
res = jbi.objects.jobs_by_uuid(
release, project, uuid, flat=False)
return Response(res)

Loading…
Cancel
Save