Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2367)

Unified Diff: appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py

Issue 2400283003: [Findit] Add skeleton code for delta test script. (Closed)
Patch Set: Rebase. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py
diff --git a/appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py b/appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py
new file mode 100644
index 0000000000000000000000000000000000000000..ba13907659ad06a1be27d6798ef9ef200a708754
--- /dev/null
+++ b/appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py
@@ -0,0 +1,160 @@
+# Copyright 2016 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.
+
+"""Runs delta test on 2 findit versions."""
+
+import argparse
+from datetime import date
+from datetime import timedelta
+import pickle
+import logging
+import os
+import sys
+
+_SCRIPT_DIR = os.path.join(os.path.dirname(__file__), os.path.pardir,
+ os.path.pardir)
+sys.path.insert(1, _SCRIPT_DIR)
+
+import script_util
+script_util.SetUpSystemPaths()
+
+from crash.type_enums import CrashClient
+from crash_queries.delta_test import delta_test
+from crash_queries.delta_test import delta_util
+
+_TODAY = date.today().strftime('%Y-%m-%d')
+_A_YEAR_AGO = (date.today() - timedelta(days=365)).strftime('%Y-%m-%d')
+
+# App Engine APIs will fail if batch size is more than 1000.
+_MAX_BATCH_SIZE = 1000
+_DEFAULT_BATCH_SIZE = _MAX_BATCH_SIZE
+
+DELTA_RESULTS_DIRECTORY = os.path.join(os.path.dirname(__file__),
+ 'delta_results')
+CHROMIUM_REPO = 'https://chromium.googlesource.com/chromium/src'
+
+
+def RunDeltaTest():
+ """Runs delta testing between 2 different Findit versions."""
+ argparser = argparse.ArgumentParser(
+ description='Run delta test between 2 findit versions.')
+
+ argparser.add_argument(
+ '--revisions',
+ '-r',
+ nargs='+',
+ default=['HEAD^', 'HEAD'],
+ help=('2 findit revisions to be compared. It can take '
+ '1 or 2 revisions.\n'
+ '(1)-r rev1 rev2: compare rev1 and rev2\n'
+ '(2)-r rev: compare rev and current HEAD\n'
+ '(3)no revisions provided, default to compare '
+ 'HEAD^ and HEAD'))
+
+ argparser.add_argument(
+ '--client',
+ '-c',
+ default='fracas',
+ help=('Possible values are: fracas, cracas, clusterfuzz. Right now, only '
+ 'fracas is supported.'))
+
+ argparser.add_argument(
+ '--app',
+ '-a',
+ default=os.getenv('APP_ID', 'findit-for-me-dev'),
+ help=('App id of the App engine app that query needs to access. '
+ 'Defualts to findit-for-me-dev. You can set enviroment variable by'
+ ' \'export APP_ID=your-app-id\' to replace the default value.'))
+
+ argparser.add_argument(
+ '--since',
+ '-s',
+ default=_A_YEAR_AGO,
+ help=('Query data since this date (including this date). '
+ 'Should be in YYYY-MM-DD format. E.g. 2015-09-31. '
+ 'Defaults to a year ago.'))
+
+ argparser.add_argument(
+ '--until',
+ '-u',
+ default=_TODAY,
+ help=('Query data until this date (not including this date). '
+ 'Should be in YYYY-MM-DD format. E.g. 2015-09-31. '
+ 'Defaults to today.'))
+
+ argparser.add_argument(
+ '--batch',
+ '-b',
+ type=int,
+ default=_DEFAULT_BATCH_SIZE,
+ help=('The size of batch that can be processed at one time.\n'
+ 'Note, the batch size cannot be greater than 1000, or app engine '
+ 'APIs would fail.\nDefaults to maximum number 1000.'))
+
+ argparser.add_argument(
+ '--verbose',
+ '-v',
+ action='store_true',
+ default=False,
+ help='Print findit results. Defaults to False.')
+
+ args = argparser.parse_args()
+
+ # If in verbose mode, prints debug information.
+ if args.verbose:
+ logging.basicConfig(level=logging.DEBUG)
+ else:
+ logging.basicConfig(level=logging.INFO)
+
+ if len(args.revisions) > 2:
+ logging.error('Only support delta test between 2 versions.')
+ sys.exit(1)
+
+ if args.batch > _MAX_BATCH_SIZE:
+ logging.error('Batch size cannot be greater than %s, or app engine APIs '
+ 'would fail.', _MAX_BATCH_SIZE)
+ sys.exit(1)
+
+ # If only one revision provided, default the rev2 to HEAD.
+ if len(args.revisions) == 1:
+ args.revisions.append('HEAD')
+
+ git_hash1 = delta_util.ParseGitHash(args.revisions[0])
+ git_hash2 = delta_util.ParseGitHash(args.revisions[1])
+
+ delta_result_prefix = '%s_%s_%s..%s.delta' % (git_hash1[:7], git_hash2[:7],
+ args.since, args.until)
+ delta_csv_path = os.path.join(
+ DELTA_RESULTS_DIRECTORY, '%s.csv' % delta_result_prefix)
+ delta_path = os.path.join(
+ DELTA_RESULTS_DIRECTORY, '.%s' % delta_result_prefix)
+
+ # Check if delta results already existed.
+ if os.path.exists(delta_csv_path):
+ logging.info('Delta results existed in\n%s', delta_csv_path)
+ if not os.path.exists(delta_path):
+ logging.info('Cannot print out delta results, '
+ 'please open %s to see the results.')
+ return
+
+ with open(delta_path) as f:
+ deltas, crash_num = pickle.load(f)
+ else:
+ logging.info('Running delta test...')
+ # Get delta of results between git_hash1 and git_hash2.
+ deltas, crash_num = delta_test.DeltaEvaluator(
+ git_hash1, git_hash2, args.client, args.app,
+ start_date=args.since, end_date=args.until,
+ batch_size=args.batch, verbose=args.verbose)
+ delta_util.FlushResult([deltas, crash_num], delta_path)
+ delta_util.WriteDeltaToCSV(deltas, crash_num,
+ git_hash1, git_hash2, delta_csv_path)
+
+ # Print delta results to users.
+ logging.info('\n========================= Summary =========================')
+ delta_util.PrintDelta(deltas, crash_num)
+
+
+if __name__ == '__main__':
+ RunDeltaTest()

Powered by Google App Engine
This is Rietveld 408576698