modSizeControl - старый знакомый, переписанный с нуля

modSizeControl

Приветствую всех форумчан! Кто-нибудь ещё помнит modSizeControl? Это тот самый виджет на рабочем столе, который рисовал круг заполнения и показывал, сколько места занимает сайт и сколько осталось до лимита. Я нашёл время и переписал его полностью, так что сегодня не анонс нового компонента, а рассказ о том, как старый знакомый переродился. Компонент, как и прежде, бесплатный.

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

Виджет «Контроль размера сайта»

Немного истории


Когда-то мы с @Pavel Zarubin сделали modSizeControl — виджет, который показывал, сколько места занимает сайт и сколько осталось до лимита. С тех пор утекло много воды, вышел MODX 3, а мне хотелось, чтобы компонент отвечал не только на вопрос «сколько», но и на вопрос «что именно». Так что я взялся и переписал его с нуля.

Что изменилось


И давайте сразу к сути:

  • Своя страница. Компонент теперь не ограничивается виджетом: в меню Пакеты → Контроль размера сайта шесть вкладок — «Обзор», «Проводник», «Компоненты», «Типы файлов», «Крупные файлы» и «История».
  • Сканирование по шагам. Большой сайт не упирается в max_execution_time, прерванное сканирование продолжается с того же места.
  • Сканирование по cron — отдельный скрипт.
  • Очистка кеша, логов и старых версий пакетов прямо со страницы, со штатными правами MODX.
  • Новый виджет с разбивкой по категориям.
  • Никаких зависимостей. pdoTools и Ace больше не нужны.
  • MODX 2 и MODX 3 из одного пакета.

Виджет


Круг теперь — это лимит, дольки — категории: MODX, компоненты, медиа, пакеты, кеш, логи и прочее. То, что осталось до лимита, — пустой сектор. Рядом карточки «Заполнено», «Осталось» и «Лимит», ниже те же категории списком. Наведение на дольку или строку подсвечивает обе.

Без лимита (теперь это значение по умолчанию) виджет показывает размер сайта и свободное место на диске. А если на диске свободно меньше, чем осталось до лимита, предупредит и об этом: лимит в 10 ГБ на диске, где свободно 2 ГБ, — так себе лимит.

«Обновить» сканирует сайт прямо в виджете, «Подробнее» ведёт на страницу. В MODX 2 виджет выглядит так же:

Виджет в MODX 2

Страница компонента


«Обзор» собирает всё на одном экране: сколько занимает сайт, сколько заполнено, насколько вырос с прошлого сканирования, пирог по категориям, типы файлов, самые крупные компоненты, график роста и очистку.

Вкладка «Обзор»

«Проводник» — папки сайта от самых крупных. Если папка относится к другой категории, у неё стоит метка, а фильтр по типу файлов пересчитывает размеры только по этому типу: так быстро находится, где лежат видео, которые контент-менеджер залил «временно» три года назад.

Чтобы не переучиваться, у строк есть меню как у грида MODX — кнопкой или правым кликом: скопировать путь от корня сайта или полный путь на сервере, открыть файл в браузере, посмотреть крупные файлы папки.

Проводник и меню строки

«Компоненты» показывают, сколько каждый занимает в core/components и assets/components, с версией установленного пакета. «Типы файлов» — из чего складывается размер, с кнопками «Где лежат» и «Крупные файлы». «Крупные файлы» — всё от 100 КБ с поиском по пути.

Вкладка «Крупные файлы»

«История» хранит итоги последних 500 сканирований. Если поставить сканирование в cron, через пару месяцев будет видно, в какую неделю сайт внезапно потяжелел на сотню мегабайт.

Вкладка «История»

Вкладка, папка и фильтры хранятся в адресе страницы: переживают перезагрузку, ссылкой можно поделиться, а «Назад» в браузере возвращает в предыдущую папку.

Сканирование


Наверняка кто-то спросит: почему не считать размер на лету, как раньше? Потому что на сайте с десятками тысяч файлов это долго, а для разбивки по папкам и типам всё равно нужно обойти каждый файл.

Поэтому сканирование идёт шагами по несколько секунд через коннектор менеджера. Страницу можно закрыть — сканирование продолжится, когда вы её откроете. Два окна не обходят одни и те же папки. Обходится не только корень сайта, но и то, что MODX держит вне его: вынесенные ядро, assets, менеджер, коннекторы и источники файлов. Категории определяются по путям из констант MODX, так что переименованный core тоже распознаётся.

Для cron есть скрипт:

0 3 * * * php /var/www/site/core/components/modsizecontrol/cli/scan.php > /dev/null 2>&1
Если в этот момент идёт сканирование, начатое в менеджере, скрипт его продолжит, а не начнёт второе.

Очистка


Внизу «Обзора» — то, что можно удалить без вреда для сайта: кеш MODX, логи в core/cache/logs и старые версии пакетов. Последний пункт особенно приятен: архивы предыдущих версий после каждого обновления так и лежат в core/packages, и на сайте, который обновляли пару лет, это десятки мегабайт.

Подтверждение удаления старых версий пакетов

Каждое действие с подтверждением и со штатными правами: empty_cache, error_log_erase и packages. Старые версии удаляются тем же процессором MODX, что стоит за кнопкой «Удалить» в окне версий пакета, и только ниже установленной версии.

Контроль загрузок


Настройка modsizecontrol_control на месте: при заданном лимите файл, который в него не помещается, не загрузится через файловый менеджер. Только теперь размер не замеряется заново на каждую загрузку — берётся последнее сканирование плюс всё, что загружено после него.

Требования


  • MODX Revolution 2.x или 3.x.
  • PHP 7.4+.
  • Право settings на страницу, сканирование и кнопки виджета.
Подробнее про вкладки, сканирование и cron — на сайте с документацией.

В следующий раз — про двойной клик, который всех давно достал.

Всем спасибо и мира над головой.

Баха Волков
Баха Волков
1 час назад
modx.pro
15

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0