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;
}
}