translator = $translator; } public function execute() { if (!SettingsPiwik::isMatomoInstalled()) { return []; } $label = $this->translator->translate('Diagnostics_CronArchivingLastRunCheck'); $commandToRerun = '' . $this->getArchivingCommand() . ''; $coreArchiveShort = 'core:archive'; $mailto = 'MAILTO'; // check cron archiving has been enabled $isBrowserTriggerDisabled = !Rules::isBrowserTriggerEnabled(); if (!$isBrowserTriggerDisabled) { return []; } // check archiving has been run $lastRunTime = (int)Option::get(CronArchive::OPTION_ARCHIVING_FINISHED_TS); if (empty($lastRunTime)) { $comment = $this->translator->translate('Diagnostics_CronArchivingHasNotRun') . '

' . $this->translator->translate('Diagnostics_CronArchivingRunDetails', [$coreArchiveShort, $mailto, $commandToRerun, '', '']); return [DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_ERROR, $comment)]; } $lastRunTimePretty = Date::factory($lastRunTime)->getLocalized(DateTimeFormatProvider::DATETIME_FORMAT_LONG); $diffTime = self::getTimeSinceLastSuccessfulRun($lastRunTime); $formatter = new Formatter(); $diffTimePretty = $formatter->getPrettyTimeFromSeconds($diffTime); $errorComment = $this->translator->translate('Diagnostics_CronArchivingHasNotRunInAWhile', [$lastRunTimePretty, $diffTimePretty]) . '

' . $this->translator->translate( 'Diagnostics_CronArchivingRunDetails', [$coreArchiveShort, $mailto, $commandToRerun, '', ''] ); // check archiving has been run recently if ($diffTime > self::SECONDS_IN_DAY * 2) { $result = DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_ERROR, $errorComment); } else if ($diffTime > self::SECONDS_IN_DAY) { $result = DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_WARNING, $errorComment); } else { $comment = $this->translator->translate('Diagnostics_CronArchivingRanSuccessfullyXAgo', $diffTimePretty); $result = DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_OK, $comment); } return [$result]; } private function getArchivingCommand() { if (Url::isValidHost()) { $domain = Config::getHostname($checkIfTrusted = true); return PIWIK_INCLUDE_PATH . '/console --matomo-domain=' . $domain . ' core:archive'; } return PIWIK_INCLUDE_PATH . '/console core:archive'; } public static function getTimeSinceLastSuccessfulRun($lastRunTime = null) { if (empty($lastRunTime)) { $lastRunTime = (int)Option::get(CronArchive::OPTION_ARCHIVING_FINISHED_TS); } if (empty($lastRunTime)) { return null; } $now = Date::now()->getTimestamp(); $diffTime = $now - $lastRunTime; return $diffTime; } }