You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.9 KiB
Python
113 lines
2.9 KiB
Python
6 years ago
|
#!/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())
|