Корзина (мягкое удаление)
Каждое удаление мока, коллекции API-тестов, сессии рекордера, контракта, fuzz-конфига, тест-плана, расписания,
вебхука или подписки вебхука, подписки или привязки канала уведомлений, CI-триггера или настройки запуска CI,
шаблона сканирования безопасности, сохранённого представления папок тест-кейсов или комментария к шагу
в Mockarty не удаляет запись сразу — элемент перемещается
в Корзину пространства имён с окном восстановления. Пока окно не
истекло, элемент можно восстановить вместе со всеми зависимыми строками,
удалёнными в том же каскаде. После истечения окна Mockarty очищает
записи автоматически; администраторы могут запустить очистку вручную.
Эта страница охватывает:
- Как работает мягкое удаление (что видит пользователь, что реально
хранится) - Настройки хранения — переопределения для пространства имён и
глобальные значения по умолчанию - Восстановление одной каскадной группы или нескольких
- Ручная очистка (необратимая) и фраза подтверждения
- Ролевой доступ (кто может видеть / восстанавливать / очищать)
Ищете форму вызова CLI / SDK / API? См.
Рецепты API и CLI для Корзины.
Как работает мягкое удаление
При удалении сущности из UI, CLI или через API:
- Mockarty проставляет
closed_at/closed_byи опциональный
closed_reason— строка остаётся в базе. - Зависимые строки (например, моки цепочки, расписания и вебхуки
тест-плана) мягко удаляются в той же транзакции и получают общий
cascade_group_id. Восстановление группы возвращает все элементы
одновременно. - Элемент сразу исчезает из обычных списков — он виден только в
Корзине.
Некоторые записи закрываются в ходе обычной работы, а не удаляются вами, поэтому в Корзине их нет —
но и копиться они не будут: Mockarty удаляет их по тому же сроку хранения. Это удалённые агенты,
снявшие регистрацию при остановке, политики уведомлений, сброшенные к унаследованным, и процессы
тест-кейсов (вместе с состояниями), заменённые применением другого пресета.
Доступ к Корзине
Веб-UI — вид namespace: откройте боковое меню и нажмите Корзина
(или перейдите на /ui/trash напрямую). Страница отфильтрована по
namespace, выбранному в селекторе в шапке.
Веб-UI — глобальный вид (admin / support): платформенные админы и
пользователи поддержки видят в меню дополнительный пункт
Корзина (все) (/ui/admin/trash). Используется та же страница с
переключателем scope в заголовке — можно быстро переходить между видом
namespace и глобальным.
CLI:
mockarty-cli trash list
mockarty-cli trash summary
Платформенный вид в CLI: добавьте --admin, чтобы получить список
по всем namespace. Роль поддержки видит все namespace, но не может
очищать безвозвратно.
Прогулка по UI
После загрузки страницы вы видите три зоны:
- Шапка — счётчик общего числа записей, чип по каждому типу
сущности (клик по чипу фильтрует таблицу), кнопки Обновить и
Настройки хранения. - Панель фильтров — поиск по имени/ID, фильтр типа, диапазон дат и
фильтр по логину или UUID удалившего пользователя. - Таблица — в каждой строке: имя, бейдж типа, namespace, кто и
когда удалил, причина (если указана). Кнопки Восстановить и
Удалить навсегда открывают диалог подтверждения по конкретной
строке. При выборе нескольких строк чекбоксами сверху появляется
панель массовых действий с кнопками Восстановить выбранное и
Удалить выбранное.
На узких экранах таблица автоматически превращается в карточки, чтобы
страница оставалась удобной с планшета или телефона.
Если фильтры не находят записей, страница показывает Совпадений нет;
измените или очистите фильтры, чтобы увидеть остальные записи корзины.
Восстановление записи
Нажмите Восстановить в строке (или выделите несколько строк и
нажмите Восстановить выбранное). Диалог подтверждает операцию и
предлагает свободное поле Причина, которое попадает в журнал
аудита. Восстановление идемпотентно — повторный запуск по той же
каскадной группе не вызывает побочных эффектов.
Окончательное удаление (purge)
Purge необратим. При нажатии Удалить навсегда (или Удалить
выбранное) Mockarty показывает красный диалог с числом каскадных
групп, которые будут удалены, и требует ввести фразу подтверждения
точно в таком виде:
I understand this is permanent
Кнопка Удалить навсегда остаётся заблокированной, пока фраза не
введена точно; бэкенд отклоняет любое другое значение с HTTP 400.
Поле Причина (опционально) попадает в журнал аудита — используйте
его для GDPR-запросов или инцидент-тикетов.
Настройки хранения
Нажмите Настройки хранения в шапке. Диалог показывает:
- Переключатель Корзина включена — отключив корзину, вы
отправляете удаления мимо retention-окна (не рекомендуется в
регулируемых средах). - Срок хранения (дней) — слайдер 1–365 с парным числовым полем.
Владельцы namespace могут переопределить глобальное значение;
платформенные админы задают глобальное значение из scope
Все namespace. - Планировщик retention → Запустить сейчас (только admin scope) —
запускает автоматическую очистку немедленно; удобно для ops-проверки
или после уменьшения retention-окна. Только лидер кластера выполняет
тик; follower-узлы возвращают 503 с подсказкой и не делают работу.
Настройки хранения
Два уровня:
- Глобальные значения — применяются, когда у пространства имён нет
собственных настроек. По умолчанию: 7 дней, включено. Настраивается
в Admin → Настройки хранения или командойmockarty-cli trash settings set --global --retention-days N --enabled. - Переопределения пространства имён — задаются в Настройки →
Корзина → Хранение (требует роль владельца) или
mockarty-cli trash settings set --retention-days N --enabled.
Ограничения:
retention_daysдолжен быть в диапазоне 1..365.enabled=falseполностью отключает очистку для области — записи
накапливаются бесконечно. Подходит только для forensic-пространств.
Если пространство наследует глобальные значения, GET /api/v1/namespaces/:ns/trash/settings возвращает "inherited": true и
глобальные значения. Как только сохраняется переопределение —
inherited становится false.
Тот же срок действует и для удалённых объектов, которые в корзину не попадают
и не восстанавливаются, — например, комментариев, сохранённых фильтров и
представлений, дашбордов и виджетов, UI-тестов и их эталонов, спринтов и
списаний времени. Из продукта они исчезают сразу после удаления, а из базы
удаляются окончательно по истечении срока хранения (или никогда, пока очистка
для пространства имён выключена).
Восстановление
Любое восстановление идемпотентно — повторный вызов возвращает
restored_count=0, а не ошибку.
Восстановление одной каскадной группы (кнопка в UI, CLI или SDK):
mockarty-cli trash restore <cascade-id>
Массовое восстановление — несколько id (мультивыбор в UI, CSV в CLI,
cascade_group_ids в SDK):
mockarty-cli trash restore cg-abc,cg-def --reason "откат ошибочной чистки"
Ответ на массовый вызов имеет формат 207-подобной структуры:
{
"restored": [{ "cascade_group_id": "cg-abc", "entity_type": "mock", "restored_count": 4 }],
"failed": [{ "cascade_group_id": "cg-def", "error": "parent container still deleted" }],
"not_found": ["cg-xyz"]
}
Типичные ошибки восстановления
parent container still deleted— сущность зависит от другой строки,
которая тоже в Корзине. Сначала восстановите родителя (UI подсказывает
автоматически).retention expired— окно восстановления закрылось; запись уже
удалена безвозвратно.conflict— существует активная запись с таким же бизнес-ключом
(например, тот же mock id). Переименуйте или удалите её и повторите.
Очистка (НЕОБРАТИМО)
Очистка навсегда удаляет строки из базы данных — восстановление
невозможно. Mockarty периодически запускает планировщик ретеншна и
удаляет просроченные записи автоматически; ручная команда нужна только
чтобы:
- Проактивно освободить место до истечения окна
- Выполнить запрос субъекта на удаление данных (GDPR и пр.)
- Разблокировать владельца пространства при превышении лимита строк
Фраза подтверждения
Любая ручная очистка требует ввода точной фразы I understand this is permanent (без изменений регистра и без пробелов по краям). UI
показывает её в диалоге подтверждения; CLI и SDK проверяют её до
отправки запроса. Если фраза отсутствует или неверна — запрос
отклоняется локально, до API.
CLI
Интерактивно:
mockarty-cli trash purge <cascade-id>
# CLI запросит фразу, завершится с ненулевым кодом при несовпадении
Неинтерактивно (CI / скрипты) — добавьте --yes:
mockarty-cli trash purge cg-abc,cg-def --yes --reason "GDPR запрос #4421"
Полностью очистить корзину
Чтобы навсегда удалить все элементы корзины за один шаг — без
предварительного получения списка id — используйте trash empty. Сервер
сам находит все мягко удалённые элементы в области видимости и удаляет их
пакетами, пока корзина не опустеет. Это работает даже для корзин с
десятками тысяч элементов (один вызов purge ограничен по размеру
запроса).
# Текущее пространство имён
mockarty-cli trash empty --namespace team-orders
# По всей платформе (только администратор платформы)
mockarty-cli trash empty --admin --yes --reason "очистка перед релизом"
То же действие доступно в UI кнопкой Очистить корзину. Если сначала
задать поиск или фильтр по типу, дате либо удалившему пользователю,
кнопка удалит только подходящие элементы. Подтверждение показывает
минимальное число видимых элементов: совпадения могут оставаться за
пределами текущей страницы. UI продолжает удаление ограниченными
пакетами, пока подходящих элементов не останется, и сообщает об ошибках.
Без фильтров UI обновляет счётчик перед открытием подтверждения. Если во
время подтверждённой операции переключить пространство имён, оставшиеся
пакеты продолжат выполняться в подтверждённом пространстве.
Ручной тик ретеншна (только админ)
Принудительно запустить планировщик ретеншна сразу по всем
пространствам:
mockarty-cli trash purge-now
Возвращает число удалённых строк и количество просмотренных пространств.
При ошибке хотя бы одного ресурса запрос сообщает об ошибке. Предыдущие
удаления могли выполниться: перед повтором проверьте корзину.
Ролевой доступ
| Роль | Просмотр | Восстановить | Очистить | Сменить ретеншн |
|---|---|---|---|---|
| Viewer пространства | Да | Нет | Нет | Нет |
| Editor пространства | Да | Да | Нет | Нет |
| Owner пространства | Да | Да | Да | Да (пространство) |
| Платформенная поддержка | Да (все NS) | Да (все) | Да (все) | Да (пространство) |
| Платформенный админ | Да (все NS) | Да (все) | Да (все) | Да (глобально + пространство) |
Платформенная поддержка и админ оба очищают данные кросс-NS — используйте
роль, которую вам выдали; журнал аудита фиксирует, кто реально нажал
«Очистить». Owner пространства очищает корзину внутри своего пространства.
Журнал аудита
Каждая операция Корзины порождает запись в журнале аудита с актёром,
сущностью, cascade_group_id, причиной (если указана) и результатом.
Открыть историю: Admin → Журнал аудита, фильтр по действиям
trash_restore / trash_purge / trash_settings_update.
Связанные разделы
- Рецепты API и CLI для Корзины — примеры
запросов и ответов для каждого эндпоинта (Go / Python / Java / CLI /
curl). - Руководство администратора — глобальные настройки
ретеншна и платформенная Корзина. - Руководство по CLI — полный справочник
mockarty-cli trash ….