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) { $comment = $this->translator->translate('Diagnostics_BrowserTriggeredArchivingEnabled', [ '', '']); return [DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_WARNING, $comment)]; } // 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() { $domain = Config::getHostname(); return PIWIK_INCLUDE_PATH . ' --matomo-domain=' . $domain . ' 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; } }