1 #!/usr/bin/python 2 # Copyright 2017 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 """Utility to cleanup TKO database by removing old records. 7 """ 8 9 import argparse 10 import logging 11 import os 12 import time 13 14 import common 15 from autotest_lib.client.bin import utils 16 from autotest_lib.client.common_lib import global_config 17 from autotest_lib.client.common_lib import logging_config 18 19 from chromite.lib import metrics 20 21 22 CONFIG = global_config.global_config 23 24 # SQL command to remove old test results in TKO database. 25 CLEANUP_TKO_CMD = 'call remove_old_tests_sp()' 26 CLEANUP_METRICS = 'chromeos/autotest/tko_cleanup_duration' 27 28 29 def parse_options(): 30 """Parse command line inputs. 31 32 @return: Options to run the script. 33 """ 34 parser = argparse.ArgumentParser() 35 parser.add_argument('-l', '--logfile', type=str, 36 default=None, 37 help='Path to the log file to save logs.') 38 return parser.parse_args() 39 40 41 def main(): 42 """Main script.""" 43 options = parse_options() 44 log_config = logging_config.LoggingConfig() 45 if options.logfile: 46 log_config.add_file_handler( 47 file_path=os.path.abspath(options.logfile), level=logging.DEBUG) 48 49 server = CONFIG.get_config_value( 50 'AUTOTEST_WEB', 'global_db_host', 51 default=CONFIG.get_config_value('AUTOTEST_WEB', 'host')) 52 user = CONFIG.get_config_value( 53 'AUTOTEST_WEB', 'global_db_user', 54 default=CONFIG.get_config_value('AUTOTEST_WEB', 'user')) 55 password = CONFIG.get_config_value( 56 'AUTOTEST_WEB', 'global_db_password', 57 default=CONFIG.get_config_value('AUTOTEST_WEB', 'password')) 58 database = CONFIG.get_config_value( 59 'AUTOTEST_WEB', 'global_db_database', 60 default=CONFIG.get_config_value('AUTOTEST_WEB', 'database')) 61 62 logging.info('Start cleaning up old records in TKO database %s on server ' 63 '%s.', database, server) 64 65 start_time = time.time() 66 try: 67 utils.run_sql_cmd(server, user, password, CLEANUP_TKO_CMD, database) 68 except: 69 logging.exception('Cleanup failed with exception.') 70 finally: 71 duration = time.time() - start_time 72 metrics.SecondsDistribution(CLEANUP_METRICS).add( 73 duration, fields={'server': server}) 74 logging.info('Cleanup finished in %s seconds.', duration) 75 76 77 if __name__ == '__main__': 78 main() 79