123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #!/usr/bin/env vpython3
- # 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 argparse
- import os
- import sys
- from core import path_util
- path_util.AddPyUtilsToPath()
- from core import cli_utils
- from core import external_modules
- from core.services import luci_auth
- from cli_tools.soundwave import commands
- from cli_tools.soundwave import studies
- DEFAULT_DATABASE_PATH = os.path.abspath(os.path.join(
- os.path.dirname(__file__), '_cached_data', 'soundwave', 'soundwave.db'))
- def main():
- print('*** WARNING: soundwave is deprecated and will be removed soon.\n' +
- '*** Please see go/chromeperf-bigquery for a replacement.\n')
- parser = argparse.ArgumentParser()
- # Default args for all actions.
- parser.add_argument(
- '-s', '--sheriff', default='Chromium Perf Sheriff',
- help='Only get data for this sheriff rotation, default: "%(default)s". '
- 'You can use the special value "all" to disable filtering by '
- 'sheriff rotation.')
- parser.add_argument(
- '-d', '--days', default=30, type=int,
- help='Number of days to collect data for (default: %(default)s)')
- parser.add_argument(
- '--continue', action='store_true', dest='use_cache',
- help='Skip refreshing some data for elements already in local db.')
- parser.add_argument(
- '--processes', type=int, default=40,
- help='Number of concurrent processes to use for fetching data.')
- parser.add_argument(
- '--database-file', default=DEFAULT_DATABASE_PATH,
- help='File path for database where to store data.')
- parser.add_argument(
- '-v', '--verbose', action='count', default=0,
- help='Increase verbosity level')
- subparsers = parser.add_subparsers(dest='action')
- subparsers.required = True
- # Subparser args for fetching alerts data.
- subparser = subparsers.add_parser('alerts')
- subparser.add_argument(
- '-b', '--benchmark', required=True,
- help='Fetch alerts for this benchmark.')
- # Subparser args for fetching timeseries data.
- subparser = subparsers.add_parser('timeseries')
- group = subparser.add_mutually_exclusive_group(required=True)
- group.add_argument(
- '-b', '--benchmark', help='Fetch timeseries for this benchmark.')
- group.add_argument(
- '--study', choices=studies.NAMES,
- help='Fetch timeseries needed for a specific study.')
- group.add_argument(
- '-i', '--input-file',
- help='Fetch timeseries listed in this json file (see e.g.'
- ' examples/soundwave directory).')
- subparser.add_argument(
- '-f', '--filters', action='append',
- help='Only get data for timeseries whose path contains all the given '
- 'substrings.')
- group = subparser.add_mutually_exclusive_group()
- group.add_argument(
- '--output-csv', metavar='PATH',
- help='Export the timeseries data to a csv file, the PATH given may be '
- 'either a local or a cloud storage (i.e. gs://...) path.')
- group.add_argument(
- '--upload-csv', action='store_true',
- help='Export the timeseries data to the default cloud storage path for '
- 'a given --study.')
- args = parser.parse_args()
- cli_utils.ConfigureLogging(args.verbose)
- luci_auth.CheckLoggedIn()
- if args.action == 'alerts':
- commands.FetchAlertsData(args)
- elif args.action == 'timeseries':
- if args.study is not None:
- args.study = studies.GetStudy(args.study)
- if args.upload_csv:
- args.output_csv = args.study.CLOUD_PATH
- elif args.upload_csv:
- return 'ERROR: --upload-csv also requires a --study to be specified'
- commands.FetchTimeseriesData(args)
- else:
- raise NotImplementedError(args.action)
- if __name__ == '__main__':
- external_modules.RequireModules()
- sys.exit(main())
|