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
=== modified file 'dashboard/jenkinsserver/models/jenkins_server.py'
--- dashboard/jenkinsserver/models/jenkins_server.py 2012-09-17 13:15:47 +0000
+++ dashboard/jenkinsserver/models/jenkins_server.py 2012-09-18 16:03:19 +0000
@@ -71,7 +71,7 @@
71 # update the build info in CI.71 # update the build info in CI.
72 if build.remote_number and \72 if build.remote_number and \
73 jenkins_build["number"] == build.remote_number:73 jenkins_build["number"] == build.remote_number:
74 self.get_build_info()74 self.get_build_info(build)
7575
76 def get_build_info(self, build):76 def get_build_info(self, build):
77 jenkins_build = self.jenkins.get_build_info(build.loop.name,77 jenkins_build = self.jenkins.get_build_info(build.loop.name,
@@ -90,7 +90,13 @@
90 builds = LoopBuild.objects.filter(90 builds = LoopBuild.objects.filter(
91 status__in=LoopBuild.NON_FINISHED_STATUSES)91 status__in=LoopBuild.NON_FINISHED_STATUSES)
92 for build in builds:92 for build in builds:
93 self.get_build_info(build)93 # We don't wont the sync proces to fail if there is no particular
94 # loop present in jenkins. Log the error and continue.
95 try:
96 self.get_build_info(build)
97 except:
98 self.log.exception("build[%s] does not exist for job %s" % (build.remote_number, build.loop.name))
99 pass
94100
95 def create_job(self, jname, jxml):101 def create_job(self, jname, jxml):
96 """ Creates a new job on jenkins if its not already present """102 """ Creates a new job on jenkins if its not already present """
97103
=== modified file 'dashboard/jenkinsserver/tests/test_jenkins_server.py'
--- dashboard/jenkinsserver/tests/test_jenkins_server.py 2012-08-22 14:44:49 +0000
+++ dashboard/jenkinsserver/tests/test_jenkins_server.py 2012-09-18 16:03:19 +0000
@@ -99,5 +99,22 @@
99 integration_loop.command = 'make test'99 integration_loop.command = 'make test'
100 integration_loop.save()100 integration_loop.save()
101 build_number = self.server.schedule_job_build("test-loop")101 build_number = self.server.schedule_job_build("test-loop")
102 self.assertIs(build_number, 1)102 self.assertIsNotNone(build_number)
103 self.server.delete_job("test-loop")103 self.server.delete_job("test-loop")
104
105 def test_sync_unfinished_builds_no_build_present(self):
106 integration_loop = IntegrationLoop()
107 integration_loop.name = self.test_job_name
108 integration_loop.server = self.server
109 integration_loop.branch = 'lp:linaro-ci-dashboard'
110 integration_loop.precommand = 'make migrate'
111 integration_loop.command = 'make test'
112 integration_loop.save()
113 # schedule a few builds
114 integration_loop.schedule_build()
115 integration_loop.schedule_build()
116 self.server.sync_unfinished_builds()
117 for build in integration_loop.loopbuild_set.all():
118 self.assertIsNotNone(build.duration)
119 self.assertIsNot(build.duration, 0.0)
120 self.server.delete_job(self.test_job_name)
104121
=== modified file 'dashboard/lib/jenkins_dashboard.py'
--- dashboard/lib/jenkins_dashboard.py 2012-09-11 15:50:11 +0000
+++ dashboard/lib/jenkins_dashboard.py 2012-09-18 16:03:19 +0000
@@ -35,11 +35,11 @@
35 if response:35 if response:
36 return json.loads(response)36 return json.loads(response)
37 else:37 else:
38 raise JenkinsException('job[%s] does not exist' % name)38 raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
39 except urllib2.HTTPError:39 except urllib2.HTTPError:
40 raise JenkinsException('job[%s] does not exist' % name)40 raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
41 except ValueError:41 except ValueError:
42 raise JenkinsException(42 raise jenkins.JenkinsException(
43 "Could not parse JSON info for job[%s]" % name)43 "Could not parse JSON info for job[%s]" % name)
4444
45 def get_build_output(self, name, build_number):45 def get_build_output(self, name, build_number):
@@ -50,9 +50,9 @@
50 if response:50 if response:
51 return response51 return response
52 else:52 else:
53 raise JenkinsException('job[%s] does not exist' % name)53 raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
54 except urllib2.HTTPError:54 except urllib2.HTTPError:
55 raise JenkinsException('job[%s] does not exist' % name)55 raise jenkins.JenkinsException('build[%s] does not exist for job %s' % (build_number, name))
56 except ValueError:56 except ValueError:
57 raise JenkinsException(57 raise jenkins.JenkinsException(
58 "Could not parse JSON info for job[%s]" % name)58 "Could not parse JSON info for job[%s]" % name)

Subscribers

People subscribed via source and target branches