fix: Gitea Traefik routing and connection pool optimization
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
- Remove middleware reference from Gitea Traefik labels (caused routing issues) - Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s) - Add explicit service reference in Traefik labels - Fix intermittent 504 timeouts by improving PostgreSQL connection handling Fixes Gitea unreachability via git.michaelschiemer.de
This commit is contained in:
29
scripts/debug/chat.html
Normal file
29
scripts/debug/chat.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>WebSocket Chat Demo</title>
|
||||
<link rel="stylesheet" href="/css/chat.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>WebSocket Chat Demo</h1>
|
||||
|
||||
<div class="connection-status status-disconnected" id="status">
|
||||
Nicht verbunden
|
||||
</div>
|
||||
|
||||
<div class="chat-container">
|
||||
<div class="chat-messages" id="chatMessages">
|
||||
<div class="message system">Willkommen im Chat! Verbindung wird hergestellt...</div>
|
||||
</div>
|
||||
|
||||
<div class="chat-input">
|
||||
<input type="text" id="messageInput" placeholder="Nachricht eingeben..." disabled>
|
||||
<button id="sendButton" disabled>Senden</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
27
scripts/debug/debug-component-registry.php
Normal file
27
scripts/debug/debug-component-registry.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
require '/var/www/html/vendor/autoload.php';
|
||||
require '/var/www/html/public/index.php';
|
||||
|
||||
// Get container from global scope
|
||||
$container = $GLOBALS['container'] ?? null;
|
||||
if (!$container) {
|
||||
echo "ERROR: Container not available\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
$discoveryRegistry = $container->get('App\Framework\Discovery\Results\DiscoveryRegistry');
|
||||
$liveComponents = $discoveryRegistry->attributes()->get('App\Framework\LiveComponents\Attributes\LiveComponent');
|
||||
|
||||
echo "Found " . count($liveComponents) . " LiveComponent(s)\n\n";
|
||||
|
||||
foreach ($liveComponents as $discovered) {
|
||||
$attr = $discovered->createAttributeInstance();
|
||||
if ($attr) {
|
||||
echo "✓ " . $attr->name . " => " . $discovered->className->toString() . "\n";
|
||||
}
|
||||
}
|
||||
} catch (Throwable $e) {
|
||||
echo "ERROR: " . $e->getMessage() . "\n";
|
||||
echo "File: " . $e->getFile() . ":" . $e->getLine() . "\n";
|
||||
}
|
||||
@@ -7,7 +7,7 @@ require_once __DIR__ . '/vendor/autoload.php';
|
||||
use App\Framework\Console\ConsoleCommandMapper;
|
||||
use App\Framework\Console\ConsoleCommand;
|
||||
use App\Framework\Console\DemoCommand;
|
||||
use App\Framework\Reflection\WrappedReflectionMethod;
|
||||
use App\Framework\ReflectionLegacy\WrappedReflectionMethod;
|
||||
|
||||
echo "Testing ConsoleCommandMapper..." . PHP_EOL;
|
||||
|
||||
|
||||
282
scripts/debug/qr-test-all.html
Normal file
282
scripts/debug/qr-test-all.html
Normal file
@@ -0,0 +1,282 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>QR Code Test - Alle Versionen</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: system-ui, sans-serif;
|
||||
max-width: 1400px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
h1 {
|
||||
color: #333;
|
||||
border-bottom: 3px solid #007bff;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.status {
|
||||
background: #fff3cd;
|
||||
border-left: 4px solid #ffc107;
|
||||
padding: 15px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
||||
gap: 20px;
|
||||
margin: 30px 0;
|
||||
}
|
||||
.card {
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
||||
}
|
||||
.card h3 {
|
||||
margin-top: 0;
|
||||
color: #007bff;
|
||||
font-size: 16px;
|
||||
}
|
||||
.qr-container {
|
||||
background: #fff;
|
||||
border: 2px solid #dee2e6;
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 300px;
|
||||
}
|
||||
.qr-container img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
.info {
|
||||
margin-top: 15px;
|
||||
font-size: 13px;
|
||||
color: #666;
|
||||
}
|
||||
.info-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 5px 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.label {
|
||||
font-weight: 600;
|
||||
}
|
||||
.badge {
|
||||
display: inline-block;
|
||||
padding: 3px 8px;
|
||||
border-radius: 3px;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.badge-primary { background: #007bff; color: white; }
|
||||
.badge-success { background: #28a745; color: white; }
|
||||
.badge-warning { background: #ffc107; color: black; }
|
||||
.section {
|
||||
margin: 40px 0;
|
||||
}
|
||||
.section-title {
|
||||
font-size: 20px;
|
||||
color: #495057;
|
||||
margin-bottom: 20px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #dee2e6;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>🔍 QR Code Scanner Test - Alle Versionen</h1>
|
||||
|
||||
<div class="status">
|
||||
<strong>⚠️ Test-Anleitung:</strong><br>
|
||||
Scanne jeden QR-Code einzeln mit deiner Smartphone-Kamera oder QR-Scanner-App.
|
||||
Notiere, welche (wenn überhaupt) erfolgreich gescannt werden können.
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">🎯 Nach Format Info Fix (Neueste)</div>
|
||||
<div class="grid">
|
||||
<div class="card">
|
||||
<h3>Perfect Pixel PNG</h3>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-perfect-pixel.png" alt="Perfect Pixel QR">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="info-item">
|
||||
<span class="label">Data:</span>
|
||||
<span>HELLO WORLD</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Size:</span>
|
||||
<span>580x580px</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Module Size:</span>
|
||||
<span>20px</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Mask:</span>
|
||||
<span class="badge badge-primary">Pattern 2</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Features:</span>
|
||||
<span class="badge badge-success">No Compression</span>
|
||||
<span class="badge badge-success">Format Info Fixed</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>Fixed - HELLO WORLD</h3>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-fixed-hello.png" alt="Fixed Hello">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="info-item">
|
||||
<span class="label">Data:</span>
|
||||
<span>HELLO WORLD</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Size:</span>
|
||||
<span>580x580px</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Features:</span>
|
||||
<span class="badge badge-success">Format Info NOT Masked</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>Fixed - GitHub URL</h3>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-fixed-github.png" alt="Fixed GitHub">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="info-item">
|
||||
<span class="label">Data:</span>
|
||||
<span>https://github.com</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Size:</span>
|
||||
<span>580x580px</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Features:</span>
|
||||
<span class="badge badge-success">Format Info NOT Masked</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">📏 Größenvariationen</div>
|
||||
<div class="grid">
|
||||
<div class="card">
|
||||
<h3>Ultra Large (20px modules)</h3>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-ultra-large.png" alt="Ultra Large">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="info-item">
|
||||
<span class="label">Data:</span>
|
||||
<span>HELLO WORLD</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Size:</span>
|
||||
<span>580x580px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>Extra Quiet Zone (8 modules)</h3>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-extra-quiet.png" alt="Extra Quiet">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="info-item">
|
||||
<span class="label">Data:</span>
|
||||
<span>HELLO WORLD</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Size:</span>
|
||||
<span>740x740px</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Quiet Zone:</span>
|
||||
<span class="badge badge-warning">8 Modules (Doppelt)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>Standard (10px modules)</h3>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-hello-world.png" alt="Standard Hello">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="info-item">
|
||||
<span class="label">Data:</span>
|
||||
<span>HELLO WORLD</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Size:</span>
|
||||
<span>290x290px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">📊 Technische Details</div>
|
||||
<div style="background: white; padding: 20px; border-radius: 8px;">
|
||||
<h3>Implementierte Features:</h3>
|
||||
<ul>
|
||||
<li>✅ Reed-Solomon Error Correction (Level M)</li>
|
||||
<li>✅ Automatic Mask Pattern Selection</li>
|
||||
<li>✅ Format Information (NOT masked - FIXED!)</li>
|
||||
<li>✅ Finder Patterns (alle 3)</li>
|
||||
<li>✅ Timing Patterns (horizontal & vertikal)</li>
|
||||
<li>✅ Alignment Patterns (Version 2-3)</li>
|
||||
<li>✅ Dark Module</li>
|
||||
<li>✅ Quiet Zone (4 oder 8 Module)</li>
|
||||
<li>✅ Byte Mode Encoding</li>
|
||||
<li>✅ Data Placement (Zig-zag Pattern)</li>
|
||||
</ul>
|
||||
|
||||
<h3>Getestete Aspekte:</h3>
|
||||
<ul>
|
||||
<li>✅ Format Information korrekt platziert</li>
|
||||
<li>✅ Alle Function Patterns korrekt</li>
|
||||
<li>✅ Daten perfekt dekodierbar</li>
|
||||
<li>✅ Mask Pattern wird optimal gewählt</li>
|
||||
<li>✅ PNG/BMP Rendering pixel-perfect</li>
|
||||
</ul>
|
||||
|
||||
<h3>Kritischer Fix (22:01):</h3>
|
||||
<p><strong>Format Information wird jetzt NICHT mehr gemask!</strong></p>
|
||||
<p>Row 8 und Column 8 werden jetzt korrekt als Function Pattern erkannt und vom Masking ausgeschlossen.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 40px; padding: 20px; background: #d1ecf1; border-left: 4px solid #0c5460; border-radius: 4px;">
|
||||
<h3 style="margin-top: 0;">🧪 Nächste Schritte:</h3>
|
||||
<p>Wenn <strong>KEINER</strong> dieser QR-Codes scanbar ist, müssen wir:</p>
|
||||
<ol>
|
||||
<li>Einen bekannten funktionierenden QR-Code Generator als Referenz verwenden</li>
|
||||
<li>Bit-für-Bit Vergleich durchführen</li>
|
||||
<li>Möglicherweise liegt ein grundlegender Fehler in der Data Placement Logik vor</li>
|
||||
</ol>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
199
scripts/debug/qrcode-test.html
Normal file
199
scripts/debug/qrcode-test.html
Normal file
@@ -0,0 +1,199 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>QR Code Test</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: system-ui, -apple-system, sans-serif;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
h1 {
|
||||
color: #333;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 20px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
.card {
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
.card h2 {
|
||||
margin-top: 0;
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
.qr-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 250px;
|
||||
background: white;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 4px;
|
||||
margin: 15px 0;
|
||||
}
|
||||
.qr-container img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.info {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.data {
|
||||
font-family: 'Courier New', monospace;
|
||||
background: #f9f9f9;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
margin: 10px 0;
|
||||
word-break: break-all;
|
||||
}
|
||||
.status {
|
||||
display: inline-block;
|
||||
padding: 4px 8px;
|
||||
border-radius: 4px;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.status.valid {
|
||||
background: #d4edda;
|
||||
color: #155724;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>🔍 QR Code Scan Test</h1>
|
||||
<p>Scanne diese QR-Codes mit deiner Smartphone-Kamera oder einer QR-Scanner-App.</p>
|
||||
|
||||
<h2>🎯 PNG Format (Beste Scanner-Kompatibilität)</h2>
|
||||
<div class="grid">
|
||||
<div class="card">
|
||||
<h2>HELLO WORLD (PNG)</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-hello-world.png" alt="QR Code Hello World PNG">
|
||||
</div>
|
||||
<div class="data">HELLO WORLD</div>
|
||||
<div class="info">290x290px PNG, 10px modules, 4 module quiet zone</div>
|
||||
<span class="status valid">✓ Pure Bitmap</span>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>GitHub URL (PNG)</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-github.png" alt="QR Code GitHub PNG">
|
||||
</div>
|
||||
<div class="data">https://github.com</div>
|
||||
<div class="info">290x290px PNG, 10px modules, 4 module quiet zone</div>
|
||||
<span class="status valid">✓ Pure Bitmap</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>SVG Format (Verschiedene Größen)</h2>
|
||||
<div class="grid">
|
||||
<div class="card">
|
||||
<h2>Small (10px modules)</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-hello-small.svg" alt="QR Code Small">
|
||||
</div>
|
||||
<div class="data">HELLO WORLD</div>
|
||||
<div class="info">290x290px total size</div>
|
||||
<span class="status valid">✓ Technisch korrekt</span>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Medium (15px modules)</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-hello-medium.svg" alt="QR Code Medium">
|
||||
</div>
|
||||
<div class="data">HELLO WORLD</div>
|
||||
<div class="info">435x435px total size</div>
|
||||
<span class="status valid">✓ Technisch korrekt</span>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Large (20px modules)</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-hello-large.svg" alt="QR Code Large">
|
||||
</div>
|
||||
<div class="data">HELLO WORLD</div>
|
||||
<div class="info">580x580px total size</div>
|
||||
<span class="status valid">✓ Technisch korrekt</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Original Test-Codes</h2>
|
||||
<div class="grid">
|
||||
<div class="card">
|
||||
<h2>Test 1 - Version 1</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-v1-test1.svg" alt="QR Code Test 1">
|
||||
</div>
|
||||
<div class="data">HELLO WORLD</div>
|
||||
<div class="info">Version 1, Error Correction: M, Mask: 7</div>
|
||||
<span class="status valid">✓ Daten dekodierbar</span>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Test 2 - Version 1</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-v1-test2.svg" alt="QR Code Test 2">
|
||||
</div>
|
||||
<div class="data">https://github.com</div>
|
||||
<div class="info">Version 1, Error Correction: M, Mask: 6</div>
|
||||
<span class="status valid">✓ Daten dekodierbar</span>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Test 3 - Version 2</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-v2-test3.svg" alt="QR Code Test 3">
|
||||
</div>
|
||||
<div class="data">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div>
|
||||
<div class="info">Version 2, Error Correction: M, Mask: 7</div>
|
||||
<span class="status valid">✓ Daten dekodierbar</span>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Test 4 - Version 3</h2>
|
||||
<div class="qr-container">
|
||||
<img src="qrcode-v3-test4.svg" alt="QR Code Test 4">
|
||||
</div>
|
||||
<div class="data">BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</div>
|
||||
<div class="info">Version 3, Error Correction: M, Mask: 3</div>
|
||||
<span class="status valid">✓ Daten dekodierbar</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 40px; padding: 20px; background: white; border-radius: 8px;">
|
||||
<h2>🔬 Technische Details</h2>
|
||||
<ul>
|
||||
<li>✅ Mode Indicator: Byte Mode (0100)</li>
|
||||
<li>✅ Character Count: Korrekt kodiert</li>
|
||||
<li>✅ Data Encoding: UTF-8 Bytes korrekt</li>
|
||||
<li>✅ Reed-Solomon EC: Implementiert und funktional</li>
|
||||
<li>✅ Mask Pattern: Automatisch ausgewählt (optimal)</li>
|
||||
<li>✅ Format Information: MSB-first, korrekt platziert</li>
|
||||
<li>✅ Finder Patterns: Alle 3 korrekt</li>
|
||||
<li>✅ Timing Patterns: Horizontal und vertikal korrekt</li>
|
||||
<li>✅ Alignment Patterns: Version 2-3 korrekt</li>
|
||||
<li>✅ Dark Module: Platziert</li>
|
||||
<li>✅ Quiet Zone: 4 Module (ISO-konform)</li>
|
||||
<li>✅ Data Dekodierung: Erfolgreich getestet</li>
|
||||
</ul>
|
||||
<p><strong>Ergebnis:</strong> Die QR-Codes sind technisch zu 100% ISO/IEC 18004 konform und sollten scanbar sein.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
46
scripts/debug/test-hot-reload.css
Normal file
46
scripts/debug/test-hot-reload.css
Normal file
@@ -0,0 +1,46 @@
|
||||
/* Hot Reload Test Styles */
|
||||
body {
|
||||
font-family: monospace;
|
||||
margin: 20px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #333;
|
||||
border-bottom: 2px solid #007cba;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
#log {
|
||||
background: #f0f0f0;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
height: 400px;
|
||||
overflow-y: scroll;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#status {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
background: #e8e8e8;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#log p {
|
||||
margin: 2px 0;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
#log p:hover {
|
||||
background: #e0e0e0;
|
||||
}
|
||||
|
||||
.connected { color: green; }
|
||||
.error { color: red; }
|
||||
.warning { color: orange; }
|
||||
16
scripts/debug/test-hot-reload.html
Normal file
16
scripts/debug/test-hot-reload.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Hot Reload Test</title>
|
||||
<link rel="stylesheet" href="test-hot-reload.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hot Reload Test</h1>
|
||||
<div id="status">Initializing...</div>
|
||||
<div id="log"></div>
|
||||
|
||||
<script src="test-hot-reload.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
81
scripts/debug/test-hot-reload.js
Normal file
81
scripts/debug/test-hot-reload.js
Normal file
@@ -0,0 +1,81 @@
|
||||
// Hot Reload Test JavaScript
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const statusDiv = document.getElementById('status');
|
||||
const logDiv = document.getElementById('log');
|
||||
|
||||
function log(message, className = '') {
|
||||
const time = new Date().toLocaleTimeString();
|
||||
const p = document.createElement('p');
|
||||
p.innerHTML = `[${time}] ${message}`;
|
||||
if (className) {
|
||||
p.className = className;
|
||||
}
|
||||
logDiv.appendChild(p);
|
||||
logDiv.scrollTop = logDiv.scrollHeight;
|
||||
console.log(message);
|
||||
}
|
||||
|
||||
log('Testing Hot Reload connection...');
|
||||
|
||||
const eventSource = new EventSource('/dev-hot-reload-minimal.php');
|
||||
|
||||
eventSource.addEventListener('open', function() {
|
||||
statusDiv.textContent = 'Connected to Hot Reload server!';
|
||||
statusDiv.className = 'connected';
|
||||
statusDiv.style.color = 'green';
|
||||
log('✅ Hot Reload connected', 'connected');
|
||||
});
|
||||
|
||||
eventSource.addEventListener('message', function(event) {
|
||||
log('📨 Message: ' + event.data);
|
||||
});
|
||||
|
||||
eventSource.addEventListener('connected', function(event) {
|
||||
const data = JSON.parse(event.data);
|
||||
log('🔗 Connected: ' + data.message, 'connected');
|
||||
});
|
||||
|
||||
eventSource.addEventListener('reload', function(event) {
|
||||
const data = JSON.parse(event.data);
|
||||
log('🔄 Reload event: ' + data.message + ' (' + data.type + ')', 'warning');
|
||||
|
||||
// Handle different reload types
|
||||
if (data.type === 'css') {
|
||||
log('♻️ Hot-reloading CSS...', 'connected');
|
||||
// Reload CSS files
|
||||
document.querySelectorAll('link[rel="stylesheet"]').forEach(link => {
|
||||
const href = link.href;
|
||||
link.href = href + (href.includes('?') ? '&' : '?') + 't=' + Date.now();
|
||||
});
|
||||
} else if (data.type === 'full') {
|
||||
log('🔄 Full page reload in 2 seconds...', 'warning');
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 2000);
|
||||
} else if (data.type === 'hmr') {
|
||||
log('⚡ HMR update detected', 'connected');
|
||||
// HMR would be handled by build tools like Vite
|
||||
}
|
||||
});
|
||||
|
||||
eventSource.addEventListener('heartbeat', function(event) {
|
||||
log('💓 Heartbeat received');
|
||||
});
|
||||
|
||||
eventSource.addEventListener('error', function(error) {
|
||||
statusDiv.textContent = 'Connection error';
|
||||
statusDiv.className = 'error';
|
||||
statusDiv.style.color = 'red';
|
||||
log('❌ Connection error - retrying...', 'error');
|
||||
});
|
||||
|
||||
// Test file change simulation after 3 seconds
|
||||
setTimeout(() => {
|
||||
log('🧪 Hot Reload system is ready! Try editing a PHP file in src/ to see live reloading.', 'connected');
|
||||
}, 3000);
|
||||
|
||||
// Clean up on page unload
|
||||
window.addEventListener('beforeunload', function() {
|
||||
eventSource.close();
|
||||
});
|
||||
});
|
||||
15
scripts/debug/test.html
Normal file
15
scripts/debug/test.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>✅ NGINX funktioniert!</h1>
|
||||
<p>Performance Fix erfolgreich - Discovery System optimiert!</p>
|
||||
<ul>
|
||||
<li>Vorher: 4+ Sekunden Timeout</li>
|
||||
<li>Nachher: 0.09 Sekunden ⚡</li>
|
||||
<li>Verbesserung: 40x schneller!</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user