Merge lp:~stevanr/linaro-ci-dashboard/fix_jenkins_dashboard_lib into lp:linaro-ci-dashboard

Proposed by Stevan Radaković
Status: Merged
Merged at revision: 62
Proposed branch: lp:~stevanr/linaro-ci-dashboard/fix_jenkins_dashboard_lib
Merge into: lp:linaro-ci-dashboard
Diff against target: 87 lines (+32/-9)
3 files modified
dashboard/jenkinsserver/models/jenkins_server.py (+8/-2)
dashboard/jenkinsserver/tests/test_jenkins_server.py (+18/-1)
dashboard/lib/jenkins_dashboard.py (+6/-6)
To merge this branch: bzr merge lp:~stevanr/linaro-ci-dashboard/fix_jenkins_dashboard_lib
Reviewer Review Type Date Requested Status
Paul Sokolovsky Approve
Georgy Redkozubov Pending
Milo Casagrande Pending
Review via email: mp+124936@code.launchpad.net

Description of the change

Fix exception handling for jenkins lib extension.

To post a comment you must log in.
Revision history for this message
Paul Sokolovsky (pfalcon) wrote :

I would really suggest to use log.exception() in exception handlers - let's see what actual underlying error. Later, when we go into production mode, we can replace those which appear to frequently and don't represent real error with .info()/.warning() . But for time being ability to see real error which happens is a must imho.

59. By Stevan Radaković

Add exception log. Fix some more errors in extended jenkins lib.

Revision history for this message
Paul Sokolovsky (pfalcon) wrote :

Approved, thanks.

review: Approve
60. By Stevan Radaković

Fix tests.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'dashboard/jenkinsserver/models/jenkins_server.py'
2--- dashboard/jenkinsserver/models/jenkins_server.py 2012-09-17 13:15:47 +0000
3+++ dashboard/jenkinsserver/models/jenkins_server.py 2012-09-18 16:03:19 +0000
4@@ -71,7 +71,7 @@
5 # update the build info in CI.
6 if build.remote_number and \
7 jenkins_build["number"] == build.remote_number:
8- self.get_build_info()
9+ self.get_build_info(build)
10
11 def get_build_info(self, build):
12 jenkins_build = self.jenkins.get_build_info(build.loop.name,
13@@ -90,7 +90,13 @@
14 builds = LoopBuild.objects.filter(
15 status__in=LoopBuild.NON_FINISHED_STATUSES)
16 for build in builds:
17- self.get_build_info(build)
18+ # We don't wont the sync proces to fail if there is no particular
19+ # loop present in jenkins. Log the error and continue.
20+ try:
21+ self.get_build_info(build)
22+ except:
23+ self.log.exception("build[%s] does not exist for job %s" % (build.remote_number, build.loop.name))
24+ pass
25
26 def create_job(self, jname, jxml):
27 """ Creates a new job on jenkins if its not already present """
28
29=== modified file 'dashboard/jenkinsserver/tests/test_jenkins_server.py'
30--- dashboard/jenkinsserver/tests/test_jenkins_server.py 2012-08-22 14:44:49 +0000
31+++ dashboard/jenkinsserver/tests/test_jenkins_server.py 2012-09-18 16:03:19 +0000
32@@ -99,5 +99,22 @@
33 integration_loop.command = 'make test'
34 integration_loop.save()
35 build_number = self.server.schedule_job_build("test-loop")
36- self.assertIs(build_number, 1)
37+ self.assertIsNotNone(build_number)
38 self.server.delete_job("test-loop")
39+
40+ def test_sync_unfinished_builds_no_build_present(self):
41+ integration_loop = IntegrationLoop()
42+ integration_loop.name = self.test_job_name
43+ integration_loop.server = self.server
44+ integration_loop.branch = 'lp:linaro-ci-dashboard'
45+ integration_loop.precommand = 'make migrate'
46+ integration_loop.command = 'make test'
47+ integration_loop.save()
48+ # schedule a few builds
49+ integration_loop.schedule_build()
50+ integration_loop.schedule_build()
51+ self.server.sync_unfinished_builds()
52+ for build in integration_loop.loopbuild_set.all():
53+ self.assertIsNotNone(build.duration)
54+ self.assertIsNot(build.duration, 0.0)
55+ self.server.delete_job(self.test_job_name)
56
57=== modified file 'dashboard/lib/jenkins_dashboard.py'
58--- dashboard/lib/jenkins_dashboard.py 2012-09-11 15:50:11 +0000
59+++ dashboard/lib/jenkins_dashboard.py 2012-09-18 16:03:19 +0000
60@@ -35,11 +35,11 @@
61 if response:
62 return json.loads(response)
63 else:
64- raise JenkinsException('job[%s] does not exist' % name)
65+ raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
66 except urllib2.HTTPError:
67- raise JenkinsException('job[%s] does not exist' % name)
68+ raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
69 except ValueError:
70- raise JenkinsException(
71+ raise jenkins.JenkinsException(
72 "Could not parse JSON info for job[%s]" % name)
73
74 def get_build_output(self, name, build_number):
75@@ -50,9 +50,9 @@
76 if response:
77 return response
78 else:
79- raise JenkinsException('job[%s] does not exist' % name)
80+ raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
81 except urllib2.HTTPError:
82- raise JenkinsException('job[%s] does not exist' % name)
83+ raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
84 except ValueError:
85- raise JenkinsException(
86+ raise jenkins.JenkinsException(
87 "Could not parse JSON info for job[%s]" % name)

Subscribers

People subscribed via source and target branches