📚 Теория: HTTP статусы и cURL (раскрыть)
Откуда брать статус?
curl возвращает код 0, если запрос завершился без сетевой ошибки. HTTP 500/503 всё равно дают exit code 0 — нужно явно читать статус из ответа.
⚠️ Используй -w "%{http_code}" или --fail-with-body.
Как диагностировать?
Выводи заголовки (-i), логируй тело, добавь таймауты и ретраи. Для JSON используй jq, для SLA — метрики.
🔐 Сохраняй токены в env, не в скриптах.
Скрипт вызывает curl -s и считает, что всё ок.
Сервис отдаёт 503, но мониторинг не падает.
Добавляем проверку статуса, логирование и алерты.
Как надо: curl --fail --show-error --silent --retry, вывод статуса через -w, интеграция с Prometheus, тесты на 5xx в CI.
Контекст
DevOps написали простой скрипт health-check, но забыли про HTTP статусы и таймауты. В результате 500/503 проходят незаметно. Найди проблемную строку и опиши, как переписать мониторинг.
- Подумай про `curl --fail-with-body`, `--connect-timeout`, `--max-time`.
- Предложи выводить код статуса и тело в лог.
- Добавь в комментарий идеи для автотестов: интеграционные, smoke, CI job.
Скрипт
Review
Референс-исправление
Нужно проверять HTTP статус, тело и создавать метрики.
Флаг ревью: FLAG{curl-http-checks}
status=$(curl --fail-with-body --silent --show-error \
--write-out "%{http_code}" --output /tmp/health.json "$API_URL/health")
if [[ "$status" != "200" ]]; then
jq '.' /tmp/health.json >&2
exit 1
fi
Добавь в CI smoke-тест: curl -i -H "Accept: application/json" $API_URL/health, проверяй 2xx и разбирай JSON.
Проверка флага
После ревью зафиксируй флаг, чтобы дашборд засчитал лабораторию.