-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathGarbageCollectionJob.php
70 lines (61 loc) · 1.86 KB
/
GarbageCollectionJob.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
namespace SilverStripe\SessionManager\Jobs;
use SilverStripe\Core\Config\Configurable;
use SilverStripe\Core\Injector\Injectable;
use SilverStripe\Core\Injector\Injector;
use SilverStripe\ORM\FieldType\DBDatetime;
use SilverStripe\SessionManager\Services\GarbageCollectionService;
use Symbiote\QueuedJobs\DataObjects\QueuedJobDescriptor;
use Symbiote\QueuedJobs\Services\AbstractQueuedJob;
use Symbiote\QueuedJobs\Services\QueuedJob;
use Symbiote\QueuedJobs\Services\QueuedJobService;
if (!class_exists(QueuedJobDescriptor::class)) {
return;
}
class GarbageCollectionJob extends AbstractQueuedJob
{
use Configurable;
use Injectable;
/**
* Number of seconds between job runs. Defaults to 1 day.
*
* @var int
*/
private static $seconds_between_jobs = 86400;
/**
* @return string
*/
public function getTitle()
{
return _t(__CLASS__ . '.TITLE', 'Session manager garbage collection');
}
public function process()
{
$this->queueNextJob();
GarbageCollectionService::singleton()->collect();
$this->isComplete = true;
}
public function requireDefaultJob(): void
{
$filter = [
'Implementation' => GarbageCollectionJob::class,
'JobStatus' => [
QueuedJob::STATUS_NEW,
QueuedJob::STATUS_INIT,
QueuedJob::STATUS_RUN
]
];
if (QueuedJobDescriptor::get()->filter($filter)->count() > 0) {
return;
}
$this->queueNextJob();
}
private function queueNextJob(): void
{
$timestamp = time() + static::config()->get('seconds_between_jobs');
QueuedJobService::singleton()->queueJob(
Injector::inst()->create(GarbageCollectionJob::class),
DBDatetime::create()->setValue($timestamp)->Rfc2822()
);
}
}