Ga naar inhoud

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