Skip to content

Commit 4e7d0ef

Browse files
committed
Merge PR #309 into 13.0
Signed-off-by guewen
2 parents 263fbaa + 5a95553 commit 4e7d0ef

6 files changed

Lines changed: 78 additions & 2 deletions

File tree

queue_job/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
{
55
"name": "Job Queue",
6-
"version": "13.0.3.6.0",
6+
"version": "13.0.3.7.0",
77
"author": "Camptocamp,ACSONE SA/NV,Odoo Community Association (OCA)",
88
"website": "https://github.com/OCA/queue/queue_job",
99
"license": "LGPL-3",

queue_job/job.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@ def store(self):
529529
"date_enqueued": False,
530530
"date_started": False,
531531
"date_done": False,
532+
"exec_time": False,
532533
"eta": False,
533534
"identity_key": False,
534535
"worker_pid": self.worker_pid,
@@ -540,6 +541,8 @@ def store(self):
540541
vals["date_started"] = self.date_started
541542
if self.date_done:
542543
vals["date_done"] = self.date_done
544+
if self.exec_time:
545+
vals["exec_time"] = self.exec_time
543546
if self.eta:
544547
vals["eta"] = self.eta
545548
if self.identity_key:
@@ -661,6 +664,12 @@ def channel(self):
661664
def channel(self, value):
662665
self._channel = value
663666

667+
@property
668+
def exec_time(self):
669+
if self.date_done and self.date_started:
670+
return (self.date_done - self.date_started).total_seconds()
671+
return None
672+
664673
def set_pending(self, result=None, reset_retry=True):
665674
self.state = PENDING
666675
self.date_enqueued = None
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
2+
3+
import logging
4+
5+
from odoo.tools.sql import column_exists
6+
7+
_logger = logging.getLogger(__name__)
8+
9+
10+
def migrate(cr, version):
11+
if not column_exists(cr, "queue_job", "exec_time"):
12+
# Disable trigger otherwise the update takes ages.
13+
cr.execute(
14+
"""
15+
ALTER TABLE queue_job DISABLE TRIGGER queue_job_notify;
16+
"""
17+
)
18+
cr.execute(
19+
"""
20+
ALTER TABLE queue_job ADD COLUMN exec_time double precision DEFAULT 0;
21+
"""
22+
)
23+
cr.execute(
24+
"""
25+
UPDATE
26+
queue_job
27+
SET
28+
exec_time = EXTRACT(EPOCH FROM (date_done - date_started));
29+
"""
30+
)
31+
cr.execute(
32+
"""
33+
ALTER TABLE queue_job ENABLE TRIGGER queue_job_notify;
34+
"""
35+
)

queue_job/models/queue_job.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ class QueueJob(models.Model):
7979
date_started = fields.Datetime(string="Start Date", readonly=True)
8080
date_enqueued = fields.Datetime(string="Enqueue Time", readonly=True)
8181
date_done = fields.Datetime(readonly=True)
82+
exec_time = fields.Float(
83+
string="Execution Time (avg)",
84+
group_operator="avg",
85+
help="Time required to execute this job in seconds. Average when grouped.",
86+
)
8287

8388
eta = fields.Datetime(string="Execute only after")
8489
retry = fields.Integer(string="Current try")

queue_job/views/queue_job_views.xml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
<field name="date_enqueued" />
5757
<field name="date_started" />
5858
<field name="date_done" />
59+
<!-- Do not use float_time as it does not work properly -->
60+
<field name="exec_time" string="Time (s)" />
5961
</group>
6062
</group>
6163
<group colspan="4">
@@ -107,12 +109,34 @@
107109
<field name="eta" />
108110
<field name="date_created" />
109111
<field name="date_done" />
112+
<field name="exec_time" widget="float_time" />
110113
<field name="uuid" />
111114
<field name="channel" />
112115
<field name="company_id" groups="base.group_multi_company" />
113116
</tree>
114117
</field>
115118
</record>
119+
<record id="view_queue_job_pivot" model="ir.ui.view">
120+
<field name="name">queue.job.pivot</field>
121+
<field name="model">queue.job</field>
122+
<field name="arch" type="xml">
123+
<pivot string="Jobs">
124+
<field name="exec_time" type="measure" />
125+
<field name="job_function_id" type="row" />
126+
<field name="date_done" type="col" interval="week" />
127+
</pivot>
128+
</field>
129+
</record>
130+
<record id="view_queue_job_graph" model="ir.ui.view">
131+
<field name="name">queue.job.graph</field>
132+
<field name="model">queue.job</field>
133+
<field name="arch" type="xml">
134+
<graph string="Jobs">
135+
<field name="job_function_id" type="row" />
136+
<field name="exec_time" type="measure" />
137+
</graph>
138+
</field>
139+
</record>
116140
<record id="view_queue_job_search" model="ir.ui.view">
117141
<field name="name">queue.job.search</field>
118142
<field name="model">queue.job</field>
@@ -178,7 +202,7 @@
178202
<record id="action_queue_job" model="ir.actions.act_window">
179203
<field name="name">Jobs</field>
180204
<field name="res_model">queue.job</field>
181-
<field name="view_mode">tree,form</field>
205+
<field name="view_mode">tree,form,pivot,graph</field>
182206
<field name="context">{'search_default_pending': 1,
183207
'search_default_enqueued': 1,
184208
'search_default_started': 1,

test_queue_job/tests/test_job.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ def test_worker_pid(self):
149149

150150
def test_set_done(self):
151151
job_a = Job(self.method)
152+
job_a.date_started = datetime(2015, 3, 15, 16, 40, 0)
152153
datetime_path = "odoo.addons.queue_job.job.datetime"
153154
with mock.patch(datetime_path, autospec=True) as mock_datetime:
154155
mock_datetime.now.return_value = datetime(2015, 3, 15, 16, 41, 0)
@@ -157,6 +158,7 @@ def test_set_done(self):
157158
self.assertEquals(job_a.state, DONE)
158159
self.assertEquals(job_a.result, "test")
159160
self.assertEquals(job_a.date_done, datetime(2015, 3, 15, 16, 41, 0))
161+
self.assertEquals(job_a.exec_time, 60.0)
160162
self.assertFalse(job_a.exc_info)
161163

162164
def test_set_failed(self):
@@ -233,6 +235,7 @@ def test_read(self):
233235
self.assertAlmostEqual(job_read.date_started, test_date, delta=delta)
234236
self.assertAlmostEqual(job_read.date_enqueued, test_date, delta=delta)
235237
self.assertAlmostEqual(job_read.date_done, test_date, delta=delta)
238+
self.assertAlmostEqual(job_read.exec_time, 0.0)
236239

237240
def test_job_unlinked(self):
238241
test_job = Job(self.method, args=("o", "k"), kwargs={"c": "!"})

0 commit comments

Comments
 (0)