{
  "_comment": "WalkGuide Load Test — 50 VUs, 5 minutes. Normal production load simulation.",
  "_meta": {
    "min_vu_requirement": 50,
    "note": "Pillar 3 ketentuan: load test harus >= 50 concurrent users"
  },
  "scenarios": {
    "load_auth": {
      "executor": "ramping-vus",
      "startVUs": 0,
      "stages": [
        { "duration": "30s", "target": 10 },
        { "duration": "60s", "target": 20 },
        { "duration": "120s", "target": 20 },
        { "duration": "30s", "target": 0 }
      ],
      "gracefulRampDown": "15s"
    },
    "load_location": {
      "executor": "ramping-vus",
      "startVUs": 0,
      "stages": [
        { "duration": "30s", "target": 15 },
        { "duration": "120s", "target": 20 },
        { "duration": "30s", "target": 0 }
      ],
      "startTime": "10s",
      "gracefulRampDown": "15s"
    },
    "load_obstacle": {
      "executor": "constant-vus",
      "vus": 10,
      "duration": "180s",
      "startTime": "20s"
    }
  },
  "thresholds": {
    "http_req_duration": ["p(95)<500", "p(99)<1000"],
    "http_req_failed": ["rate<0.01"],
    "walkguide_error_rate": ["rate<0.01"],
    "walkguide_location_latency_ms": ["p(95)<300"],
    "walkguide_obstacle_latency_ms": ["p(95)<400"],
    "walkguide_sos_latency_ms": ["p(95)<200"],
    "walkguide_auth_latency_ms": ["p(95)<800"],
    "walkguide_timeline_latency_ms": ["p(95)<1000"]
  },
  "summaryTrendStats": ["min", "med", "avg", "p(90)", "p(95)", "p(99)", "max"],
  "summary_export": "k6-results/load-test-summary.json"
}
