as_nightjobs - Описание программы (класса, модуля)
      

Логин  
Пароль  
 
Регистрация





 
  Вернуться в список

as_nightjobs: ночное обслуживание сайта

Есть некоторый "стандартный" набор задач, связанных с оптимизацией сайта и экономией дискового пространства, которые необходимо выполнять периодически, например, удаление старых файлов, оптимизация данных в БД, проверка общего занятого дискового пространства, занимаемого сайтом.

Если Ваш тарифный план хостинга предусматривает ограниченный "предоплаченный" лимит занимаемого пространства на диске (а обычно так и есть), было бы неплохо отслеживать динамику "роста" сайта и прогнозировать, через сколько дней сайт может преодолеть этот лимит (если будет сохранять нынешние темпы роста). Данный класс сводит в "один флакон" следующие функции:
  • резервное копирование данных из избранных таблиц вашей БД, с сохранеием в сжатых XML файлах; при этом "большие" таблицы могут быть сохранены отдельно от "маленьких", чтобы облегчить и ускорить восстановление;
  • выполнение ротации бэкап-файлов (удаление файлов, созданных более чем N дней назад);
  • очистка указанных папок от файлов по маске и/или по дате создания;
  • удаление "устаревших" записей из указанных таблиц БД (обычно - из логов действий пользователей);
  • оптимизация/анализирование таблиц в базе MySQL;
  • вычисление суммарного пространства, занятого сайтом (файлы на диске и данные в таблицах MySQL базы, и, при желании, оценка количества дней до превышения лимита размера;
    в случае, если лимит уже достигнут, соответствующее ALARM-сообщение добавляется в финальный отчет для администратора
Если есть особые задачи, которые должны выполняться в порядке оптимизации сайта, их вызовы объединяются в одну php-функцию, и ее имя ередается в качестве доп.параметра в класс. Тогда они твкже будут выполнены в порядке отработки заданий.

Если задание стартовано из CRON или любого другого "шедулера", итоговый отчет отсылается на заданный email адрес администратора сайта.

Установка на сайт

  • Поместить php модули as_nighjobs.php и as_dbutils.php из дистрибутива в одну из папок сайта,
  • Отредактировать job_sample.php или подготовить "с нуля" собственный скрипт, занеся в него нужные параметры для выполнения заданий.

Упрощенный пример кода

require_once('as_dbutils.php');
require_once('as_nightjobs.php');
// не забыть подключиьтся к своей БД MySQL !

$job = new CNightJobs();
$job->SetAdminEmail('admin@mysite.net'); # отчет посылпть на этот адрес
$job->SiteSizeParameters('..', 'sitestatistic', 1000,array('mydb1','mydb2'));
# корневая папка сайта - "../", лимит диск-пространства - 1 GB
$job->Exec();

Использование класса

Все задания по обслуживанию сайта выполняются из метода Exec(), поэтому ВСЕ необходимые параметры должны быть установлены до его вызова. Если не устанавливать некоторые параметры, соответствующие задания не будут выполняться. Далее - полный перечень методов.

CNightJobs($apptitle='') - конструктор класса, необязательный параметр - титульная строка, используемая только при создании сабжа отправляемого письма с отчетом о работе.

SetTablesList($tblist, $tblist2=0) - задание списка таблиц, подлежащих операциям резервного копирования и/или оптимизации. Второй параметр $tblist2 может быть использован, если в резервной копии нужно отделить "большие" таблицы от "малых" - справочников и т.п. Это может быть полезно, когда вы решите восстановить некоторые данные. Процесс восстановления из большого бэкап-файла, будучи стартован через WEB-интерфейс, может прерваться по тайм-ауту, что может привести к непредсказуемому состоянию данных. Для таких случаев сохранение справочников и других мелких таблиц в отдельный бэкап - хороший вариант.
Оба списка таблиц будут использованы не только в процедуре создания бэкапов, но и в процессе оптимизации данных.

SetBackupParameters($back_folder, $bckpdays=10,$nobackup=null, $prefix='',$prefix2='') - задает параметры для создания бэкапов данных из БД :
$back_folder Папка для бэкап-файлов. Если пустая строка, бэкап не делается.
$bckpdays Сколько дней хранить файлы бэкапов. Если не-нулевое значение, все бэкап-файлы, созданные более заданного чиста дней назад, будут удаляться (ротация файлов).
$nobackup Если нужно, чтобы определенные таблицы оптимизировались, их имена должны присутствовать в массивах $tblist или $tblist2, но что делать, если мы не хотим, чтобы они попадали в бэкап ? Для этого их имена заносятся в данный параметр-массив $nobackup.
$prefix Строка-префикс имен бэкап-файлов, все файлы будут иметь вид {prefix}YYYY-MM-DD.xml.gz
По умолчанию : 'db'.
$prefix2 Префикс для имен "второго" бэкап-файла.
По умолчанию : 'dblist'.

AddFolderToClean($folder,$mask='',$days=0) - добавляет одну папку в список "на очистку от файлов"
$folder Очищаемая папка. концевой слэш "/" не нужен.
$mask Маска для отбора удаляемых файлов. Пустая строка означает "*.*"
$days Удалять файлы старее NN дней. Нулевое значение - удалять все.

примечание : вложенные папки не обрабатываются.

AddTableToShrink($tablename, $datefield) - добавляет имя таблицы "на сжатие", что означает удаление записей, созданых ранее чем указанное число дней назад. Обычно используется для "ротации" записей в таблицах логов пользовательской активности.
$tablename имя таблицы
$datefield имя поля одного из date-типов (date/datetime/timestamp), содержащего дату создания данной записи, значение в этом поле и будет критерием удаления


TableShrinkDays($days) задает кол-во дней хранения записей в "сжимаемых" таблицах. Если не вызывать этот метод, будет 30 дней по умолчанию.

SetEmailParameters($email,$charset='') задает email администратора сайта, на который высылается отчет о работе.
Необязательный параметр $charset может содержать корректное имя charset-а, тмпользуемого при формировании сообщения. Если ваша пользовательская функция возвращает локализованный текст, необходимо здесь указать соответствующий чарсет. Если же "ваш" текст состоит только из символов латиницы, данный параметр не нужен.

SetUserFunction($udf) задает имя вашей функции, в которую собраны все дополнительные вызовы ваших собственных процедур. Эта функция вызывается после отработки всех "штатных" заданий. Строка, возвращенная этой процедурой, дописывается в конец отчета.

AppendUserFunction($udf) добавляет вашу функцию в список, исполняемый после обработки основного блока. Идентичен методу SetUserFunction(), так что SetUserFunction() остается из соображений совместимости с уже написанными программами.

PrependUserFunction($udf)добавляет вашу функцию в список, исполняемый ДО обработки основного блока. Например, если у вас есть свои функции оптимизации/удаления ненужных данных, имеет смысл вызывать их до выполнения анализа "роста сайта", производимого в основном блоке.

SiteSizeParameters($rootfolder, $sitesizetable='',$maxsitesize=0, $dblist=0) задает параметры для процедуры подсчета общего размера сайта, расчета средней скорости роста и оценки времени, оставшегося до превышения лимита.
$rootfolder Строка или массив. Место, занятое всеми файлами во всех вложенных папках, считается от указанной "стартовой" папки Можно передать массив строк, если невозможно указать одну "головную" папку (например, нет прав на чтение корневой папки)
$sitesizetable Если нужно сохранять историю "роста" сайта и делать прогноз на превышение лимита, передайте имя будущей таблицы для хранения истории.
Эта таблица генерируется автоматически при первом запуске (если ее еще нет) в текущей базе данных. Убедитесь, что имя уникально и не совпадает с именем уже существующей таблицы !
Если вы используете таблицу истории роста, в процессе работы класса рассчитывается средний суточный рост за последний период, а также, ориентировочное число дней до превышения дискового лимита (если средний суточный прирост окажется больше нуля) и задан ненулевой параметр $maxsitesize )
$maxsitesize общий лимит дискового пространства в соответствии с вашим тарифным планом хостинга (MБайт). Если указано ненулевое целое число, выполняются проверка на превышение лимита и прогноз, через сколько дней он может быть достигнут.
Если прогнозируемое число дней до превышения менее 10, слово WARNING добавляется в сабж письма администратору и в само сообщение. Если лимит уже исчерпан, в письме вы увидите слово ALARM.
$dblist По умолчанию пространство, занимаемое данными в БД, считается для текущей подключенной базы.
Однако Ваш сайт (сайты в рамках одного хостинга) может быть разнесен по нескольким базам (но находящихся на одном MySQL сервере !)
В этом случае в данном параметре можно передать массив имен нужных баз данных. Итоговый посчитанный размер будет включать размеры всех указанных баз.


Exec() - фактический запуск всех заданий по обслуживанию и оптимизации сайта. Итоговый отчет выводится на экран и отсылается на email адрес администратора, ( если он был задан и скрипт стартован из шедулера/CRON ).


В классе есть несколько внутренних функций, вызываемых из Exec(), но их также можно вызывать самостоятельно.

  • CleanFolder($folder, $mask='',$days=0) можно вызывать для очистки одной конкретной папки от ненужных файлов. Смысл параметров тот же, что в методе AddFolderToClean().

  • OptimizeTables($tlist='') выполняет оптимизацию таблиц из переданного списка $tlist. Оптимизация выпоняется вызовом операторов MySQL OPTIMIZE TABLE и ANALYZE TABLE.

  • CleanupSessions() удаляет старые файлы сессий из текущей папки для их хранения. Удаляются файлы старее одного дня. Обычно web сервер сам регулярно запускает очистку сессий, но иногда этот дополнительный вызов может быть полезен. Этот метод никогда не запускается из Exec().

  • GetFolderSize($folder) подсчитывает и возвращает суммарное дисковое пространство, занятое папкой (включая вложенные папки) в Байтах.

  • История версий

    1.01.002 (04/24/2009)
    • Новые методы AppendUserFunction(), PrependUserFunction()
    • Небольшие баг-фиксы.
    1.00.001 (01/26/2009)
    • Первая публикация
      Вернуться в список  
       голосов :2
     
    Copyright © 2008-2010 selifan.ru