Инвентаризация и мониторинг
Сводка по парку машин нужна почти любому клиенту: сколько всего, сколько работает, сколько создаётся, сколько сломано. Считать это обходом страниц списка не нужно и не следует — есть серверные счётчики, которые не зависят от размера проекта.
Сводка по машинам одним запросом
Эндпоинт счётчиков возвращает total и две разбивки: byStatus по статусам жизненного цикла и
byPowerState по питанию. Счётчики считаются на сервере, поэтому остаются верными независимо от того,
сколько машин в проекте.
curl --request GET \
--url 'https://api.zennohosting.com/v1/projects/{projectId}/vms/state-counts' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json'
Как читать две разбивки
В
byStatusприсутствуют все пять статусов всегда: статус без машин возвращается как0. Сумма полей равнаtotal.Каждое поле
byStatusсовпадает с числом строк, которые вернёт список машин по соответствующему фильтруstatus==на тех же данных. Это удобно для перехода «плитка со счётчиком → отфильтрованный список».В
byPowerStateтолькоrunningиstopped. Машины, у которых состояния питания ещё нет, потому что они создаются, здесь не учитываются — поэтому сумма этих двух полей может быть меньшеtotal. Это не расхождение данных, а ожидаемое поведение.
Счётчики не кешируются
Два вызова, сделанных во время изменения машин, могут дать разные числа. Для панели состояния это нормально: не стройте логику на предположении, что два последовательных ответа совпадут, и не сверяйте счётчики со списком, полученным другим запросом в другой момент времени.
Счётчики уровня проекта
Ответ проекта содержит resourceCounts с полями vms, networks и
publicIps. Это то, что нужно для списка проектов: по одному запросу на проект без обхода вложенных
коллекций. Поле vmCount в том же ответе помечено устаревшим — используйте
resourceCounts.vms.
Когда нужен именно список
Счётчики отвечают на вопрос «сколько». Когда нужен ответ «какие именно», используйте список машин с постраничной навигацией, сортировкой и фильтрами.
pageначинается с 1,pageSizeпо умолчанию 20 и ограничивается сервером диапазоном 1–100.Сортировка задаётся через
sorts: префикс-означает убывание. По умолчанию для машин действует-createdAt,name.Фильтры задаются через
filtersв форматеfield<operator>value, напримерstatus==activeилиcpu>=4. Перечень допустимых полей у каждого эндпоинта свой и указан в его описании в справочнике.
curl --request GET \
--url 'https://api.zennohosting.com/v1/projects/{projectId}/vms?page=1&pageSize=20&filters=status==active&sorts=-createdAt,name' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json'
- 1
Постройте сводку на счётчиках
Один запрос на проект даёт плитки «всего», «работают», «создаются», «требуют внимания». Не начинайте с обхода списка: на большом проекте это десятки запросов ради чисел, которые сервер уже посчитал.
- 2
Свяжите плитку с отфильтрованным списком
Клик по счётчику статуса ведёт в список с фильтром
status==того же значения — числа совпадут, потому что считаются по одним и тем же данным. - 3
Отдельно покажите failed
Статус
failedозначает, что ресурс сам не восстановится и нужно вмешательство команды провайдера. Это единственный статус, который стоит выделять как требующий действий, — остальные проходят сами. - 4
Добавьте остаток по квотам
Рядом со сводкой полезен остаток из
GET /limits: сколько машин, сетей и адресов ещё можно создать и сколько осталось ядер, памяти и диска.
Метрики машины пока недоступны
Эндпоинт метрик существует, но сейчас возвращает предопределённые тестовые данные — подключение реальных метрик запланировано отдельно. Не стройте на нём графики и оповещения: описание и формат ответа смотрите в справочнике, а в интерфейсе до включения лучше не показывать эти значения как настоящие.
Связанные эндпоинты
/projects/{projectId}/vms/state-countsПолучить сводку по машинам проекта по статусам и питанию.
/projects/{projectId}/vmsПолучить список машин с фильтрами и сортировкой.
/projectsПолучить проекты вместе с их resourceCounts.
/limitsПоказать остаток по квотам рядом со сводкой.
/projects/{projectId}/operationsРазобраться, почему машина оказалась в неожидаемом состоянии.