Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion queue_job_batch/models/queue_job_batch.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# Copyright 2023 ForgeFlow S.L. (http://www.forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)

from collections import defaultdict

from odoo import api, fields, models

from odoo.addons.mail.tools.discuss import Store
Expand Down Expand Up @@ -58,6 +60,7 @@ class QueueJobBatch(models.Model):
completeness = fields.Float(
compute="_compute_job_count",
)
execution_time = fields.Float(compute="_compute_job_count")
failed_percentage = fields.Float(
compute="_compute_job_count",
)
Expand Down Expand Up @@ -117,15 +120,17 @@ def get_new_batch(self, name, **kwargs):
def _compute_job_count(self):
grouped = self.env["queue.job"].read_group(
[("job_batch_id", "in", self.ids)],
["job_batch_id", "state"],
["job_batch_id", "state", "exec_time"],
["job_batch_id", "state"],
lazy=False,
)
counts = {}
times = defaultdict(float)
for g in grouped:
batch_id = g["job_batch_id"][0]
counts.setdefault(batch_id, {})
counts[batch_id][g["state"]] = g["__count"]
times[batch_id] += g["exec_time"]

for rec in self:
by_state = counts.get(rec.id, {})
Expand All @@ -137,6 +142,7 @@ def _compute_job_count(self):
rec.failed_job_count = failed
rec.finished_job_count = done
rec.completeness = done / max(1, total)
rec.execution_time = times.get(rec.id) * total
rec.failed_percentage = failed / max(1, total)

@api.model
Expand Down
1 change: 1 addition & 0 deletions queue_job_batch/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import test_queue_job_batch
35 changes: 35 additions & 0 deletions queue_job_batch/tests/test_queue_job_batch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo.tests import TransactionCase


class TestJobBatch(TransactionCase):
def setUp(self):
super().setUp()
self.job_batch = self.env["queue.job.batch"].create(
{
"name": "test",
"user_id": self.env.user.id,
}
)
partners = self.env.ref("base.res_partner_1") + self.env.ref(
"base.res_partner_2"
)
self.jobs = [
p.with_context(job_batch=self.job_batch).with_delay()._get_complete_name()
for p in partners
]
self.assertEqual(len(self.job_batch.job_ids), len(self.jobs))

def test_execution_time(self):
self.assertEqual(self.job_batch.execution_time, 0)
for job in self.jobs:
job.set_started()
job.perform()
job.set_done()
job.store()
self.assertGreater(job.exec_time, 0)
self.assertEqual(
self.job_batch.execution_time,
self.jobs[0].exec_time + self.jobs[1].exec_time,
)
1 change: 1 addition & 0 deletions queue_job_batch/views/queue_job_batch_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
options="{'current_value': 'finished_job_count', 'max_value': 'job_count'}"
/>
<field name="state" />
<field name="execution_time" />
</list>
</field>
</record>
Expand Down
Loading