1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-03 06:55:03 +03:00
ifhub.club/engine/classes/Cron.class.php

140 lines
3.7 KiB
PHP
Raw Normal View History

2009-09-10 02:10:30 +03:00
<?php
/*-------------------------------------------------------
*
* LiveStreet Engine Social Networking
* Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
* Official site: www.livestreet.ru
* Contact e-mail: rus.engine@gmail.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/
require_once("Engine.class.php");
/**
* Абстрактный слой работы с крон-процессами
*/
class Cron extends LsObject {
2009-09-10 02:10:30 +03:00
/**
* @var Engine
*/
protected $oEngine=null;
/**
* Дескриптор блокирующего файла
2009-09-10 02:10:30 +03:00
*
* @var string
2009-09-10 02:10:30 +03:00
*/
protected $oLockFile=null;
2009-09-10 02:10:30 +03:00
/**
* Имя процесса, под которым будут помечены все сообщения в логах
2009-09-10 02:10:30 +03:00
*
* @var string
*/
2011-04-27 10:44:28 +03:00
protected $sProcessName;
2009-09-10 02:10:30 +03:00
public function __construct($sLockFile=null) {
2011-04-27 10:44:28 +03:00
$this->sProcessName=get_class($this);
2009-09-10 02:10:30 +03:00
$this->oEngine=Engine::getInstance();
2010-05-18 15:32:28 +03:00
/**
* Инициализируем ядро
*/
$this->oEngine->Init();
2009-09-10 02:10:30 +03:00
if(!empty($sLockFile)) {
$this->oLockFile=fopen($sLockFile,'a');
}
/**
* Инициализируем лог и делает пометку о старте процесса
*/
$this->oEngine->Logger_SetFileName(Config::Get('sys.logs.cron_file'));
$this->Log('Cron process started');
}
/**
* Делает запись в лог
*
* @param string $sMsg
* @return
*/
public function Log($sMsg) {
2011-04-27 10:44:28 +03:00
if (Config::Get('sys.logs.cron')) {
$sMsg=$this->sProcessName.': '.$sMsg;
$this->oEngine->Logger_Notice($sMsg);
}
2009-09-10 02:10:30 +03:00
}
/**
* Проверяет уникальность создаваемого процесса
*/
public function isLock() {
2009-09-20 15:47:54 +03:00
return ($this->oLockFile && !flock($this->oLockFile, LOCK_EX|LOCK_NB));
2009-09-10 02:10:30 +03:00
}
/**
* Снимает блокировку на повторный процесс
*/
public function unsetLock() {
return ($this->oLockFile && @flock($this->oLockFile, LOCK_UN));
}
/**
* Основная функция слоя. Реализует логику работы
* крон процесса с последующей передачей управления
* на пользовательскую функцию
2009-09-10 02:10:30 +03:00
*
* @param ( string|array ) $sFunction
* @param array $aArgs
*/
public function Exec() {
2009-09-10 02:10:30 +03:00
/**
* Если выполнение процесса заблокирован, завершаемся
*/
if($this->isLock()) {
throw new Exception('Try to exec already run process');
2009-09-10 02:10:30 +03:00
}
/**
* Здесь мы реализуем дополнительную логику:
* логирование вызова, обработка ошибок,
* буферизация вывода.
*/
ob_start();
$this->Client();
2009-09-10 02:10:30 +03:00
/**
* Получаем весь вывод функции.
*/
$sContent=ob_get_contents();
ob_end_clean();
return $sContent;
2009-09-10 02:10:30 +03:00
}
/**
* Здесь будет реализована логика завершения работы cron-процесса
2009-09-10 02:10:30 +03:00
*/
public function Shutdown() {
$this->unsetLock();
$this->Log('Cron process ended');
2009-09-10 02:10:30 +03:00
}
2009-09-10 02:10:30 +03:00
public function __destruct() {
$this->Shutdown();
}
/**
* Клиентская функция будет переопределятся в наследниках класса
* для обеспечивания выполнения основного функционала.
*/
public function Client(){
throw new Exception('Call undefined client function');
2009-09-10 02:10:30 +03:00
}
2011-04-27 10:44:28 +03:00
public function __call($sName,$aArgs) {
return $this->oEngine->_CallModule($sName,$aArgs);
}
2009-09-10 02:10:30 +03:00
}
?>