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