403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/yandex.market/lib/ui/checker/export/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/yandex.market/lib/ui/checker/export/setupstatus.php
<?php

namespace Yandex\Market\Ui\Checker\Export;

use Bitrix\Main;
use Yandex\Market;
use Yandex\Market\Ui\Checker;
use Yandex\Market\Export\Setup as ExportSetup;
use Yandex\Market\Export\Run as ExportRun;

class SetupStatus extends Checker\Reference\AbstractTest
{
	protected static function includeMessages()
	{
		Main\Localization\Loc::loadMessages(__FILE__);
	}

	public function test()
	{
		$result = new Market\Result\Base();
		$setupList = ExportSetup\Model::loadList();

		foreach ($setupList as $setup)
		{
			$status = ExportRun\Data\SetupStatus::getExportState($setup);

			if ($status === ExportRun\Data\SetupStatus::EXPORT_PROGRESS)
			{
				$resolver = $this->makeExportResolve($setup);
				$statusMessage = $this->getStateMessage($status);
				$error = $this->makeError($setup, $statusMessage, 'EXPORT_PROGRESS', $resolver);

				$result->addWarning($error);
			}
			else if ($status !== ExportRun\Data\SetupStatus::EXPORT_READY)
			{
				$resolver = $this->makeExportResolve($setup);
				$statusMessage = $this->getStateMessage($status);
				$error = $this->makeError($setup, $statusMessage, 'EXPORT_FAIL', $resolver);

				$result->addError($error);
			}
			else
			{
				Market\Result\Facade::merge([
					$result,
					$this->testRefresh($setup),
					$this->testChange($setup)
				]);
			}
		}

		return $result;
	}

	protected function testRefresh(ExportSetup\Model $setup)
	{
		$result = new Market\Result\Base();

		if ($setup->hasFullRefresh())
		{
			$modificationTime = $this->getFileModificationDate($setup);
			$expectedRefresh = $this->getExpectedRefreshDate($setup);
			$warningDate = $this->getUnprocessedWarningDate($expectedRefresh);
			$errorDate = $this->getUnprocessedErrorDate($expectedRefresh);

			if (Market\Data\DateTime::compare($errorDate, $modificationTime) === 1)
			{
				$error = $this->makeRefreshHaltError($setup, $modificationTime);
				$result->addError($error);
			}
			else if (Market\Data\DateTime::compare($warningDate, $modificationTime) === 1)
			{
				$error = $this->makeRefreshHaltError($setup, $modificationTime);
				$result->addWarning($error);
			}
		}

		return $result;
	}

	protected function makeRefreshHaltError(ExportSetup\Model $setup, Main\Type\DateTime $modificationTime)
	{
		$message = $this->getMessage('STATE_REFRESH_HALT', [
			'#MODIFICATION_DATE#' => $modificationTime,
		]);
		$description = $this->makeAgentHaltDescription();

		$result = $this->makeError($setup, $message, 'REFRESH_HALT');
		$result->setDescription($description);

		return $result;
	}

	protected function getExpectedRefreshDate(ExportSetup\Model $setup)
	{
		$nextExec = $setup->getRefreshNextExec();
		$interval = $setup->getRefreshPeriod();

		if ($interval !== null)
		{
			$intervalDescription = '-PT' . $interval . 'S';

			$nextExec->add($intervalDescription); // to current
			$nextExec->add($intervalDescription); // to previous
		}

		return $nextExec;
	}

	protected function getFileModificationDate(ExportSetup\Model $setup)
	{
		$path = $setup->getFileAbsolutePath();
		$file = new Main\IO\File($path);
		$timestamp = $file->getModificationTime();

		return Main\Type\DateTime::createFromTimestamp($timestamp);
	}

	protected function testChange(ExportSetup\Model $setup)
	{
		$result = new Market\Result\Base();

		if ($setup->isAutoUpdate())
		{
			$errorDate = $this->getUnprocessedErrorDate();
			$errorCount = $this->getUnprocessedChangesCount($setup, $errorDate);

			if ($errorCount > 0)
			{
				$error = $this->makeUnprocessedChangesError($setup, $errorCount);
				$result->addError($error);
			}
			else
			{
				$warningDate = $this->getUnprocessedWarningDate();
				$warningCount = $this->getUnprocessedChangesCount($setup, $warningDate);
				$warningLimit = 10;

				if ($warningCount > $warningLimit)
				{
					$error = $this->makeUnprocessedChangesError($setup, $warningCount);
					$result->addWarning($error);
				}
			}
		}

		return $result;
	}

	protected function makeUnprocessedChangesError(ExportSetup\Model $setup, $count)
	{
		$message = $this->getMessage('STATE_UNPROCESSED_CHANGES', [
			'#COUNT#' => $count,
			'#LABEL#' => Market\Utils::sklon($count, [
				$this->getMessage('CHANGE_1'),
				$this->getMessage('CHANGE_2'),
				$this->getMessage('CHANGE_5'),
			])
		]);
		$description = $this->makeAgentHaltDescription();

		$result = $this->makeError($setup, $message, 'UNPROCESSED_CHANGES');
		$result->setDescription($description);

		return $result;
	}

	protected function getUnprocessedChangesCount(ExportSetup\Model $setup, Main\Type\DateTime $date)
	{
		$state = new Market\Watcher\Track\StampState(Market\Glossary::SERVICE_EXPORT, $setup->getId());
		$date = Market\Data\DateTime::toCanonical($date);

		return Market\Watcher\Track\ChangesRepository::unprocessedCount($state, $date);
	}

	protected function getUnprocessedWarningDate(Main\Type\DateTime $limitDate = null)
	{
		return $this->makeUnprocessedDate('-PT1H', $limitDate);
	}

	protected function getUnprocessedErrorDate(Main\Type\DateTime $limitDate = null)
	{
		return $this->makeUnprocessedDate('-PT3H', $limitDate);
	}

	protected function makeUnprocessedDate($interval, Main\Type\DateTime $limitDate = null)
	{
		$result = new Market\Data\Type\CanonicalDateTime();
		$result->add($interval);

		if ($limitDate !== null && Market\Data\DateTime::compare($limitDate, $result) === -1)
		{
			$result = $limitDate;
		}

		return $result;
	}

	protected function makeExportResolve(ExportSetup\Model $setup)
	{
		$url = Market\Ui\Admin\Path::getModuleUrl('setup_run', array_filter([
			'lang' => LANGUAGE_ID,
			'id' => $setup->getId(),
		]));

		return sprintf(
			'<a href="%s">%s</a>',
			$url,
			$this->getMessage('RESOLVE_EXPORT')
		);
	}

	protected function makeError(ExportSetup\Model $setup, $statusMessage, $code = 0, $resolver = '')
	{
		$message = sprintf(
			'[%s] %s: %s',
			$setup->getId(),
			$setup->getField('NAME'),
			Market\Data\TextString::lcfirst($statusMessage)
		);

		if ((string)$resolver !== '')
		{
			$message .= ', ' . $resolver;
		}

		if ((string)$code !== '0')
		{
			$code .= '_' . $setup->getId();
		}

		return new Checker\Reference\Error($message, $code);
	}

	protected function makeAgentHaltDescription()
	{
		return Market\Utils::isAgentUseCron()
			? $this->getMessage('HALT_DESCRIPTION_INCREASE_FREQUENCY')
			: $this->getMessage('HALT_DESCRIPTION_USE_CRONTAB');
	}

	protected function getStateMessage($status)
	{
		return $this->getMessage('STATE_' . $status);
	}

	protected function getLangPrefix()
	{
		return 'CHECKER_TEST_EXPORT_SETUP_STATUS';
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit