blob: 86f8e558681fda612c2b0ac6b4254be63effcc4b [file] [log] [blame]
#!/usr/bin/python
"""A crontab script to delete night test data."""
__author__ = 'shenhan@google.com (Han Shen)'
import datetime
import optparse
import os
import sys
from utils import command_executer
from utils import constants
from utils import misc
DIR_BY_WEEKDAY = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')
def CleanNumberedDir(s, dry_run=False):
"""Deleted directories under each dated_dir."""
chromeos_dirs = [os.path.join(s, x) for x in os.listdir(s)
if misc.IsChromeOsTree(os.path.join(s, x))]
ce = command_executer.GetCommandExecuter()
for cd in chromeos_dirs:
misc.DeleteChromeOsTree(cd, dry_run=dry_run)
## Now delete the numbered dir
cmd = 'rm -fr {0}'.format(s)
if dry_run:
print cmd
else:
ce.RunCommand(cmd, return_output=True, terminated_timeout=480)
def CleanDatedDir(dated_dir, dry_run=False):
# List subdirs under dir
subdirs = [os.path.join(dated_dir, x) for x in os.listdir(dated_dir)
if os.path.isdir(os.path.join(dated_dir, x))]
for s in subdirs:
CleanNumberedDir(s, dry_run)
def ProcessArguments(argv):
"""Process arguments."""
parser = optparse.OptionParser(
description='Automatically delete nightly test data directories.',
usage='auto_delete.py options')
parser.add_option('-d', '--dry_run', dest='dry_run',
default=False, action='store_true',
help='Only print command line, do not execute anything.')
parser.add_option('--days_to_perserve', dest='days_to_preserve', default=3,
help=('Specify the number of days, test data generated '
'on these days will *NOT* be deleted. '
'Defaults to 3.'))
options, _ = parser.parse_args(argv)
return options
def Main(argv):
"""Delete nightly test data directories."""
options = ProcessArguments(argv)
# Function 'isoweekday' returns 1(Monday) - 7 (Sunday).
d = datetime.datetime.today().isoweekday()
# We go back 1 week, delete from that day till we are
# options.days_to_preserve away from today.
s = d - 7
e = d - options.days_to_preserve
for i in range(s + 1, e):
if i <= 0:
## Wrap around if index is negative. 6 is from i + 7 - 1, because
## DIR_BY_WEEKDAY starts from 0, while isoweekday is from 1-7.
dated_dir = DIR_BY_WEEKDAY[i+6]
else:
dated_dir = DIR_BY_WEEKDAY[i-1]
CleanDatedDir(os.path.join(
constants.CROSTC_WORKSPACE, dated_dir), options.dry_run)
return 0
if __name__ == '__main__':
retval = Main(sys.argv)
sys.exit(retval)