Zope3 продукты ng.app.photo ng.app.registry

ng.app.quota

Андрей Орлов  2008-01-12 23:38

ng.app.quota - это продукт, позволяющий подсчитывать суммарный объем любого контейнера сайта (вместе со всеми вложенными контейнерами) и ограничивать его заданным в настройках пределом.

Продукт также может использоваться для подсчета статистических параметров распределения размеров объектов и посмотреть его гистограмму.

Продукт

Название:
ng.app.quota
Выложен на PyPI
Репозиторий
Краткое описание утилиты ng.app.quota

Краткое описание утилиты ng.app.quota

Утилита разработана для контроля размера объектов, содержащихся внутри контейнера (и всех вложенных в него контейнеров). Утилита строит гистограмму размеров объектов, содержащихся внутри контейнера и подсчитывает некоторые статистические характеристики: минимальный, максимальный и средний размер, количество объектов. В настройках утилиты можно установить максимальный размер, при превышении которого утилита порождает исключение:

ng.app.quota.quota.QuotaError

что дает возможность ограничить размер содержимого контейнера. Так как утилита при подсчете размера не обращается к содержимому контейнера, то она может использоваться не только в качестве ограничителя доступного объема ресурса, но и для подсчета статистики использования контейнеров определенного вида (например, кешей и т.п.), что трудно сделать обычным перебором содержимого контейнера из-за его длительности.

Принцип действия

Компонент ng.app.quota ассоциируется с любым объектом как аннотация или регистрируется как утилита в сайт-менеджере (в последнем случае ее действие распространяется на весь сайт). Специальный диспетчер перехватывает события, связанные с созданием, удалением или изменением размера объекта и диспетчеризует их для всех компонентов ng.app.quota, которые должны учесть его размер.

Каждый компонент ng.app.quota ведет небольшой перечень вложенных объектов, основанный на утилите IIntIds, что позволяет обрабатывать даже события, связанные с удалением объектов.

В качестве размера объекта используется размер реплики перзистент-объекта в хранилище, со всеми особенностями формирования такой реплики. Если ваш объект не является перзистент-объектом (не имеет интерфейса IPersistent), то вам надо разработать свой адаптер к интерфейсу ng.adapter.recordsize.interfaces.IRecordSize, который выполнит подсчет размера записи об объекте.

Требования к установке и настройке

Возможны два варианта установки: установка для сайта и установка для отдельного контейнера (компонента). В любом случае, до начала работ с ng.app.quota, в сайт-менеджере должна быть зарегистрирована утилита IIntIds.

Установка для сайта

Как только утилита IIntIds зарегистрирована, можно создать и зарегистрировать утилиту IQuota (Add Quota и последующая регистрация с пустым именем под интерфейсом ng.app.quota.interfaces.IQuota). На вкладке Quota созданной утилиты можно увидеть гистограмму и несколько полей, соответствующих интерфейсу IQuota:

Quota :: Int
Максимально допустимый суммарный размер объектов;
Check quota :: Bool
Проверять квоту (если этот флаг установлен, то по достижении суммарного размера величины Quota будет порождено исключение ng.app.quota.quota.QuotaError;
Use statistic :: Bool
Вести статистику размеров - если этот флаг не выбран, то компонент Quota будет фактически отключен.

Следующие поля доступны только для чтения :

Size :: Int
Суммарный размер объектов;
Count :: Int
Количество объектов;
Average Size :: Float
Средний размер объекта;
Minimum :: Int
Минимальный размер объекта;
Maximum :: Int
Максимальный размер объекта.

Установка для отдельного контейнера

Принцип установки ng.app.quota для отдельного контейнера достаточно обычен: нужно назначить компоненту-контейнеру интерфейс:

ng.app.quota.interfaces.IQuotaAnnotataAble

после чего с каждым экземпляром этого компонента окажется ассоциирована аннотация с интерфейсом IQuota, и в менеджерском интерфейсе компонента появится вкладка Quota, такая же как и в случае утилиты. Существуют разные способы назначить интерфейс как динамически (см. например ng.schema.interfaceswitcher), так и статически. Для простоты опишем только статический способ: в конфигурацию экземпляра zope3 нужно добавить директиву ZCML:

<class class="ng.app.converter.cachestore.cachestore.Cachestore">
  <implements interface="ng.app.quota.interfaces.IQuotaAnnotable" />
  <implements interface="zope.annotation.interfaces.IAttributeAnnotatable" />
</class>

В этом случае ng.app.quota используется как статистика кеша и ограничение размера квоты разумнее отключить. В другом варианте ng.app.quota используется во всех компонентах zope.app.folder.folder.Folder

<class class="zope.app.folder.folder.Folder">
  <implements interface="ng.app.quota.interfaces.IQuotaAnnotable" />
</class>

В этом случае разумно отключить ограничение размера квоты и подсчет статистики для всех компонентов, в которых это не имеет большого значения.

Заключение

Продукт ng.app.quota является незаменимым средством контроля ресурсов на хостинге и несомненно, найдет большое применение. Он легко настраивается и подключается к любым компонентам сайта.

Вложено:

Новое в ng.app.quota 2009-06-30 13:41  
ng.app.quota README.txt 2008-01-12 23:38 Степан Ломов 

...

Эпицентр Zope3 Учат тут Нейросети Репозиторий Статистика Редакторам Проекты
Подписаться на RSS Feed Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml