Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
2 / 3
CRAP
32.00% covered (danger)
32.00%
8 / 25
DedupRunner
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
2 / 3
12.86
32.00% covered (danger)
32.00%
8 / 25
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
6 / 6
 onlyFiles
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 run
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 17
1<?php
2
3namespace Qmp\Laravel\Deduplication\Objects;
4
5use Illuminate\Support\Facades\Artisan;
6use Qmp\Laravel\DeduplicationQueue\Jobs\Deduplication;
7
8class DedupRunner
9{
10    /**
11     * Undocumented variable
12     *
13     * @var string
14     */
15    protected $sessionId;
16
17    /**
18     * Undocumented variable
19     *
20     * @var [type]
21     */
22    protected $docker;
23
24    /**
25     * Undocumented variable
26     *
27     * @var [type]
28     */
29    protected $config;
30
31    /**
32     * Undocumented variable
33     *
34     * @var string
35     */
36    protected $servicePrefix = 'artisan_dedup';
37
38    /**
39     * Undocumented variable
40     *
41     * @var boolean
42     */
43    protected $onlyFiles = false;
44
45    /**
46     * Undocumented variable
47     *
48     * @var integer
49     */
50    protected $maxContainers = 6;
51
52    /**
53     * Undocumented variable
54     *
55     * @var array
56     */
57    protected $containers;
58
59    /**
60     * 
61     */
62    public function __construct($sessionId)
63    {
64        $this->config = config('docker');
65        $this->sessionId = $sessionId;
66        $this->containers = collect(array_fill(0, $this->maxContainers, ''))->map(function($value, $key) {
67            return $this->servicePrefix . '_' . $key;
68        });
69    }
70
71    /**
72     * Undocumented function
73     *
74     * @return \Qmp\Laravel\Deduplication\Objects\DedupRunner
75     */
76    public function onlyFiles(): DedupRunner
77    {
78        $this->onlyFiles = true;
79        return $this;
80    }
81
82    /**
83     * Undocumented function
84     *
85     * @return void
86     */
87    public function run()
88    {
89        $this->docker = resolve('qmp.docker.runner');
90
91        $artisanCommand = "/bin/bash /var/bin/startup.sh dedup:run $this->sessionId " . ($this->onlyFiles ? "true" : "false");
92
93        $running = $this->docker->getRunningContainerByName($this->servicePrefix);
94        $availables = $this->containers->diff($running);
95
96        if ($availables->count() > 0) {
97            $containerName = $availables->first();
98            $options = [
99                '--cmd' => $artisanCommand,
100                '--type' => 'custom',
101                '--container-name' => $containerName,
102                '--output-file' => env('DOCKER_DEDUP_OUTPUT_FILE'),
103                '--restart-policy' => 'none',
104                '--user' => env('USER'),
105                '--host-gid' => env('HOST_GID'),
106                '--host-uid' => env('HOST_UID')
107            ];
108
109            Artisan::call('docker:launcher', $options);
110        } else {
111            Deduplication::dispatch($this)->delay(now()->addMinutes(5));
112        }
113    }
114}