Source of file ClamAVScanJob.php
Size: 3,682 Bytes - Last Modified: 2021-12-23T10:21:01+00:00
/var/www/docs.ssmods.com/process/src/src/Jobs/ClamAVScanJob.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | <?php namespace Symbiote\SteamedClams\Jobs; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DB; use Symbiote\QueuedJobs\Services\AbstractQueuedJob; use Symbiote\QueuedJobs\Services\QueuedJob; use Symbiote\SteamedClams\ClamAV; use Symbiote\SteamedClams\Tasks\ClamAVScanTask; use Symbiote\QueuedJobs\Services\QueuedJobService; if (class_exists(AbstractQueuedJob::class)) { class ClamAVScanJob extends AbstractQueuedJob { /** * Disable queueing on dev/build * @var bool */ private static $disable_queue_on_devbuild = false; /** * Repeat at daily by default (in seconds). * @var int */ private static $repeat_time = 86400; /** * Repeat at 2am by default * @var string */ private static $time = '02:00:00'; /** * NOTE: Called from ClamAVScan::requireDefaultRecords (2016-12-01) */ public function requireDefaultRecords() { if (Config::inst()->get(__CLASS__, 'disable_queue_on_devbuild')) { return; } $jobDescriptorID = $this->queueMyselfIfNeeded(); if ($jobDescriptorID !== null) { DB::alteration_message('Queued ClamAVScanJob #' . $jobDescriptorID, 'created'); } } public function setup() { parent::setup(); // Recommended for long running jobs that don't increment 'currentStep' // https://github.com/symbiote/silverstripe-queuedjobs $this->currentStep = -1; } /** * @return string */ public function getTitle() { return 'ClamAV Virus Scan Task - Scan missed files'; } /** * @return string */ public function getJobType() { return QueuedJob::QUEUED; } public function process() { $task = Injector::inst()->get(ClamAVScanTask::class); $task->run(null, $this); $this->currentStep = 1; $this->isComplete = true; } public function afterComplete() { $this->queueMyselfIfNeeded(); } /** * Add this job if there are files to scan for viruses. * * @var int|null * @return null */ public function queueMyselfIfNeeded() { // NOTE(Jake): Perhaps add '$cache' flag here to stop // thrashing in ClamAVScan::onAfterWrite() $clamAV = Injector::inst()->get(ClamAV::class); $list = $clamAV->getFailedToScanFileList(); if (!$list || $list->count() == 0) { return null; } return $this->queueMyself(); } /** * Add this job to the queue at the desired times * * @var int|null * @return null */ public function queueMyself() { $repeat_time = Config::inst()->get(__CLASS__, 'repeat_time'); if (!$repeat_time) { return null; } $time = Config::inst()->get(__CLASS__, 'time'); if (!$time) { return null; } $class = get_class(); $nextJob = new $class(); $job = Injector::inst()->get(QueuedJobService::class); $jobDescriptorID = $job->queueJob($nextJob, date('Y-m-d', time() + $repeat_time) . ' ' . $time); return $jobDescriptorID; } } } |