Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
26 / 26
DataDistributor
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
26 / 26
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
 handle
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
22 / 22
1<?php
2
3namespace Qmp\Laravel\Collect\Console\Commands;
4
5use Exception;
6use Qmp\Laravel\AsyncProcessFactory\Traits\{ProcessFactory, ProcessFactoryStatus};
7use Qmp\Laravel\CommandsLaravel\Middleware\Core\Middleware;
8use Qmp\Laravel\CommandsLaravel\Middleware\Library\Monitoring\{CreateParentProcess, UpdateParentProcessAsync};
9use Qmp\Laravel\ToolsLaravel\Traits\Timer;
10
11class DataDistributor extends \Commando
12{
13    use Timer, ProcessFactory, ProcessFactoryStatus;
14    /**
15     * The name and signature of the console command.
16     *
17     * @var string
18     */
19    protected $signature = 'collect:data-distributor';
20
21    /**
22     * The console command description.
23     *
24     * @var string
25     */
26    protected $description = 'Split tracker collection and process it';
27
28    /**
29     * Undocumented variable
30     *
31     * @var array
32     */
33    protected $toVerify = ['ttl', 'running'];
34
35    /**
36     * Undocumented variable
37     *
38     * @var integer
39     */
40    protected $maxTry = 1;
41
42    /**
43     * The max process
44     *
45     * @var integer
46     */
47    protected $maxProcess = 20;
48
49    /**
50     * Undocumented function
51     */
52    public function __construct()
53    {
54        parent::__construct();
55
56        $middlewares = [
57            CreateParentProcess::class,
58            UpdateParentProcessAsync::class
59        ];
60
61        $this->middleware($middlewares);
62    }
63
64    /**
65     * Execute the console command.
66     *
67     * @return void
68     * @throws Exception
69     */
70    public function handle(): void
71    {
72        $this->startTimer('total');
73
74        $data = $this->middlewareData(UpdateParentProcessAsync::class)
75            ->transfert(CreateParentProcess::class, ['id']);
76        $data->log['maxProcess'] = $this->maxProcess;
77
78        try {
79            $processes = $this->processVerify();
80
81            if ($processes->count() > 0) {
82                $this->createProcessFactory('collect:data-distributor-process')
83                    ->addEnvs(Middleware::IS_SYSTEM);
84                $this->info('Creating factory');
85
86                $processes->each(function ($process) use ($data) {
87                    $this->line('<info>Add process to factory : </info>' . $process->id);
88                    $this->addProcess([$process->id, $data->id]);
89                });
90
91                $this->output->write('<info>Starting factory ...</info>');
92                $this->startDetachedProcesses();
93                $this->output->write(' done');
94            } else {
95                $this->middlewareData(UpdateParentProcessAsync::class)->set(['forcedPass' => true]);
96            }
97
98            $this->line('');
99
100            $data->log['duration'] = $this->getTimer('total');
101        } catch (Exception $e) {
102            $data->error = $this->reportException($e);
103        }
104    }
105}