Skip to content

Kolejka Zadań Asynchronicznych (Task Queue)

Moduł Kolejki Zadań Asynchronicznych (automation_queue) w platformie Ammonly odpowiada za zarządzanie, monitorowanie i realizację długotrwałych operacji w tle.


Spis treści


1. Istota kolejki asynchronicznej

Operacje wymagające intensywnego przetwarzania danych (masowe aktualizacje, przeliczanie bilansów, importy plików, generowanie zbiorczych raportów) są delegowane do tabeli kolejki a_mod_queue_records. Dzięki temu interfejs użytkownika pozostaje w pełni responsywny i nie blokuje połączeń HTTP.

mermaid
flowchart LR
    UserAction[Żądanie użytkownika / akcja masowa] --> Enqueue[Zapis zadania w a_mod_queue_records: waiting]
    Enqueue --> ImmediateHTTP[Natychmiastowa odpowiedź HTTP 202 Accepted]
    QueueWorker[CRON Task: queue_worker] --> Fetch[Pobranie zadania: reserved]
    Fetch --> Process[Przetwarzanie paczek & aktualizacja progress_percent]
    Process --> Complete[Oznaczenie zadania: done]

2. Struktura rekordu zadania w kolejce

Tabela a_mod_queue_records przechowuje kompletne metadane zadania:

PoleTypOpis
labelVARCHAR(255)Tytuł i opis zadania wyświetlany użytkownikowi.
job_typeVARCHAR(64)Typ zadania (np. bulk_update, recalculate_wbs, import_data).
statusVARCHAR(32)Status: waiting (oczekuje), reserved (w toku), done (zakończone), failed (błąd).
progress_percentINTWskaźnik postępu (0 - 100%).
processed_itemsINTLiczba dotychczas przetworzonych elementów.
total_itemsINTCałkowita liczba elementów do przetworzenia.
attemptsINTLiczba podjętych prób wykonania.
max_attemptsINTMaksymalna dozwolona liczba prób (domyślnie 3).
heartbeat_atDATETIMEZnacznik czasu ostatniej aktywności procesu wykonawczego.
error_messageTEXTKomunikat błędu w przypadku niepowodzenia.
output_logTEXTDziennik komunikatów diagnostycznych generowanych w trakcie wykonania.

3. Stany i cykl życia zadania

  1. waiting (Oczekujące): Zadanie utworzone przez API lub akcję użytkownika, oczekuje na pobranie przez robota.
  2. reserved (Pobrane / W trakcie): Zadanie zablokowane i aktywnie przetwarzane przez queue_worker.
  3. done (Zakończone sukcesem): Wszystkie elementy zostały pomyślnie przetworzone, progress_percent = 100.
  4. failed (Niepowodzenie): Wystąpił błąd krytyczny i wyczerpano dopuszczalny limit prób (attempts >= max_attempts).

4. Mechanizm Heartbeat i ochrona przed awarią

Aby zapobiec permanentnemu zablokowaniu zadań w stanie reserved w przypadku nagłego zatrzymania procesu robota (np. restart serwera, OOM killer), robot co kilka sekund aktualizuje kolumnę heartbeat_at. Jeśli zadanie w stanie reserved nie odnotowało aktualizacji przez ponad 5 minut, kolejny przebieg robota uznaje je za porzucone, zwalnia blokadę i podejmuje kolejną próbę wznowienia.


5. Monitoring i zarządzanie z poziomu panelu

  • Ścieżka w panelu: /automation/queue
  • Dostępne akcje:
    • Podgląd listy zadań z filtrowaniem wg statusu i typu zadania,
    • Wgląd w szczegółowy dziennik operacji (output_log) i komunikaty błędów,
    • Ręczne ponowienie nieudanego zadania lub anulowanie oczekującego.

Ammonly Documentation System