{
  "ok": true,
  "services": [
    {
      "id": "dudaoyue",
      "name": "Dudaoyue / 独阅读",
      "type": "builtin",
      "routePrefix": "/dudaoyue",
      "stripPrefix": false,
      "target": "builtin:dudaoyue",
      "healthPath": "/dudaoyue/health",
      "endpoints": [
        "GET /dudaoyue/health",
        "GET /dudaoyue/login/guest",
        "POST /dudaoyue/login/guest",
        "GET /dudaoyue/auth/check",
        "POST /dudaoyue/auth/check",
        "GET /dudaoyue/search?keyword=...&page=0",
        "POST /dudaoyue/search",
        "GET /dudaoyue/detail?bookId=...",
        "POST /dudaoyue/detail",
        "GET /dudaoyue/catalog?bookId=...",
        "POST /dudaoyue/catalog",
        "GET /dudaoyue/content?chapterId=...",
        "POST /dudaoyue/content"
      ],
      "autoStart": false,
      "startOnRequest": false,
      "status": "ready",
      "pid": null,
      "startedByRouter": false,
      "lastStartedAt": null,
      "lastStoppedAt": null,
      "lastExitCode": null,
      "lastExitSignal": null,
      "lastError": null,
      "health": {
        "healthy": true,
        "statusCode": 200,
        "durationMs": 0
      }
    },
    {
      "id": "hbooker",
      "name": "HBooker / 刺猬猫",
      "type": "builtin",
      "routePrefix": "/hbooker",
      "stripPrefix": false,
      "target": "builtin:hbooker",
      "healthPath": "/hbooker/health",
      "configFile": "hbooker.config.local.json",
      "endpoints": [
        "GET /hbooker/health",
        "POST /hbooker/login/guest",
        "GET /hbooker/search?keyword=...",
        "POST /hbooker/search",
        "GET /hbooker/detail?bookId=...",
        "POST /hbooker/detail",
        "GET /hbooker/catalog?bookId=...",
        "GET /hbooker/content?chapterId=...",
        "POST /hbooker/raw"
      ],
      "autoStart": false,
      "startOnRequest": false,
      "status": "ready",
      "pid": null,
      "startedByRouter": false,
      "lastStartedAt": null,
      "lastStoppedAt": null,
      "lastExitCode": null,
      "lastExitSignal": null,
      "lastError": null,
      "health": {
        "healthy": true,
        "statusCode": 200,
        "durationMs": 0
      }
    },
    {
      "id": "qidian",
      "name": "Qidian v2",
      "type": "builtin",
      "routePrefix": "/qidian",
      "stripPrefix": false,
      "target": "builtin:qidian",
      "healthPath": "/qidian/v2/health",
      "endpoints": [
        "GET /qidian/v2/health",
        "GET /qidian/v2/search?keyword=...&page=1&pageSize=20",
        "GET /qidian/v2/detail?bookId=...",
        "GET /qidian/v2/chapter/content?url=...",
        "GET /qidian/v2/chapter/content?bookId=...&chapterId=...",
        "GET /qidian/v2/chapter/content?bookId=...&chapterId=...&format=text"
      ],
      "autoStart": false,
      "startOnRequest": false,
      "status": "ready",
      "pid": null,
      "startedByRouter": false,
      "lastStartedAt": null,
      "lastStoppedAt": null,
      "lastExitCode": null,
      "lastExitSignal": null,
      "lastError": null,
      "health": {
        "healthy": true,
        "statusCode": 200,
        "durationMs": 0
      }
    },
    {
      "id": "fanqie",
      "name": "Fanqie / 番茄小说",
      "type": "builtin",
      "routePrefix": "/fanqie",
      "stripPrefix": false,
      "target": "builtin:fanqie",
      "healthPath": "/fanqie/health",
      "endpoints": [
        "GET /fanqie/health",
        "GET /fanqie/search?keyword=...&page=1"
      ],
      "autoStart": false,
      "startOnRequest": false,
      "status": "ready",
      "pid": null,
      "startedByRouter": false,
      "lastStartedAt": null,
      "lastStoppedAt": null,
      "lastExitCode": null,
      "lastExitSignal": null,
      "lastError": null,
      "health": {
        "healthy": true,
        "statusCode": 200,
        "durationMs": 0
      }
    }
  ],
  "stats": {
    "startedAt": "2026-06-18T19:04:00.396Z",
    "uptimeSeconds": 409775,
    "totalRequests": 962,
    "serviceRequests": 962,
    "uniqueIps": 71,
    "todayRequests": 0,
    "recentMinuteRequests": 0,
    "recentFiveMinuteRequests": 0,
    "methods": {
      "GET": 940,
      "POST": 22
    },
    "services": {
      "fanqie": {
        "requests": 15,
        "uniqueIps": 2
      },
      "hbooker": {
        "requests": 454,
        "uniqueIps": 68
      },
      "qidian": {
        "requests": 493,
        "uniqueIps": 3
      }
    },
    "topEndpoints": [
      {
        "serviceId": "qidian",
        "method": "GET",
        "path": "/qidian/v2/chapter/content",
        "requests": 493,
        "uniqueIps": 3
      },
      {
        "serviceId": "hbooker",
        "method": "GET",
        "path": "/hbooker/search",
        "requests": 305,
        "uniqueIps": 68
      },
      {
        "serviceId": "hbooker",
        "method": "GET",
        "path": "/hbooker/content",
        "requests": 109,
        "uniqueIps": 1
      },
      {
        "serviceId": "fanqie",
        "method": "GET",
        "path": "/fanqie/search",
        "requests": 15,
        "uniqueIps": 2
      },
      {
        "serviceId": "hbooker",
        "method": "POST",
        "path": "/hbooker/search",
        "requests": 11,
        "uniqueIps": 1
      },
      {
        "serviceId": "hbooker",
        "method": "GET",
        "path": "/hbooker/catalog",
        "requests": 9,
        "uniqueIps": 1
      },
      {
        "serviceId": "hbooker",
        "method": "GET",
        "path": "/hbooker/auth/check",
        "requests": 5,
        "uniqueIps": 1
      },
      {
        "serviceId": "hbooker",
        "method": "POST",
        "path": "/hbooker/login/guest",
        "requests": 4,
        "uniqueIps": 2
      },
      {
        "serviceId": "hbooker",
        "method": "POST",
        "path": "/hbooker/auth/check",
        "requests": 4,
        "uniqueIps": 1
      },
      {
        "serviceId": "hbooker",
        "method": "GET",
        "path": "/hbooker/detail",
        "requests": 4,
        "uniqueIps": 1
      }
    ],
    "storage": {
      "type": "json",
      "file": "/app/stats.json",
      "error": null
    }
  }
}
