def test_unregister_builders(self): model.Builder( id='chromium:try:linux_rel', last_scheduled=self.now - datetime.timedelta(weeks=8), ).put() service.unregister_builders() builders = model.Builder.query().fetch() self.assertFalse(builders)
def test_update_global_metrics(self, set_build_count_metric_async, set_build_latency): set_build_count_metric_async.return_value = future(None) set_build_latency.return_value = future(None) model.Builder(id='chromium:luci.chromium.try:release').put() model.Builder(id='chromium:luci.chromium.try:debug').put() model.Builder(id='chromium:try:debug').put() config.put_bucket( 'chromium', 'a' * 40, test_util.parse_bucket_cfg(''' name: "luci.chromium.try" swarming { builders {} } '''), ) metrics.update_global_metrics() set_build_latency.assert_any_call('chromium/try', 'luci.chromium.try', 'release', True) set_build_latency.assert_any_call('chromium/try', 'luci.chromium.try', 'release', False) set_build_latency.assert_any_call('chromium/try', 'luci.chromium.try', 'debug', True) set_build_latency.assert_any_call('chromium/try', 'luci.chromium.try', 'debug', False) set_build_count_metric_async.assert_any_call( 'chromium/try', 'luci.chromium.try', 'release', model.BuildStatus.SCHEDULED, False) set_build_count_metric_async.assert_any_call( 'chromium/try', 'luci.chromium.try', 'release', model.BuildStatus.SCHEDULED, True) set_build_count_metric_async.assert_any_call( 'chromium/try', 'luci.chromium.try', 'debug', model.BuildStatus.SCHEDULED, False) set_build_count_metric_async.assert_any_call( 'chromium/try', 'luci.chromium.try', 'debug', model.BuildStatus.SCHEDULED, True)
def test_update_builders(self): recently = self.now - datetime.timedelta(minutes=1) while_ago = self.now - datetime.timedelta(minutes=61) ndb.put_multi([ model.Builder(id='chromium:try:linux', last_scheduled=recently), model.Builder(id='chromium:try:mac', last_scheduled=while_ago), ]) creation.add_many_async([ self.build_request(dict(builder=dict(builder='linux'))), self.build_request(dict(builder=dict(builder='mac'))), self.build_request(dict(builder=dict(builder='win'))), ]).get_result() builders = model.Builder.query().fetch() self.assertEqual(len(builders), 3) self.assertEqual(builders[0].key.id(), 'chromium:try:linux') self.assertEqual(builders[0].last_scheduled, recently) self.assertEqual(builders[1].key.id(), 'chromium:try:mac') self.assertEqual(builders[1].last_scheduled, self.now) self.assertEqual(builders[2].key.id(), 'chromium:try:win') self.assertEqual(builders[2].last_scheduled, self.now)
def _update_builders_async(new_builds, now): """Creates/updates model.Builder entities.""" keys = sorted( {model.Builder.make_key(nb.build.proto.builder) for nb in new_builds}) builders = yield ndb.get_multi_async(keys) to_put = [] for key, builder in zip(keys, builders): if not builder: # Register it! to_put.append(model.Builder(key=key, last_scheduled=now)) else: since_last_update = now - builder.last_scheduled update_probability = since_last_update.total_seconds() / 3600.0 if _should_update_builder(update_probability): builder.last_scheduled = now to_put.append(builder) if to_put: yield ndb.put_multi_async(to_put)