260 lines
8.7 KiB
HTML
260 lines
8.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
<title>WalkGuide — k6 Load Test Report</title>
|
|
<style>
|
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
body { font-family: 'Segoe UI', system-ui, sans-serif; background: #0f172a; color: #e2e8f0; padding: 24px; }
|
|
h1 { font-size: 2rem; color: #38bdf8; margin-bottom: 4px; }
|
|
h2 { font-size: 1.2rem; color: #7dd3fc; margin: 32px 0 12px; border-bottom: 1px solid #1e3a5f; padding-bottom: 6px; }
|
|
p { color: #94a3b8; margin-bottom: 8px; }
|
|
.header { margin-bottom: 32px; }
|
|
.header .meta { color: #64748b; font-size: 0.85rem; margin-top: 4px; }
|
|
|
|
/* Key Metrics Grid */
|
|
.key-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 16px; margin-bottom: 24px; }
|
|
.key-card { background: #1e293b; border-radius: 10px; padding: 18px; border: 1px solid #334155; }
|
|
.key-card .klabel { font-size: 0.75rem; color: #64748b; text-transform: uppercase; letter-spacing: 0.05em; }
|
|
.key-card .kvalue { font-size: 1.5rem; font-weight: 700; color: #f0f9ff; margin: 6px 0 2px; }
|
|
.key-card .kdesc { font-size: 0.72rem; color: #475569; }
|
|
|
|
/* WalkGuide Metric Cards */
|
|
.wg-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; }
|
|
.metric-card { background: #1e293b; border-radius: 8px; padding: 14px; border: 1px solid #1e3a5f; text-align: center; }
|
|
.metric-label { font-size: 0.85rem; color: #94a3b8; margin-bottom: 6px; }
|
|
.metric-p95 { font-size: 1.6rem; font-weight: 700; color: #38bdf8; }
|
|
.metric-sub { font-size: 0.7rem; color: #475569; margin-top: 2px; }
|
|
.metric-avg { font-size: 0.72rem; color: #64748b; margin-top: 4px; }
|
|
|
|
/* Tables */
|
|
table { width: 100%; border-collapse: collapse; margin-bottom: 24px; font-size: 0.88rem; }
|
|
th { background: #1e3a5f; color: #7dd3fc; text-align: left; padding: 10px 12px; }
|
|
td { padding: 9px 12px; border-bottom: 1px solid #1e293b; color: #cbd5e1; }
|
|
tr:nth-child(even) td { background: #0f1f35; }
|
|
code { background: #1e293b; padding: 2px 6px; border-radius: 4px; font-size: 0.82rem; color: #38bdf8; }
|
|
|
|
/* Badges */
|
|
.badge { padding: 3px 10px; border-radius: 12px; font-size: 0.78rem; font-weight: 600; }
|
|
.badge.pass { background: #064e3b; color: #34d399; }
|
|
.badge.fail { background: #450a0a; color: #f87171; }
|
|
.badge.skip { background: #1e293b; color: #94a3b8; }
|
|
|
|
footer { margin-top: 40px; text-align: center; color: #334155; font-size: 0.78rem; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="header">
|
|
<h1>🦺 WalkGuide — k6 Load Test Report</h1>
|
|
<p>Spring Boot Backend Performance Benchmark — Pillar 3</p>
|
|
<div class="meta">
|
|
Generated: 2026-05-17T12:31:29.810Z |
|
|
Input: location-local-20260517_193017.ndjson |
|
|
Total Data Points: 614
|
|
</div>
|
|
</div>
|
|
|
|
<h2>📊 Key Metrics (Pillar 3 — 5 Required)</h2>
|
|
<div class="key-grid">
|
|
<div class="key-card">
|
|
<div class="klabel">1. Throughput</div>
|
|
<div class="kvalue">0.4 req/s</div>
|
|
<div class="kdesc">Requests per second</div>
|
|
</div>
|
|
<div class="key-card">
|
|
<div class="klabel">2. p95 Latency</div>
|
|
<div class="kvalue">16998.63 ms</div>
|
|
<div class="kdesc">95th percentile response time</div>
|
|
</div>
|
|
<div class="key-card">
|
|
<div class="klabel">3. Error Rate</div>
|
|
<div class="kvalue">3.00%</div>
|
|
<div class="kdesc">Non-2xx responses | FAIL</div>
|
|
</div>
|
|
<div class="key-card">
|
|
<div class="klabel">4. DB Query Time</div>
|
|
<div class="kvalue">1590.79 ms</div>
|
|
<div class="kdesc">Estimated via write endpoint p95</div>
|
|
</div>
|
|
<div class="key-card">
|
|
<div class="klabel">5. JVM Heap</div>
|
|
<div class="kvalue">N/A</div>
|
|
<div class="kdesc">Spring Actuator jvm.memory.used</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>🏃 WalkGuide Endpoint Latency Breakdown</h2>
|
|
<div class="wg-grid">
|
|
<div class="metric-card">
|
|
<div class="metric-label">🔐 Auth</div>
|
|
<div class="metric-p95">20582.95 ms</div>
|
|
<div class="metric-sub">p95 | threshold < 800ms</div>
|
|
<div class="metric-avg">avg: 16372.34 ms | p99: 20582.95 ms</div>
|
|
</div>
|
|
|
|
<div class="metric-card">
|
|
<div class="metric-label">📍 Location</div>
|
|
<div class="metric-p95">1590.79 ms</div>
|
|
<div class="metric-sub">p95 | threshold < 300ms</div>
|
|
<div class="metric-avg">avg: 939.24 ms | p99: 1718.05 ms</div>
|
|
</div>
|
|
|
|
<div class="metric-card">
|
|
<div class="metric-label">🚧 Obstacle</div>
|
|
<div class="metric-p95">N/A</div>
|
|
<div class="metric-sub">p95 | threshold < 400ms</div>
|
|
<div class="metric-avg">avg: N/A | p99: N/A</div>
|
|
</div>
|
|
|
|
<div class="metric-card">
|
|
<div class="metric-label">🚨 SOS</div>
|
|
<div class="metric-p95">N/A</div>
|
|
<div class="metric-sub">p95 | threshold < 200ms</div>
|
|
<div class="metric-avg">avg: N/A | p99: N/A</div>
|
|
</div>
|
|
|
|
<div class="metric-card">
|
|
<div class="metric-label">📬 Notif</div>
|
|
<div class="metric-p95">N/A</div>
|
|
<div class="metric-sub">p95 | threshold < 500ms</div>
|
|
<div class="metric-avg">avg: N/A | p99: N/A</div>
|
|
</div>
|
|
|
|
<div class="metric-card">
|
|
<div class="metric-label">📊 Timeline</div>
|
|
<div class="metric-p95">N/A</div>
|
|
<div class="metric-sub">p95 | threshold < 1000ms</div>
|
|
<div class="metric-avg">avg: N/A | p99: N/A</div>
|
|
</div>
|
|
|
|
<div class="metric-card">
|
|
<div class="metric-label">🔗 Pairing</div>
|
|
<div class="metric-p95">N/A</div>
|
|
<div class="metric-sub">p95 | threshold < 600ms</div>
|
|
<div class="metric-avg">avg: N/A | p99: N/A</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>✅ Threshold Evaluation</h2>
|
|
<table>
|
|
<thead>
|
|
<tr><th>Check</th><th>Metric</th><th>Threshold</th><th>Actual</th><th>Result</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>p95 overall < 25000ms</td>
|
|
<td><code>http_req_duration</code></td>
|
|
<td>25000 ms</td>
|
|
<td>16998.63 ms</td>
|
|
<td><span class="badge pass">✅ PASS</span></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>error rate < 10%</td>
|
|
<td><code>http_req_failed</code></td>
|
|
<td>0.1 rate</td>
|
|
<td>0.03 rate</td>
|
|
<td><span class="badge pass">✅ PASS</span></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>SOS p95 < 3000ms</td>
|
|
<td><code>walkguide_sos_latency_ms</code></td>
|
|
<td>3000</td>
|
|
<td>N/A</td>
|
|
<td><span class="badge skip">SKIP</span></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Location p95 < 3000ms</td>
|
|
<td><code>walkguide_location_latency_ms</code></td>
|
|
<td>3000 ms</td>
|
|
<td>1590.79 ms</td>
|
|
<td><span class="badge pass">✅ PASS</span></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Obstacle p95 < 5000ms</td>
|
|
<td><code>walkguide_obstacle_latency_ms</code></td>
|
|
<td>5000</td>
|
|
<td>N/A</td>
|
|
<td><span class="badge skip">SKIP</span></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Auth p95 < 25000ms</td>
|
|
<td><code>walkguide_auth_latency_ms</code></td>
|
|
<td>25000 ms</td>
|
|
<td>20582.95 ms</td>
|
|
<td><span class="badge pass">✅ PASS</span></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Timeline p95 < 5000ms</td>
|
|
<td><code>walkguide_timeline_latency_ms</code></td>
|
|
<td>5000</td>
|
|
<td>N/A</td>
|
|
<td><span class="badge skip">SKIP</span></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Notification p95 < 5000ms</td>
|
|
<td><code>walkguide_notif_latency_ms</code></td>
|
|
<td>5000</td>
|
|
<td>N/A</td>
|
|
<td><span class="badge skip">SKIP</span></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h2>📋 Per-Endpoint Latency (ms)</h2>
|
|
<table>
|
|
<thead>
|
|
<tr><th>Endpoint</th><th>Requests</th><th>Avg</th><th>p95</th><th>p99</th><th>Max</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>ping</code></td>
|
|
<td>1</td>
|
|
<td>1.58</td>
|
|
<td>1.58</td>
|
|
<td>1.58</td>
|
|
<td>1.58</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>register</code></td>
|
|
<td>4</td>
|
|
<td>16372.34</td>
|
|
<td>20582.95</td>
|
|
<td>20582.95</td>
|
|
<td>20582.95</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>walkguide_start</code></td>
|
|
<td>3</td>
|
|
<td>1654.64</td>
|
|
<td>2245.66</td>
|
|
<td>2245.66</td>
|
|
<td>2245.66</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>location_update</code></td>
|
|
<td>21</td>
|
|
<td>939.24</td>
|
|
<td>1590.79</td>
|
|
<td>1718.05</td>
|
|
<td>1718.05</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<footer>
|
|
WalkGuide AI — Integrated Mobile Application Project Final Exam |
|
|
Generated by html-reporter.js
|
|
</footer>
|
|
</body>
|
|
</html> |