ModuleCron

Package framework.modules
Inheritance class ModuleCron » ModuleORM » Module » LsObject
Since 2.0
Source Code /framework/classes/modules/cron/Cron.class.php
Модуль управления центральным кроном - запуск запланированных задач

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
aBehaviors array Список поведений LsObject
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oMapperORM MapperORM Объект маппера ORM ModuleORM

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AttachBehavior() Присоединяет поведение к объекту LsObject
CreateTask() Создает новую задачу в БД ModuleCron
DeleteItemsByFilter() Удаляет сущности по фильтру ModuleORM
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetAggregateFunctionByFilter() Получить значение агрегирующей функции ModuleORM
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetByFilter() Получить сущность по фильтру ModuleORM
GetCountItemsByFilter() Получить количество сущностей по фильтру ModuleORM
GetCountItemsByJoinEntity() ModuleORM
GetItemsByArray() Возвращает список сущностей по фильтру ModuleORM
GetItemsByFilter() Получить список сущностей по фильтру ModuleORM
GetItemsByJoinEntity() ModuleORM
Init() Инициализация ModuleORM
LoadTree() Для сущностей со связью RELATION_TYPE_TREE возвращает список сущностей в виде дерева ModuleORM
RemoveBehaviorHook() Удаляет хук поведения LsObject
RemoveTasksByPlugin() Удаляет все крон-задачи конкретного плагина ModuleCron
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
RunMain() Запускает выполнение центрального крона ModuleCron
RunTask() Запускает задачу на выполнение ModuleCron
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля. ModuleORM
__clone() Блокируем копирование/клонирование объекта Module
__construct() Конструктор, запускается автоматически при создании объекта LsObject
__get() Обработка доступа к объекты поведения LsObject
buildTree() Построение дерева ModuleORM
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
PrepareBehaviors() Инициализация поведений LsObject
WriteLog() Записывает сообщение в лог крона ModuleCron
_AddEntity() Добавление сущности в БД ModuleORM
_DeleteEntity() Удаление сущности из БД ModuleORM
_GetAncestorsOfEntity() Для сущности со связью RELATION_TYPE_TREE возвращает список всех предков ModuleORM
_GetChildrenOfEntity() Для сущности со связью RELATION_TYPE_TREE возвращает список прямых потомков ModuleORM
_GetDescendantsOfEntity() Для сущности со связью RELATION_TYPE_TREE возвращает список всех потомков ModuleORM
_GetParentOfEntity() Для сущности со связью RELATION_TYPE_TREE возвращает предка ModuleORM
_LoadMapperORM() Загрузка маппера ORM ModuleORM
_NormalizeEntityRootName() Приводит название сущности к единому формату полного имени класса ModuleORM
_ReloadEntity() Обновляет данные сущности из БД ModuleORM
_SaveEntity() Сохранение сущности в БД ModuleORM
_ShowColumnsFrom() Список полей сущности ModuleORM
_ShowPrimaryIndexFrom() Primary индекс сущности ModuleORM
_UpdateEntity() Обновление сущности в БД ModuleORM
_deleteManyToManyRelation() Выполняет удаление всех связей many_to_many сущности ModuleORM
_setIndexesFromField() Returns assotiative array, indexed by PRIMARY KEY or another field. ModuleORM
_setIndexesGroupField() Возвращает сгруппированный массив по нужному полю ModuleORM
_setIndexesGroupJoinField() Возвращает сгруппированный массив по нужному полю из данных таблицы связей ModuleORM
_updateManyToManyRelation() Выполняет обновление связи many_to_many у сущности ModuleORM

Method Details

CreateTask() method
public ModuleCron_EntityTask|string CreateTask($sTitle $sTitle, $sMethod $sMethod, $iPeriod $iPeriod, string $sPlugin=NULL)
$sTitle $sTitle
$sMethod $sMethod
$iPeriod $iPeriod
$sPlugin string
{return} ModuleCron_EntityTask|string
Source Code: /framework/classes/modules/cron/Cron.class.php#126 (show)
public function CreateTask($sTitle$sMethod$iPeriod$sPlugin null)
{
    
$sPlugin $sPlugin Plugin::GetPluginCode($sPlugin) : '';
    if (
$oTask $this->GetTaskByMethodAndPlugin($sMethod$sPlugin)) {
        return 
$oTask;
    }
    
$oTask Engine::GetEntity('ModuleCron_EntityTask');
    
$oTask->setTitle($sTitle);
    
$oTask->setMethod($sMethod);
    
$oTask->setPeriodRun($iPeriod);
    
$oTask->setPlugin($sPlugin);
    
$oTask->setState(self::TASK_STATE_ACTIVE);
    if (
$oTask->_Validate()) {
        
$oTask->Add();
        return 
$oTask;
    } else {
        return 
$oTask->_getValidateError();
    }
}

Создает новую задачу в БД Метод предназначен для использования в плагинах в момент их активации

RemoveTasksByPlugin() method
public void RemoveTasksByPlugin($sPlugin $sPlugin)
$sPlugin $sPlugin
Source Code: /framework/classes/modules/cron/Cron.class.php#151 (show)
public function RemoveTasksByPlugin($sPlugin)
{
    if (
$sPlugin Plugin::GetPluginCode($sPlugin)) {
        
$aTasks $this->GetTaskItemsByPlugin($sPlugin);
        foreach (
$aTasks as $oTask) {
            
$oTask->Delete();
        }
    }
}

Удаляет все крон-задачи конкретного плагина

RunMain() method
public void RunMain()
Source Code: /framework/classes/modules/cron/Cron.class.php#38 (show)
public function RunMain()
{
    
/**
     * Получаем список активных задач
     * TODO: можно сделать выборку нужных задач сразу из БД, а не сравнивать в php время
     */
    
$aTasks $this->GetTaskItemsByFilter(array('state' => self::TASK_STATE_ACTIVE));
    
$aTasksReady = array();
    foreach (
$aTasks as $oTask) {
        if (!
$oTask->getDateRunLast() or (strtotime($oTask->getDateRunLast()) + $oTask->getPeriodRun() * 60 time())) {
            
$aTasksReady[] = $oTask;
        }
    }

    if (
Config::Get('module.cron.use_fork')) {
        
$aResult = \iFixit\Forker\Forker::map($aTasksReady, function ($iIndex$oTask) {
            
/**
             * Производим переподключение к основной БД
             */
            
$this->Database_ReConnect();
            
$oTask->beforeRun(true);
            return 
$oTask->run();
        });
    } else {
        foreach (
$aTasksReady as $oTask) {
            
$oTask->beforeRun(false);
            
$oTask->run();
        }
    }
}

Запускает выполнение центрального крона Выбирает необходимые задачи и выполняет их

RunTask() method
public array RunTask($oTask $oTask)
$oTask $oTask
{return} array
Source Code: /framework/classes/modules/cron/Cron.class.php#76 (show)
public function RunTask($oTask)
{
    
$aLog = array(
        
'state'  => 'successful',
        
'return' => null,
    );
    
/**
     * Запускаем
     */
    
try {
        
$aLog['return'] = call_user_func(array($this$oTask->getMethod()), $oTask);
    } catch (
Exception $e) {
        
$aLog['state'] = 'error';
        
$aLog['message'] = $e->getMessage() . ' (code:' $e->getCode() . ';line:' $e->getLine() . ')';
    }
    
/**
     * Обновляем количество пусков и дату последнего запуска
     */
    
$oTask->setCountRun($oTask->getCountRun() + 1);
    
$oTask->setDateRunLast(date('Y-m-d H:i:s'));
    
$oTask->Update();
    
/**
     * Записываем в лог
     */
    
$this->WriteLog('Run cron task "' $oTask->getTitleWithLang() . '"'$aLog);
    return 
$aLog;
}

Запускает задачу на выполнение

WriteLog() method
protected void WriteLog($sMsg $sMsg, array $aData=array ( ))
$sMsg $sMsg
$aData array
Source Code: /framework/classes/modules/cron/Cron.class.php#110 (show)
protected function WriteLog($sMsg$aData = array())
{
    
$this->Logger_Notice($sMsg$aData'cron');
}

Записывает сообщение в лог крона