Crons & queue¶
Achtergrondverwerking verloopt via twee mechanismen: legacycron-scripts in _shopupdating/cronjobs/ en Symfony Console-commando's via ./cli.php. Beide gebruiken dezelfde bootstrap (_www/appconfig/config.php / bootstrap.php) en loggen naar de atx_log-database via LogUpdateDAO. Een aparte queue-database (atx_queue) buffert asynchrone taken die de webshop aanmaakt en die een achtergrondproces verwerkt.
cli.php — Symfony Console entrypoint¶
cli.php (repo-root) is het centrale Symfony Console-entrypoint:
// cli.php:38
$app = ServiceRegistry::get(Application::class);
$app->setDispatcher($dispatcher);
$app->run();
Bij een onafgehandelde uitzondering in een commando schrijft de ConsoleEvents::ERROR-listener automatisch een record naar atx_log via LogUpdateDAO (cli.php:21–36). Alle commando's worden als services geregistreerd via ServiceProvider-klassen.
Legacycron-scripts (_shopupdating/cronjobs/)¶
De klassieke cron-scripts zijn simpele PHP-bestanden die direct een controller of service aanroepen. Ze staan in _shopupdating/cronjobs/atx/ gegroepeerd per domein:
| Pad | Script(s) | Doel |
|---|---|---|
atx/amazon/ |
exportStock.php, retrieveOrders.php, uploadTrackings.php |
Amazon-integratie: voorraad exporteren, orders ophalen, trackings uploaden |
atx/articles/ |
editImage.php |
Artikelafbeeldingen batch-bewerken |
atx/articles/stock/ |
export.php |
Voorraadexport per leverancier/klant/export |
atx/customers/ |
sendMailLicenceExpired.php |
Mini-shop licentie-verloopmails versturen (MiniShopLicenseExpirationNotifier) |
atx/dwh/ |
updateCounters.php |
DWH-statistieken bijwerken (UpdatingCounterController) |
atx/job/ |
processGeneralQueue.php, cleanQueues.php |
Queue verwerken (in- én uitgaand), verlopen queue-records opruimen |
atx/logs/ |
cleanLogs.php |
Oude loginschrijvingen opruimen (UpdatingLogController) |
atx/orders/ |
getOrders.php, qteam_ftp_upload.php |
Platformorders ophalen (per platform), Qteam FTP-upload |
atx/suppliers/stock/ |
checkAllSupplierStock.php, checkSupplierStock.php |
Leveranciersvoorraden importeren (UpdatingSupplierStockController) |
atx/system/ |
cleanData.php |
Algemene dataopruiming (UpdatingCleanController) |
atx/vehicles/driveright/ |
updateDriveRight.php |
DriveRight-voertuigdata volledig synchroniseren (fabrikanten, modellen, voertuigen, wielmontage) |
atx/vehicles/simulator/ |
sendMakFiles.php |
3D-simulator MAK-bestanden versturen |
system/ |
rmsessions |
Sessie-opruiming (shell-script) |
Uitvoeringspatroon¶
Elk cron-script doet minimaal:
$_SESSION['username'] = 'updating'; // identificeert het als cron-aanroep
chdir(__DIR__);
require('../../../../_www/appconfig/config.php');
// aanroep van controller of ServiceRegistry::get(...)
De frequenties zijn bepaald door de crontab op de server — die is niet in de code vastgelegd. Zie Cronjob-overzicht voor de frequentietabel.
Symfony Console-commando's¶
Alle moderne commando's zijn #[AsCommand]-geannoteerde klassen in src/*/Command/ en _admin/model/classes/atx/cli/commands/. Ze worden geregistreerd via ServiceProviders. Oproep: ./cli.php <naam>.
Integratie-commando's¶
| Commando | Bestand | Doel |
|---|---|---|
amazon:export-stock |
src/Amazon/Fulfillment/Command/ExportStockToAmazonCommand.php |
Voorraad naar Amazon exporteren |
amazon:retrieve-orders |
src/Amazon/Fulfillment/Command/RetrieveAmazonOrdersCommand.php |
Orders ophalen van Amazon |
amazon:upload-trackings |
src/Amazon/Fulfillment/Command/UploadAmazonTrackingsCommand.php |
Trackingcodes naar Amazon sturen |
arteel:bulk-create-users |
src/Arteel/Command/BulkCreateUsersCommand.php |
Arteel-gebruikers bulk aanmaken |
arteel:reset-users |
src/Arteel/Command/ResetUsersCommand.php |
Arteel-gebruikers resetten |
arteel:find-user |
src/Arteel/Command/FindUserCommand.php |
Arteel-gebruiker opzoeken |
driveright:manufacturers:synchronise |
src/Atraxion/DriveRight/Command/ManufacturersSynchroniseCommand.php |
DriveRight fabrikanten synchroniseren |
driveright:models:synchronise |
src/Atraxion/DriveRight/Command/ModelsSynchroniseCommand.php |
DriveRight modellen synchroniseren |
driveright:vehicles:synchronise |
src/Atraxion/DriveRight/Command/VehiclesSynchroniseCommand.php |
DriveRight voertuigen synchroniseren |
driveright:mail-pcd-changes |
src/Atraxion/DriveRight/Command/SendPCDChangesMailCommand.php |
PCD-wijzigingsmail versturen |
evox:download-vehicles |
src/Evox/Command/DownloadVehiclesCommand.php |
Voertuigafbeeldingen van Evox downloaden |
facebook:feed:generate |
src/Facebook/Command/FeedGenerateCommand.php |
Facebook-productfeed genereren |
maxityre:import-mapping |
src/Maxityre/Command/MaxityreImportMappingCommand.php |
EAN→Maxityre-ID-mapping importeren |
qweon:pull-tyres |
src/Qweon/Command/PullTyresCommand.php |
Banden ophalen van Qweon |
qweon:push-tyres |
src/Qweon/Command/PushTyresCommand.php |
Banden publiceren naar Qweon |
qweon:link-tyres |
src/Qweon/Command/LinkTyresCommand.php |
Qweon-banden koppelen aan artikelen |
app:rhinoman:generate:stock-file |
src/Rhinoman/Command/GenerateStockFileCommand.php |
Rhinoman-stockbestand als CSV genereren |
t24:queue-orders |
src/Tyre24/Command/Tyre24QueueOrdersCommand.php |
Tyre24-orders in de queue plaatsen |
t24:listings:tyres |
src/Tyre24/Command/Tyre24TyreListingsCommand.php |
Bandlijstingen naar Tyre24 sturen |
t24:get-order-statuses |
src/Tyre24/Command/Tyre24GetOrderStatusesCommand.php |
Tyre24-orderstatussen ophalen |
t24:submit-invoice |
src/Tyre24/Command/Tyre24SubmitInvoiceCommand.php |
Retrybare factuurorders via Tyre24OrderUpdater indienen |
t24:get-shipping-companies |
src/Tyre24/Command/Tyre24GetShippingCompaniesCommand.php |
Vervoerders van Tyre24 ophalen |
virus-total:check-scans |
src/VirusTotal/Command/CheckVirusScanResultsCommand.php |
VirusTotal-scanresultaten ophalen |
Middleware/Odoo-commando's¶
| Commando | Doel |
|---|---|
middleware:push:orders |
Orders naar Odoo-middleware sturen |
middleware:push:partners |
Partners naar middleware sturen |
middleware:push:contacts |
Contacten naar middleware sturen |
middleware:push:stock |
Voorraad naar middleware sturen |
middleware:push:reservations |
Reserveringen naar middleware sturen |
middleware:push:suppliers |
Leveranciers naar middleware sturen |
middleware:pull:orders |
Orders uit middleware halen |
middleware:pull:partners |
Partners uit middleware halen |
middleware:pull:products |
Producten uit middleware halen |
middleware:pull:product-prices |
Productprijzen uit middleware halen |
middleware:pull:stock |
Voorraad uit middleware halen |
middleware:download:invoices |
Facturen uit middleware downloaden |
odoo:download-delivery-slips |
Leveringsbonnen van Odoo downloaden |
odoo:upload-* |
Diverse Odoo-uploadcommando's |
Platform-commando's¶
| Commando | Doel |
|---|---|
platform:pull-orders |
Orders van externe platformen ophalen |
platform:orders-update |
Platformorders statusupdate uitvoeren |
platform:resync-orders |
Platformorders opnieuw synchroniseren |
platform:verify-out |
Uitgaande platformdata verifiëren |
platform:verify-tracking-claim |
Tracking-claim verifiëren |
platform:download-arb-stock-file |
ARB-stockbestand downloaden |
Applicatie-commando's¶
| Commando | Doel |
|---|---|
app:birthday:create-templates |
Verjaardagse-mailtemplate aanmaken |
app:birthday:send-emails |
Geplande verjaardagsmails versturen |
cache:warmup |
Cache opwarmen (translations + overige caches) |
website:offline / website:online |
Shop offline/online zetten |
order:check-payment-status |
Betaalstatus van orders controleren |
order-documents:check-virus-scans |
Virusscanresultaten verwerken voor orderdocumenten |
order-documents:retry-odoo-uploads |
Mislukte Odoo-uploads van orderdocumenten herproberen |
atx:loyalty:payout-confirmed-points |
Bevestigde loyaliteitspunten uitkeren |
atx:loyalty:void-orphaned-points |
Wees-loyaliteitspunten annuleren |
atx:generate:sitemap |
Sitemap genereren |
atx:send-invoice |
Factuur versturen |
atx:csv-import |
CSV-import uitvoeren |
atx:translation:debug |
Vertaling-debug-info tonen |
Beheer/codegen-commando's¶
| Commando | Doel |
|---|---|
atx:generate:entity |
Entity-skelet genereren |
atx:generate:module |
Module-skelet genereren |
atx:generate:page |
Pagina-skelet genereren |
atx:enc |
Encryptie-hulpmiddel |
products:* |
Productbeheer (PCD-dropdown, homologatie, bandmaten) |
stock:optimize |
Voorraadoptimalisatie |
Queue-systeem (atx_queue)¶
De queue-database (atx_queue, constante APP_DB_QUEUE in _www/appconfig/constants.php:73) buffert taken die de webshop asynchroon wil laten uitvoeren.
Queue-types¶
Gedefinieerd in Queue (_core/model/classes/atx/job/Queue.php:21):
| Constante | Waarde | Gebruik |
|---|---|---|
TYPE_APP |
'app' |
Algemene app-taken |
TYPE_GENERAL |
'general' |
Standaard achtergrondtaken (verwerkt door processGeneralQueue.php) |
TYPE_R6 |
'R6' |
Synchrone R6-ERP-koppeling |
TYPE_R6_ASYNC |
'R6_async' |
Asynchrone R6-koppeling |
Statussen¶
STATUS_NEW (0) → STATUS_IN_QUEUE (100) → STATUS_PROCESSING (101) → STATUS_PROCESSED (1)
↘ STATUS_CRASH (2)
↘ STATUS_UNKNOWN_ERROR (97)
↘ STATUS_MANUALLY_BLOCKED (200)
Overige statussen: STATUS_EXISTS_ALREADY (3), STATUS_WAITING_FOR_ERP (4), STATUS_NO_ANSWER (96), STATUS_WRONG_LOGIN (98), STATUS_NO_CONNECTION (99).
Queue aanmaken vanuit code¶
De helper-functie enqueue() (src/namespaced_functions.php:507) plaatst een taak in de queue:
enqueue(SynchroniseProducts::class, 'synchroniseByExternalIds', $arguments);
// Intern: QueueDAO::queueCall($className, $methodName, 'I', ...)
De zoekopdracht-controllers (TyreSearchController, WheelSearchController, AccSearchController) gebruiken dit om productsyncs te queuen bij iedere zoekactie.
Queue verwerken¶
processGeneralQueue.php (_shopupdating/cronjobs/atx/job/processGeneralQueue.php) maakt een JobController-instantie aan en roept vervolgens processIncomingQueue() en processOutgoingQueue() aan. JobController (_admin/controller/classes/atx/job/JobController.php:27) beheert de volgorde (in- en uitgaand, prioriteitssortering).
AtxWorker¶
AtxWorker (_core/controller/classes/atx/AtxWorker.php:5) breidt \Worker (pthreads) uit voor parallelle queue-verwerking. De run()-methode stelt $_SESSION['username'] = 'updating' in zodat het proces als cron-context herkend wordt.
Logging van achtergrondtaken¶
Elke cron-uitvoering wordt geregistreerd in atx_log.log_update via LogUpdateDAO (_core/model/dbclasses/atx/logs/LogUpdateDAO.php:7). Bij elke aanmaak wordt een record ingevoegd met Controller, Action, starttijd en Debug-vlag. Output wordt als tekst opgeslagen (log()), periodiek geflushed bij > 800 000 tekens, en afgesloten met endLog() (zet Completed = 1). Fouten worden gemarkeerd met Error = 1.
flowchart LR
CronScript[Cron-script / cli.php] --> LogUpdateDAO
LogUpdateDAO -->|INSERT| atx_log[(atx_log.log_update)]
CronScript --> Controller[Controller / Service]
Controller -->|log() / endLog()| LogUpdateDAO
LogUpdateDAO -->|UPDATE Output,Completed| atx_log