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 .= '
';
            $content .= $output->fetch();
            $content .= '
'; $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" . $title . ""); } }