1 | <?php |
||
12 | abstract class BaseRunManager extends RunManager |
||
13 | { |
||
14 | /** @var ObjectManager */ |
||
15 | protected $objectManager; |
||
16 | |||
17 | /** @var string|null */ |
||
18 | protected $runArchiveClass; |
||
19 | |||
20 | /** |
||
21 | * @return ObjectManager |
||
22 | */ |
||
23 | 5 | public function getObjectManager() |
|
24 | { |
||
25 | 5 | return $this->objectManager; |
|
26 | } |
||
27 | |||
28 | /** |
||
29 | * @param ObjectManager $objectManager |
||
30 | */ |
||
31 | 10 | public function setObjectManager(ObjectManager $objectManager) |
|
32 | { |
||
33 | 10 | $this->objectManager = $objectManager; |
|
34 | 10 | } |
|
35 | |||
36 | /** |
||
37 | * @return ObjectRepository |
||
38 | */ |
||
39 | public function getRepository() |
||
40 | { |
||
41 | return $this->objectManager->getRepository($this->getRunClass()); |
||
42 | } |
||
43 | |||
44 | /** |
||
45 | * @return null|string |
||
46 | */ |
||
47 | 9 | public function getRunArchiveClass() |
|
48 | { |
||
49 | 9 | return $this->runArchiveClass; |
|
50 | } |
||
51 | |||
52 | /** |
||
53 | * @param null|string $runArchiveClass |
||
54 | */ |
||
55 | 10 | public function setRunArchiveClass($runArchiveClass) |
|
59 | |||
60 | 2 | public function recordJobRun(Job $job) |
|
61 | { |
||
62 | 2 | parent::recordJobRun($job); |
|
63 | |||
64 | 2 | $finishedAt = $job->getFinishedAt(); |
|
65 | 2 | if (null === $finishedAt) { |
|
66 | $finishedAt = new \DateTime(); |
||
67 | } |
||
68 | /** @var JobTiming $jobTiming */ |
||
69 | 2 | $jobTiming = new $this->jobTimingClass(); |
|
70 | 2 | $jobTiming->setFinishedAt($finishedAt); |
|
71 | 2 | $this->objectManager->persist($jobTiming); |
|
72 | 2 | $this->objectManager->flush(); |
|
73 | 2 | } |
|
74 | |||
75 | 2 | public function pruneStalledRuns() |
|
76 | { |
||
77 | 2 | $runs = $this->getOldLiveRuns(); |
|
78 | /** @var Run $run */ |
||
79 | 2 | $delete = []; |
|
80 | |||
81 | 2 | foreach ($runs as $run) { |
|
82 | 2 | $lastHeartbeat = $run->getLastHeartbeatAt(); |
|
83 | 2 | $time = time() - 3600; |
|
84 | 2 | $processTimeout = $run->getProcessTimeout(); |
|
85 | 2 | $time -= $processTimeout; |
|
86 | 2 | $oldDate = new \DateTime("@$time"); |
|
87 | 2 | if (null === $lastHeartbeat || $oldDate > $lastHeartbeat) { |
|
88 | 2 | $delete[] = $run; |
|
89 | 2 | } |
|
90 | 2 | } |
|
91 | |||
92 | 2 | return $this->deleteOldRuns($delete); |
|
93 | } |
||
94 | |||
95 | /** |
||
96 | * @param array $delete |
||
97 | * |
||
98 | * @return int |
||
99 | */ |
||
100 | 2 | protected function deleteOldRuns(array $delete) |
|
101 | { |
||
102 | 2 | $count = count($delete); |
|
103 | 2 | $objectManager = $this->getObjectManager(); |
|
104 | 2 | for ($i = 0; $i < $count; $i += 100) { |
|
105 | 2 | $deleteList = array_slice($delete, $i, 100); |
|
106 | 2 | foreach ($deleteList as $object) { |
|
107 | 2 | $objectManager->remove($object); |
|
108 | 2 | } |
|
109 | 2 | $objectManager->flush(); |
|
110 | 2 | } |
|
111 | |||
112 | 2 | return $count; |
|
113 | } |
||
114 | |||
115 | /** |
||
116 | * @return array |
||
117 | */ |
||
118 | abstract protected function getOldLiveRuns(); |
||
119 | |||
120 | abstract protected function removeOlderThan(ObjectManager $objectManager, $objectName, $field, \DateTime $olderThan); |
||
121 | |||
122 | 1 | public function pruneArchivedRuns(\DateTime $olderThan) |
|
123 | { |
||
124 | /** @var ObjectManager $objectManager */ |
||
125 | 1 | $objectManager = $this->getObjectManager(); |
|
129 | |||
130 | public function pruneJobTimings(\DateTime $olderThan) |
||
137 | } |
||
138 |