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

129 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 Object {
/**
* @var Engine
*/
protected $oEngine=null;
/**
* Дескриптор блокирующего файла
*
* @var string
*/
protected $oLockFile=null;
/**
* Имя процесса, под которым будут помечены все сообщения в логах
*
* @var string
*/
protected $sProcessName='Cron';
public function __construct($sLockFile=null) {
$this->oEngine=Engine::getInstance();
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) {
$sMsg=$this->sProcessName.': '.$sMsg;
$this->oEngine->Logger_Notice($sMsg);
}
/**
* Проверяет уникальность создаваемого процесса
*/
public function isLock() {
return ($this->oLockFile && !flock($this->oLockFile, LOCK_EX|LOCK_NB));
}
/**
* Снимает блокировку на повторный процесс
*/
public function unsetLock() {
return ($this->oLockFile && @flock($this->oLockFile, LOCK_UN));
}
/**
* Основная функция слоя. Реализует логику работы
* крон процесса с последующей передачей управления
* на пользовательскую функцию
*
* @param ( string|array ) $sFunction
* @param array $aArgs
*/
public function Exec() {
/**
* Если выполнение процесса заблокирован, завершаемся
*/
if($this->isLock()) {
throw new Exception('Try to exec already run process');
}
/**
* Здесь мы реализуем дополнительную логику:
* логирование вызова, обработка ошибок,
* буферизация вывода.
*/
ob_start();
$this->Client();
/**
* Получаем весь вывод функции.
*/
$sContent=ob_get_contents();
ob_end_clean();
return $sContent;
}
/**
* Здесь будет реализована логика завершения работы cron-процесса
*/
public function Shutdown() {
$this->unsetLock();
$this->Log('Cron process ended');
}
public function __destruct() {
$this->Shutdown();
}
/**
* Клиентская функция будет переопределятся в наследниках класса
* для обеспечивания выполнения основного функционала.
*/
public function Client(){
throw new Exception('Call undefined client function');
}
}
?>