| #!/usr/bin/env python |
| # Copyright 2018 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. |
| |
| import os |
| import subprocess |
| import json |
| import sys |
| |
| from third_party import httplib2 |
| |
| import ninjalog_uploader |
| |
| THIS_DIR = os.path.dirname(__file__) |
| UPLOADER = os.path.join(THIS_DIR, 'ninjalog_uploader.py') |
| CONFIG = os.path.join(THIS_DIR, 'ninjalog.cfg') |
| VERSION = 1 |
| |
| |
| def LoadConfig(): |
| if os.path.isfile(CONFIG): |
| with open(CONFIG, 'rb') as f: |
| config = json.load(f) |
| if config['version'] == VERSION: |
| config['countdown'] -= 1 |
| return config |
| |
| return { |
| 'is-googler': ninjalog_uploader.IsGoogler( |
| 'chromium-build-stats.appspot.com'), |
| 'countdown': 10, |
| 'version': VERSION, |
| } |
| |
| |
| def SaveConfig(config): |
| with open(CONFIG, 'wb') as f: |
| json.dump(config, f) |
| |
| |
| def ShowMessage(countdown): |
| print """ |
| Your ninjalog will be uploaded to build stats server. Uploaded log will be used |
| to analyze user side build performance. |
| |
| The following information will be uploaded with ninjalog. |
| * OS (e.g. Win, Mac or Linux) |
| * build directory (e.g. /home/foo/chromium/src/out/Release) |
| * hostname |
| * number of cpu cores of building machine |
| * cmdline passed to ninja (e.g. ninja -C out/Default -j1024 chrome) |
| * build config (e.g. use_goma=true, is_component_build=true, etc) |
| |
| Uploading ninjalog will be started after you run autoninja another %d time. |
| |
| If you don't want to upload ninjalog, please run following command. |
| $ %s opt-out |
| |
| If you allow upload ninjalog from next autoninja run, please run the following |
| command. |
| $ %s opt-in |
| |
| If you have question about this, please send mail to infra-dev@chromium.org |
| |
| """ % (countdown, __file__, __file__) |
| |
| |
| def main(): |
| config = LoadConfig() |
| |
| if len(sys.argv) == 2 and sys.argv[1] == 'opt-in': |
| config['opt-in'] = True |
| config['countdown'] = 0 |
| SaveConfig(config) |
| print('ninjalog upload is opted in.') |
| return 0 |
| |
| if len(sys.argv) == 2 and sys.argv[1] == 'opt-out': |
| config['opt-in'] = False |
| SaveConfig(config) |
| print('ninjalog upload is opted out.') |
| return 0 |
| |
| SaveConfig(config) |
| |
| if 'opt-in' in config and not config['opt-in']: |
| # Upload is opted out. |
| return 0 |
| |
| if not config.get("is-googler", False): |
| # Not googler. |
| return 0 |
| |
| if config.get("countdown", 0) > 0: |
| # Need to show message. |
| ShowMessage(config["countdown"]) |
| return 0 |
| |
| if len(sys.argv) == 1: |
| # dry-run for debugging. |
| print("upload ninjalog dry-run") |
| return 0 |
| |
| # Run upload script without wait. |
| devnull = open(os.devnull, "w") |
| subprocess.Popen([sys.executable, UPLOADER] + sys.argv[1:], |
| stdout=devnull, stderr=devnull) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |