diff --git a/components/ILIAS/BackgroundTasks/classes/class.ilBackgroundTaskGarbageCollection.php b/components/ILIAS/BackgroundTasks/classes/class.ilBackgroundTaskGarbageCollection.php new file mode 100644 index 000000000000..a1d5e540c63f --- /dev/null +++ b/components/ILIAS/BackgroundTasks/classes/class.ilBackgroundTaskGarbageCollection.php @@ -0,0 +1,96 @@ +logger = $DIC->logger()->bgtk(); + $this->lng = $DIC->language(); + $this->lng->loadLanguageModule('background_tasks'); + $this->persistence = $DIC->backgroundTasks()->persistence(); + + $this->result = new ilCronJobResult(); + } + + public function getTitle(): string + { + return $this->lng->txt('background_task_garbage_collection'); + } + + public function getDescription(): string + { + return $this->lng->txt('background_task_garbage_collection_info'); + } + + public function getId(): string + { + return 'background_task_garbage_collection'; + } + + public function hasAutoActivation(): bool + { + return false; + } + + public function hasFlexibleSchedule(): bool + { + return true; + } + + public function getDefaultScheduleType(): CronJobScheduleType + { + return CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS; + } + + public function getDefaultScheduleValue(): ?int + { + return 1; + } + + public function run(): ilCronJobResult + { + $this->logger->debug('Starting background task garbage collector..'); + + try { + $this->persistence->garbageCollection(); + } catch (Exception $e) { + $this->result->setStatus(ilCronJobResult::STATUS_CRASHED); + $this->result->setMessage(mb_substr("Exc.: {$e->getMessage()} / {$e->getTraceAsString()}", 0, 400)); + $this->logger->error("Background-Task Garbage Collection execution failed with message: {$e->getMessage()}"); + $this->logger->error($e->getTraceAsString()); + return $this->result; + } + + $this->result->setStatus(ilCronJobResult::STATUS_OK); + return $this->result; + } +} diff --git a/components/ILIAS/BackgroundTasks_/service.xml b/components/ILIAS/BackgroundTasks/service.xml old mode 100755 new mode 100644 similarity index 73% rename from components/ILIAS/BackgroundTasks_/service.xml rename to components/ILIAS/BackgroundTasks/service.xml index 060904e8178a..7b1d010dddd7 --- a/components/ILIAS/BackgroundTasks_/service.xml +++ b/components/ILIAS/BackgroundTasks/service.xml @@ -8,5 +8,8 @@ + + + diff --git a/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php b/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php index 0bc809cb82b1..a8441b33dc37 100755 --- a/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php +++ b/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php @@ -55,7 +55,7 @@ public function __construct(protected \ilDBInterface $db) $this->taskHashToTaskContainerId = new \SplObjectStorage(); } - protected function gc(): void + public function garbageCollection(): void { $atom = $this->db->buildAtomQuery(); @@ -155,11 +155,8 @@ public function updateBucket(Bucket $bucket): void */ public function getBucketIdsOfUser(int $user_id, string $order_by = "id", string $order_direction = "ASC"): array { - // Garbage Collection - $random = new \Random\Randomizer(); - - if ($random->getInt(1, 100) === 1) { - $this->gc(); + if ((new \Random\Randomizer())->getInt(0, 100) === 1) { + $this->garbageCollection(); } return BucketContainer::where(['user_id' => $user_id]) @@ -192,9 +189,10 @@ public function getBucketMetaOfUser(int $user_id): array */ public function getBucketIdsByState(int $state): array { - $buckets = BucketContainer::where(['state' => $state])->get(); - - return array_map(fn(BucketContainer $bucket_container): int => $bucket_container->getId(), $buckets); + return array_map( + static fn(BucketContainer $bucket_container): int => $bucket_container->getId(), + BucketContainer::where(['state' => $state])->get() + ); } /** diff --git a/components/ILIAS/BackgroundTasks/src/Persistence.php b/components/ILIAS/BackgroundTasks/src/Persistence.php index 43095254e13c..9c0fb8256dec 100755 --- a/components/ILIAS/BackgroundTasks/src/Persistence.php +++ b/components/ILIAS/BackgroundTasks/src/Persistence.php @@ -16,12 +16,7 @@ * *********************************************************************/ -/** - * Created by PhpStorm. - * User: otruffer - * Date: 05.05.17 - * Time: 10:14 - */ +declare(strict_types=1); namespace ILIAS\BackgroundTasks; @@ -33,9 +28,9 @@ interface Persistence public function saveBucketAndItsTasks(Bucket $bucket): void; /** - * @return \int[] Returns an array of bucket ids for the given user Id. + * @return int[] Returns an array of bucket ids for the given user Id. */ - public function getBucketIdsOfUser(int $user_id, string $order_by = "id", string $order_direction = "ASC"): array; + public function getBucketIdsOfUser(int $user_id, string $order_by = 'id', string $order_direction = 'ASC'): array; /** * @return int[] Returns a list of bucket ids for the given Observer State @@ -73,4 +68,6 @@ public function getBucketContainerId(Bucket $bucket): int; * @return BucketMeta[] */ public function getBucketMetaOfUser(int $user_id): array; + + public function garbageCollection(): void; } diff --git a/lang/ilias_de.lang b/lang/ilias_de.lang index 1c9fd068a903..2d2565470092 100644 --- a/lang/ilias_de.lang +++ b/lang/ilias_de.lang @@ -2207,6 +2207,8 @@ awrn#:#user_awrn_default#:#Standard awrn#:#user_awrn_hide#:#Nicht anzeigen awrn#:#user_awrn_show#:#Anzeigen background_tasks#:#abort#:#Abbrechen +background_tasks#:#background_task_garbage_collection#:#Background Tasks GC +background_tasks#:#background_task_garbage_collection_info#:#Dieser Job bereinigt veraltete Background Tasks und zugehörige Datenbanktabellen. background_tasks#:#background_tasks#:#Background Tasks background_tasks#:#background_tasks_running#:#Background Tasks background_tasks#:#completed#:#Abgeschlossen diff --git a/lang/ilias_en.lang b/lang/ilias_en.lang index 1641cff2bc99..5a71b7fe66df 100644 --- a/lang/ilias_en.lang +++ b/lang/ilias_en.lang @@ -2207,6 +2207,8 @@ awrn#:#user_awrn_default#:#Default awrn#:#user_awrn_hide#:#Hide my status awrn#:#user_awrn_show#:#Show my status background_tasks#:#abort#:#Abort +background_tasks#:#background_task_garbage_collection#:#Background Tasks GC +background_tasks#:#background_task_garbage_collection_info#:#This job cleans up stale tasks and related database tables. background_tasks#:#background_tasks#:#Background Tasks background_tasks#:#background_tasks_running#:#Background Tasks background_tasks#:#completed#:#Completed