Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordiosmosis <benaka@piwik.pro>2015-08-23 00:45:03 +0300
committerdiosmosis <benaka@piwik.pro>2015-08-24 18:49:41 +0300
commit8ef2f0d91b7c17784098362dc6361cc54ba61f82 (patch)
tree81f2c93f098523503853d7d82649008791d3cca2 /plugins/Diagnostics
parentc5714af4fa6d4db2b8cd06cf13db64b369960496 (diff)
Adding diagnostic command that allows you to see exactly what's inside an archive table. Useful when trying to find out why one table is using a lot of space or is using more space than others.
Diffstat (limited to 'plugins/Diagnostics')
-rw-r--r--plugins/Diagnostics/Commands/AnalyzeArchiveTable.php82
1 files changed, 82 insertions, 0 deletions
diff --git a/plugins/Diagnostics/Commands/AnalyzeArchiveTable.php b/plugins/Diagnostics/Commands/AnalyzeArchiveTable.php
new file mode 100644
index 0000000000..915019ce46
--- /dev/null
+++ b/plugins/Diagnostics/Commands/AnalyzeArchiveTable.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Plugins\Diagnostics\Commands;
+
+use Piwik\Container\StaticContainer;
+use Piwik\Piwik;
+use Piwik\Plugin\ConsoleCommand;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Helper\Table;
+
+/**
+ * Diagnostic command that analyzes a single archive table. Displays information like # of segment archives,
+ * # invalidated archives, # temporary archives, etc.
+ */
+class AnalyzeArchiveTable extends ConsoleCommand
+{
+ protected function configure()
+ {
+ $this->setName('diagnostics:analyze-archive-table');
+ $this->setDescription('Analyze an archive table and display human readable information about what is stored. '
+ . 'This command can be used to diagnose issues like bloated archive tables.');
+ $this->addArgument('table-date', InputArgument::REQUIRED, "The table's associated date, eg, 2015_01 or 2015_02");
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $tableDate = $input->getArgument('table-date');
+
+ $output->writeln("<comment>Statistics for the archive_numeric_$tableDate and archive_blob_$tableDate tables:</comment>");
+ $output->writeln("");
+
+ $archiveTableDao = StaticContainer::get('Piwik\DataAccess\ArchiveTableDao');
+ $rows = $archiveTableDao->getArchiveTableAnalysis($tableDate);
+
+ // process labels
+ $periodIdsToLabels = array_flip(Piwik::$idPeriods);
+ foreach ($rows as $key => &$row) {
+ list($idSite, $date1, $date2, $period) = explode('.', $key);
+
+ $periodLabel = isset($periodIdsToLabels[$period]) ? $periodIdsToLabels[$period] : "Unknown Period ($period)";
+ $row['label'] = $periodLabel . "[" . $date1 . " - " . $date2 . "] idSite = " . $idSite;
+ }
+
+ $headers = array('Group', '# Archives', '# Invalidated', '# Temporary', '# Error', '# Segment',
+ '# Numeric Rows', '# Blob Rows');
+
+ // display all rows
+ $table = new Table($output);
+ $table->setHeaders($headers)->setRows($rows);
+ $table->render();
+
+ // display summary
+ $totalArchives = 0;
+ $totalInvalidated = 0;
+ $totalTemporary = 0;
+ $totalError = 0;
+ $totalSegment = 0;
+ foreach ($rows as $row) {
+ $totalArchives += $row['count_archives'];
+ $totalInvalidated += $row['count_invalidated_archives'];
+ $totalTemporary += $row['count_temporary_archives'];
+ $totalError += $row['count_error_archives'];
+ $totalSegment += $row['count_segment_archives'];
+ }
+
+ $output->writeln("");
+ $output->writeln("Total # Archives: <comment>$totalArchives</comment>");
+ $output->writeln("Total # Invalidated Archives: <comment>$totalInvalidated</comment>");
+ $output->writeln("Total # Temporary Archives: <comment>$totalTemporary</comment>");
+ $output->writeln("Total # Error Archives: <comment>$totalError</comment>");
+ $output->writeln("Total # Segment Archives: <comment>$totalSegment</comment>");
+ $output->writeln("");
+ }
+}