Merge lp:~bigkevmcd/offspring/monitoring-endpoint-as-slaves-scanned into lp:offspring

Proposed by Kevin McDermott
Status: Merged
Merged at revision: 156
Proposed branch: lp:~bigkevmcd/offspring/monitoring-endpoint-as-slaves-scanned
Merge into: lp:offspring
Diff against target: 176 lines (+76/-11)
5 files modified
lib/offspring/web/queuemanager/models.py (+10/-0)
lib/offspring/web/queuemanager/tests/test_models.py (+16/-2)
lib/offspring/web/queuemanager/tests/test_views.py (+33/-7)
lib/offspring/web/queuemanager/views.py (+15/-1)
lib/offspring/web/urls.py (+2/-1)
To merge this branch: bzr merge lp:~bigkevmcd/offspring/monitoring-endpoint-as-slaves-scanned
Reviewer Review Type Date Requested Status
Nicola Heald Approve
Review via email: mp+144260@code.launchpad.net

Description of the change

This adds /builds/ and /builders/ to allow checking of the master-slave communication, which is the most common failure point at the moment.

To post a comment you must log in.
Revision history for this message
Nicola Heald (notnownikki) wrote :

Looks ok to me, +1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/offspring/web/queuemanager/models.py'
--- lib/offspring/web/queuemanager/models.py 2013-01-04 17:45:17 +0000
+++ lib/offspring/web/queuemanager/models.py 2013-01-22 10:09:19 +0000
@@ -489,3 +489,13 @@
489 cutoff = datetime.utcnow() - period489 cutoff = datetime.utcnow() - period
490 query = dict(finished_at__gte=cutoff)490 query = dict(finished_at__gte=cutoff)
491 return BuildResult.objects.filter(**query)491 return BuildResult.objects.filter(**query)
492
493
494def get_updated_builders(period):
495 """
496 Return the builders that have been updated within the specified period (a
497 datetime.timedelta).
498 """
499 cutoff = datetime.utcnow() - period
500 query = dict(updated_at__gte=cutoff)
501 return Lexbuilder.objects.filter(**query)
492502
=== modified file 'lib/offspring/web/queuemanager/tests/test_models.py'
--- lib/offspring/web/queuemanager/tests/test_models.py 2013-01-04 17:45:17 +0000
+++ lib/offspring/web/queuemanager/tests/test_models.py 2013-01-22 10:09:19 +0000
@@ -10,7 +10,8 @@
1010
11from offspring.enums import ProjectBuildStates11from offspring.enums import ProjectBuildStates
1212
13from offspring.web.queuemanager.models import ProjectGroup, get_completed_builds13from offspring.web.queuemanager.models import (
14 ProjectGroup, get_completed_builds, get_updated_builders, Lexbuilder)
14from offspring.web.queuemanager.tests.factory import factory15from offspring.web.queuemanager.tests.factory import factory
15from offspring.web.queuemanager.tests.helpers import (16from offspring.web.queuemanager.tests.helpers import (
16 create_build_results_with_durations17 create_build_results_with_durations
@@ -178,7 +179,7 @@
178179
179180
180181
181class UtilityFunctionTests(TestCase):182class UtilityFunctionTests(MockerTestCase, TestCase):
182183
183 def test_get_completed_builds(self):184 def test_get_completed_builds(self):
184 """185 """
@@ -195,3 +196,16 @@
195 finished_at=started_at + timedelta(minutes=30),196 finished_at=started_at + timedelta(minutes=30),
196 builder=None)197 builder=None)
197 self.assertEqual(2, get_completed_builds(timedelta(hours=1)).count())198 self.assertEqual(2, get_completed_builds(timedelta(hours=1)).count())
199
200 def test_get_updated_builders(self):
201 """
202 get_updated_builders(timedelta(minutes=10)) should return all
203 Lexbuilders which have been updated within the last 10 minutes.
204 """
205 builder1 = factory.make_lexbuilder()
206 # This cheats the updated_at autonow value.
207 Lexbuilder.objects.filter(pk=builder1.pk).update(
208 updated_at=datetime.utcnow() - timedelta(minutes=12))
209 builder2 = factory.make_lexbuilder()
210 builder3 = factory.make_lexbuilder()
211 self.assertEqual(2, get_updated_builders(timedelta(minutes=10)).count())
198212
=== modified file 'lib/offspring/web/queuemanager/tests/test_views.py'
--- lib/offspring/web/queuemanager/tests/test_views.py 2013-01-07 11:24:34 +0000
+++ lib/offspring/web/queuemanager/tests/test_views.py 2013-01-22 10:09:19 +0000
@@ -11,9 +11,7 @@
1111
12from offspring.enums import ProjectBuildStates12from offspring.enums import ProjectBuildStates
13from offspring.web.queuemanager.models import (13from offspring.web.queuemanager.models import (
14 LaunchpadProject,14 LaunchpadProject, ProjectGroup, Lexbuilder)
15 ProjectGroup,
16)
17from offspring.web.queuemanager.forms import (15from offspring.web.queuemanager.forms import (
18 LaunchpadProjectForm,16 LaunchpadProjectForm,
19 ProjectGroupForm,17 ProjectGroupForm,
@@ -525,11 +523,11 @@
525 project_group2.name)523 project_group2.name)
526524
527525
528class AliveViewsTests(TestCase):526class AliveBuildsViewTests(TestCase):
529527
530 def setUp(self):528 def setUp(self):
531 self.view_url = reverse(529 self.view_url = reverse(
532 "offspring.web.queuemanager.views.alive")530 "offspring.web.queuemanager.views.alive_builds")
533 self.user = factory.make_user()531 self.user = factory.make_user()
534 project = factory.make_project()532 project = factory.make_project()
535 started_at = datetime.utcnow() - timedelta(hours=2)533 started_at = datetime.utcnow() - timedelta(hours=2)
@@ -543,8 +541,8 @@
543541
544 def test_alive_returns_build_count(self):542 def test_alive_returns_build_count(self):
545 """543 """
546 Fetching the /alive URL returns the number of builds completed in the544 Fetching the /alive/builds/ URL returns the number of builds completed
547 last hour.545 in the last hour.
548 """546 """
549 response = self.client.get(self.view_url)547 response = self.client.get(self.view_url)
550 self.assertEqual("2", response.content)548 self.assertEqual("2", response.content)
@@ -556,3 +554,31 @@
556 """554 """
557 response = self.client.get(self.view_url, {"hours": 2})555 response = self.client.get(self.view_url, {"hours": 2})
558 self.assertEqual("3", response.content)556 self.assertEqual("3", response.content)
557
558
559class AliveBuildersViewTests(TestCase):
560
561 def setUp(self):
562 self.view_url = reverse(
563 "offspring.web.queuemanager.views.alive_builders")
564 builder1 = factory.make_lexbuilder()
565 Lexbuilder.objects.filter(pk=builder1.pk).update(
566 updated_at=datetime.utcnow() - timedelta(minutes=12))
567 builder2 = factory.make_lexbuilder()
568 builder3 = factory.make_lexbuilder()
569
570 def test_alive_returns_updates_builders_count(self):
571 """
572 Fetching the /alive/builders/ URL returns the number of builders
573 updated within the 10 minutes.
574 """
575 response = self.client.get(self.view_url)
576 self.assertEqual("2", response.content)
577
578 def test_alive_with_optional_duration(self):
579 """
580 It's possible to specify a duration, which is used as a timedelta for
581 the alive url.
582 """
583 response = self.client.get(self.view_url, {"minutes": 15})
584 self.assertEqual("3", response.content)
559585
=== modified file 'lib/offspring/web/queuemanager/views.py'
--- lib/offspring/web/queuemanager/views.py 2013-01-07 11:29:44 +0000
+++ lib/offspring/web/queuemanager/views.py 2013-01-22 10:09:19 +0000
@@ -58,6 +58,7 @@
58 Project,58 Project,
59 ProjectGroup,59 ProjectGroup,
60 Release,60 Release,
61 get_updated_builders,
61 get_completed_builds,62 get_completed_builds,
62)63)
6364
@@ -389,7 +390,20 @@
389 "queuemanager.add_launchpadproject")(launchpad_project_create)390 "queuemanager.add_launchpadproject")(launchpad_project_create)
390391
391392
392def alive(request):393def alive_builders(request):
394 """
395 Returns the number of slaves updated in the last 10 minutes, useful for
396 checking the "alive" status of Offspring.
397
398 Optionally accepts a number of minutes as a parameter to use for the
399 timedelta.
400 """
401 minutes = int(request.GET.get("minutes", 10))
402 return HttpResponse(
403 str(get_updated_builders(timedelta(minutes=minutes)).count()))
404
405
406def alive_builds(request):
393 """407 """
394 Returns the number of completed builds in the last hour, useful for checking408 Returns the number of completed builds in the last hour, useful for checking
395 the "alive" status of Offspring.409 the "alive" status of Offspring.
396410
=== modified file 'lib/offspring/web/urls.py'
--- lib/offspring/web/urls.py 2013-01-02 17:18:09 +0000
+++ lib/offspring/web/urls.py 2013-01-22 10:09:19 +0000
@@ -97,7 +97,8 @@
97 (r'^schedule/\+api/milestones/$', milestone_handler),97 (r'^schedule/\+api/milestones/$', milestone_handler),
98 (r'^schedule/\+(?P<milestoneType>[^/]+)-milestones$', 'offspring.web.queuemanager.views.milestones'),98 (r'^schedule/\+(?P<milestoneType>[^/]+)-milestones$', 'offspring.web.queuemanager.views.milestones'),
99 (r'^schedule/$', 'offspring.web.queuemanager.views.schedule'),99 (r'^schedule/$', 'offspring.web.queuemanager.views.schedule'),
100 (r'^alive/', 'offspring.web.queuemanager.views.alive'),100 (r'^alive/builders/', 'offspring.web.queuemanager.views.alive_builders'),
101 (r'^alive/builds/', 'offspring.web.queuemanager.views.alive_builds'),
101 (r'^$', 'offspring.web.queuemanager.views.projects'),102 (r'^$', 'offspring.web.queuemanager.views.projects'),
102)103)
103104

Subscribers

People subscribed via source and target branches