[IMP] forwardport: batch list

Since b45ecf08f9 forwardport batches
which fail have a delay set in order to avoid spamming. However that
delay was not displayed anywhere, which made things confusing as the
batch would not get run even after creating new triggers.

Show the delay if it's set (to a value later than now), as a relative
delta for clarity (as normally the delay is in minutes so a full blown
date is difficult to read / aprehend), and allow viewing and setting
it in the form view.

Fixes #982
This commit is contained in:
Xavier Morel 2024-11-18 14:18:25 +01:00
parent fbfb96be53
commit 3fe29ba8f6
2 changed files with 19 additions and 2 deletions

View File

@ -11,6 +11,7 @@
<tree>
<field name="source"/>
<field name="batch_id"/>
<field name="retry_after_relative" string="Retry In"/>
</tree>
</field>
</record>
@ -20,8 +21,13 @@
<field name="arch" type="xml">
<form>
<group>
<group><field name="source"/></group>
<group><field name="batch_id"/></group>
<group>
<field name="source"/>
<field name="batch_id"/>
</group>
<group>
<field name="retry_after"/>
</group>
</group>
</form>
</field>

View File

@ -7,6 +7,7 @@ from datetime import datetime, timedelta
import requests
import sentry_sdk
from babel.dates import format_timedelta
from dateutil import relativedelta
from odoo import api, fields, models
@ -73,6 +74,7 @@ class ForwardPortTasks(models.Model, Queue):
('complete', 'Complete ported batches'),
], required=True)
retry_after = fields.Datetime(required=True, default='1900-01-01 01:01:01')
retry_after_relative = fields.Char(compute="_compute_retry_after_relative")
pr_id = fields.Many2one('runbot_merge.pull_requests')
@api.model_create_multi
@ -91,6 +93,15 @@ class ForwardPortTasks(models.Model, Queue):
('retry_after', '<=', fields.Datetime.to_string(fields.Datetime.now())),
]
@api.depends('retry_after')
def _compute_retry_after_relative(self):
now = fields.Datetime.now()
for t in self:
if t.retry_after <= now:
t.retry_after_relative = ""
else:
t.retry_after_relative = format_timedelta(t.retry_after - now, locale=t.env.lang)
def _on_failure(self):
super()._on_failure()
self.retry_after = fields.Datetime.to_string(fields.Datetime.now() + timedelta(minutes=30))