Кейс · Бэкенд · Python
cron-clock: объяснение cron и ближайшие запуски
Сервис разбора cron-выражений на Python (FastAPI, только стандартная библиотека и zoneinfo). Объясняет выражение по-русски и по-английски, считает ближайшие запуски в заданном часовом поясе с учётом перехода на летнее время, предупреждает об «опасных» расписаниях и сравнивает два выражения. Поддержаны L, W, #, шесть полей с секундами.
- Python
- FastAPI
- uvicorn
- zoneinfo
- hypothesis
- mypy --strict
- ruff
- pip-audit
- Docker
- GitHub Actions
01 · Как выглядит
Скриншоты


02 · О проекте
Что это и зачем
Сервис разбора cron-выражений на Python (FastAPI, только стандартная библиотека и zoneinfo). Объясняет выражение по-русски и по-английски, считает ближайшие запуски в заданном часовом поясе с учётом перехода на летнее время, предупреждает об «опасных» расписаниях и сравнивает два выражения. Поддержаны L, W, #, шесть полей с секундами.
Ограничения
Нумерация дней недели как в стандартном cron (воскресенье 0 или 7), не как в Quartz; седьмое поле года не поддерживается.
@reboot отклоняется: у него нет расписания.
Правила DST сознательно просты; реальный cron (Vixie, systemd timers, Quartz) может вести себя иначе.
Проект работает на небольшом VPS с демо-данными: без отказоустойчивости и резервных копий.
Что внутри
- Ближайшие запуски с DST: границы Europe/Berlin 2024-03-31 и 2024-10-27, пояс Lord Howe с получасовым переходом
- 64 теста; hypothesis по 150 примеров на свойство: запуск удовлетворяет выражению, нет пропущенной минуты (проверка перебором)
- Сравнение `* * * * * *` против `* * * * *` на 400 дней за 0,6 с
- /api/parse: около 800 запросов в секунду, p95 35 мс; 37 МиБ RAM в покое
03 · Как запустить
Запуск одной командой
git clone <репозиторий по запросу> cron-clock
cd cron-clock
python -m app04 · Код
Репозиторий приватный
Исходники лежат в приватном репозитории. Напишите в Telegram, открою доступ.
Запросить код