presseportale/tests/Feature/Web
Kevin Adametz d14cb84107 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
..
BoostPlacementTest.php Boost-Slot-Grenzen (5/3) + Kategorie-Boost zum halben Satz 2026-07-13 12:28:03 +00:00
Businessportal24HomeTest.php Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n 2026-07-09 15:38:11 +00:00
CanonicalMetaTest.php Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing 2026-06-16 16:39:28 +00:00
CategoryNavigationCacheTest.php performance: Caching, deferred Tracking & externe Timeouts (H7, M12, M13) 2026-07-14 13:49:47 +00:00
CategoryNavigationTest.php Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing 2026-06-16 16:39:28 +00:00
CategoryPageTest.php Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing 2026-06-16 16:39:28 +00:00
ContactFormTest.php security: Stored-XSS über page_url im Kontaktformular schließen (H3) 2026-07-14 13:49:05 +00:00
DevExampleRoutesTest.php R0.1: tote Dev-Varianten-Routen entfernt (fehlende Views -> 500 auf BP24) 2026-07-03 07:50:37 +00:00
EditionRoutingTest.php Spoke-Frontend-Audit: Fake-Inhalte raus, Newsletter-Rueckbau, echte Boersendaten, EN-Lokalisierung 2026-07-06 13:36:23 +00:00
HomeEditorialClockTest.php Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing 2026-06-16 16:39:28 +00:00
HubStaticPageShellTest.php Datenschutzerklaerung v0.3 eingebaut, Cookie-Seite zurueckgebaut 2026-07-03 16:17:59 +00:00
LegacyMediaRedirectTest.php QA-Luecke geschlossen: Legacy-Medien-URLs redirecten wieder (301) 2026-07-06 10:12:35 +00:00
LegacyRedirectTest.php R3.2: Kontakt-/Ueber-uns-Routen zurueckgebaut, Spoke-Footer bereinigt 2026-07-03 15:36:13 +00:00
MarketDataTest.php performance: Caching, deferred Tracking & externe Timeouts (H7, M12, M13) 2026-07-14 13:49:47 +00:00
NavigationLinksTest.php Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n 2026-07-09 15:38:11 +00:00
NewsroomPageTest.php admin: Newsletter mit Abmelde-Liste, Follow-up-Filtern und gedrosseltem Versand 2026-07-22 12:38:47 +00:00
PageDataCacheTest.php web: Startseiten-Feed cachen + Index gegen Filesort der Feed-Query 2026-07-20 14:53:09 +00:00
PreisePageTest.php web: Preise-Seite zeigt unter Weitere Leistungen nur noch Depublizieren 2026-07-16 11:34:22 +00:00
PresseechoHomeTest.php Werbeplaetze reaktiviert: Eigenwerbe-Slots oeffnen das Kontakt-Widget 2026-07-10 16:53:02 +00:00
PressekontoHubHomeTest.php Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n 2026-07-09 15:38:11 +00:00
PressReleaseCardHelpersTest.php R4.3: Karten-Metadaten-Logik als PressRelease-Praesentations-Helper 2026-07-10 11:57:26 +00:00
PressReleaseTrackingTest.php technik: Aufrufe über ein Ereignis-Log zählen statt im Request 2026-09-01 11:05:28 +00:00
PricingTeaserTest.php Editorial-Frontend: oeffentliche Unterseiten, Preise & Linkpflege 2026-06-17 16:08:46 +00:00
PublishedReleaseScopeTest.php Optimierung 4.2: Published-Release-Query ueber PressRelease-Scopes zentralisiert 2026-06-19 11:35:55 +00:00
ReleaseDetailTest.php technik: Aufrufe über ein Ereignis-Log zählen statt im Request 2026-09-01 11:05:28 +00:00
ReportFormTest.php auth/mail: Magic-Link-2FA (M1) + Mailversand über die Queue 2026-07-14 13:49:21 +00:00
SearchPageTest.php Suche: Volltext-Index + Fix fuer doppelte Alpine-Instanz 2026-07-07 13:03:14 +00:00
SitemapRobotsTest.php Web (R3.2): Marketing-Platzhalterseiten zurueckgebaut 2026-07-03 13:22:50 +00:00
StaticPagesTest.php Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n 2026-07-09 15:38:11 +00:00
StructuredDataTest.php web: Strukturierte Daten (JSON-LD) und SEO-Metas fürs öffentliche Frontend 2026-07-16 10:27:45 +00:00
TerminationRequestTest.php auth/mail: Magic-Link-2FA (M1) + Mailversand über die Queue 2026-07-14 13:49:21 +00:00
UmamiSnippetTest.php Umami-Webanalyse eingebaut, bis zum Go-Live deaktiviert 2026-07-06 08:56:14 +00:00
VeroeffentlichenPageTest.php Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing 2026-06-16 16:39:28 +00:00
WithdrawalRequestTest.php auth/mail: Magic-Link-2FA (M1) + Mailversand über die Queue 2026-07-14 13:49:21 +00:00
WwwRedirectTest.php web: www-Hosts leiten kanonisch per 301 auf die Apex-Domain 2026-07-20 15:47:13 +00:00