diff --git a/agent/cleanup_job.py b/agent/cleanup_job.py new file mode 100644 index 00000000..fac47153 --- /dev/null +++ b/agent/cleanup_job.py @@ -0,0 +1,19 @@ +import datetime + +from agent.job import JobModel, StepModel + + +def cleanup(): + cutoff = datetime.datetime.now() - datetime.timedelta(days=30) # 1 month old data + + old_jobs = JobModel.select(JobModel.id).where(JobModel.enqueue < cutoff) + + deleted_steps = StepModel.delete().where(StepModel.job.in_(old_jobs)).execute() + + deleted_jobs = JobModel.delete().where(JobModel.id.in_(old_jobs)).execute() + + print(f"Deleted {deleted_jobs} jobs and {deleted_steps} steps") + + +if __name__ == "__main__": + cleanup() diff --git a/agent/cli.py b/agent/cli.py index 4eee3d3d..92cc35c2 100644 --- a/agent/cli.py +++ b/agent/cli.py @@ -256,6 +256,30 @@ def proxysql(password): Server().setup_proxysql(password) +@setup.command() +def agent_db_cleanup(): + from crontab import CronTab + + script_directory = os.path.dirname(__file__) + agent_directory = os.path.dirname(os.path.dirname(script_directory)) + + cron = CronTab(user=True) + + command = ( + f"cd {agent_directory} && " + f"{agent_directory}/env/bin/python " + f"{agent_directory}/repo/agent/cleanup_job.py" + ) + + cron.remove_all(command=command) + + job = cron.new(command=command) + job.hour.on(2) + job.minute.on(0) + + cron.write() + + @cli.group() def run(): pass