ng.app.quota
2008-01-12 23:38ng.app.quota - это продукт, позволяющий подсчитывать суммарный объем любого контейнера сайта (вместе со всеми вложенными контейнерами) и ограничивать его заданным в настройках пределом.
Продукт также может использоваться для подсчета статистических параметров распределения размеров объектов и посмотреть его гистограмму.
Продукт
| Название: | |
| ng.app.quota | |
| Выложен на PyPI | |
| Репозиторий |
Краткое описание утилиты 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 является незаменимым средством контроля ресурсов на хостинге и несомненно, найдет большое применение. Он легко настраивается и подключается к любым компонентам сайта.


