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",
"started_at": "2026-02-25T10:00:00Z",
"finished_at": null,
"eta_seconds": 1847.3,
"objects": {
"total": 1250000,
"done": 980000,
"failed": 45,
"skipped": 8200,
"excluded": 3100,
"pending": 245000,
"running": 13655
},
"bytes": {
"total": 10995116277760,
"done": 8620171161762,
"failed": 2097152000,
"skipped": 52428800000,
"excluded": 10737418240,
"pending": 2240962269022,
"running": 68719476736
},
"version_history": {
"complete": 850000,
"partial": 320000,
"fully_skipped": 80000
},
"object_lock": {
"governance": 480000,
"compliance": 320000,
"legal_hold": 75000,
"none": 375000
},
"storage_classes": [
{ "name": "STANDARD", "count": 1050000, "bytes": 9200000000000, "percent": 84.0 },
{ "name": "INTELLIGENT_TIERING", "count": 125000, "bytes": 1200000000000, "percent": 10.0 },
{ "name": "GLACIER", "count": 75000, "bytes": 595116277760, "percent": 6.0 }
],
"verify": {
"matched": 975800,
"mismatched": 3,
"errors": 12,
"bytes": 8570000000000
},
"errors": ["upload failed on path/to/file.bin: connection reset"]
}Довідник полів
Верхній рівень
| Поле | Тип | Опис |
|---|---|---|
| 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 | Орієнтовний час до завершення (секунди) |
Історія версій
| Поле | Тип | Опис |
|---|---|---|
| version_history.complete | int64 | Ключі, всі версії яких успішно передані |
| version_history.partial | int64 | Ключі зі змішаними glacier-пропущеними та скопійованими версіями |
| version_history.fully_skipped | int64 | Ключі, всі версії яких пропущені через Glacier |
Object Lock
| Поле | Тип | Опис |
|---|---|---|
| object_lock.governance | int64 | Версії з режимом утримання GOVERNANCE |
| object_lock.compliance | int64 | Версії з режимом утримання COMPLIANCE |
| object_lock.legal_hold | int64 | Версії з увімкненим юридичним утриманням |
| object_lock.none | int64 | Версії без налаштувань Object Lock |
Верифікація
| Поле | Тип | Опис |
|---|---|---|
| verify.matched | int64 | Об'єкти, MD5 яких збігся з контрольною сумою sidecar |
| verify.mismatched | int64 | Об'єкти, MD5 яких не збігся з очікуваною контрольною сумою |
| verify.errors | int64 | Об'єкти, які не вдалося верифікувати (відсутній sidecar, помилка читання тощо) |
| verify.bytes | int64 | Загальний обсяг верифікованих байтів |
Класи сховища
| Поле | Тип | Опис |
|---|---|---|
| storage_classes[].name | string | Назва класу сховища S3 (STANDARD, GLACIER тощо) |
| storage_classes[].count | int64 | Кількість об’єктів у цьому класі |
| storage_classes[].bytes | 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
}'