Chromium Code Reviews| Index: Tools/AutoSheriff/gatekeeper_extras.py |
| diff --git a/Tools/AutoSheriff/gatekeeper_extras.py b/Tools/AutoSheriff/gatekeeper_extras.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..553d8b9bf1ef73c4afb5923b1566ca0213bad700 |
| --- /dev/null |
| +++ b/Tools/AutoSheriff/gatekeeper_extras.py |
| @@ -0,0 +1,92 @@ |
| +# Copyright 2014 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +# FIXME: Everything in this file belongs in gatekeeper_ng_config.py |
| + |
| +import logging |
| + |
| +# Python logging is stupidly verbose to configure. |
| +def setup_logging(): |
| + logger = logging.getLogger(__name__) |
| + logger.setLevel(logging.DEBUG) |
| + handler = logging.StreamHandler() |
| + handler.setLevel(logging.DEBUG) |
| + formatter = logging.Formatter('%(levelname)s: %(message)s') |
| + handler.setFormatter(formatter) |
| + logger.addHandler(handler) |
| + return logger, handler |
| + |
| + |
| +log, logging_handler = setup_logging() |
| + |
| + |
| +def excluded_builders(master_config): |
| + return master_config[0].get('*', {}).get('excluded_builders', set()) |
| + |
| + |
| +# FIXME: This is currently baked into: |
| +# https://chromium.googlesource.com/chromium/tools/build/+/master/scripts/slave/gatekeeper_launch.py |
| +# http://crbug.com/394961 |
|
ojan
2014/07/22 02:01:25
We should change the flakiness dashboard concept o
|
| +MASTER_CONFIG = { |
| + 'chromium-status': [ |
| + 'chromium', |
| + 'chromium.chrome', |
| + 'chromium.chromiumos', |
| + 'chromium.gpu', |
| + 'chromium.linux', |
| + 'chromium.mac', |
| + 'chromium.memory', |
| + 'chromium.win', |
| + ], |
| + 'blink-status': [ |
| + 'chromium.webkit', |
| + ], |
| +} |
| + |
| + |
| +def tree_for_master(master_name): |
| + for tree_name, master_names in MASTER_CONFIG.items(): |
| + if master_name in master_names: |
| + return tree_name |
| + |
| + |
| +def would_close_tree(master_config, builder_name, step_name): |
| + # FIXME: Section support should be removed: |
| + master_config = master_config[0] |
| + builder_config = master_config.get(builder_name, {}) |
| + if not builder_config: |
| + builder_config = master_config.get('*', {}) |
| + |
| + # close_tree is currently unused in gatekeeper.json but planned to be. |
| + close_tree = builder_config.get('close_tree', True) |
| + if not close_tree: |
| + log.debug('close_tree is false') |
| + return False |
| + |
| + # Excluded steps never close. |
| + excluded_steps = set(builder_config.get('excluded_steps', [])) |
| + if step_name in excluded_steps: |
| + log.debug('%s is an excluded_step' % step_name) |
| + return False |
| + |
| + # See gatekeeper_ng_config.py for documentation of |
| + # the config format. |
| + # forgiving/closing controls if mails are sent on close. |
| + # steps/optional controls if step-absence indicates failure. |
| + # this function assumes the step is present and failing |
| + # and thus doesn't care between these 4 types: |
| + closing_steps = (builder_config.get('forgiving_steps', set()) | |
| + builder_config.get('forgiving_optional', set()) | |
| + builder_config.get('closing_steps', set()) | |
| + builder_config.get('closing_optional', set())) |
| + |
| + # A '*' in any of the above types means it applies to all steps. |
| + if '*' in closing_steps: |
| + return True |
| + |
| + if step_name in closing_steps: |
| + return True |
| + |
| + log.debug('%s not in closing_steps: %s' % (step_name, closing_steps)) |
| + return False |