1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Diagnostics\Commands;
use Piwik\Container\StaticContainer;
use Piwik\Mail;
use Piwik\Plugin\ConsoleCommand;
use Piwik\Plugin\ConsoleCommand\ConsoleCommandConsoleOutput;
use Piwik\Plugin\ConsoleCommand\ConsoleCommandBufferedOutput;
/**
* Diagnostic command that returns consolidated information about the status of archiving
*/
class ArchivingStatus extends ConsoleCommand
{
protected function configure()
{
$this->setName('diagnostics:archiving-status');
$this->addNoValueOption(
'with-stats',
null,
"If supplied, the command will include instance statistics such as monthly hits and site count"
);
$this->addOptionalValueOption(
'email',
null,
"If supplied, the command will email the output to the supplied email address"
);
$this->setDescription('');
}
protected function doExecute(): int
{
$input = $this->getInput();
// If using email option then buffer output
if ($input->getOption('email')) {
$output = new ConsoleCommandBufferedOutput();
$this->setOutput($output);
} else {
$output = $this->getOutput();
}
// Queue
$this->outputSectionHeader($output, 'Invalidation Queue');
$archiveTableDao = StaticContainer::get('Piwik\DataAccess\ArchiveTableDao');
$headers = ['Invalidation', 'Segment', 'Site', 'Period', 'Date', 'Time Queued', 'Waiting', 'Started', 'Processing', 'Status'];
$queue = $archiveTableDao->getInvalidationQueueData(true);
$this->renderTable($headers, $queue);
// Metrics
$this->outputSectionHeader($output, 'Archiving Metrics');
$am = new ArchivingMetrics();
$this->renderTable(['Metric', 'Value'], $am->getMetrics());
// Optional instance stats
if ($input->getOption('with-stats')) {
$this->outputSectionHeader($output, 'Instance Statistics');
$ais = new ArchivingInstanceStatistics();
$this->renderTable(['Statistic Name', 'Value'], $ais->getArchivingInstanceStatistics());
}
// Config
$this->outputSectionHeader($output, 'Archiving Configuration Settings');
$am = new ArchivingConfig();
$this->renderTable(['Section', 'Setting', 'Value'], $am->getArchivingConfig());
if ($input->getOption('email')) {
$address = $input->getOption('email');
$content = 'This email was sent via the Matomo diagnostic:archiving-status command';
$content .= '<pre>';
$content .= $output->fetch();
$content .= '</pre>';
$mail = new Mail();
$mail->setDefaultFromPiwik();
$mail->addTo($address);
$mail->setSubject('Matomo Archiving Diagnostics');
$mail->setWrappedHtmlBody($content);
$output = new ConsoleCommandConsoleOutput();
$this->setOutput($output);
try {
$mail->send();
$output->writeln("Archiving diagnostic email successfully sent to " . $address);
} catch (\Exception $e) {
$output->writeln("Failed to send email to " . $address . ", error: " . $e->getMessage());
return self::FAILURE;
}
}
return self::SUCCESS;
}
/**
* Output a styled header string
*
* @param mixed $output
*
*/
private function outputSectionHeader($output, string $title): void
{
$output->writeln("\n<info>" . $title . "</info>");
}
}
|