From d25446fd58f4429303d7ad51761de3d8d43a4bb1 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 25 May 2021 13:03:29 +0200 Subject: [PATCH] Make user:report command scale Signed-off-by: Joas Schilling --- core/Command/User/Report.php | 39 ++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/core/Command/User/Report.php b/core/Command/User/Report.php index 66bc9bd3de..b537884d9d 100644 --- a/core/Command/User/Report.php +++ b/core/Command/User/Report.php @@ -1,4 +1,6 @@ userManager = $userManager; $this->config = $config; parent::__construct(); } - protected function configure() { + protected function configure(): void { $this ->setName('user:report') - ->setDescription('shows how many users have access'); + ->setDescription('shows how many users have access') + ->addOption( + 'count-dirs', + null, + InputOption::VALUE_NONE, + 'Also count the number of user directories in the database (could time out on huge installations, therefore defaults to no with ' . self::DEFAULT_COUNT_DIRS_MAX_USERS . '+ users)' + ) + ; } protected function execute(InputInterface $input, OutputInterface $output): int { $table = new Table($output); $table->setHeaders(['User Report', '']); $userCountArray = $this->countUsers(); + $total = 0; if (!empty($userCountArray)) { - $total = 0; $rows = []; foreach ($userCountArray as $classname => $users) { $total += $users; @@ -72,10 +83,12 @@ class Report extends Command { } else { $rows[] = ['No backend enabled that supports user counting', '']; } - - $userDirectoryCount = $this->countUserDirectories(); $rows[] = [' ']; - $rows[] = ['user directories', $userDirectoryCount]; + + if ($total <= self::DEFAULT_COUNT_DIRS_MAX_USERS || $input->getOption('count-dirs')) { + $userDirectoryCount = $this->countUserDirectories(); + $rows[] = ['user directories', $userDirectoryCount]; + } $disabledUsers = $this->config->getUsersForUserValue('core', 'enabled', 'false'); $disabledUsersCount = count($disabledUsers); @@ -86,12 +99,12 @@ class Report extends Command { return 0; } - private function countUsers() { + private function countUsers(): array { return $this->userManager->countUsers(); } - private function countUserDirectories() { - $dataview = new \OC\Files\View('/'); + private function countUserDirectories(): int { + $dataview = new View('/'); $userDirectories = $dataview->getDirectoryContent('/', 'httpd/unix-directory'); return count($userDirectories); }