Skip to content

Commit 0e3b20b

Browse files
committed
Make user:report command scale
Signed-off-by: Joas Schilling <[email protected]>
1 parent 3fa2437 commit 0e3b20b

1 file changed

Lines changed: 22 additions & 12 deletions

File tree

core/Command/User/Report.php

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
declare(strict_types=1);
23
/**
34
* @copyright Copyright (c) 2016, ownCloud, Inc.
45
*
@@ -27,11 +28,13 @@
2728

2829
namespace OC\Core\Command\User;
2930

31+
use OC\Files\View;
3032
use OCP\IConfig;
3133
use OCP\IUserManager;
3234
use Symfony\Component\Console\Command\Command;
3335
use Symfony\Component\Console\Helper\Table;
3436
use Symfony\Component\Console\Input\InputInterface;
37+
use Symfony\Component\Console\Input\InputOption;
3538
use Symfony\Component\Console\Output\OutputInterface;
3639

3740
class Report extends Command {
@@ -40,19 +43,24 @@ class Report extends Command {
4043
/** @var IConfig */
4144
private $config;
4245

43-
/**
44-
* @param IUserManager $userManager
45-
*/
46-
public function __construct(IUserManager $userManager, IConfig $config) {
46+
public function __construct(IUserManager $userManager,
47+
IConfig $config) {
4748
$this->userManager = $userManager;
4849
$this->config = $config;
4950
parent::__construct();
5051
}
5152

52-
protected function configure() {
53+
protected function configure(): void {
5354
$this
5455
->setName('user:report')
55-
->setDescription('shows how many users have access');
56+
->setDescription('shows how many users have access')
57+
->addOption(
58+
'count-dirs',
59+
null,
60+
InputOption::VALUE_NONE,
61+
'Also count the number of user directories in the database (could time out on huge installations, there for defaults to no with 500+ users)'
62+
)
63+
;
5664
}
5765

5866
protected function execute(InputInterface $input, OutputInterface $output): int {
@@ -72,10 +80,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
7280
} else {
7381
$rows[] = ['No backend enabled that supports user counting', ''];
7482
}
75-
76-
$userDirectoryCount = $this->countUserDirectories();
7783
$rows[] = [' '];
78-
$rows[] = ['user directories', $userDirectoryCount];
84+
85+
if ($total <= 500 || $input->getOption('count-dirs')) {
86+
$userDirectoryCount = $this->countUserDirectories();
87+
$rows[] = ['user directories', $userDirectoryCount];
88+
}
7989

8090
$disabledUsers = $this->config->getUsersForUserValue('core', 'enabled', 'false');
8191
$disabledUsersCount = count($disabledUsers);
@@ -86,12 +96,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
8696
return 0;
8797
}
8898

89-
private function countUsers() {
99+
private function countUsers(): array {
90100
return $this->userManager->countUsers();
91101
}
92102

93-
private function countUserDirectories() {
94-
$dataview = new \OC\Files\View('/');
103+
private function countUserDirectories(): int {
104+
$dataview = new View('/');
95105
$userDirectories = $dataview->getDirectoryContent('/', 'httpd/unix-directory');
96106
return count($userDirectories);
97107
}

0 commit comments

Comments
 (0)