1 | <?php |
||
10 | abstract class DoctrineRunManager extends RunManager |
||
11 | { |
||
12 | /** @var ObjectManager */ |
||
13 | protected $objectManager; |
||
14 | |||
15 | /** @var string|null */ |
||
16 | protected $runArchiveClass; |
||
17 | |||
18 | 19 | public function __construct(ObjectManager $objectManager, $runClass, $runArchiveClass) |
|
24 | |||
25 | /** |
||
26 | * @return ObjectManager |
||
27 | */ |
||
28 | 18 | public function getObjectManager() |
|
29 | { |
||
30 | 18 | return $this->objectManager; |
|
31 | } |
||
32 | |||
33 | /** |
||
34 | * @return ObjectRepository |
||
35 | */ |
||
36 | public function getRepository() |
||
40 | |||
41 | /** |
||
42 | * @return null|string |
||
43 | */ |
||
44 | 21 | public function getRunArchiveClass() |
|
48 | |||
49 | 2 | public function pruneStalledRuns() |
|
50 | { |
||
51 | 2 | $runs = $this->getOldLiveRuns(); |
|
52 | /** @var Run $run */ |
||
53 | 2 | $delete = []; |
|
54 | |||
55 | 2 | foreach ($runs as $run) { |
|
56 | 2 | $lastHeartbeat = $run->getLastHeartbeatAt(); |
|
57 | 2 | $time = time() - 3600; |
|
58 | 2 | $processTimeout = $run->getProcessTimeout(); |
|
59 | 2 | $time -= $processTimeout; |
|
60 | 2 | $oldDate = new \DateTime("@$time"); |
|
61 | 2 | if (null === $lastHeartbeat || $oldDate > $lastHeartbeat) { |
|
62 | 2 | $delete[] = $run; |
|
63 | } |
||
64 | } |
||
65 | |||
66 | 2 | return $this->deleteOldRuns($delete); |
|
67 | } |
||
68 | |||
69 | /** |
||
70 | * @param array $delete |
||
71 | * |
||
72 | * @return int |
||
73 | */ |
||
74 | 2 | protected function deleteOldRuns(array $delete) |
|
75 | { |
||
76 | 2 | $count = count($delete); |
|
77 | 2 | $objectManager = $this->getObjectManager(); |
|
78 | 2 | for ($i = 0; $i < $count; $i += 100) { |
|
79 | 2 | $deleteList = array_slice($delete, $i, 100); |
|
80 | 2 | foreach ($deleteList as $object) { |
|
81 | 2 | $objectManager->remove($object); |
|
82 | } |
||
83 | 2 | $this->flush(); |
|
84 | } |
||
85 | |||
86 | 2 | return $count; |
|
87 | } |
||
88 | |||
89 | 2 | protected function flush() |
|
90 | { |
||
91 | 2 | $this->getObjectManager()->flush(); |
|
92 | 2 | } |
|
93 | |||
94 | 2 | protected function persistRun(Run $run, $action = 'persist') |
|
95 | { |
||
96 | 2 | $objectManager = $this->getObjectManager(); |
|
97 | 2 | $objectManager->$action($run); |
|
98 | 2 | $objectManager->flush(); |
|
99 | 2 | } |
|
100 | |||
101 | /** |
||
102 | * @return array |
||
103 | */ |
||
104 | abstract protected function getOldLiveRuns(); |
||
105 | |||
106 | abstract protected function removeOlderThan($objectName, $field, \DateTime $olderThan); |
||
107 | |||
108 | 1 | public function pruneArchivedRuns(\DateTime $olderThan) |
|
109 | { |
||
110 | 1 | return $this->removeOlderThan($this->getRunArchiveClass(), 'endedAt', $olderThan); |
|
111 | } |
||
112 | } |
||
113 |