seeddms-code/utils/Commands/StatsCommand.php
2025-11-13 18:57:46 +01:00

111 lines
4.7 KiB
PHP

<?php
namespace Seeddms\Console\Commands;
use Symfony\Component\Console\Command\Command;
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
{
protected $settings;
protected $logger;
protected $translator;
public function __construct(Settings $settings, Log_file $logger, Translator $translator)
{
$this->settings = $settings;
$this->logger = $logger;
$this->translator = $translator;
parent::__construct();
}
protected function configure()
{
$this->setName('dms:stats')
->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')
;
}
protected function execute(InputInterface $input, OutputInterface $output) : int
{
$app = $this->getApplication();
$settings = $this->settings;
$logger = $this->logger;
$translator = $this->translator;
require_once('inc/inc.DBInit.php');
foreach (array('docstotal'=>'documents', 'folderstotal'=>'folders', 'userstotal'=>'users', 'groupstotal'=>'groups', 'categoriestotal'=>'categories') as $type=>$name) {
$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);
}
if ($input->getOption('json')) {
$output->writeln(json_encode($stats));
} else {
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;
}
}
// vim: ts=4 sw=4 expandtab