changeset 095d160c071d in trytond:default details: https://hg.tryton.org/trytond?cmd=changeset;node=095d160c071d description: Add cron task to clean old queue tasks
issue9502 review306141002 diffstat: CHANGELOG | 1 + doc/topics/configuration.rst | 7 +++++++ trytond/ir/cron.py | 1 + trytond/ir/queue.py | 12 ++++++++++++ trytond/ir/queue.xml | 12 ++++++++++++ trytond/ir/tryton.cfg | 1 + 6 files changed, 34 insertions(+), 0 deletions(-) diffs (89 lines): diff -r 9f5055b5f4b2 -r 095d160c071d CHANGELOG --- a/CHANGELOG Tue Aug 11 22:00:26 2020 +0200 +++ b/CHANGELOG Tue Aug 11 22:03:20 2020 +0200 @@ -1,3 +1,4 @@ +* Add cron task to clean old queue tasks * Add option to run cron once * Add defaults option to route * Add escape_wildcard in tools diff -r 9f5055b5f4b2 -r 095d160c071d doc/topics/configuration.rst --- a/doc/topics/configuration.rst Tue Aug 11 22:00:26 2020 +0200 +++ b/doc/topics/configuration.rst Tue Aug 11 22:03:20 2020 +0200 @@ -211,6 +211,13 @@ Default: `False` +clean_days +~~~~~~~~~~ + +The number of days after which processed tasks are removed. + +Default: `30` + table ----- diff -r 9f5055b5f4b2 -r 095d160c071d trytond/ir/cron.py --- a/trytond/ir/cron.py Tue Aug 11 22:00:26 2020 +0200 +++ b/trytond/ir/cron.py Tue Aug 11 22:03:20 2020 +0200 @@ -55,6 +55,7 @@ next_call = fields.DateTime("Next Call", select=True) method = fields.Selection([ ('ir.trigger|trigger_time', "Run On Time Triggers"), + ('ir.queue|clean', "Clean Task Queue"), ], "Method", required=True) @classmethod diff -r 9f5055b5f4b2 -r 095d160c071d trytond/ir/queue.py --- a/trytond/ir/queue.py Tue Aug 11 22:00:26 2020 +0200 +++ b/trytond/ir/queue.py Tue Aug 11 22:03:20 2020 +0200 @@ -13,6 +13,7 @@ from trytond.transaction import Transaction has_worker = config.getboolean('queue', 'worker', default=False) +clean_days = config.getint('queue', 'clean_days', default=30) class Queue(ModelSQL): @@ -178,6 +179,17 @@ self.save() @classmethod + def clean(cls, date=None): + if date is None: + date = ( + datetime.datetime.now() - datetime.timedelta(days=clean_days)) + tasks = cls.search(['OR', + ('dequeued_at', '<', date), + ('finished_at', '<', date), + ]) + cls.delete(tasks) + + @classmethod def caller(cls, model): return _Model(cls, model) diff -r 9f5055b5f4b2 -r 095d160c071d trytond/ir/queue.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trytond/ir/queue.xml Tue Aug 11 22:03:20 2020 +0200 @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<!-- This file is part of Tryton. The COPYRIGHT file at the top level of +this repository contains the full copyright notices and license terms. --> +<tryton> + <data noupdate="1"> + <record model="ir.cron" id="cron_queue_clean"> + <field name="method">ir.queue|clean</field> + <field name="interval_number" eval="1"/> + <field name="interval_type">days</field> + </record> + </data> +</tryton> diff -r 9f5055b5f4b2 -r 095d160c071d trytond/ir/tryton.cfg --- a/trytond/ir/tryton.cfg Tue Aug 11 22:00:26 2020 +0200 +++ b/trytond/ir/tryton.cfg Tue Aug 11 22:03:20 2020 +0200 @@ -19,3 +19,4 @@ trigger.xml calendar_.xml message.xml + queue.xml