Celery-задачи
Конфигурация: narmak/celery.py
Брокер: redis://redis:6379
Backend: redis://redis:6379
Timezone: Europe/Moscow
Запуск воркеров
bash
# Запуск воркера
celery -A narmak worker -l info
# Запуск планировщика (cron-задачи)
celery -A narmak beat -l info
# Мониторинг (Flower)
celery -A narmak flower --port=5555Полный список задач
app.document
| Задача | Триггер | Описание |
|---|---|---|
sync_payments | cron (ежечасно) | Синхронизация платёжных операций с банком |
sync_documents | signal / cron | Синхронизация документов с МойСклад |
sync_document_by_url | signal | Синхронизация конкретного документа по URL |
sync_processing_documents | cron | Синхронизация документов обработки |
sync_document_positions | signal | Синхронизация позиций документов |
set_currency_rate_save | cron (ежедневно 10:00) | Загрузка курсов валют с ЦБ РФ |
set_document_end_date_after_save | signal post_save | Установка даты окончания документа |
set_document_in_payment_register | signal post_save | Добавление документа в реестр платежей |
sync_assortiment | cron | Синхронизация ассортимента с МойСклад |
write_off_from_manufacture_position | signal post_save | Списание материалов при закрытии позиции производства |
applicable_processingorder | signal | Проведение заказа на производство |
applicable_production_stage_completion | signal | Завершение этапа производства |
set_inventory_applicable | manual | Проведение инвентаризации |
notificate_chance_manufacture_position_task | signal | Уведомление об изменении позиции производства |
create_qc_for_manufacture_position | signal post_save | Создание задания QC для позиции производства |
create_qc_for_supply_position | signal post_save | Создание задания QC для приёмки |
app.manufacture
| Задача | Триггер | Описание |
|---|---|---|
post_save_work_shifts | signal post_save | Пересчёт итоговых часов при изменении смены |
app.marketplace
| Задача | Триггер | Описание |
|---|---|---|
sync_wb_orders | cron (каждые 15 мин) | Загрузка новых заказов WB |
sync_ozon_orders | cron (каждые 15 мин) | Загрузка новых заказов Ozon |
update_all_marketplace_stocks | cron (каждые 2ч) | Обновление остатков на всех МП |
sync_wb_stocks | manual | Принудительное обновление остатков WB |
app.contracts
| Задача | Триггер | Описание |
|---|---|---|
check_contract_expiry | cron (ежедневно) | Уведомление об истекающих договорах |
update_contract_status | signal | Обновление статуса договора |
app.bank
| Задача | Триггер | Описание |
|---|---|---|
import_bank_statement | manual | Импорт банковской выписки |
match_bank_operations | signal | Сопоставление операций с документами |
app.ats
| Задача | Триггер | Описание |
|---|---|---|
process_ats_application | signal | Обработка новой заявки кандидата |
send_ats_notifications | signal | Уведомление о статусе заявки |
app.counterparty
| Задача | Триггер | Описание |
|---|---|---|
enrich_counterparty_from_dadata | signal post_save | Обогащение данных через DaData |
app.plantmaintenance
| Задача | Триггер | Описание |
|---|---|---|
plantmaintenance.generate_ppr_items | manual / сервисный вызов | Генерация элементов ППР для выбранного графика |
plantmaintenance.generate_active_ppr_items | cron | Генерация элементов ППР по всем активным графикам |
plantmaintenance.check_overdue_inspections | cron (ежедневно) | Пометка просроченных планов осмотра |
plantmaintenance.check_meter_thresholds | cron (ежедневно) | Контроль порогов счётчиков и trigger к обслуживанию |
plantmaintenance.auto_create_repair_requests | cron | Автосоздание заявок по просроченным строкам ППР |
plantmaintenance.send_reminders | cron | Напоминания по просроченным осмотрам, зависшим нарядам и активным простоям |
app.meeting
| Задача | Триггер | Описание |
|---|---|---|
send_meeting_reminder | cron (каждые 5 мин) | Напоминание о встрече за 15 мин |
app.employee_leads
| Задача | Триггер | Описание |
|---|---|---|
process_new_lead | signal | Обработка нового лида и уведомление в Mattermost |
lead_automation | signal | Автоматические действия по воронке |
Расписание Celery Beat
python
# narmak/celery.py
app.conf.beat_schedule = {
'update-currency-rates': {
'task': 'app.document.tasks.set_currency_rate_save',
'schedule': crontab(hour=10, minute=0), # ежедневно в 10:00
},
'sync-wb-orders': {
'task': 'app.marketplace.tasks.sync_wb_orders',
'schedule': crontab(minute='*/15'), # каждые 15 минут
},
'sync-ozon-orders': {
'task': 'app.marketplace.tasks.sync_ozon_orders',
'schedule': crontab(minute='*/15'),
},
'update-marketplace-stocks': {
'task': 'app.marketplace.tasks.update_all_marketplace_stocks',
'schedule': crontab(minute=0, hour='*/2'), # каждые 2 часа
},
'check-contract-expiry': {
'task': 'app.contracts.tasks.check_contract_expiry',
'schedule': crontab(hour=9, minute=0), # ежедневно в 9:00
},
'send-meeting-reminders': {
'task': 'app.meeting.tasks.send_meeting_reminder',
'schedule': crontab(minute='*/5'), # каждые 5 минут
},
}Мониторинг задач
Flower (веб-интерфейс)
http://localhost:5555/Показывает:
- Активные задачи
- Статистику выполнения
- Историю последних задач
- Состояние воркеров
Логи
bash
# Логи воркера
docker-compose logs -f celery
# Фильтр по конкретной задаче
docker-compose logs celery | grep "sync_wb_orders"Обработка ошибок
Задачи используют стандартный механизм retry Celery:
python
@app.task(bind=True, max_retries=3, default_retry_delay=60)
def sync_wb_orders(self):
try:
# логика
...
except Exception as exc:
logger.error(f"WB orders sync failed: {exc}")
raise self.retry(exc=exc, countdown=60)Неуспешные задачи после max_retries попадают в dead letter queue и логируются.