Status API
Статус-ендпоінт
JSON-ендпоінт для моніторингу прогресу синхронізації в реальному часі. Використовуйте для скриптів, дашбордів та автоматизації.
Увімкнення ендпоінту
Передайте --status-addr для відкриття HTTP-ендпоінтів /status та /metrics.
godwit sync --source s3://src --dest s3://dst --status-addr :8080
curl -s localhost:8080/status | jq .Приклад відповіді
{
"run_id": "abc123",
"status": "running",
"source": "s3://my-source",
"destination": "s3://my-dest",
"objects_total": 15000,
"objects_done": 12400,
"objects_failed": 3,
"objects_skipped": 120,
"objects_excluded": 77,
"objects_pending": 2300,
"objects_running": 100,
"bytes_total": 1073741824,
"bytes_done": 858993459,
"bytes_failed": 5242880,
"bytes_skipped": 10485760,
"bytes_excluded": 2097152,
"bytes_pending": 192937573,
"bytes_running": 4980000,
"started_at": "2026-02-25T10:00:00Z",
"finished_at": null,
"eta_seconds": 42.5,
"errors": ["upload failed on path/to/file.bin: connection reset"],
"storage_classes": [
{ "storage_class": "STANDARD", "count": 14500, "total_size": 1048576000, "percent": 96.7 },
{ "storage_class": "GLACIER", "count": 500, "total_size": 25165824, "percent": 3.3 }
]
}Довідник полів
Верхній рівень
| Поле | Тип | Опис |
|---|---|---|
| run_id | string | Унікальний ідентифікатор запуску |
| status | string | Стан життєвого циклу (running, planned, completed, failed) |
| source | string | URI джерела (напр. s3://bucket) |
| destination | string | URI призначення |
Кількість об’єктів
| Поле | Тип | Опис |
|---|---|---|
| objects_total | int64 | Загальна кількість об’єктів, виявлених під час планування |
| objects_done | int64 | Успішно передані об’єкти |
| objects_failed | int64 | Об’єкти, передача яких не вдалася |
| objects_skipped | int64 | Пропущені об’єкти (Glacier, непідтримуваний ключ) |
| objects_excluded | int64 | Об’єкти, виключені за політикою |
| objects_pending | int64 | Об’єкти в черзі, ще не розпочаті |
| objects_running | int64 | Об’єкти, що передаються зараз |
Кількість байтів
| Поле | Тип | Опис |
|---|---|---|
| bytes_total | int64 | Загальні байти всіх запланованих об’єктів |
| bytes_done | int64 | Успішно записані байти |
| bytes_failed | int64 | Байти в невдалих об’єктах |
| bytes_skipped | int64 | Байти в пропущених об’єктах |
| bytes_excluded | int64 | Байти у виключених об’єктах |
| bytes_pending | int64 | Байти в об’єктах, що очікують |
| bytes_running | int64 | Байти в об’єктах, що передаються зараз |
Час та ETA
| Поле | Тип | Опис |
|---|---|---|
| started_at | RFC 3339 | Час початку запуску |
| finished_at | RFC 3339 | null | Час завершення запуску (null під час виконання) |
| eta_seconds | float64 | Орієнтовний час до завершення (секунди) |
Класи сховища
| Поле | Тип | Опис |
|---|---|---|
| storage_classes[].storage_class | string | Назва класу сховища S3 (STANDARD, GLACIER тощо) |
| storage_classes[].count | int64 | Кількість об’єктів у цьому класі |
| storage_classes[].total_size | int64 | Загальні байти у цьому класі |
| storage_classes[].percent | float64 | Відсоток від загальної кількості об’єктів |
Значення статусу запуску
| Значення | Значення |
|---|---|
| running | Синхронізація виконується |
| planned | Режим лише планування завершено |
| completed | Усі об’єкти успішно передано |
| failed | Один або кілька об’єктів не вдалося передати |
Приклади використання
Опитування до завершення
while true; do
STATUS=$(curl -s localhost:8080/status | jq -r .status)
if [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ]; then
echo "Run finished with status: $STATUS"
break
fi
sleep 5
doneЗнімок прогресу
curl -s localhost:8080/status | jq '{
progress: (.objects_done / .objects_total * 100 | round),
eta: .eta_seconds,
failed: .objects_failed
}'