1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
QueueAgent.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
6
15
16final class QueueAgent
17{
18 private BatchJobExecutor $batchJobExecutor;
19 private AbstractQueueService $queueService;
20 private QueueProviderInterface $queueProvider;
21
22 private function __construct()
23 {
24 $this->queueService = ServiceLocator::getInstance()->get('socialnetwork.onboarding.queue.service');
25 $this->queueProvider = ServiceLocator::getInstance()->get('socialnetwork.onboarding.queue.provider');
26
27 $this->batchJobExecutor = ServiceLocator::getInstance()->get('socialnetwork.onboarding.batch.job.executor');
28 }
29
30 public static function execute(): string
31 {
33 {
34 return self::getAgentName();
35 }
36
37 return (new self())->run();
38 }
39
40 private function run(): string
41 {
42 $jobs = $this->queueProvider->getAll();
43
44 $this->processImmediately($jobs->getImmediatelyExecuted());
45 $this->processNotImmediately($jobs->getNotImmediatelyExecuted());
46
47 return self::getAgentName();
48 }
49
50 private function processImmediately(JobCollection $jobs): void
51 {
52 $this->processJobs($jobs, true);
53 }
54
55 private function processNotImmediately(JobCollection $jobs): void
56 {
57 $this->processJobs($jobs, false);
58 }
59
60 private function processJobs(JobCollection $jobs, bool $immediate): void
61 {
62 if ($jobs->isEmpty())
63 {
64 return;
65 }
66
67 $jobIds = $jobs->getIdList();
68 $this->queueService->markAsProcessing(...$jobIds);
69
70 $result = $this->batchJobExecutor->execute($jobs);
71 $completedJobs = $result->getCompletedJobs();
72 $notCompletedJobs = $result->getNotCompletedJobs();
73
74 $this->queueService->deleteByJobIds(...$completedJobs->getIdList());
75 $this->queueService->unmarkAsProcessing(...$notCompletedJobs->getIdList());
76
77 if (!$immediate)
78 {
79 $cache = JobCacheProxy::getInstance();
80
81 try
82 {
83 $cache->cleanByJobCollection($completedJobs->sortByUserId());
84 $cache->save($notCompletedJobs->sortByUserId());
85 }
86 catch (\Throwable $t)
87 {
88 Logger::log($t, 'SOCIALNETWORK_COLLAB_ONBOARDING_CACHE');
89 }
90 }
91 }
92
93 public static function getAgentName(): string
94 {
95 return '\\' . self::class . '::execute();';
96 }
97}
static log(mixed $data, string $marker='DEBUG_SOCIALNETWORK')
Определения Logger.php:13
$result
Определения get_property_values.php:14