Files
shiroko-monitor/public/status.json
T
tamakyi 752fad412b feat: v0.12.0 —— 表格每行绝对等高 + 管理 WebUI(2FA 绑定才能进入)
① 每行绝对等高
- 行高与内容长度彻底解耦:新增 --row-h: 72px 作为唯一基准
- 名称列改为「文本区限两行 + 徽标区固定单行」两段式;文本区用 .clamp2
- 关键点:必须用 height 而非 max-height —— 后者会让短内容缩成一行、
  长内容撑到两行,反而产生 66px/71px 两种行高(实测踩过)
- 分组标题行用 :not(.group-row) 排除在数据行规则之外
- 事件表与监控表格共用同一个 --row-h,两张表视觉上也严格对齐
- 完整值仍可通过悬停 title 查看(已加断言强制所有截断单元格带 title)
- 卡片视图同样等高(13 视口 × 250px 全一致)

② 管理 WebUI + 2FA
- 新增 /admin 与 /api/admin/*;未绑定 2FA 时除绑定流程外一律 403
- 零依赖实现 TOTP(RFC 6238),用 RFC 4226/6238 官方测试向量验证(16 个向量)
- 内置 QR 码生成器(byte 模式 / ECC L / 版本 1-10,GF(256) RS 纠错 + 掩码评分),
  用独立解码器实测:版本 1 与版本 6 均能读出逐字节一致的内容
- 绑定流程:口令 → 生成密钥(扫码/手输/otpauth 链接)→ 验证 6 位码 → 10 枚恢复码;
  完成后凭本次验证码直接换取会话
- 安全:会话 id 32 字节随机数且服务端只存哈希;HttpOnly+SameSite=Strict;
  30 分钟空闲/2 小时最长;同时间步的码防重放;恢复码一次性;
  登录失败按 IP 指数退避锁定;不解析 X-Forwarded-For
- 管理功能:运行状态、探测范围、展示口径、维护窗口增删、立即重探、通知自检、
  目标只读列表、最近事件
- 所有写操作只落 local.monitors.json(私有不入库),绝不改 public/monitors.json

过程中修掉三个真 bug:
1. 会话 cookie 的 Path=/admin 覆盖不到 /api/admin/*,登录 200 但后续全部 401
2. 恢复码登录被 verifyTotp 的 invalid-format 提前挡掉(恢复码非 6 位数字)
3. 超大请求体用 req.destroy() 硬断连接,客户端只看到 fetch failed 拿不到状态码

测试:新增 scripts/verify-admin.cjs(102 项),全项目共 7 套 274 项全部通过
2026-10-14 12:37:07 +08:00

1209 lines
25 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"prober": "shiroko-monitor-node/0.12.0",
"demo": false,
"generatedAt": "2026-10-14T04:36:38.881Z",
"dataUpdatedAt": "2026-10-14T04:36:26.361Z",
"updateIntervalSec": 300,
"dataFilter": "uptimerobot",
"probeScope": "all",
"stats": {
"total": 6,
"up": 5,
"down": 1,
"pending": 0,
"avgLatency": 755,
"avgUptime90": 83.3,
"memory": {
"rssMB": 80.2,
"heapUsedMB": 10.8,
"heapTotalMB": 15
}
},
"sources": {
"uptimerobot": {
"enabled": true,
"ok": true,
"error": null,
"lastSyncAt": "2026-10-14T04:33:06.976Z",
"count": 6,
"syncing": false,
"lastSyncMs": 1791952385563
}
},
"notify": {
"enabled": false,
"channels": [],
"quietHours": null,
"failureThreshold": 2,
"lastResult": {
"at": "2026-10-14T02:19:42.390Z",
"suppressed": false,
"skipped": "notify-disabled",
"results": []
}
},
"events": [
{
"t": "2026-10-14T02:11:47.171Z",
"id": "ur-796219015",
"name": "狼的评论系统",
"type": "down",
"detail": "UptimeRobot:403 Forbidden",
"maintenance": false
}
],
"monitors": {
"ur-792059439": {
"status": "up",
"latency": 99,
"code": null,
"detail": "UptimeRobot:运行正常",
"lastCheck": "2026-10-14T04:33:00.000Z",
"history": [
{
"t": "2026-10-13T05:15:00.000Z",
"ok": true,
"ms": 353
},
{
"t": "2026-10-13T05:55:00.000Z",
"ok": true,
"ms": 294
},
{
"t": "2026-10-13T06:35:00.000Z",
"ok": true,
"ms": 238
},
{
"t": "2026-10-13T07:15:00.000Z",
"ok": true,
"ms": 259
},
{
"t": "2026-10-13T07:55:00.000Z",
"ok": true,
"ms": 227
},
{
"t": "2026-10-13T08:35:00.000Z",
"ok": true,
"ms": 434
},
{
"t": "2026-10-13T09:15:00.000Z",
"ok": true,
"ms": 333
},
{
"t": "2026-10-13T09:55:00.000Z",
"ok": true,
"ms": 427
},
{
"t": "2026-10-13T10:35:00.000Z",
"ok": true,
"ms": 233
},
{
"t": "2026-10-13T11:15:00.000Z",
"ok": true,
"ms": 388
},
{
"t": "2026-10-13T11:55:00.000Z",
"ok": true,
"ms": 329
},
{
"t": "2026-10-13T12:35:00.000Z",
"ok": true,
"ms": 422
},
{
"t": "2026-10-13T13:15:00.000Z",
"ok": true,
"ms": 271
},
{
"t": "2026-10-13T13:55:00.000Z",
"ok": true,
"ms": 307
},
{
"t": "2026-10-13T14:35:00.000Z",
"ok": true,
"ms": 417
},
{
"t": "2026-10-13T15:15:00.000Z",
"ok": true,
"ms": 283
},
{
"t": "2026-10-13T15:55:00.000Z",
"ok": true,
"ms": 308
},
{
"t": "2026-10-13T16:35:00.000Z",
"ok": true,
"ms": 279
},
{
"t": "2026-10-13T17:15:00.000Z",
"ok": true,
"ms": 239
},
{
"t": "2026-10-13T17:55:00.000Z",
"ok": true,
"ms": 299
},
{
"t": "2026-10-13T18:35:00.000Z",
"ok": true,
"ms": 240
},
{
"t": "2026-10-13T19:15:00.000Z",
"ok": true,
"ms": 526
},
{
"t": "2026-10-13T19:55:00.000Z",
"ok": true,
"ms": 367
},
{
"t": "2026-10-13T20:35:00.000Z",
"ok": true,
"ms": 369
},
{
"t": "2026-10-13T21:15:00.000Z",
"ok": true,
"ms": 281
},
{
"t": "2026-10-13T21:55:00.000Z",
"ok": true,
"ms": 321
},
{
"t": "2026-10-13T22:35:00.000Z",
"ok": true,
"ms": 150
},
{
"t": "2026-10-13T23:15:00.000Z",
"ok": true,
"ms": 298
},
{
"t": "2026-10-13T23:55:00.000Z",
"ok": true,
"ms": 305
},
{
"t": "2026-10-14T00:35:00.000Z",
"ok": true,
"ms": 208
},
{
"t": "2026-10-14T01:15:00.000Z",
"ok": true,
"ms": 421
},
{
"t": "2026-10-14T02:00:00.000Z",
"ok": true,
"ms": 191
},
{
"t": "2026-10-14T02:40:00.000Z",
"ok": true,
"ms": 187
},
{
"t": "2026-10-14T03:20:00.000Z",
"ok": true,
"ms": 282
},
{
"t": "2026-10-14T03:57:00.000Z",
"ok": true,
"ms": 321
},
{
"t": "2026-10-14T04:33:00.000Z",
"ok": true,
"ms": 99
}
],
"daily": {
"2026-10-14": {
"total": 4,
"up": 4,
"latSum": 690,
"latCount": 4,
"latMax": 197
}
},
"meta": {
"name": "狼的公告板",
"group": "UptimeRobot",
"type": "ur",
"url": "https://blog.tama.guru",
"source": "uptimerobot",
"sourceLabel": "HTTP",
"interval": 300
},
"uptimeRatios": {
"1": 100,
"7": 100,
"30": 100,
"90": 100
},
"downSeconds": {
"1": 0,
"7": 0,
"30": 0,
"90": 0
},
"lat": {
"avg": 173,
"max": 197,
"days": [
{
"key": "2026-10-14",
"avg": 173
}
]
}
},
"ur-795497022": {
"status": "up",
"latency": 619,
"code": null,
"detail": "UptimeRobot:运行正常",
"lastCheck": "2026-10-14T04:32:00.000Z",
"history": [
{
"t": "2026-10-13T05:35:00.000Z",
"ok": true,
"ms": 784
},
{
"t": "2026-10-13T06:15:00.000Z",
"ok": true,
"ms": 679
},
{
"t": "2026-10-13T06:55:00.000Z",
"ok": true,
"ms": 640
},
{
"t": "2026-10-13T07:35:00.000Z",
"ok": true,
"ms": 696
},
{
"t": "2026-10-13T08:15:00.000Z",
"ok": true,
"ms": 718
},
{
"t": "2026-10-13T08:55:00.000Z",
"ok": true,
"ms": 939
},
{
"t": "2026-10-13T09:35:00.000Z",
"ok": true,
"ms": 663
},
{
"t": "2026-10-13T10:15:00.000Z",
"ok": true,
"ms": 837
},
{
"t": "2026-10-13T10:55:00.000Z",
"ok": true,
"ms": 723
},
{
"t": "2026-10-13T11:35:00.000Z",
"ok": true,
"ms": 688
},
{
"t": "2026-10-13T12:15:00.000Z",
"ok": true,
"ms": 824
},
{
"t": "2026-10-13T12:55:00.000Z",
"ok": true,
"ms": 799
},
{
"t": "2026-10-13T13:35:00.000Z",
"ok": true,
"ms": 943
},
{
"t": "2026-10-13T14:20:00.000Z",
"ok": true,
"ms": 808
},
{
"t": "2026-10-13T15:00:00.000Z",
"ok": true,
"ms": 842
},
{
"t": "2026-10-13T15:40:00.000Z",
"ok": true,
"ms": 918
},
{
"t": "2026-10-13T16:20:00.000Z",
"ok": true,
"ms": 646
},
{
"t": "2026-10-13T17:00:00.000Z",
"ok": true,
"ms": 722
},
{
"t": "2026-10-13T17:40:00.000Z",
"ok": true,
"ms": 749
},
{
"t": "2026-10-13T18:20:00.000Z",
"ok": true,
"ms": 750
},
{
"t": "2026-10-13T19:00:00.000Z",
"ok": true,
"ms": 920
},
{
"t": "2026-10-13T19:40:00.000Z",
"ok": true,
"ms": 715
},
{
"t": "2026-10-13T20:20:00.000Z",
"ok": true,
"ms": 835
},
{
"t": "2026-10-13T21:00:00.000Z",
"ok": true,
"ms": 1038
},
{
"t": "2026-10-13T21:40:00.000Z",
"ok": true,
"ms": 1235
},
{
"t": "2026-10-13T22:20:00.000Z",
"ok": true,
"ms": 731
},
{
"t": "2026-10-13T23:00:00.000Z",
"ok": true,
"ms": 685
},
{
"t": "2026-10-13T23:40:00.000Z",
"ok": true,
"ms": 597
},
{
"t": "2026-10-14T00:20:00.000Z",
"ok": true,
"ms": 676
},
{
"t": "2026-10-14T01:00:00.000Z",
"ok": true,
"ms": 755
},
{
"t": "2026-10-14T01:40:00.000Z",
"ok": true,
"ms": 658
},
{
"t": "2026-10-14T02:20:00.000Z",
"ok": true,
"ms": 740
},
{
"t": "2026-10-14T03:55:00.000Z",
"ok": true,
"ms": 631
},
{
"t": "2026-10-14T04:32:00.000Z",
"ok": true,
"ms": 619
}
],
"daily": {
"2026-10-14": {
"total": 4,
"up": 4,
"latSum": 2484,
"latCount": 4,
"latMax": 627
}
},
"meta": {
"name": "狼的共享盘",
"group": "UptimeRobot",
"type": "ur",
"url": "https://share.tama.guru",
"source": "uptimerobot",
"sourceLabel": "HTTP",
"interval": 300
},
"uptimeRatios": {
"1": 100,
"7": 100,
"30": 99.951,
"90": 99.93
},
"downSeconds": {
"1": 0,
"7": 0,
"30": 1276,
"90": 5432
},
"lat": {
"avg": 621,
"max": 627,
"days": [
{
"key": "2026-10-14",
"avg": 621
}
]
}
},
"ur-795556828": {
"status": "up",
"latency": 335,
"code": null,
"detail": "UptimeRobot:运行正常",
"lastCheck": "2026-10-14T04:28:00.000Z",
"history": [
{
"t": "2026-10-13T05:10:00.000Z",
"ok": true,
"ms": 181
},
{
"t": "2026-10-13T05:50:00.000Z",
"ok": true,
"ms": 206
},
{
"t": "2026-10-13T06:30:00.000Z",
"ok": true,
"ms": 241
},
{
"t": "2026-10-13T07:10:00.000Z",
"ok": true,
"ms": 241
},
{
"t": "2026-10-13T07:50:00.000Z",
"ok": true,
"ms": 512
},
{
"t": "2026-10-13T08:30:00.000Z",
"ok": true,
"ms": 216
},
{
"t": "2026-10-13T09:10:00.000Z",
"ok": true,
"ms": 256
},
{
"t": "2026-10-13T09:50:00.000Z",
"ok": true,
"ms": 500
},
{
"t": "2026-10-13T10:30:00.000Z",
"ok": true,
"ms": 337
},
{
"t": "2026-10-13T11:10:00.000Z",
"ok": true,
"ms": 197
},
{
"t": "2026-10-13T11:50:00.000Z",
"ok": true,
"ms": 344
},
{
"t": "2026-10-13T12:30:00.000Z",
"ok": true,
"ms": 341
},
{
"t": "2026-10-13T13:10:00.000Z",
"ok": true,
"ms": 347
},
{
"t": "2026-10-13T13:50:00.000Z",
"ok": true,
"ms": 220
},
{
"t": "2026-10-13T14:30:00.000Z",
"ok": true,
"ms": 338
},
{
"t": "2026-10-13T15:10:00.000Z",
"ok": true,
"ms": 510
},
{
"t": "2026-10-13T15:50:00.000Z",
"ok": true,
"ms": 230
},
{
"t": "2026-10-13T16:30:00.000Z",
"ok": true,
"ms": 401
},
{
"t": "2026-10-13T17:10:00.000Z",
"ok": true,
"ms": 302
},
{
"t": "2026-10-13T17:50:00.000Z",
"ok": true,
"ms": 495
},
{
"t": "2026-10-13T18:30:00.000Z",
"ok": true,
"ms": 389
},
{
"t": "2026-10-13T19:10:00.000Z",
"ok": true,
"ms": 328
},
{
"t": "2026-10-13T19:50:00.000Z",
"ok": true,
"ms": 338
},
{
"t": "2026-10-13T20:35:00.000Z",
"ok": true,
"ms": 423
},
{
"t": "2026-10-13T21:15:00.000Z",
"ok": true,
"ms": 394
},
{
"t": "2026-10-13T21:55:00.000Z",
"ok": true,
"ms": 214
},
{
"t": "2026-10-13T22:35:00.000Z",
"ok": true,
"ms": 240
},
{
"t": "2026-10-13T23:15:00.000Z",
"ok": true,
"ms": 215
},
{
"t": "2026-10-13T23:55:00.000Z",
"ok": true,
"ms": 240
},
{
"t": "2026-10-14T00:35:00.000Z",
"ok": true,
"ms": 329
},
{
"t": "2026-10-14T01:15:00.000Z",
"ok": true,
"ms": 387
},
{
"t": "2026-10-14T01:55:00.000Z",
"ok": true,
"ms": 337
},
{
"t": "2026-10-14T02:35:00.000Z",
"ok": true,
"ms": 381
},
{
"t": "2026-10-14T03:15:00.000Z",
"ok": true,
"ms": 355
},
{
"t": "2026-10-14T03:52:00.000Z",
"ok": true,
"ms": 538
},
{
"t": "2026-10-14T04:28:00.000Z",
"ok": true,
"ms": 335
}
],
"daily": {
"2026-10-14": {
"total": 4,
"up": 4,
"latSum": 1352,
"latCount": 4,
"latMax": 339
}
},
"meta": {
"name": "狼的导航页",
"group": "UptimeRobot",
"type": "ur",
"url": "https://tama.guru",
"source": "uptimerobot",
"sourceLabel": "HTTP",
"interval": 300
},
"uptimeRatios": {
"1": 100,
"7": 100,
"30": 100,
"90": 100
},
"downSeconds": {
"1": 0,
"7": 0,
"30": 0,
"90": 0
},
"lat": {
"avg": 338,
"max": 339,
"days": [
{
"key": "2026-10-14",
"avg": 338
}
]
}
},
"ur-792059414": {
"status": "up",
"latency": 2408,
"code": null,
"detail": "UptimeRobot:运行正常",
"lastCheck": "2026-10-14T04:27:00.000Z",
"history": [
{
"t": "2026-10-13T05:25:00.000Z",
"ok": true,
"ms": 2562
},
{
"t": "2026-10-13T06:10:00.000Z",
"ok": true,
"ms": 2625
},
{
"t": "2026-10-13T06:55:00.000Z",
"ok": true,
"ms": 2226
},
{
"t": "2026-10-13T07:40:00.000Z",
"ok": true,
"ms": 1715
},
{
"t": "2026-10-13T08:25:00.000Z",
"ok": true,
"ms": 1861
},
{
"t": "2026-10-13T09:10:00.000Z",
"ok": true,
"ms": 1991
},
{
"t": "2026-10-13T09:55:00.000Z",
"ok": true,
"ms": 1597
},
{
"t": "2026-10-13T10:40:00.000Z",
"ok": true,
"ms": 2816
},
{
"t": "2026-10-13T11:25:00.000Z",
"ok": true,
"ms": 1912
},
{
"t": "2026-10-13T12:10:00.000Z",
"ok": true,
"ms": 2326
},
{
"t": "2026-10-13T12:55:00.000Z",
"ok": true,
"ms": 2938
},
{
"t": "2026-10-13T13:40:00.000Z",
"ok": true,
"ms": 3146
},
{
"t": "2026-10-13T14:25:00.000Z",
"ok": true,
"ms": 2125
},
{
"t": "2026-10-13T15:05:00.000Z",
"ok": true,
"ms": 2892
},
{
"t": "2026-10-13T15:50:00.000Z",
"ok": true,
"ms": 2097
},
{
"t": "2026-10-13T16:35:00.000Z",
"ok": true,
"ms": 2206
},
{
"t": "2026-10-13T17:20:00.000Z",
"ok": true,
"ms": 2293
},
{
"t": "2026-10-13T18:05:00.000Z",
"ok": true,
"ms": 1347
},
{
"t": "2026-10-13T18:50:00.000Z",
"ok": true,
"ms": 1656
},
{
"t": "2026-10-13T19:35:00.000Z",
"ok": true,
"ms": 2883
},
{
"t": "2026-10-13T20:20:00.000Z",
"ok": true,
"ms": 2649
},
{
"t": "2026-10-13T21:05:00.000Z",
"ok": true,
"ms": 2923
},
{
"t": "2026-10-13T21:50:00.000Z",
"ok": true,
"ms": 1964
},
{
"t": "2026-10-13T22:35:00.000Z",
"ok": true,
"ms": 2335
},
{
"t": "2026-10-13T23:20:00.000Z",
"ok": true,
"ms": 2418
},
{
"t": "2026-10-14T00:05:00.000Z",
"ok": true,
"ms": 2098
},
{
"t": "2026-10-14T00:50:00.000Z",
"ok": true,
"ms": 1921
},
{
"t": "2026-10-14T01:35:00.000Z",
"ok": true,
"ms": 3110
},
{
"t": "2026-10-14T02:20:00.000Z",
"ok": true,
"ms": 1719
},
{
"t": "2026-10-14T03:05:00.000Z",
"ok": true,
"ms": 1623
},
{
"t": "2026-10-14T03:48:00.000Z",
"ok": true,
"ms": 3512
},
{
"t": "2026-10-14T04:27:00.000Z",
"ok": true,
"ms": 2408
}
],
"daily": {
"2026-10-14": {
"total": 4,
"up": 4,
"latSum": 10418,
"latCount": 4,
"latMax": 2670
}
},
"meta": {
"name": "狼的提问箱",
"group": "UptimeRobot",
"type": "ur",
"url": "https://box.tama.guru",
"source": "uptimerobot",
"sourceLabel": "HTTP",
"interval": 300
},
"uptimeRatios": {
"1": 100,
"7": 100,
"30": 99.927,
"90": 99.902
},
"downSeconds": {
"1": 0,
"7": 0,
"30": 1899,
"90": 7593
},
"lat": {
"avg": 2605,
"max": 2670,
"days": [
{
"key": "2026-10-14",
"avg": 2605
}
]
}
},
"ur-798788113": {
"status": "up",
"latency": 312,
"code": null,
"detail": "UptimeRobot:运行正常",
"lastCheck": "2026-10-14T04:29:00.000Z",
"history": [
{
"t": "2026-10-13T05:30:00.000Z",
"ok": true,
"ms": 449
},
{
"t": "2026-10-13T06:10:00.000Z",
"ok": true,
"ms": 386
},
{
"t": "2026-10-13T06:50:00.000Z",
"ok": true,
"ms": 311
},
{
"t": "2026-10-13T07:30:00.000Z",
"ok": true,
"ms": 384
},
{
"t": "2026-10-13T08:10:00.000Z",
"ok": true,
"ms": 390
},
{
"t": "2026-10-13T08:50:00.000Z",
"ok": true,
"ms": 461
},
{
"t": "2026-10-13T09:30:00.000Z",
"ok": true,
"ms": 545
},
{
"t": "2026-10-13T10:10:00.000Z",
"ok": true,
"ms": 456
},
{
"t": "2026-10-13T10:50:00.000Z",
"ok": true,
"ms": 394
},
{
"t": "2026-10-13T11:30:00.000Z",
"ok": true,
"ms": 398
},
{
"t": "2026-10-13T12:10:00.000Z",
"ok": true,
"ms": 588
},
{
"t": "2026-10-13T12:50:00.000Z",
"ok": true,
"ms": 430
},
{
"t": "2026-10-13T13:30:00.000Z",
"ok": true,
"ms": 502
},
{
"t": "2026-10-13T14:15:00.000Z",
"ok": true,
"ms": 355
},
{
"t": "2026-10-13T14:55:00.000Z",
"ok": true,
"ms": 358
},
{
"t": "2026-10-13T15:35:00.000Z",
"ok": true,
"ms": 385
},
{
"t": "2026-10-13T16:15:00.000Z",
"ok": true,
"ms": 342
},
{
"t": "2026-10-13T16:55:00.000Z",
"ok": true,
"ms": 428
},
{
"t": "2026-10-13T17:35:00.000Z",
"ok": true,
"ms": 508
},
{
"t": "2026-10-13T18:15:00.000Z",
"ok": true,
"ms": 602
},
{
"t": "2026-10-13T18:55:00.000Z",
"ok": true,
"ms": 363
},
{
"t": "2026-10-13T19:40:00.000Z",
"ok": true,
"ms": 1380
},
{
"t": "2026-10-13T20:20:00.000Z",
"ok": true,
"ms": 512
},
{
"t": "2026-10-13T21:00:00.000Z",
"ok": true,
"ms": 394
},
{
"t": "2026-10-13T21:40:00.000Z",
"ok": true,
"ms": 238
},
{
"t": "2026-10-13T22:20:00.000Z",
"ok": true,
"ms": 323
},
{
"t": "2026-10-13T23:00:00.000Z",
"ok": true,
"ms": 353
},
{
"t": "2026-10-13T23:40:00.000Z",
"ok": true,
"ms": 179
},
{
"t": "2026-10-14T00:20:00.000Z",
"ok": true,
"ms": 263
},
{
"t": "2026-10-14T01:00:00.000Z",
"ok": true,
"ms": 381
},
{
"t": "2026-10-14T01:40:00.000Z",
"ok": true,
"ms": 378
},
{
"t": "2026-10-14T02:20:00.000Z",
"ok": true,
"ms": 278
},
{
"t": "2026-10-14T03:17:00.000Z",
"ok": true,
"ms": 345
},
{
"t": "2026-10-14T03:53:00.000Z",
"ok": true,
"ms": 259
},
{
"t": "2026-10-14T04:29:00.000Z",
"ok": true,
"ms": 312
}
],
"daily": {
"2026-10-14": {
"total": 4,
"up": 4,
"latSum": 1245,
"latCount": 4,
"latMax": 323
}
},
"meta": {
"name": "狼的聊天室",
"group": "UptimeRobot",
"type": "ur",
"url": "https://chat.tama.guru",
"source": "uptimerobot",
"sourceLabel": "HTTP",
"interval": 300
},
"uptimeRatios": {
"1": 100,
"7": 100,
"30": 100,
"90": 100
},
"downSeconds": {
"1": 0,
"7": 0,
"30": 0,
"90": 0
},
"lat": {
"avg": 311,
"max": 323,
"days": [
{
"key": "2026-10-14",
"avg": 311
}
]
}
},
"ur-796219015": {
"status": "down",
"latency": 185,
"code": 403,
"detail": "UptimeRobot:403 Forbidden",
"lastCheck": "2026-05-07T07:54:09.000Z",
"history": [
{
"t": "2026-05-07T07:54:09.000Z",
"ok": false,
"ms": 0
}
],
"daily": {
"2026-10-14": {
"total": 4,
"up": 0
}
},
"meta": {
"name": "狼的评论系统",
"group": "UptimeRobot",
"type": "ur",
"url": "https://artalk.tama.guru",
"source": "uptimerobot",
"sourceLabel": "HTTP",
"interval": 300
},
"uptimeRatios": {
"1": 0,
"7": 0,
"30": 0,
"90": 0
},
"downSeconds": {
"1": 86400,
"7": 604800,
"30": 2592000,
"90": 7776000
}
}
}
}