예제 #1
0
 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)
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
파일: creation.py 프로젝트: xinghun61/infra
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)