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("Statistics for the archive_numeric_$tableDate and archive_blob_$tableDate tables:"); $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: $totalArchives"); $output->writeln("Total # Invalidated Archives: $totalInvalidated"); $output->writeln("Total # Temporary Archives: $totalTemporary"); $output->writeln("Total # Error Archives: $totalError"); $output->writeln("Total # Segment Archives: $totalSegment"); $output->writeln(""); } }