Skip to content

Commit 738be6d

Browse files
committed
Add the exclude_future_jobs arg to the queue_depth command
The queue_depth command can call get_queue_depths with the option to exclude jobs in the future
1 parent f28e85e commit 738be6d

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

django_dbq/management/commands/queue_depth.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ class Command(BaseCommand):
88

99
def add_arguments(self, parser):
1010
parser.add_argument("queue_name", nargs="*", default=["default"], type=str)
11+
parser.add_argument("--exclude_future_jobs", default=False, type=bool)
1112

1213
def handle(self, *args, **options):
1314
queue_names = options["queue_name"]
14-
queue_depths = Job.get_queue_depths()
15+
queue_depths = Job.get_queue_depths(
16+
exclude_future_jobs=options["exclude_future_jobs"]
17+
)
1518

1619
queue_depths_string = " ".join(
1720
[

django_dbq/tests.py

+28-2
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,19 @@ def test_get_queue_depths_exclude_future_jobs(self):
111111
self.assertDictEqual(queue_depths, {"default": 1, "testworker": 1})
112112

113113

114+
@freezegun.freeze_time("2025-01-01T12:00:00Z")
114115
@override_settings(JOBS={"testjob": {"tasks": ["a"]}})
115116
class QueueDepthTestCase(TestCase):
116117
def test_queue_depth(self):
117-
118118
Job.objects.create(name="testjob", state=Job.STATES.FAILED)
119119
Job.objects.create(name="testjob", state=Job.STATES.NEW)
120120
Job.objects.create(name="testjob", state=Job.STATES.FAILED)
121121
Job.objects.create(name="testjob", state=Job.STATES.COMPLETE)
122-
Job.objects.create(name="testjob", state=Job.STATES.READY)
122+
Job.objects.create(
123+
name="testjob",
124+
state=Job.STATES.READY,
125+
run_after=timezone.make_aware(datetime(2025, 1, 1, 13, 0, 0)),
126+
)
123127
Job.objects.create(
124128
name="testjob", queue_name="testqueue", state=Job.STATES.READY
125129
)
@@ -132,6 +136,28 @@ def test_queue_depth(self):
132136
output = stdout.getvalue()
133137
self.assertEqual(output.strip(), "event=queue_depths default=2")
134138

139+
def test_queue_depth_exclude_future_jobs(self):
140+
Job.objects.create(name="testjob", state=Job.STATES.FAILED)
141+
Job.objects.create(name="testjob", state=Job.STATES.NEW)
142+
Job.objects.create(name="testjob", state=Job.STATES.FAILED)
143+
Job.objects.create(name="testjob", state=Job.STATES.COMPLETE)
144+
Job.objects.create(
145+
name="testjob",
146+
state=Job.STATES.READY,
147+
run_after=timezone.make_aware(datetime(2025, 1, 1, 13, 0, 0)),
148+
)
149+
Job.objects.create(
150+
name="testjob", queue_name="testqueue", state=Job.STATES.READY
151+
)
152+
Job.objects.create(
153+
name="testjob", queue_name="testqueue", state=Job.STATES.READY
154+
)
155+
156+
stdout = StringIO()
157+
call_command("queue_depth", exclude_future_jobs=True, stdout=stdout)
158+
output = stdout.getvalue()
159+
self.assertEqual(output.strip(), "event=queue_depths default=1")
160+
135161
def test_queue_depth_multiple_queues(self):
136162

137163
Job.objects.create(name="testjob", state=Job.STATES.FAILED)

0 commit comments

Comments
 (0)