@@ -63,12 +63,17 @@ def test_worker_with_queue_name(self):
6363 self .assertTrue ("test_queue" in output )
6464
6565
66+ @freezegun .freeze_time ("2025-01-01T12:00:00Z" )
6667@override_settings (JOBS = {"testjob" : {"tasks" : ["a" ]}})
6768class JobModelMethodTestCase (TestCase ):
6869 def test_get_queue_depths (self ):
6970 Job .objects .create (name = "testjob" , queue_name = "default" )
7071 Job .objects .create (name = "testjob" , queue_name = "testworker" )
71- Job .objects .create (name = "testjob" , queue_name = "testworker" )
72+ Job .objects .create (
73+ name = "testjob" ,
74+ queue_name = "testworker" ,
75+ run_after = timezone .make_aware (datetime (2025 , 1 , 1 , 13 , 0 , 0 )),
76+ )
7277 Job .objects .create (
7378 name = "testjob" , queue_name = "testworker" , state = Job .STATES .FAILED
7479 )
@@ -79,16 +84,38 @@ def test_get_queue_depths(self):
7984 queue_depths = Job .get_queue_depths ()
8085 self .assertDictEqual (queue_depths , {"default" : 1 , "testworker" : 2 })
8186
87+ def test_get_queue_depths_exclude_future_jobs (self ):
88+ Job .objects .create (name = "testjob" , queue_name = "default" )
89+ Job .objects .create (name = "testjob" , queue_name = "testworker" )
90+ Job .objects .create (
91+ name = "testjob" ,
92+ queue_name = "testworker" ,
93+ run_after = timezone .make_aware (datetime (2025 , 1 , 1 , 13 , 0 , 0 )),
94+ )
95+ Job .objects .create (
96+ name = "testjob" , queue_name = "testworker" , state = Job .STATES .FAILED
97+ )
98+ Job .objects .create (
99+ name = "testjob" , queue_name = "testworker" , state = Job .STATES .COMPLETE
100+ )
101+
102+ queue_depths = Job .get_queue_depths (exclude_future_jobs = True )
103+ self .assertDictEqual (queue_depths , {"default" : 1 , "testworker" : 1 })
104+
82105
106+ @freezegun .freeze_time ("2025-01-01T12:00:00Z" )
83107@override_settings (JOBS = {"testjob" : {"tasks" : ["a" ]}})
84108class QueueDepthTestCase (TestCase ):
85109 def test_queue_depth (self ):
86-
87110 Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
88111 Job .objects .create (name = "testjob" , state = Job .STATES .NEW )
89112 Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
90113 Job .objects .create (name = "testjob" , state = Job .STATES .COMPLETE )
91- Job .objects .create (name = "testjob" , state = Job .STATES .READY )
114+ Job .objects .create (
115+ name = "testjob" ,
116+ state = Job .STATES .READY ,
117+ run_after = timezone .make_aware (datetime (2025 , 1 , 1 , 13 , 0 , 0 )),
118+ )
92119 Job .objects .create (
93120 name = "testjob" , queue_name = "testqueue" , state = Job .STATES .READY
94121 )
@@ -101,6 +128,28 @@ def test_queue_depth(self):
101128 output = stdout .getvalue ()
102129 self .assertEqual (output .strip (), "event=queue_depths default=2" )
103130
131+ def test_queue_depth_exclude_future_jobs (self ):
132+ Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
133+ Job .objects .create (name = "testjob" , state = Job .STATES .NEW )
134+ Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
135+ Job .objects .create (name = "testjob" , state = Job .STATES .COMPLETE )
136+ Job .objects .create (
137+ name = "testjob" ,
138+ state = Job .STATES .READY ,
139+ run_after = timezone .make_aware (datetime (2025 , 1 , 1 , 13 , 0 , 0 )),
140+ )
141+ Job .objects .create (
142+ name = "testjob" , queue_name = "testqueue" , state = Job .STATES .READY
143+ )
144+ Job .objects .create (
145+ name = "testjob" , queue_name = "testqueue" , state = Job .STATES .READY
146+ )
147+
148+ stdout = StringIO ()
149+ call_command ("queue_depth" , exclude_future_jobs = True , stdout = stdout )
150+ output = stdout .getvalue ()
151+ self .assertEqual (output .strip (), "event=queue_depths default=1" )
152+
104153 def test_queue_depth_multiple_queues (self ):
105154
106155 Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
0 commit comments