setName('diagnostics:run') ->setDescription('Run diagnostics to check that Piwik is installed and runs correctly') ->addOption('all', null, InputOption::VALUE_NONE, 'Show all diagnostics, including those that passed with success'); } protected function execute(InputInterface $input, OutputInterface $output) { // Replace this with dependency injection once available /** @var DiagnosticService $diagnosticService */ $diagnosticService = StaticContainer::get('Piwik\Plugins\Diagnostics\DiagnosticService'); $showAll = $input->getOption('all'); $report = $diagnosticService->runDiagnostics(); foreach ($report->getAllResults() as $result) { $items = $result->getItems(); if (! $showAll && ($result->getStatus() === DiagnosticResult::STATUS_OK)) { continue; } if (count($items) === 1) { $output->writeln($result->getLabel() . ': ' . $this->formatItem($items[0]), OutputInterface::OUTPUT_PLAIN); continue; } $output->writeln($result->getLabel() . ':'); foreach ($items as $item) { $output->writeln("\t- " . $this->formatItem($item), OutputInterface::OUTPUT_PLAIN); } } if ($report->hasWarnings()) { $output->writeln(sprintf('%d warnings detected', $report->getWarningCount())); } if ($report->hasErrors()) { $output->writeln(sprintf('%d errors detected', $report->getErrorCount())); return 1; } return 0; } private function formatItem(DiagnosticResultItem $item) { if ($item->getStatus() === DiagnosticResult::STATUS_ERROR) { $tag = 'error'; } elseif ($item->getStatus() === DiagnosticResult::STATUS_WARNING) { $tag = 'comment'; } else { $tag = 'info'; } return sprintf( '<%s>%s %s', $tag, strtoupper($item->getStatus()), preg_replace('/\/i', "\n", $item->getComment()), $tag ); } }