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

Reply via email to