From 0446009024ad2ac36bc7ddcb76561f50e6b17021 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 13 Nov 2025 18:57:46 +0100 Subject: [PATCH] render stats as table --- utils/Commands/StatsCommand.php | 75 ++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 24 deletions(-) diff --git a/utils/Commands/StatsCommand.php b/utils/Commands/StatsCommand.php index e1df7257d..322960384 100644 --- a/utils/Commands/StatsCommand.php +++ b/utils/Commands/StatsCommand.php @@ -6,9 +6,13 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Helper\Table; +use Symfony\Component\Console\Helper\TableCell; +use Symfony\Component\Console\Helper\TableSeparator; use Seeddms\Seeddms\Settings; use Seeddms\Seeddms\Translator; +use SeedDMS_Core_File; use Log_file; class StatsCommand extends Command @@ -30,9 +34,9 @@ class StatsCommand extends Command protected function configure() { $this->setName('dms:stats') - ->setDescription('Prints Statistics') - ->setHelp('Demonstration of custom commands created by Symfony Console component.') - ->addOption('json', '', InputOption::VALUE_NONE, 'Export data as json') + ->setDescription('Print statistics') + ->setHelp('Outputs the number of documents, folders, users, etc. in total and how many of them are owned by they users.') + ->addOption('json', '', InputOption::VALUE_NONE, 'Print data as json instead of a table') ; } @@ -45,7 +49,7 @@ class StatsCommand extends Command require_once('inc/inc.DBInit.php'); foreach (array('docstotal'=>'documents', 'folderstotal'=>'folders', 'userstotal'=>'users', 'groupstotal'=>'groups', 'categoriestotal'=>'categories') as $type=>$name) { - $stats[$type] = $dms->getStatisticalData($type); + $stats['total'][substr($type, 0, -5)] = $dms->getStatisticalData($type); } foreach (array('docsperuser'=>'documents', 'foldersperuser'=>'folders','sizeperuser'=>'size') as $type=>$name) { $stats[$type] = $dms->getStatisticalData($type); @@ -54,26 +58,49 @@ class StatsCommand extends Command if ($input->getOption('json')) { $output->writeln(json_encode($stats)); } else { - $outformat = '%-30s %-10d'; - $output->writeln(sprintf($outformat, 'Documents', $stats['docstotal'])); - $output->writeln(sprintf($outformat, 'Folders', $stats['folderstotal'])); - $output->writeln(sprintf($outformat, 'Users', $stats['userstotal'])); - $output->writeln(sprintf($outformat, 'Groups', $stats['groupstotal'])); - $output->writeln(sprintf($outformat, 'Categories', $stats['categoriestotal'])); - $output->writeln(''); - $output->writeln('Documents per user:'); - foreach($stats['docsperuser'] as $d) { - $output->writeln(sprintf($outformat, $d['key'], $d['total'])); - } - $output->writeln(''); - $output->writeln('Folders per user:'); - foreach($stats['foldersperuser'] as $d) { - $output->writeln(sprintf($outformat, $d['key'], $d['total'])); - } - $output->writeln(''); - $output->writeln('Size per user:'); - foreach($stats['sizeperuser'] as $d) { - $output->writeln(sprintf($outformat, $d['key'], $d['total'])); + if(1) { + $table = new Table($output); + $table->setHeaders(['Name', 'Count/Size']); + foreach($stats['total'] as $k=>$v) + $table->addRow([$k, $v]); + $table->addRow(new TableSeparator()); + $table->addRow([new TableCell($translator->translate('chart_docsperuser_title'), ['colspan' => 2])]); + $table->addRow(new TableSeparator()); + foreach($stats['docsperuser'] as $v) + $table->addRow([$v['key'], $v['total']]); + $table->addRow(new TableSeparator()); + $table->addRow([new TableCell($translator->translate('chart_foldersperuser_title'), ['colspan' => 2])]); + $table->addRow(new TableSeparator()); + foreach($stats['foldersperuser'] as $v) + $table->addRow([$v['key'], $v['total']]); + $table->addRow(new TableSeparator()); + $table->addRow([new TableCell($translator->translate('chart_sizeperuser_title'), ['colspan' => 2])]); + $table->addRow(new TableSeparator()); + foreach($stats['sizeperuser'] as $v) + $table->addRow([$v['key'], SeedDMS_Core_File::format_filesize((int)$v['total'])]); + $table->render(); + } else { + $outformat = '%-30s %-10d'; + $output->writeln(sprintf($outformat, 'Documents', $stats['docstotal'])); + $output->writeln(sprintf($outformat, 'Folders', $stats['folderstotal'])); + $output->writeln(sprintf($outformat, 'Users', $stats['userstotal'])); + $output->writeln(sprintf($outformat, 'Groups', $stats['groupstotal'])); + $output->writeln(sprintf($outformat, 'Categories', $stats['categoriestotal'])); + $output->writeln(''); + $output->writeln('Documents per user:'); + foreach($stats['docsperuser'] as $d) { + $output->writeln(sprintf($outformat, $d['key'], $d['total'])); + } + $output->writeln(''); + $output->writeln('Folders per user:'); + foreach($stats['foldersperuser'] as $d) { + $output->writeln(sprintf($outformat, $d['key'], $d['total'])); + } + $output->writeln(''); + $output->writeln('Size per user:'); + foreach($stats['sizeperuser'] as $d) { + $output->writeln(sprintf($outformat, $d['key'], $d['total'])); + } } } return Command::SUCCESS;