@@ -63,12 +63,17 @@ def test_worker_with_queue_name(self):
63
63
self .assertTrue ("test_queue" in output )
64
64
65
65
66
+ @freezegun .freeze_time ("2025-01-01T12:00:00Z" )
66
67
@override_settings (JOBS = {"testjob" : {"tasks" : ["a" ]}})
67
68
class JobModelMethodTestCase (TestCase ):
68
69
def test_get_queue_depths (self ):
69
70
Job .objects .create (name = "testjob" , queue_name = "default" )
70
71
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
+ )
72
77
Job .objects .create (
73
78
name = "testjob" , queue_name = "testworker" , state = Job .STATES .FAILED
74
79
)
@@ -79,16 +84,38 @@ def test_get_queue_depths(self):
79
84
queue_depths = Job .get_queue_depths ()
80
85
self .assertDictEqual (queue_depths , {"default" : 1 , "testworker" : 2 })
81
86
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
+
82
105
106
+ @freezegun .freeze_time ("2025-01-01T12:00:00Z" )
83
107
@override_settings (JOBS = {"testjob" : {"tasks" : ["a" ]}})
84
108
class QueueDepthTestCase (TestCase ):
85
109
def test_queue_depth (self ):
86
-
87
110
Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
88
111
Job .objects .create (name = "testjob" , state = Job .STATES .NEW )
89
112
Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
90
113
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
+ )
92
119
Job .objects .create (
93
120
name = "testjob" , queue_name = "testqueue" , state = Job .STATES .READY
94
121
)
@@ -101,6 +128,28 @@ def test_queue_depth(self):
101
128
output = stdout .getvalue ()
102
129
self .assertEqual (output .strip (), "event=queue_depths default=2" )
103
130
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
+
104
153
def test_queue_depth_multiple_queues (self ):
105
154
106
155
Job .objects .create (name = "testjob" , state = Job .STATES .FAILED )
0 commit comments