presseportale/app/Console/Commands
Kevin Adametz 6a34ab48ee technik: Aufrufe über ein Ereignis-Log zählen statt im Request
Bisher lief pro Seitenaufruf ein UPDATE press_releases SET hits = hits + 1 im
Request. Auf der über 1 GB großen Tabelle blockiert dieser Schreibzugriff,
sobald dort eine Schemaänderung läuft — die wartenden Requests belegten dabei
PHP-FPM-Worker und DB-Verbindungen, bis die ganze Seite stand.

Der Request schreibt jetzt nur noch in die kleine Append-Tabelle
press_release_events, und selbst dabei wird jeder Fehler geschluckt und
gemeldet: Ein Aufruf-Zähler darf eine Seite niemals langsamer oder kaputt
machen. Die Summierung in press_releases.hits übernimmt gebündelt der
Scheduler.

Der Fortschritt läuft über eine Wasserstandsmarke (höchste bereits verbuchte
Event-ID) statt über einen Zwischenspeicher, damit bei einem Neustart kein
Aufruf verloren geht. Zähler und Marke werden je Durchgang gemeinsam
committet — sonst wäre nur der Durchgang wiederanlaufsicher, nicht der Abbruch
darin, und der nächste Lauf verbuchte dieselben Aufrufe doppelt. Eine Migration
setzt die Marke beim Deploy auf den Ist-Stand; ohne sie würde der erste Lauf
den gesamten Altbestand ein zweites Mal aufaddieren.

Weil das Log damit mit dem Traffic wächst und als einzige Log-Tabelle des
Systems keine Bereinigung hatte, begrenzt press-releases:purge-events es auf
einen Aufbewahrungszeitraum (Default 395 Tage = 13 Monate, damit der
Vorjahresmonats-Vergleich möglich bleibt). Gelöscht wird ausschließlich
unterhalb der Wasserstandsmarke — alles darüber ist noch nicht in hits verbucht
und wäre sonst dauerhaft verloren. Fehlt die Marke, bricht der Lauf ab, statt
zu raten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-01 11:05:28 +00:00
..
AggregatePressReleaseViews.php technik: Aufrufe über ein Ereignis-Log zählen statt im Request 2026-09-01 11:05:28 +00:00
AnalyzeLegacyApiAccessLogs.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
ArchiveLegacyInvoices.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
BackfillPortalRole.php Fix: rollenlose aktive Nutzer -> Backfill-Command + Import-Nachlauf 2026-07-02 09:23:56 +00:00
FixLegacyTimestamps.php legacy: fix-timestamps liest Legacy-Schema-Namen aus der DB-Config statt hartkodiert 2026-07-20 10:50:39 +00:00
GenerateDomainFavicons.php 29-05-2026 Optimierungen Fixes am Code 2026-05-29 12:42:05 +00:00
GenerateManualInvoices.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
GrandfatherLegacySubscriptions.php Optimierung 3.5: Kleinere Zentralisierungen (VAT, findByEmail, Waehrung, Provisioning) 2026-06-19 11:14:05 +00:00
ImportLegacyApiKeys.php Uebernahme bestehender Legacy-API-Integrationen (Keys, Auth, Pfade) 2026-07-06 11:55:22 +00:00
ImportLegacyBillingAddresses.php Rechnungsadressen der Bestandskunden aus dem Legacy-Archiv uebernehmen 2026-07-06 12:19:50 +00:00
ImportLegacyData.php legacy: --since-Delta für legacy:import + Importer setzen Timestamps wieder korrekt 2026-07-20 13:03:07 +00:00
MigrateLegacyAgencyNames.php legacy:migrate-agency-names: Agentur-Namen → users.agency_name 2026-07-08 09:25:04 +00:00
MigrateLegacyMedia.php 19-05-2026 Rebrand Pressekonto, Hub-Flux UI und Legacy-Media-Migration 2026-05-19 16:36:13 +00:00
MigratePresseData.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
OnlineSchemaChange.php technik: Volltext-Indizes von press_releases in eine eigene Suchtabelle auslagern 2026-09-01 11:04:43 +00:00
PrivatizePressReleaseMedia.php legacy: privatize-media überspringt unmigrierte Legacy-Bildzeilen, --prune-missing löscht sie 2026-07-20 10:50:31 +00:00
PublishScheduledPressReleases.php press-releases: Publish-Rechte, Quota-Races & Slug vereinheitlichen 2026-07-14 13:47:51 +00:00
PurgeExpiredPressReleaseDrafts.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
PurgeMagicLinks.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
PurgePressReleaseEvents.php technik: Aufrufe über ein Ereignis-Log zählen statt im Request 2026-09-01 11:05:28 +00:00
PurgeRedactionSnapshots.php recht: Meldeverfahren v2 Phasen 1-4 — Re-Sync-Sperre, Anonymisierung, Magic-Link-Intake, Self-Service-Korrektur 2026-07-22 15:56:34 +00:00
RefreshMarketData.php Spoke-Frontend-Audit: Fake-Inhalte raus, Newsletter-Rueckbau, echte Boersendaten, EN-Lokalisierung 2026-07-06 13:36:23 +00:00
ReindexPressReleaseSearch.php technik: Volltext-Indizes von press_releases in eine eigene Suchtabelle auslagern 2026-09-01 11:04:43 +00:00
ReportAdminSlowRequests.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
ReportApiUsage.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
ReportLegacyApiCustomers.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
ResetMonthlyPressReleaseQuota.php R1.3: Quota-Reset als fester Bestandteil des Tarif-Modells festgeschrieben 2026-07-03 08:08:23 +00:00
RetireAgencyCompanyType.php companies:retire-agency-type: Firmen-Typ „Agentur" abschaffen 2026-07-08 09:33:39 +00:00
RunClassificationQueue.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
SeedLegacyApiTestdata.php docs: verschobene Doku-Pfade in Code-Kommentaren nachgezogen 2026-07-21 07:53:08 +00:00
SendGoLiveMails.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
SyncCompanyLogos.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
SyncPressReleaseImages.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
SyncStripePlans.php billing: Stripe-Belege auf Deutsch und sprechende Produktnamen 2026-07-15 15:25:07 +00:00
VerifyLegacyImport.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00