Passed
Pull Request — master (#232)
by Matias
05:40 queued 04:10
created

ProgressCommand   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 30
c 1
b 0
f 0
dl 0
loc 73
ccs 0
cts 35
cp 0
rs 10
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A configure() 0 4 1
A __construct() 0 13 1
A execute() 0 23 2
1
<?php
2
/**
3
 * @copyright Copyright (c) 2020, Matias De lellis <[email protected]>
4
 *
5
 * @author Matias De lellis <[email protected]>
6
 *
7
 * @license GNU AGPL version 3 or any later version
8
 *
9
 * This program is free software: you can redistribute it and/or modify
10
 * it under the terms of the GNU Affero General Public License as
11
 * published by the Free Software Foundation, either version 3 of the
12
 * License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU Affero General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Affero General Public License
20
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
 *
22
 */
23
namespace OCA\FaceRecognition\Command;
24
25
use Symfony\Component\Console\Command\Command;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\Console\Command\Command was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
26
use Symfony\Component\Console\Helper\Table;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\Console\Helper\Table was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
27
use Symfony\Component\Console\Input\InputOption;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\Console\Input\InputOption was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
28
use Symfony\Component\Console\Input\InputInterface;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\Console\Input\InputInterface was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
29
use Symfony\Component\Console\Output\OutputInterface;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\Console\Output\OutputInterface was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
30
31
use OCP\IDateTimeFormatter;
32
33
use OCA\FaceRecognition\Db\ImageMapper;
34
use OCA\FaceRecognition\Db\FaceMapper;
35
use OCA\FaceRecognition\Db\PersonMapper;
36
37
use OCA\FaceRecognition\Service\SettingsService;
38
39
class ProgressCommand extends Command {
40
41
	/** @var IDateTimeFormatter */
42
	protected $dateTimeFormatter;
43
44
	/** @var ImageMapper */
45
	protected $imageMapper;
46
47
	/** @var FaceMapper */
48
	protected $faceMapper;
49
50
	/** @var PersonMapper */
51
	protected $personMapper;
52
53
	/** @var SettingsService */
54
	private $settingsService;
55
56
	/**
57
	 * @param IDateTimeFormatter $dateTimeFormatter
58
	 * @param ImageMapper $imageMapper
59
	 * @param FaceMapper $faceMapper
60
	 * @param PersonMapper $personMapper
61
	 * @param SettingsService $settingsService
62
	 */
63
	public function __construct(IDateTimeFormatter $dateTimeFormatter,
64
	                            ImageMapper        $imageMapper,
65
	                            FaceMapper         $faceMapper,
66
	                            PersonMapper       $personMapper,
67
	                            SettingsService    $settingsService)
68
	{
69
		parent::__construct();
70
71
		$this->dateTimeFormatter = $dateTimeFormatter;
72
		$this->imageMapper       = $imageMapper;
73
		$this->faceMapper        = $faceMapper;
74
		$this->personMapper      = $personMapper;
75
		$this->settingsService   = $settingsService;
76
	}
77
78
	protected function configure() {
79
		$this
80
			->setName('face:progress')
81
			->setDescription('Get the progress of the analysis and an estimated time');
82
	}
83
84
	/**
85
	 * @param InputInterface $input
86
	 * @param OutputInterface $output
87
	 * @return int
88
	 */
89
	protected function execute(InputInterface $input, OutputInterface $output) {
90
91
		$modelId = $this->settingsService->getCurrentFaceModel();
92
93
		$totalImages = $this->imageMapper->countImages($modelId);
94
		$processedImages = $this->imageMapper->countProcessedImages($modelId);
95
		$avgProcessingTime = $this->imageMapper->avgProcessingDuration($modelId);
96
97
		$remainingImages = $totalImages - $processedImages;
98
		if ($remainingImages)
99
			$estimatedTime = $this->dateTimeFormatter->formatTimeSpan(time() + $remainingImages * $avgProcessingTime/1000);
100
		else {
101
			$estimatedTime = '-';
102
		}
103
104
105
		$table = new Table($output);
106
		$table
107
			->setHeaders(['Images', 'Remaining', 'ETA'])
108
			->setRows([[strval($totalImages), strval($remainingImages), $estimatedTime]]);
109
		$table->render();
110
111
		return 0;
112
	}
113
114
}
115