#!/usr/bin/env python # Copyright 2016 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """This script is used to calculate the daily summary of the total size of the test results uploaded to Google Storage per day. It can also output the test results with the largest size. """ import argparse import time import common from autotest_lib.client.common_lib import time_utils from autotest_lib.client.common_lib.cros.graphite import autotest_es def get_summary(start_time, end_time, top=None, report_stat=False): """Get the summary of total size of test results for given period. @param start_time: Start time of the test results to search for. @param end_time: End time of the test results to search for. @param top: Number of top hits with the largest size of test results. @param report_stat: True to report the total test results size to statsd. """ fields_returned = ['size_KB', 'time_recorded'] if top > 0: fields_returned.append('result_dir') records = autotest_es.query( fields_returned=fields_returned, equality_constraints=[('_type', 'result_dir_size'),], range_constraints=[('time_recorded', start_time, end_time)], sort_specs=[{'time_recorded': 'asc'}]) total_GB = sum([e['size_KB'] for e in records.hits]) / 1000000.0 print 'Number of test result entries found: %d' % len(records.hits) print 'Total size of test results uploaded: %.2f GB' % total_GB if top: hits = sorted(records.hits, key=lambda hit:hit['size_KB'], reverse=True) for hit in hits[:top]: print ('%s: \t%.2f MB' % (hit['result_dir'], hit['size_KB']/1000.0)) def main(): """main script. """ t_now = time.time() t_now_minus_one_day = t_now - 3600*24 parser = argparse.ArgumentParser() parser.add_argument('-l', type=int, dest='last', help='last days to summary test results across', default=None) parser.add_argument('--start', type=str, dest='start', help=('Enter start time as: yyyy-mm-dd hh:mm:ss,' 'defualts to 24h ago.'), default=time_utils.epoch_time_to_date_string( t_now_minus_one_day)) parser.add_argument('--end', type=str, dest='end', help=('Enter end time in as: yyyy-mm-dd hh:mm:ss,' 'defualts to current time.'), default=time_utils.epoch_time_to_date_string(t_now)) parser.add_argument('-t', type=int, dest='top', help='Print the top x of large result folders.', default=0) parser.add_argument('-r', action='store_true', dest='report_stat', default=False, help='True to report total size to statsd.') options = parser.parse_args() if options.last: start_time = t_now - 3600*24*options.last end_time = t_now else: start_time = time_utils.to_epoch_time(options.start) end_time = time_utils.to_epoch_time(options.end) get_summary(start_time=start_time, end_time=end_time, top=options.top, report_stat=options.report_stat) if __name__ == '__main__': main()