Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

WebPulse

Фоновый сервис проверки доступности сайтов на FastAPI, Celery и Redis.

Что внутри

  • FastAPI принимает список URL и сразу возвращает task_id.
  • Redis используется как Celery broker: API кладет сообщение в очередь.
  • Redis используется как Celery result backend: результат читается по task_id.
  • Celery worker проверяет сайты в фоне, измеряет время ответа и формирует отчет.
  • Поддержаны delay(), apply_async(), задержка запуска, TTL задачи и отдельная очередь.
  • Задача объявлена с bind=True, видит свой task_id и настроена на retry.

Запуск

docker compose up --build

API будет доступен на http://localhost:8000.

Документация FastAPI:

http://localhost:8000/docs

Примеры запросов

Обычный запуск через .delay():

curl -X POST http://localhost:8000/checks \
  -H 'Content-Type: application/json' \
  -d '{"urls":["https://example.com","https://google.com","https://not-existing-site.test"]}'

Запуск с задержкой через .apply_async(countdown=...):

curl -X POST 'http://localhost:8000/checks/delayed?countdown=30' \
  -H 'Content-Type: application/json' \
  -d '{"urls":["https://example.com"]}'

Запуск с ограничением времени жизни задачи:

curl -X POST 'http://localhost:8000/checks/expiring?expires=60' \
  -H 'Content-Type: application/json' \
  -d '{"urls":["https://example.com"]}'

Запуск в отдельной очереди url_checks:

curl -X POST http://localhost:8000/checks/queued \
  -H 'Content-Type: application/json' \
  -d '{"urls":["https://example.com"]}'

Проверка результата:

curl http://localhost:8000/checks/<task_id>/status

Краткий отчет:

curl http://localhost:8000/checks/<task_id>

Статусы задач

Сервис возвращает основные статусы Celery:

  • PENDING: задача еще не взята worker-ом или неизвестна result backend.
  • STARTED: worker начал выполнение.
  • SUCCESS: проверка завершилась успешно, в result есть отчет.
  • FAILURE: задача завершилась ошибкой.
  • RETRY: Celery запланировал повторную попытку.

Запуск worker вручную

Обычный запуск:

celery -A app.celery_app.celery_app worker --loglevel=info

С одним процессом:

celery -A app.celery_app.celery_app worker --loglevel=info --concurrency=1

В режиме solo:

celery -A app.celery_app.celery_app worker --loglevel=info --pool=solo

Для отдельной очереди:

celery -A app.celery_app.celery_app worker --loglevel=info --queues=url_checks

Конфигурация

Переменные окружения:

Переменная Значение по умолчанию
REDIS_HOST redis
REDIS_PORT 6379
CELERY_BROKER_DB 0
CELERY_RESULT_DB 1
REQUEST_TIMEOUT_SECONDS 5
MAX_URLS_PER_CHECK 20
TASK_RESULT_EXPIRES_SECONDS 3600

Для локального запуска без Docker укажите REDIS_HOST=localhost. В Docker Compose Redis доступен контейнерам на redis:6379; наружу Redis не публикуется, чтобы не конфликтовать с локальным Redis на машине.

cp .env.example .env

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages