@@ -151,6 +151,33 @@ public function createQueryBuilder($alias = null): QueryBuilder
151151 return $ qb ;
152152 }
153153
154+ public function crashLongRunning (int $ hours ): void
155+ {
156+ $ qb = $ this ->connection ->createQueryBuilder ();
157+ $ qb ->update (static ::TABLE_NAME , 'j ' )
158+ ->set ('j.status ' , ':new_status ' )
159+ ->set ('j.end_time ' , ':now ' )
160+ ->andWhere ('j.status = :status ' )
161+ ->andWhere ('j.start_time < :date ' )
162+ ->setParameter ('status ' , Job::STATUS_RUNNING )
163+ ->setParameter ('date ' , new \DateTime ("- {$ hours } hours " ), 'datetime ' )
164+ ->setParameter ('new_status ' , Job::STATUS_CRASHED )
165+ ->setParameter ('now ' , new \DateTime (), 'datetime ' )
166+ ->executeStatement ()
167+ ;
168+ }
169+
170+ public function deleteOld (int $ days ): void
171+ {
172+ $ qb = $ this ->connection ->createQueryBuilder ();
173+ $ qb ->delete (static ::TABLE_NAME , 'j ' )
174+ ->andWhere ($ qb ->expr ()->in ('j.status ' , [Job::STATUS_COMPLETED , Job::STATUS_CRASHED ]))
175+ ->andWhere ('j.end_time < :date ' )
176+ ->setParameter ('date ' , new \DateTime ("- {$ days } days " ), 'datetime ' )
177+ ->executeStatement ()
178+ ;
179+ }
180+
154181 private function returnFirstOrNull (QueryBuilder $ qb ): ?Job
155182 {
156183 $ stmt = $ qb ->executeQuery ();
0 commit comments