Home | History | Annotate | Download | only in site_utils
      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