diff --git a/docs/screenshot-desktop.png b/docs/screenshot-desktop.png index 6db996e..44e273d 100644 Binary files a/docs/screenshot-desktop.png and b/docs/screenshot-desktop.png differ diff --git a/docs/screenshot-mobile.png b/docs/screenshot-mobile.png index 00d4d47..341ed5b 100644 Binary files a/docs/screenshot-mobile.png and b/docs/screenshot-mobile.png differ diff --git a/docs/screenshot-view-cards.png b/docs/screenshot-view-cards.png index 9c2617c..df3354d 100644 Binary files a/docs/screenshot-view-cards.png and b/docs/screenshot-view-cards.png differ diff --git a/docs/screenshot-view-table.png b/docs/screenshot-view-table.png index 23e2fbc..555c9a4 100644 Binary files a/docs/screenshot-view-table.png and b/docs/screenshot-view-table.png differ diff --git a/prober/node/index.js b/prober/node/index.js index 14e39a2..70d5b35 100644 --- a/prober/node/index.js +++ b/prober/node/index.js @@ -77,6 +77,7 @@ const MIME = { '.png': 'image/png', '.jpg': 'image/jpeg', '.ico': 'image/x-icon', + '.webp': 'image/webp', '.woff2': 'font/woff2', }; diff --git a/public/assets/app.js b/public/assets/app.js index 3c88835..039eeaf 100644 --- a/public/assets/app.js +++ b/public/assets/app.js @@ -283,14 +283,25 @@ function renderEvents() { if (!box) return; const list = $('events-list'); const empty = $('events-empty'); - const all = state.status?.events ?? []; + const count = $('events-count'); + // 事件随分组页签联动:只展示当前页签下目标的事件。 + // 用「当前可见目标 id 集合」反查,而不是事件自身的 group 字段 —— + // 外部数据源(UptimeRobot)的事件在快照里没有 group,按名字反查才准。 + const visibleIds = new Set(visibleGroups().flatMap(([, list]) => list.map((m) => m.id))); + const all = (state.status?.events ?? []).filter((e) => visibleIds.has(e.id)); box.hidden = all.length === 0; empty.hidden = all.length > 0; - if (!all.length) return; + if (!all.length) { + // 必须清空列表:仅隐藏区块的话旧行仍留在 DOM 里(换个分组再切回来会看到过期内容) + list.innerHTML = ''; + if (count) count.textContent = ''; + const more = $('events-more'); + if (more) more.hidden = true; + return; + } const expanded = state.eventsExpanded === true; const shown = expanded ? all : all.slice(0, EVENTS_COLLAPSED); - const count = $('events-count'); if (count) count.textContent = all.length > shown.length ? `最近 ${shown.length} / ${all.length} 条` : `最近 ${all.length} 条`; const label = { down: '故障', up: '恢复', tls: '证书', maintenance: '维护' }; @@ -488,6 +499,8 @@ function setFilter(g) { state.filter = g; renderTabs(); renderView(); + // 事件按当前页签过滤,切页签后必须一并重渲染 + renderEvents(); } function visibleGroups() { @@ -943,6 +956,28 @@ function applyArtwork() { document.body.appendChild(img); } +// favicon 格式协商:同尺寸的 WebP 体积更小,浏览器按 type 自动挑第一个认识的; +// 不认识 WebP 的旧浏览器会跳到 PNG,两者并存保证任何环境都有图标。 +function setFavicon(shiroko) { + const head = document.head; + if (!head) return; + for (const el of head.querySelectorAll('link[data-favicon]')) el.remove(); + const links = shiroko + ? [ + { href: 'assets/favicon-shiroko.webp', type: 'image/webp' }, + { href: 'assets/favicon-shiroko.png', type: 'image/png' }, + ] + : [{ href: 'assets/favicon.svg', type: 'image/svg+xml' }]; + for (const l of links) { + const el = document.createElement('link'); + el.rel = 'icon'; + el.href = l.href; + el.type = l.type; + el.dataset.favicon = '1'; + head.appendChild(el); + } +} + function applyTheme(theme, { persist = true } = {}) { state.theme = THEMES[theme] ? theme : 'default'; if (state.theme === 'default') delete document.body.dataset.theme; @@ -955,8 +990,7 @@ function applyTheme(theme, { persist = true } = {}) { localStorage.setItem('shiroko.theme', state.theme); } catch { /* 忽略 */ } } - const icon = document.querySelector('link[rel="icon"]'); - if (icon) icon.setAttribute('href', state.theme === 'shiroko' ? 'assets/favicon-shiroko.png' : 'assets/favicon.svg'); + setFavicon(state.theme === 'shiroko'); applyArtwork(); const btn = $('theme-btn'); if (btn) { diff --git a/public/assets/favicon-shiroko.webp b/public/assets/favicon-shiroko.webp new file mode 100644 index 0000000..f277639 Binary files /dev/null and b/public/assets/favicon-shiroko.webp differ diff --git a/public/index.html b/public/index.html index b166006..57a7191 100644 --- a/public/index.html +++ b/public/index.html @@ -5,7 +5,7 @@ Shiroko Monitor - + diff --git a/public/status.json b/public/status.json index 62b1537..155b8b3 100644 --- a/public/status.json +++ b/public/status.json @@ -1,8 +1,8 @@ { "prober": "shiroko-monitor-node/0.12.2", "demo": false, - "generatedAt": "2026-10-14T09:01:44.780Z", - "dataUpdatedAt": "2026-10-14T09:01:34.289Z", + "generatedAt": "2026-10-14T09:34:40.966Z", + "dataUpdatedAt": "2026-10-14T09:33:59.150Z", "updateIntervalSec": 60, "dataFilter": "both", "probeScope": "all", @@ -11,12 +11,12 @@ "up": 10, "down": 4, "pending": 0, - "avgLatency": 1046, - "avgUptime90": 63.9, + "avgLatency": 992, + "avgUptime90": 61.7, "memory": { - "rssMB": 73.3, - "heapUsedMB": 13, - "heapTotalMB": 14.2 + "rssMB": 80.5, + "heapUsedMB": 16.3, + "heapTotalMB": 18.7 } }, "sources": { @@ -24,10 +24,10 @@ "enabled": true, "ok": true, "error": null, - "lastSyncAt": "2026-10-14T08:59:05.177Z", + "lastSyncAt": "2026-10-14T09:32:59.982Z", "count": 6, "syncing": false, - "lastSyncMs": 1791968343771 + "lastSyncMs": 1791970378633 } }, "notify": { @@ -36,13 +36,29 @@ "quietHours": null, "failureThreshold": 2, "lastResult": { - "at": "2026-10-14T02:19:42.390Z", + "at": "2026-10-14T09:16:31.742Z", "suppressed": false, "skipped": "notify-disabled", "results": [] } }, "events": [ + { + "t": "2026-10-14T09:16:31.733Z", + "id": "httpbin-500", + "name": "HTTPBin 500(演示 expectStatus)", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-14T09:14:17.293Z", + "id": "httpbin-500", + "name": "HTTPBin 500(演示 expectStatus)", + "type": "down", + "detail": "请求超时(>10s)", + "maintenance": false + }, { "t": "2026-10-14T02:11:47.171Z", "id": "ur-796219015", @@ -186,277 +202,566 @@ "type": "up", "detail": "已恢复", "maintenance": false - }, - { - "t": "2026-10-13T20:25:24.931Z", - "id": "cloudflare-site", - "name": "Cloudflare 官网", - "type": "down", - "detail": "UND_ERR_HEADERS_OVERFLOW", - "maintenance": false - }, - { - "t": "2026-10-13T20:21:21.972Z", - "id": "cloudflare-site", - "name": "Cloudflare 官网", - "type": "up", - "detail": "已恢复", - "maintenance": false } ], "monitors": { "example-com": { "status": "up", - "latency": 675, + "latency": 828, "code": 200, "detail": "HTTP 200", - "lastCheck": "2026-10-14T09:01:24.931Z", + "lastCheck": "2026-10-14T09:33:49.963Z", "history": [ { - "t": "2026-10-14T08:49:07.628Z", + "t": "2026-10-14T09:03:26.495Z", "ok": true, - "ms": 2202 + "ms": 1249 }, { - "t": "2026-10-14T08:50:06.655Z", + "t": "2026-10-14T09:04:27.241Z", "ok": true, - "ms": 723 + "ms": 1456 }, { - "t": "2026-10-14T08:51:07.649Z", + "t": "2026-10-14T09:05:26.958Z", "ok": true, - "ms": 1160 + "ms": 668 }, { - "t": "2026-10-14T08:52:08.231Z", + "t": "2026-10-14T09:06:07.513Z", "ok": true, - "ms": 1149 + "ms": 698 }, { - "t": "2026-10-14T08:53:08.390Z", + "t": "2026-10-14T09:07:08.288Z", "ok": true, - "ms": 692 + "ms": 987 }, { - "t": "2026-10-14T08:54:09.477Z", + "t": "2026-10-14T09:08:08.038Z", "ok": true, - "ms": 1240 + "ms": 1236 }, { - "t": "2026-10-14T08:55:09.329Z", + "t": "2026-10-14T09:09:08.561Z", "ok": true, - "ms": 677 + "ms": 1198 }, { - "t": "2026-10-14T08:55:21.697Z", + "t": "2026-10-14T09:10:09.137Z", "ok": true, - "ms": 973 + "ms": 1207 }, { - "t": "2026-10-14T08:56:21.891Z", + "t": "2026-10-14T09:11:09.397Z", "ok": true, - "ms": 684 + "ms": 924 }, { - "t": "2026-10-14T08:57:22.967Z", + "t": "2026-10-14T09:12:09.887Z", "ok": true, - "ms": 1227 + "ms": 665 }, { - "t": "2026-10-14T08:58:23.604Z", + "t": "2026-10-14T09:13:12.078Z", "ok": true, - "ms": 1177 + "ms": 2292 }, { - "t": "2026-10-14T08:59:24.157Z", + "t": "2026-10-14T09:14:11.528Z", "ok": true, - "ms": 1232 + "ms": 1219 }, { - "t": "2026-10-14T09:00:25.063Z", + "t": "2026-10-14T09:15:12.578Z", "ok": true, - "ms": 1314 + "ms": 1886 }, { - "t": "2026-10-14T09:01:24.931Z", + "t": "2026-10-14T09:16:28.525Z", "ok": true, - "ms": 675 + "ms": 1423 + }, + { + "t": "2026-10-14T09:17:28.807Z", + "ok": true, + "ms": 1229 + }, + { + "t": "2026-10-14T09:18:29.297Z", + "ok": true, + "ms": 1220 + }, + { + "t": "2026-10-14T09:19:29.790Z", + "ok": true, + "ms": 1168 + }, + { + "t": "2026-10-14T09:20:31.031Z", + "ok": true, + "ms": 1857 + }, + { + "t": "2026-10-14T09:20:33.443Z", + "ok": true, + "ms": 211 + }, + { + "t": "2026-10-14T09:20:35.465Z", + "ok": true, + "ms": 220 + }, + { + "t": "2026-10-14T09:20:36.474Z", + "ok": true, + "ms": 216 + }, + { + "t": "2026-10-14T09:20:37.481Z", + "ok": true, + "ms": 220 + }, + { + "t": "2026-10-14T09:20:38.483Z", + "ok": true, + "ms": 215 + }, + { + "t": "2026-10-14T09:21:40.058Z", + "ok": true, + "ms": 1189 + }, + { + "t": "2026-10-14T09:22:35.955Z", + "ok": true, + "ms": 694 + }, + { + "t": "2026-10-14T09:22:37.518Z", + "ok": true, + "ms": 229 + }, + { + "t": "2026-10-14T09:22:38.524Z", + "ok": true, + "ms": 223 + }, + { + "t": "2026-10-14T09:22:39.531Z", + "ok": true, + "ms": 222 + }, + { + "t": "2026-10-14T09:22:40.812Z", + "ok": true, + "ms": 483 + }, + { + "t": "2026-10-14T09:23:41.792Z", + "ok": true, + "ms": 696 + }, + { + "t": "2026-10-14T09:24:02.121Z", + "ok": true, + "ms": 696 + }, + { + "t": "2026-10-14T09:24:03.678Z", + "ok": true, + "ms": 231 + }, + { + "t": "2026-10-14T09:24:04.682Z", + "ok": true, + "ms": 225 + }, + { + "t": "2026-10-14T09:24:05.691Z", + "ok": true, + "ms": 235 + }, + { + "t": "2026-10-14T09:24:06.702Z", + "ok": true, + "ms": 243 + }, + { + "t": "2026-10-14T09:24:45.070Z", + "ok": true, + "ms": 2269 + }, + { + "t": "2026-10-14T09:25:44.482Z", + "ok": true, + "ms": 1221 + }, + { + "t": "2026-10-14T09:25:55.531Z", + "ok": true, + "ms": 1022 + }, + { + "t": "2026-10-14T09:26:56.724Z", + "ok": true, + "ms": 1549 + }, + { + "t": "2026-10-14T09:27:27.960Z", + "ok": true, + "ms": 969 + }, + { + "t": "2026-10-14T09:28:27.769Z", + "ok": true, + "ms": 670 + }, + { + "t": "2026-10-14T09:29:29.119Z", + "ok": true, + "ms": 1456 + }, + { + "t": "2026-10-14T09:30:07.155Z", + "ok": true, + "ms": 1204 + }, + { + "t": "2026-10-14T09:31:07.162Z", + "ok": true, + "ms": 673 + }, + { + "t": "2026-10-14T09:31:18.540Z", + "ok": true, + "ms": 715 + }, + { + "t": "2026-10-14T09:32:19.122Z", + "ok": true, + "ms": 851 + }, + { + "t": "2026-10-14T09:32:49.586Z", + "ok": true, + "ms": 976 + }, + { + "t": "2026-10-14T09:33:49.963Z", + "ok": true, + "ms": 828 } ], "daily": { "2026-10-14": { - "total": 14, - "up": 14, - "latSum": 15125, - "latCount": 14, - "latMax": 2202 + "total": 63, + "up": 63, + "latSum": 59726, + "latCount": 63, + "latMax": 2292 } }, "tls": { "daysLeft": 72, "validTo": "2026-12-25T22:56:35.000Z", "issuer": "SSL Corporation", - "checkedAt": "2026-10-14T08:49:07.609Z", + "checkedAt": "2026-10-14T09:16:29.144Z", "error": null }, "lat": { - "avg": 1080, - "max": 2202, + "avg": 948, + "max": 2292, "days": [ { "key": "2026-10-14", - "avg": 1080 + "avg": 948 } ] } }, "baidu": { "status": "up", - "latency": 89, + "latency": 96, "code": 200, "detail": "HTTP 200", - "lastCheck": "2026-10-14T09:01:24.351Z", + "lastCheck": "2026-10-14T09:33:49.235Z", "history": [ { - "t": "2026-10-14T08:49:06.041Z", + "t": "2026-10-14T09:03:25.858Z", "ok": true, - "ms": 612 + "ms": 610 }, { - "t": "2026-10-14T08:50:06.555Z", + "t": "2026-10-14T09:04:26.408Z", "ok": true, - "ms": 619 + "ms": 618 }, { - "t": "2026-10-14T08:51:06.568Z", + "t": "2026-10-14T09:05:26.873Z", "ok": true, - "ms": 78 + "ms": 577 }, { - "t": "2026-10-14T08:52:07.162Z", + "t": "2026-10-14T09:06:06.908Z", "ok": true, - "ms": 79 + "ms": 88 }, { - "t": "2026-10-14T08:53:08.337Z", + "t": "2026-10-14T09:07:07.409Z", + "ok": true, + "ms": 105 + }, + { + "t": "2026-10-14T09:08:07.434Z", + "ok": true, + "ms": 630 + }, + { + "t": "2026-10-14T09:09:07.962Z", + "ok": true, + "ms": 596 + }, + { + "t": "2026-10-14T09:10:08.578Z", + "ok": true, + "ms": 645 + }, + { + "t": "2026-10-14T09:11:08.594Z", + "ok": true, + "ms": 116 + }, + { + "t": "2026-10-14T09:12:09.819Z", + "ok": true, + "ms": 592 + }, + { + "t": "2026-10-14T09:13:10.372Z", + "ok": true, + "ms": 584 + }, + { + "t": "2026-10-14T09:14:10.917Z", + "ok": true, + "ms": 606 + }, + { + "t": "2026-10-14T09:15:11.300Z", + "ok": true, + "ms": 603 + }, + { + "t": "2026-10-14T09:16:27.751Z", + "ok": true, + "ms": 644 + }, + { + "t": "2026-10-14T09:17:28.217Z", "ok": true, "ms": 635 }, { - "t": "2026-10-14T08:54:08.858Z", + "t": "2026-10-14T09:18:28.669Z", + "ok": true, + "ms": 590 + }, + { + "t": "2026-10-14T09:19:29.233Z", + "ok": true, + "ms": 608 + }, + { + "t": "2026-10-14T09:20:29.285Z", + "ok": true, + "ms": 106 + }, + { + "t": "2026-10-14T09:20:33.274Z", + "ok": true, + "ms": 41 + }, + { + "t": "2026-10-14T09:20:35.289Z", + "ok": true, + "ms": 42 + }, + { + "t": "2026-10-14T09:20:36.291Z", + "ok": true, + "ms": 31 + }, + { + "t": "2026-10-14T09:20:37.286Z", + "ok": true, + "ms": 24 + }, + { + "t": "2026-10-14T09:20:38.302Z", + "ok": true, + "ms": 32 + }, + { + "t": "2026-10-14T09:21:38.953Z", + "ok": true, + "ms": 82 + }, + { + "t": "2026-10-14T09:22:35.373Z", + "ok": true, + "ms": 108 + }, + { + "t": "2026-10-14T09:22:37.315Z", + "ok": true, + "ms": 25 + }, + { + "t": "2026-10-14T09:22:38.326Z", + "ok": true, + "ms": 24 + }, + { + "t": "2026-10-14T09:22:39.344Z", + "ok": true, + "ms": 34 + }, + { + "t": "2026-10-14T09:22:40.361Z", + "ok": true, + "ms": 31 + }, + { + "t": "2026-10-14T09:23:41.696Z", + "ok": true, + "ms": 595 + }, + { + "t": "2026-10-14T09:24:02.047Z", "ok": true, "ms": 619 }, { - "t": "2026-10-14T08:55:09.251Z", + "t": "2026-10-14T09:24:03.507Z", "ok": true, - "ms": 598 + "ms": 57 }, { - "t": "2026-10-14T08:55:20.812Z", + "t": "2026-10-14T09:24:04.488Z", "ok": true, - "ms": 85 + "ms": 30 }, { - "t": "2026-10-14T08:56:21.914Z", + "t": "2026-10-14T09:24:05.487Z", "ok": true, - "ms": 705 + "ms": 30 }, { - "t": "2026-10-14T08:57:21.827Z", + "t": "2026-10-14T09:24:06.512Z", "ok": true, - "ms": 84 + "ms": 51 }, { - "t": "2026-10-14T08:58:23.030Z", + "t": "2026-10-14T09:24:43.403Z", "ok": true, - "ms": 600 + "ms": 596 }, { - "t": "2026-10-14T08:59:23.525Z", + "t": "2026-10-14T09:25:43.336Z", "ok": true, - "ms": 597 + "ms": 71 }, { - "t": "2026-10-14T09:00:23.924Z", + "t": "2026-10-14T09:25:54.594Z", "ok": true, - "ms": 165 + "ms": 83 }, { - "t": "2026-10-14T09:01:24.351Z", + "t": "2026-10-14T09:26:55.350Z", "ok": true, - "ms": 89 + "ms": 172 + }, + { + "t": "2026-10-14T09:27:27.278Z", + "ok": true, + "ms": 285 + }, + { + "t": "2026-10-14T09:28:27.694Z", + "ok": true, + "ms": 591 + }, + { + "t": "2026-10-14T09:29:28.512Z", + "ok": true, + "ms": 847 + }, + { + "t": "2026-10-14T09:30:06.570Z", + "ok": true, + "ms": 618 + }, + { + "t": "2026-10-14T09:31:06.584Z", + "ok": true, + "ms": 92 + }, + { + "t": "2026-10-14T09:31:17.909Z", + "ok": true, + "ms": 82 + }, + { + "t": "2026-10-14T09:32:19.260Z", + "ok": true, + "ms": 987 + }, + { + "t": "2026-10-14T09:32:48.737Z", + "ok": true, + "ms": 125 + }, + { + "t": "2026-10-14T09:33:49.235Z", + "ok": true, + "ms": 96 } ], "daily": { "2026-10-14": { - "total": 14, - "up": 14, - "latSum": 5565, - "latCount": 14, - "latMax": 705 + "total": 63, + "up": 63, + "latSum": 21094, + "latCount": 63, + "latMax": 987 } }, "tls": { "daysLeft": 101, "validTo": "2027-01-24T02:32:55.000Z", "issuer": "GlobalSign nv-sa", - "checkedAt": "2026-10-14T08:49:07.678Z", + "checkedAt": "2026-10-14T09:16:29.214Z", "error": null }, "lat": { - "avg": 398, - "max": 705, + "avg": 335, + "max": 987, "days": [ { "key": "2026-10-14", - "avg": 398 + "avg": 335 } ] } }, "cloudflare-site": { "status": "up", - "latency": 1466, + "latency": 679, "code": 200, "detail": "HTTP 200", - "lastCheck": "2026-10-14T09:01:25.732Z", + "lastCheck": "2026-10-14T09:33:49.823Z", "history": [ - { - "t": "2026-10-14T08:49:07.143Z", - "ok": true, - "ms": 1710 - }, - { - "t": "2026-10-14T08:50:07.601Z", - "ok": true, - "ms": 1661 - }, - { - "t": "2026-10-14T08:51:07.364Z", - "ok": true, - "ms": 872 - }, - { - "t": "2026-10-14T08:52:07.832Z", - "ok": true, - "ms": 747 - }, - { - "t": "2026-10-14T08:53:08.950Z", - "ok": true, - "ms": 1247 - }, - { - "t": "2026-10-14T08:54:10.271Z", - "ok": true, - "ms": 2030 - }, - { - "t": "2026-10-14T08:55:09.926Z", - "ok": true, - "ms": 1270 - }, { "t": "2026-10-14T08:55:21.047Z", "ok": true, @@ -491,14 +796,219 @@ "t": "2026-10-14T09:01:25.732Z", "ok": true, "ms": 1466 + }, + { + "t": "2026-10-14T09:02:25.458Z", + "ok": true, + "ms": 667 + }, + { + "t": "2026-10-14T09:03:26.666Z", + "ok": true, + "ms": 1416 + }, + { + "t": "2026-10-14T09:04:27.481Z", + "ok": true, + "ms": 1688 + }, + { + "t": "2026-10-14T09:05:27.469Z", + "ok": true, + "ms": 1171 + }, + { + "t": "2026-10-14T09:06:07.521Z", + "ok": true, + "ms": 698 + }, + { + "t": "2026-10-14T09:07:08.194Z", + "ok": true, + "ms": 887 + }, + { + "t": "2026-10-14T09:08:08.042Z", + "ok": true, + "ms": 1235 + }, + { + "t": "2026-10-14T09:09:09.085Z", + "ok": true, + "ms": 1716 + }, + { + "t": "2026-10-14T09:10:09.905Z", + "ok": true, + "ms": 1963 + }, + { + "t": "2026-10-14T09:11:09.198Z", + "ok": true, + "ms": 717 + }, + { + "t": "2026-10-14T09:12:10.029Z", + "ok": true, + "ms": 793 + }, + { + "t": "2026-10-14T09:13:10.975Z", + "ok": true, + "ms": 1185 + }, + { + "t": "2026-10-14T09:14:12.052Z", + "ok": true, + "ms": 1738 + }, + { + "t": "2026-10-14T09:15:12.388Z", + "ok": true, + "ms": 1684 + }, + { + "t": "2026-10-14T09:16:28.852Z", + "ok": true, + "ms": 1743 + }, + { + "t": "2026-10-14T09:17:29.339Z", + "ok": false, + "ms": 1752 + }, + { + "t": "2026-10-14T09:18:29.274Z", + "ok": true, + "ms": 1193 + }, + { + "t": "2026-10-14T09:19:30.341Z", + "ok": true, + "ms": 1710 + }, + { + "t": "2026-10-14T09:20:30.717Z", + "ok": true, + "ms": 1536 + }, + { + "t": "2026-10-14T09:20:33.942Z", + "ok": true, + "ms": 708 + }, + { + "t": "2026-10-14T09:20:39.126Z", + "ok": true, + "ms": 855 + }, + { + "t": "2026-10-14T09:21:40.070Z", + "ok": true, + "ms": 1196 + }, + { + "t": "2026-10-14T09:22:39.978Z", + "ok": true, + "ms": 666 + }, + { + "t": "2026-10-14T09:22:41.241Z", + "ok": true, + "ms": 910 + }, + { + "t": "2026-10-14T09:23:41.804Z", + "ok": true, + "ms": 699 + }, + { + "t": "2026-10-14T09:24:02.131Z", + "ok": true, + "ms": 700 + }, + { + "t": "2026-10-14T09:24:06.154Z", + "ok": true, + "ms": 696 + }, + { + "t": "2026-10-14T09:24:07.811Z", + "ok": true, + "ms": 1349 + }, + { + "t": "2026-10-14T09:24:44.009Z", + "ok": true, + "ms": 1197 + }, + { + "t": "2026-10-14T09:25:44.470Z", + "ok": true, + "ms": 1203 + }, + { + "t": "2026-10-14T09:25:54.811Z", + "ok": true, + "ms": 298 + }, + { + "t": "2026-10-14T09:26:56.641Z", + "ok": true, + "ms": 1461 + }, + { + "t": "2026-10-14T09:27:28.445Z", + "ok": true, + "ms": 1448 + }, + { + "t": "2026-10-14T09:28:28.288Z", + "ok": true, + "ms": 1183 + }, + { + "t": "2026-10-14T09:29:29.314Z", + "ok": true, + "ms": 1646 + }, + { + "t": "2026-10-14T09:30:07.136Z", + "ok": true, + "ms": 1181 + }, + { + "t": "2026-10-14T09:31:07.701Z", + "ok": true, + "ms": 1207 + }, + { + "t": "2026-10-14T09:31:18.734Z", + "ok": true, + "ms": 905 + }, + { + "t": "2026-10-14T09:32:19.892Z", + "ok": true, + "ms": 1615 + }, + { + "t": "2026-10-14T09:32:49.407Z", + "ok": true, + "ms": 793 + }, + { + "t": "2026-10-14T09:33:49.823Z", + "ok": true, + "ms": 679 } ], "daily": { "2026-10-14": { - "total": 14, - "up": 14, - "latSum": 17919, - "latCount": 14, + "total": 63, + "up": 62, + "latSum": 71535, + "latCount": 62, "latMax": 2030 } }, @@ -506,26 +1016,26 @@ "daysLeft": 88, "validTo": "2027-01-10T21:43:36.000Z", "issuer": "Google Trust Services", - "checkedAt": "2026-10-14T08:49:08.311Z", + "checkedAt": "2026-10-14T09:16:29.801Z", "error": null }, "lat": { - "avg": 1280, + "avg": 1154, "max": 2030, "days": [ { "key": "2026-10-14", - "avg": 1280 + "avg": 1154 } ] } }, "github-api": { "status": "up", - "latency": 1279, + "latency": 2095, "code": 200, "detail": "HTTP 200", - "lastCheck": "2026-10-14T09:00:23.014Z", + "lastCheck": "2026-10-14T09:30:08.053Z", "history": [ { "t": "2026-10-14T08:49:07.306Z", @@ -546,41 +1056,141 @@ "t": "2026-10-14T09:00:23.014Z", "ok": true, "ms": 1279 + }, + { + "t": "2026-10-14T09:05:23.092Z", + "ok": true, + "ms": 848 + }, + { + "t": "2026-10-14T09:10:23.925Z", + "ok": true, + "ms": 855 + }, + { + "t": "2026-10-14T09:15:24.663Z", + "ok": true, + "ms": 867 + }, + { + "t": "2026-10-14T09:16:28.538Z", + "ok": true, + "ms": 1425 + }, + { + "t": "2026-10-14T09:20:34.155Z", + "ok": true, + "ms": 918 + }, + { + "t": "2026-10-14T09:20:35.355Z", + "ok": true, + "ms": 104 + }, + { + "t": "2026-10-14T09:20:36.665Z", + "ok": true, + "ms": 396 + }, + { + "t": "2026-10-14T09:20:37.363Z", + "ok": true, + "ms": 99 + }, + { + "t": "2026-10-14T09:20:38.374Z", + "ok": true, + "ms": 100 + }, + { + "t": "2026-10-14T09:22:37.402Z", + "ok": true, + "ms": 108 + }, + { + "t": "2026-10-14T09:22:38.415Z", + "ok": true, + "ms": 109 + }, + { + "t": "2026-10-14T09:22:39.426Z", + "ok": true, + "ms": 112 + }, + { + "t": "2026-10-14T09:22:40.448Z", + "ok": true, + "ms": 114 + }, + { + "t": "2026-10-14T09:24:03.591Z", + "ok": true, + "ms": 108 + }, + { + "t": "2026-10-14T09:24:04.573Z", + "ok": true, + "ms": 109 + }, + { + "t": "2026-10-14T09:24:05.566Z", + "ok": true, + "ms": 106 + }, + { + "t": "2026-10-14T09:24:06.582Z", + "ok": true, + "ms": 116 + }, + { + "t": "2026-10-14T09:24:44.166Z", + "ok": true, + "ms": 1347 + }, + { + "t": "2026-10-14T09:29:44.659Z", + "ok": true, + "ms": 858 + }, + { + "t": "2026-10-14T09:30:08.053Z", + "ok": true, + "ms": 2095 } ], "daily": { "2026-10-14": { - "total": 4, - "up": 4, - "latSum": 5309, - "latCount": 4, - "latMax": 1869 + "total": 26, + "up": 26, + "latSum": 19148, + "latCount": 26, + "latMax": 2095 } }, "tls": { "daysLeft": 44, "validTo": "2026-11-27T23:59:59.000Z", "issuer": "Sectigo Limited", - "checkedAt": "2026-10-14T08:49:09.257Z", + "checkedAt": "2026-10-14T09:16:30.033Z", "error": null }, "lat": { - "avg": 1327, - "max": 1869, + "avg": 736, + "max": 2095, "days": [ { "key": "2026-10-14", - "avg": 1327 + "avg": 736 } ] } }, "httpbin-500": { "status": "up", - "latency": 1723, + "latency": 1260, "code": 500, "detail": "HTTP 500", - "lastCheck": "2026-10-14T09:01:22.960Z", + "lastCheck": "2026-10-14T09:32:49.876Z", "history": [ { "t": "2026-10-14T08:49:08.114Z", @@ -621,41 +1231,181 @@ "t": "2026-10-14T09:01:22.960Z", "ok": true, "ms": 1723 + }, + { + "t": "2026-10-14T09:03:23.723Z", + "ok": true, + "ms": 1498 + }, + { + "t": "2026-10-14T09:05:23.780Z", + "ok": true, + "ms": 1532 + }, + { + "t": "2026-10-14T09:06:08.869Z", + "ok": true, + "ms": 2043 + }, + { + "t": "2026-10-14T09:08:09.329Z", + "ok": true, + "ms": 2519 + }, + { + "t": "2026-10-14T09:10:08.350Z", + "ok": true, + "ms": 1421 + }, + { + "t": "2026-10-14T09:12:17.191Z", + "ok": false, + "ms": 10014 + }, + { + "t": "2026-10-14T09:14:17.293Z", + "ok": false, + "ms": 10009 + }, + { + "t": "2026-10-14T09:16:29.606Z", + "ok": true, + "ms": 2491 + }, + { + "t": "2026-10-14T09:18:30.172Z", + "ok": true, + "ms": 2087 + }, + { + "t": "2026-10-14T09:20:29.527Z", + "ok": true, + "ms": 1367 + }, + { + "t": "2026-10-14T09:20:33.796Z", + "ok": true, + "ms": 556 + }, + { + "t": "2026-10-14T09:20:35.493Z", + "ok": true, + "ms": 240 + }, + { + "t": "2026-10-14T09:20:36.499Z", + "ok": true, + "ms": 228 + }, + { + "t": "2026-10-14T09:20:37.496Z", + "ok": true, + "ms": 231 + }, + { + "t": "2026-10-14T09:20:38.734Z", + "ok": true, + "ms": 459 + }, + { + "t": "2026-10-14T09:22:38.537Z", + "ok": true, + "ms": 230 + }, + { + "t": "2026-10-14T09:22:39.551Z", + "ok": true, + "ms": 236 + }, + { + "t": "2026-10-14T09:22:40.690Z", + "ok": true, + "ms": 354 + }, + { + "t": "2026-10-14T09:24:04.850Z", + "ok": true, + "ms": 385 + }, + { + "t": "2026-10-14T09:24:05.692Z", + "ok": true, + "ms": 231 + }, + { + "t": "2026-10-14T09:24:06.704Z", + "ok": true, + "ms": 237 + }, + { + "t": "2026-10-14T09:24:44.554Z", + "ok": true, + "ms": 1731 + }, + { + "t": "2026-10-14T09:25:55.757Z", + "ok": true, + "ms": 1243 + }, + { + "t": "2026-10-14T09:27:29.375Z", + "ok": true, + "ms": 2377 + }, + { + "t": "2026-10-14T09:29:31.489Z", + "ok": true, + "ms": 3820 + }, + { + "t": "2026-10-14T09:30:08.344Z", + "ok": true, + "ms": 2383 + }, + { + "t": "2026-10-14T09:31:19.255Z", + "ok": true, + "ms": 1424 + }, + { + "t": "2026-10-14T09:32:49.876Z", + "ok": true, + "ms": 1260 } ], "daily": { "2026-10-14": { - "total": 8, - "up": 8, - "latSum": 14311, - "latCount": 8, - "latMax": 2671 + "total": 40, + "up": 38, + "latSum": 52464, + "latCount": 38, + "latMax": 3820 } }, "tls": { "daysLeft": 80, "validTo": "2027-01-02T23:59:59.000Z", "issuer": "Amazon", - "checkedAt": "2026-10-14T08:49:10.811Z", + "checkedAt": "2026-10-14T09:16:30.730Z", "error": null }, "lat": { - "avg": 1789, - "max": 2671, + "avg": 1381, + "max": 3820, "days": [ { "key": "2026-10-14", - "avg": 1789 + "avg": 1381 } ] } }, "badssl-expired": { "status": "down", - "latency": 5163, + "latency": 1563, "code": 0, - "detail": "ECONNRESET", - "lastCheck": "2026-10-14T09:01:26.404Z", + "detail": "CERT_HAS_EXPIRED", + "lastCheck": "2026-10-14T09:32:50.182Z", "history": [ { "t": "2026-10-14T08:49:08.317Z", @@ -696,11 +1446,116 @@ "t": "2026-10-14T09:01:26.404Z", "ok": false, "ms": 5163 + }, + { + "t": "2026-10-14T09:03:23.770Z", + "ok": false, + "ms": 1541 + }, + { + "t": "2026-10-14T09:05:24.293Z", + "ok": false, + "ms": 2042 + }, + { + "t": "2026-10-14T09:06:08.360Z", + "ok": false, + "ms": 1532 + }, + { + "t": "2026-10-14T09:08:08.865Z", + "ok": false, + "ms": 2052 + }, + { + "t": "2026-10-14T09:10:14.922Z", + "ok": false, + "ms": 7988 + }, + { + "t": "2026-10-14T09:12:17.233Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T09:14:08.777Z", + "ok": false, + "ms": 1491 + }, + { + "t": "2026-10-14T09:16:29.790Z", + "ok": false, + "ms": 2673 + }, + { + "t": "2026-10-14T09:18:31.892Z", + "ok": false, + "ms": 3805 + }, + { + "t": "2026-10-14T09:20:29.835Z", + "ok": false, + "ms": 1672 + }, + { + "t": "2026-10-14T09:20:34.272Z", + "ok": false, + "ms": 1030 + }, + { + "t": "2026-10-14T09:20:40.194Z", + "ok": false, + "ms": 1918 + }, + { + "t": "2026-10-14T09:22:41.357Z", + "ok": false, + "ms": 1020 + }, + { + "t": "2026-10-14T09:24:07.470Z", + "ok": false, + "ms": 999 + }, + { + "t": "2026-10-14T09:24:44.922Z", + "ok": false, + "ms": 2097 + }, + { + "t": "2026-10-14T09:25:59.216Z", + "ok": false, + "ms": 4699 + }, + { + "t": "2026-10-14T09:27:32.926Z", + "ok": false, + "ms": 5923 + }, + { + "t": "2026-10-14T09:29:37.675Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T09:30:11.717Z", + "ok": false, + "ms": 5754 + }, + { + "t": "2026-10-14T09:31:19.326Z", + "ok": false, + "ms": 1493 + }, + { + "t": "2026-10-14T09:32:50.182Z", + "ok": false, + "ms": 1563 } ], "daily": { "2026-10-14": { - "total": 8, + "total": 40, "up": 0 } }, @@ -708,27 +1563,17 @@ "daysLeft": -4203, "validTo": "2015-04-12T23:59:59.000Z", "issuer": "COMODO CA Limited", - "checkedAt": "2026-10-14T08:49:12.607Z", + "checkedAt": "2026-10-14T09:16:31.732Z", "error": null } }, "cloudflare-dns-tcp": { "status": "down", - "latency": 10015, + "latency": 10003, "code": null, "detail": "TCP 连接超时", - "lastCheck": "2026-10-14T09:01:34.288Z", + "lastCheck": "2026-10-14T09:33:59.150Z", "history": [ - { - "t": "2026-10-14T08:49:15.457Z", - "ok": false, - "ms": 10005 - }, - { - "t": "2026-10-14T08:50:15.952Z", - "ok": false, - "ms": 10009 - }, { "t": "2026-10-14T08:51:16.497Z", "ok": false, @@ -788,32 +1633,202 @@ "t": "2026-10-14T09:01:34.288Z", "ok": false, "ms": 10015 + }, + { + "t": "2026-10-14T09:02:34.802Z", + "ok": false, + "ms": 10009 + }, + { + "t": "2026-10-14T09:03:35.256Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T09:04:35.797Z", + "ok": false, + "ms": 10001 + }, + { + "t": "2026-10-14T09:05:36.306Z", + "ok": false, + "ms": 10006 + }, + { + "t": "2026-10-14T09:06:16.832Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T09:07:17.321Z", + "ok": false, + "ms": 10011 + }, + { + "t": "2026-10-14T09:08:16.824Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:09:17.383Z", + "ok": false, + "ms": 10011 + }, + { + "t": "2026-10-14T09:10:17.951Z", + "ok": false, + "ms": 9999 + }, + { + "t": "2026-10-14T09:11:18.495Z", + "ok": false, + "ms": 10011 + }, + { + "t": "2026-10-14T09:12:19.246Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T09:13:19.805Z", + "ok": false, + "ms": 10013 + }, + { + "t": "2026-10-14T09:14:20.319Z", + "ok": false, + "ms": 10003 + }, + { + "t": "2026-10-14T09:15:20.723Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:16:37.122Z", + "ok": false, + "ms": 10003 + }, + { + "t": "2026-10-14T09:17:37.598Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:18:38.091Z", + "ok": false, + "ms": 10003 + }, + { + "t": "2026-10-14T09:19:38.638Z", + "ok": false, + "ms": 10001 + }, + { + "t": "2026-10-14T09:20:48.295Z", + "ok": false, + "ms": 10016 + }, + { + "t": "2026-10-14T09:21:48.882Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:22:50.357Z", + "ok": false, + "ms": 10017 + }, + { + "t": "2026-10-14T09:23:51.117Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T09:24:16.484Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:24:52.834Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:25:53.279Z", + "ok": false, + "ms": 10010 + }, + { + "t": "2026-10-14T09:26:04.523Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:27:05.203Z", + "ok": false, + "ms": 10021 + }, + { + "t": "2026-10-14T09:27:37.012Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T09:28:37.153Z", + "ok": false, + "ms": 10045 + }, + { + "t": "2026-10-14T09:29:37.678Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:30:15.976Z", + "ok": false, + "ms": 10010 + }, + { + "t": "2026-10-14T09:31:16.504Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T09:31:27.854Z", + "ok": false, + "ms": 10019 + }, + { + "t": "2026-10-14T09:32:28.288Z", + "ok": false, + "ms": 10009 + }, + { + "t": "2026-10-14T09:32:58.626Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:33:59.150Z", + "ok": false, + "ms": 10003 } ], "daily": { "2026-10-14": { - "total": 14, + "total": 63, "up": 0 } } }, "google-dns-tcp": { "status": "down", - "latency": 10015, + "latency": 10003, "code": null, "detail": "TCP 连接超时", - "lastCheck": "2026-10-14T09:01:34.289Z", + "lastCheck": "2026-10-14T09:33:59.150Z", "history": [ - { - "t": "2026-10-14T08:49:15.458Z", - "ok": false, - "ms": 10005 - }, - { - "t": "2026-10-14T08:50:15.952Z", - "ok": false, - "ms": 10009 - }, { "t": "2026-10-14T08:51:16.497Z", "ok": false, @@ -873,210 +1888,390 @@ "t": "2026-10-14T09:01:34.289Z", "ok": false, "ms": 10015 + }, + { + "t": "2026-10-14T09:02:34.802Z", + "ok": false, + "ms": 10009 + }, + { + "t": "2026-10-14T09:03:35.257Z", + "ok": false, + "ms": 10003 + }, + { + "t": "2026-10-14T09:04:35.798Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T09:05:36.307Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T09:06:16.832Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T09:07:17.321Z", + "ok": false, + "ms": 10010 + }, + { + "t": "2026-10-14T09:08:16.824Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T09:09:17.384Z", + "ok": false, + "ms": 10012 + }, + { + "t": "2026-10-14T09:10:17.952Z", + "ok": false, + "ms": 10000 + }, + { + "t": "2026-10-14T09:11:18.495Z", + "ok": false, + "ms": 10011 + }, + { + "t": "2026-10-14T09:12:19.247Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T09:13:19.806Z", + "ok": false, + "ms": 10013 + }, + { + "t": "2026-10-14T09:14:20.319Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T09:15:20.725Z", + "ok": false, + "ms": 10009 + }, + { + "t": "2026-10-14T09:16:37.123Z", + "ok": false, + "ms": 10003 + }, + { + "t": "2026-10-14T09:17:37.598Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T09:18:38.092Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T09:19:38.638Z", + "ok": false, + "ms": 10001 + }, + { + "t": "2026-10-14T09:20:48.296Z", + "ok": false, + "ms": 10016 + }, + { + "t": "2026-10-14T09:21:48.883Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T09:22:50.358Z", + "ok": false, + "ms": 10017 + }, + { + "t": "2026-10-14T09:23:51.118Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:24:16.484Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:24:52.836Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:25:53.279Z", + "ok": false, + "ms": 10010 + }, + { + "t": "2026-10-14T09:26:04.523Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:27:05.203Z", + "ok": false, + "ms": 10021 + }, + { + "t": "2026-10-14T09:27:37.013Z", + "ok": false, + "ms": 10008 + }, + { + "t": "2026-10-14T09:28:37.154Z", + "ok": false, + "ms": 10046 + }, + { + "t": "2026-10-14T09:29:37.679Z", + "ok": false, + "ms": 10006 + }, + { + "t": "2026-10-14T09:30:15.976Z", + "ok": false, + "ms": 10010 + }, + { + "t": "2026-10-14T09:31:16.504Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T09:31:27.854Z", + "ok": false, + "ms": 10019 + }, + { + "t": "2026-10-14T09:32:28.289Z", + "ok": false, + "ms": 10010 + }, + { + "t": "2026-10-14T09:32:58.627Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:33:59.150Z", + "ok": false, + "ms": 10003 } ], "daily": { "2026-10-14": { - "total": 14, + "total": 63, "up": 0 } } }, "ur-792059439": { "status": "up", - "latency": 335, + "latency": 263, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:57:00.000Z", + "lastCheck": "2026-10-14T09:32:00.000Z", "history": [ { - "t": "2026-10-13T09:40:00.000Z", + "t": "2026-10-13T10:15:00.000Z", "ok": true, - "ms": 296 + "ms": 307 }, { - "t": "2026-10-13T10:20:00.000Z", + "t": "2026-10-13T10:55:00.000Z", "ok": true, - "ms": 183 + "ms": 379 }, { - "t": "2026-10-13T11:00:00.000Z", + "t": "2026-10-13T11:35:00.000Z", "ok": true, - "ms": 413 + "ms": 244 }, { - "t": "2026-10-13T11:40:00.000Z", + "t": "2026-10-13T12:15:00.000Z", "ok": true, - "ms": 232 + "ms": 337 }, { - "t": "2026-10-13T12:20:00.000Z", + "t": "2026-10-13T12:55:00.000Z", "ok": true, - "ms": 295 + "ms": 392 }, { - "t": "2026-10-13T13:00:00.000Z", - "ok": true, - "ms": 258 - }, - { - "t": "2026-10-13T13:40:00.000Z", - "ok": true, - "ms": 277 - }, - { - "t": "2026-10-13T14:20:00.000Z", - "ok": true, - "ms": 563 - }, - { - "t": "2026-10-13T15:00:00.000Z", - "ok": true, - "ms": 248 - }, - { - "t": "2026-10-13T15:45:00.000Z", - "ok": true, - "ms": 253 - }, - { - "t": "2026-10-13T16:25:00.000Z", - "ok": true, - "ms": 487 - }, - { - "t": "2026-10-13T17:05:00.000Z", - "ok": true, - "ms": 257 - }, - { - "t": "2026-10-13T17:45:00.000Z", - "ok": true, - "ms": 314 - }, - { - "t": "2026-10-13T18:25:00.000Z", - "ok": true, - "ms": 344 - }, - { - "t": "2026-10-13T19:05:00.000Z", - "ok": true, - "ms": 478 - }, - { - "t": "2026-10-13T19:45:00.000Z", - "ok": true, - "ms": 409 - }, - { - "t": "2026-10-13T20:25:00.000Z", - "ok": true, - "ms": 369 - }, - { - "t": "2026-10-13T21:05:00.000Z", - "ok": true, - "ms": 241 - }, - { - "t": "2026-10-13T21:45:00.000Z", - "ok": true, - "ms": 298 - }, - { - "t": "2026-10-13T22:25:00.000Z", - "ok": true, - "ms": 182 - }, - { - "t": "2026-10-13T23:05:00.000Z", - "ok": true, - "ms": 265 - }, - { - "t": "2026-10-13T23:45:00.000Z", - "ok": true, - "ms": 242 - }, - { - "t": "2026-10-14T00:25:00.000Z", - "ok": true, - "ms": 333 - }, - { - "t": "2026-10-14T01:05:00.000Z", - "ok": true, - "ms": 336 - }, - { - "t": "2026-10-14T01:45:00.000Z", - "ok": true, - "ms": 180 - }, - { - "t": "2026-10-14T02:25:00.000Z", - "ok": true, - "ms": 326 - }, - { - "t": "2026-10-14T03:05:00.000Z", - "ok": true, - "ms": 205 - }, - { - "t": "2026-10-14T03:45:00.000Z", - "ok": true, - "ms": 278 - }, - { - "t": "2026-10-14T04:25:00.000Z", - "ok": true, - "ms": 176 - }, - { - "t": "2026-10-14T05:05:00.000Z", - "ok": true, - "ms": 266 - }, - { - "t": "2026-10-14T05:45:00.000Z", - "ok": true, - "ms": 414 - }, - { - "t": "2026-10-14T06:25:00.000Z", + "t": "2026-10-13T13:35:00.000Z", "ok": true, "ms": 249 }, { - "t": "2026-10-14T07:05:00.000Z", + "t": "2026-10-13T14:15:00.000Z", "ok": true, - "ms": 444 + "ms": 549 }, { - "t": "2026-10-14T07:41:00.000Z", + "t": "2026-10-13T14:55:00.000Z", "ok": true, - "ms": 652 + "ms": 231 }, { - "t": "2026-10-14T08:21:00.000Z", + "t": "2026-10-13T15:35:00.000Z", "ok": true, - "ms": 362 + "ms": 219 }, { - "t": "2026-10-14T08:57:00.000Z", + "t": "2026-10-13T16:15:00.000Z", "ok": true, - "ms": 335 + "ms": 443 + }, + { + "t": "2026-10-13T16:55:00.000Z", + "ok": true, + "ms": 249 + }, + { + "t": "2026-10-13T17:35:00.000Z", + "ok": true, + "ms": 207 + }, + { + "t": "2026-10-13T18:15:00.000Z", + "ok": true, + "ms": 363 + }, + { + "t": "2026-10-13T18:55:00.000Z", + "ok": true, + "ms": 507 + }, + { + "t": "2026-10-13T19:35:00.000Z", + "ok": true, + "ms": 333 + }, + { + "t": "2026-10-13T20:15:00.000Z", + "ok": true, + "ms": 294 + }, + { + "t": "2026-10-13T20:55:00.000Z", + "ok": true, + "ms": 301 + }, + { + "t": "2026-10-13T21:35:00.000Z", + "ok": true, + "ms": 280 + }, + { + "t": "2026-10-13T22:15:00.000Z", + "ok": true, + "ms": 257 + }, + { + "t": "2026-10-13T22:55:00.000Z", + "ok": true, + "ms": 236 + }, + { + "t": "2026-10-13T23:35:00.000Z", + "ok": true, + "ms": 328 + }, + { + "t": "2026-10-14T00:15:00.000Z", + "ok": true, + "ms": 387 + }, + { + "t": "2026-10-14T00:55:00.000Z", + "ok": true, + "ms": 180 + }, + { + "t": "2026-10-14T01:35:00.000Z", + "ok": true, + "ms": 343 + }, + { + "t": "2026-10-14T02:15:00.000Z", + "ok": true, + "ms": 295 + }, + { + "t": "2026-10-14T02:55:00.000Z", + "ok": true, + "ms": 210 + }, + { + "t": "2026-10-14T03:35:00.000Z", + "ok": true, + "ms": 239 + }, + { + "t": "2026-10-14T04:15:00.000Z", + "ok": true, + "ms": 271 + }, + { + "t": "2026-10-14T04:55:00.000Z", + "ok": true, + "ms": 206 + }, + { + "t": "2026-10-14T05:35:00.000Z", + "ok": true, + "ms": 318 + }, + { + "t": "2026-10-14T06:15:00.000Z", + "ok": true, + "ms": 303 + }, + { + "t": "2026-10-14T06:55:00.000Z", + "ok": true, + "ms": 470 + }, + { + "t": "2026-10-14T07:35:00.000Z", + "ok": true, + "ms": 421 + }, + { + "t": "2026-10-14T08:15:00.000Z", + "ok": true, + "ms": 325 + }, + { + "t": "2026-10-14T08:52:00.000Z", + "ok": true, + "ms": 366 + }, + { + "t": "2026-10-14T09:32:00.000Z", + "ok": true, + "ms": 263 } ], "daily": { "2026-10-14": { - "total": 3, - "up": 3, - "latSum": 1029, - "latCount": 3, - "latMax": 369 + "total": 6, + "up": 6, + "latSum": 1635, + "latCount": 6, + "latMax": 295 } }, "meta": { @@ -1101,28 +2296,23 @@ "90": 0 }, "lat": { - "avg": 343, - "max": 369, + "avg": 273, + "max": 295, "days": [ { "key": "2026-10-14", - "avg": 343 + "avg": 273 } ] } }, "ur-795497022": { "status": "up", - "latency": 806, + "latency": 1356, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:54:00.000Z", + "lastCheck": "2026-10-14T09:31:00.000Z", "history": [ - { - "t": "2026-10-13T10:00:00.000Z", - "ok": true, - "ms": 791 - }, { "t": "2026-10-13T10:40:00.000Z", "ok": true, @@ -1283,24 +2473,24 @@ "ok": true, "ms": 696 }, - { - "t": "2026-10-14T08:21:00.000Z", - "ok": true, - "ms": 757 - }, { "t": "2026-10-14T08:54:00.000Z", "ok": true, "ms": 806 + }, + { + "t": "2026-10-14T09:31:00.000Z", + "ok": true, + "ms": 1356 } ], "daily": { "2026-10-14": { - "total": 3, - "up": 3, - "latSum": 2324, - "latCount": 3, - "latMax": 806 + "total": 6, + "up": 6, + "latSum": 7988, + "latCount": 6, + "latMax": 1356 } }, "meta": { @@ -1325,211 +2515,206 @@ "90": 5432 }, "lat": { - "avg": 775, - "max": 806, + "avg": 1331, + "max": 1356, "days": [ { "key": "2026-10-14", - "avg": 775 + "avg": 1331 } ] } }, "ur-795556828": { "status": "up", - "latency": 357, + "latency": 251, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:57:00.000Z", + "lastCheck": "2026-10-14T09:27:00.000Z", "history": [ { - "t": "2026-10-13T09:35:00.000Z", - "ok": true, - "ms": 212 - }, - { - "t": "2026-10-13T10:15:00.000Z", - "ok": true, - "ms": 415 - }, - { - "t": "2026-10-13T10:55:00.000Z", - "ok": true, - "ms": 221 - }, - { - "t": "2026-10-13T11:35:00.000Z", - "ok": true, - "ms": 392 - }, - { - "t": "2026-10-13T12:15:00.000Z", - "ok": true, - "ms": 291 - }, - { - "t": "2026-10-13T12:55:00.000Z", - "ok": true, - "ms": 380 - }, - { - "t": "2026-10-13T13:35:00.000Z", - "ok": true, - "ms": 303 - }, - { - "t": "2026-10-13T14:15:00.000Z", - "ok": true, - "ms": 322 - }, - { - "t": "2026-10-13T14:55:00.000Z", - "ok": true, - "ms": 476 - }, - { - "t": "2026-10-13T15:35:00.000Z", - "ok": true, - "ms": 320 - }, - { - "t": "2026-10-13T16:15:00.000Z", - "ok": true, - "ms": 318 - }, - { - "t": "2026-10-13T16:55:00.000Z", - "ok": true, - "ms": 414 - }, - { - "t": "2026-10-13T17:35:00.000Z", + "t": "2026-10-13T10:40:00.000Z", "ok": true, "ms": 384 }, { - "t": "2026-10-13T18:15:00.000Z", + "t": "2026-10-13T11:20:00.000Z", "ok": true, - "ms": 424 + "ms": 334 }, { - "t": "2026-10-13T18:55:00.000Z", + "t": "2026-10-13T12:00:00.000Z", "ok": true, - "ms": 260 + "ms": 234 }, { - "t": "2026-10-13T19:35:00.000Z", + "t": "2026-10-13T12:40:00.000Z", "ok": true, - "ms": 293 + "ms": 335 }, { - "t": "2026-10-13T20:15:00.000Z", + "t": "2026-10-13T13:20:00.000Z", "ok": true, - "ms": 273 + "ms": 379 }, { - "t": "2026-10-13T20:55:00.000Z", + "t": "2026-10-13T14:00:00.000Z", "ok": true, - "ms": 471 + "ms": 304 }, { - "t": "2026-10-13T21:35:00.000Z", - "ok": true, - "ms": 347 - }, - { - "t": "2026-10-13T22:15:00.000Z", - "ok": true, - "ms": 238 - }, - { - "t": "2026-10-13T22:55:00.000Z", - "ok": true, - "ms": 233 - }, - { - "t": "2026-10-13T23:35:00.000Z", - "ok": true, - "ms": 240 - }, - { - "t": "2026-10-14T00:15:00.000Z", - "ok": true, - "ms": 312 - }, - { - "t": "2026-10-14T00:55:00.000Z", + "t": "2026-10-13T14:40:00.000Z", "ok": true, "ms": 341 }, { - "t": "2026-10-14T01:40:00.000Z", + "t": "2026-10-13T15:25:00.000Z", "ok": true, - "ms": 382 + "ms": 417 }, { - "t": "2026-10-14T02:20:00.000Z", + "t": "2026-10-13T16:05:00.000Z", "ok": true, - "ms": 129 + "ms": 241 }, { - "t": "2026-10-14T03:00:00.000Z", + "t": "2026-10-13T16:45:00.000Z", "ok": true, - "ms": 595 + "ms": 366 }, { - "t": "2026-10-14T03:40:00.000Z", + "t": "2026-10-13T17:25:00.000Z", "ok": true, - "ms": 465 + "ms": 244 }, { - "t": "2026-10-14T04:20:00.000Z", + "t": "2026-10-13T18:05:00.000Z", "ok": true, - "ms": 332 + "ms": 378 }, { - "t": "2026-10-14T05:00:00.000Z", + "t": "2026-10-13T18:45:00.000Z", "ok": true, - "ms": 269 + "ms": 310 }, { - "t": "2026-10-14T05:40:00.000Z", + "t": "2026-10-13T19:25:00.000Z", "ok": true, - "ms": 549 + "ms": 335 }, { - "t": "2026-10-14T06:20:00.000Z", + "t": "2026-10-13T20:05:00.000Z", "ok": true, - "ms": 177 + "ms": 351 }, { - "t": "2026-10-14T07:00:00.000Z", + "t": "2026-10-13T20:45:00.000Z", "ok": true, - "ms": 394 + "ms": 523 }, { - "t": "2026-10-14T07:36:00.000Z", + "t": "2026-10-13T21:25:00.000Z", "ok": true, - "ms": 182 + "ms": 400 }, { - "t": "2026-10-14T08:16:00.000Z", + "t": "2026-10-13T22:05:00.000Z", "ok": true, - "ms": 369 + "ms": 222 }, { - "t": "2026-10-14T08:57:00.000Z", + "t": "2026-10-13T22:45:00.000Z", "ok": true, - "ms": 357 + "ms": 169 + }, + { + "t": "2026-10-13T23:25:00.000Z", + "ok": true, + "ms": 225 + }, + { + "t": "2026-10-14T00:05:00.000Z", + "ok": true, + "ms": 209 + }, + { + "t": "2026-10-14T00:45:00.000Z", + "ok": true, + "ms": 272 + }, + { + "t": "2026-10-14T01:25:00.000Z", + "ok": true, + "ms": 431 + }, + { + "t": "2026-10-14T02:05:00.000Z", + "ok": true, + "ms": 241 + }, + { + "t": "2026-10-14T02:45:00.000Z", + "ok": true, + "ms": 444 + }, + { + "t": "2026-10-14T03:25:00.000Z", + "ok": true, + "ms": 359 + }, + { + "t": "2026-10-14T04:05:00.000Z", + "ok": true, + "ms": 400 + }, + { + "t": "2026-10-14T04:45:00.000Z", + "ok": true, + "ms": 214 + }, + { + "t": "2026-10-14T05:25:00.000Z", + "ok": true, + "ms": 404 + }, + { + "t": "2026-10-14T06:05:00.000Z", + "ok": true, + "ms": 137 + }, + { + "t": "2026-10-14T06:50:00.000Z", + "ok": true, + "ms": 412 + }, + { + "t": "2026-10-14T07:30:00.000Z", + "ok": true, + "ms": 303 + }, + { + "t": "2026-10-14T08:10:00.000Z", + "ok": true, + "ms": 387 + }, + { + "t": "2026-10-14T08:47:00.000Z", + "ok": true, + "ms": 418 + }, + { + "t": "2026-10-14T09:27:00.000Z", + "ok": true, + "ms": 251 } ], "daily": { "2026-10-14": { - "total": 3, - "up": 3, - "latSum": 1079, - "latCount": 3, - "latMax": 384 + "total": 6, + "up": 6, + "latSum": 1443, + "latCount": 6, + "latMax": 251 } }, "meta": { @@ -1554,28 +2739,23 @@ "90": 0 }, "lat": { - "avg": 360, - "max": 384, + "avg": 241, + "max": 251, "days": [ { "key": "2026-10-14", - "avg": 360 + "avg": 241 } ] } }, "ur-792059414": { "status": "up", - "latency": 3205, + "latency": 2695, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:57:00.000Z", + "lastCheck": "2026-10-14T09:30:00.000Z", "history": [ - { - "t": "2026-10-13T09:55:00.000Z", - "ok": true, - "ms": 1597 - }, { "t": "2026-10-13T10:40:00.000Z", "ok": true, @@ -1722,28 +2902,33 @@ "ms": 1423 }, { - "t": "2026-10-14T07:38:00.000Z", + "t": "2026-10-14T07:35:00.000Z", "ok": true, - "ms": 2110 + "ms": 2010 }, { - "t": "2026-10-14T08:17:00.000Z", + "t": "2026-10-14T08:15:00.000Z", "ok": true, "ms": 2428 }, { - "t": "2026-10-14T08:57:00.000Z", + "t": "2026-10-14T08:51:00.000Z", "ok": true, - "ms": 3205 + "ms": 2460 + }, + { + "t": "2026-10-14T09:30:00.000Z", + "ok": true, + "ms": 2695 } ], "daily": { "2026-10-14": { - "total": 3, - "up": 3, - "latSum": 8282, - "latCount": 3, - "latMax": 3205 + "total": 6, + "up": 6, + "latSum": 17898, + "latCount": 6, + "latMax": 3289 } }, "meta": { @@ -1768,211 +2953,206 @@ "90": 7593 }, "lat": { - "avg": 2761, - "max": 3205, + "avg": 2983, + "max": 3289, "days": [ { "key": "2026-10-14", - "avg": 2761 + "avg": 2983 } ] } }, "ur-798788113": { "status": "up", - "latency": 375, + "latency": 410, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:58:00.000Z", + "lastCheck": "2026-10-14T09:28:00.000Z", "history": [ { - "t": "2026-10-13T09:35:00.000Z", + "t": "2026-10-13T10:35:00.000Z", "ok": true, - "ms": 605 + "ms": 519 }, { - "t": "2026-10-13T10:15:00.000Z", + "t": "2026-10-13T11:15:00.000Z", + "ok": true, + "ms": 325 + }, + { + "t": "2026-10-13T11:55:00.000Z", + "ok": true, + "ms": 933 + }, + { + "t": "2026-10-13T12:35:00.000Z", + "ok": true, + "ms": 424 + }, + { + "t": "2026-10-13T13:15:00.000Z", + "ok": true, + "ms": 460 + }, + { + "t": "2026-10-13T13:55:00.000Z", + "ok": true, + "ms": 496 + }, + { + "t": "2026-10-13T14:35:00.000Z", + "ok": true, + "ms": 438 + }, + { + "t": "2026-10-13T15:15:00.000Z", + "ok": true, + "ms": 459 + }, + { + "t": "2026-10-13T15:55:00.000Z", + "ok": true, + "ms": 349 + }, + { + "t": "2026-10-13T16:35:00.000Z", + "ok": true, + "ms": 367 + }, + { + "t": "2026-10-13T17:15:00.000Z", + "ok": true, + "ms": 504 + }, + { + "t": "2026-10-13T17:55:00.000Z", + "ok": true, + "ms": 286 + }, + { + "t": "2026-10-13T18:35:00.000Z", + "ok": true, + "ms": 389 + }, + { + "t": "2026-10-13T19:15:00.000Z", + "ok": true, + "ms": 1491 + }, + { + "t": "2026-10-13T19:55:00.000Z", "ok": true, "ms": 456 }, { - "t": "2026-10-13T10:55:00.000Z", + "t": "2026-10-13T20:35:00.000Z", "ok": true, - "ms": 420 + "ms": 433 }, { - "t": "2026-10-13T11:35:00.000Z", + "t": "2026-10-13T21:15:00.000Z", "ok": true, - "ms": 878 + "ms": 426 }, { - "t": "2026-10-13T12:15:00.000Z", + "t": "2026-10-13T21:55:00.000Z", "ok": true, - "ms": 530 + "ms": 249 }, { - "t": "2026-10-13T12:55:00.000Z", + "t": "2026-10-13T22:35:00.000Z", "ok": true, - "ms": 517 + "ms": 359 }, { - "t": "2026-10-13T13:35:00.000Z", + "t": "2026-10-13T23:15:00.000Z", "ok": true, - "ms": 491 + "ms": 311 }, { - "t": "2026-10-13T14:20:00.000Z", + "t": "2026-10-13T23:55:00.000Z", "ok": true, - "ms": 429 + "ms": 222 }, { - "t": "2026-10-13T15:00:00.000Z", + "t": "2026-10-14T00:35:00.000Z", "ok": true, - "ms": 447 + "ms": 332 }, { - "t": "2026-10-13T15:40:00.000Z", - "ok": true, - "ms": 404 - }, - { - "t": "2026-10-13T16:20:00.000Z", - "ok": true, - "ms": 312 - }, - { - "t": "2026-10-13T17:00:00.000Z", - "ok": true, - "ms": 400 - }, - { - "t": "2026-10-13T17:40:00.000Z", - "ok": true, - "ms": 431 - }, - { - "t": "2026-10-13T18:20:00.000Z", - "ok": true, - "ms": 632 - }, - { - "t": "2026-10-13T19:00:00.000Z", - "ok": true, - "ms": 372 - }, - { - "t": "2026-10-13T19:45:00.000Z", - "ok": true, - "ms": 411 - }, - { - "t": "2026-10-13T20:25:00.000Z", - "ok": true, - "ms": 465 - }, - { - "t": "2026-10-13T21:05:00.000Z", - "ok": true, - "ms": 392 - }, - { - "t": "2026-10-13T21:45:00.000Z", - "ok": true, - "ms": 284 - }, - { - "t": "2026-10-13T22:25:00.000Z", - "ok": true, - "ms": 329 - }, - { - "t": "2026-10-13T23:05:00.000Z", - "ok": true, - "ms": 360 - }, - { - "t": "2026-10-13T23:45:00.000Z", - "ok": true, - "ms": 221 - }, - { - "t": "2026-10-14T00:25:00.000Z", - "ok": true, - "ms": 265 - }, - { - "t": "2026-10-14T01:05:00.000Z", - "ok": true, - "ms": 287 - }, - { - "t": "2026-10-14T01:45:00.000Z", + "t": "2026-10-14T01:15:00.000Z", "ok": true, "ms": 328 }, { - "t": "2026-10-14T02:25:00.000Z", + "t": "2026-10-14T01:55:00.000Z", "ok": true, - "ms": 376 + "ms": 300 }, { - "t": "2026-10-14T03:05:00.000Z", + "t": "2026-10-14T02:35:00.000Z", "ok": true, - "ms": 253 + "ms": 405 }, { - "t": "2026-10-14T03:45:00.000Z", + "t": "2026-10-14T03:15:00.000Z", "ok": true, - "ms": 293 + "ms": 258 }, { - "t": "2026-10-14T04:25:00.000Z", + "t": "2026-10-14T03:55:00.000Z", "ok": true, - "ms": 319 + "ms": 274 }, { - "t": "2026-10-14T05:05:00.000Z", + "t": "2026-10-14T04:35:00.000Z", "ok": true, - "ms": 329 + "ms": 265 }, { - "t": "2026-10-14T05:45:00.000Z", + "t": "2026-10-14T05:15:00.000Z", "ok": true, - "ms": 634 + "ms": 373 }, { - "t": "2026-10-14T06:25:00.000Z", + "t": "2026-10-14T06:00:00.000Z", "ok": true, - "ms": 526 + "ms": 675 }, { - "t": "2026-10-14T07:05:00.000Z", + "t": "2026-10-14T06:40:00.000Z", "ok": true, - "ms": 436 + "ms": 525 }, { - "t": "2026-10-14T07:42:00.000Z", + "t": "2026-10-14T07:20:00.000Z", "ok": true, - "ms": 395 + "ms": 435 }, { - "t": "2026-10-14T08:22:00.000Z", + "t": "2026-10-14T08:12:00.000Z", "ok": true, - "ms": 443 + "ms": 227 }, { - "t": "2026-10-14T08:58:00.000Z", + "t": "2026-10-14T08:48:00.000Z", "ok": true, - "ms": 375 + "ms": 450 + }, + { + "t": "2026-10-14T09:28:00.000Z", + "ok": true, + "ms": 410 } ], "daily": { "2026-10-14": { - "total": 3, - "up": 3, - "latSum": 1245, - "latCount": 3, - "latMax": 450 + "total": 6, + "up": 6, + "latSum": 2418, + "latCount": 6, + "latMax": 427 } }, "meta": { @@ -1997,12 +3177,12 @@ "90": 0 }, "lat": { - "avg": 415, - "max": 450, + "avg": 403, + "max": 427, "days": [ { "key": "2026-10-14", - "avg": 415 + "avg": 403 } ] } @@ -2027,7 +3207,7 @@ ], "daily": { "2026-10-14": { - "total": 3, + "total": 6, "up": 0 } }, @@ -2055,4 +3235,3 @@ } } } - \ No newline at end of file diff --git a/scripts/prepare-artwork.py b/scripts/prepare-artwork.py index df04814..c44a643 100644 --- a/scripts/prepare-artwork.py +++ b/scripts/prepare-artwork.py @@ -104,8 +104,17 @@ def main(): figure = cut_out(SRC / "figure-original.png", DST / "shiroko-figure.webp", 560, min_area=150) # 图标:补成正方形再缩到 180,供圆形头像与 favicon 使用 icon = cut_out(SRC / "icon-original.png", DST / "shiroko-icon.webp", 180, min_area=15, square=True) - icon.resize((64, 64), Image.LANCZOS).save(DST / "favicon-shiroko.png", "PNG", optimize=True) - print(f"favicon-shiroko.png: 64x64,体积 {(DST / 'favicon-shiroko.png').stat().st_size / 1024:.1f}KB") + + # favicon 两种格式都产出:PNG 64 与 WebP 64。 + # PNG 不删——favicon 是浏览器最早的请求,WebP 覆盖虽广但旧浏览器会直接不显示图标, + # 留 PNG 作回退代价只有几 KB,换来「任何浏览器都有图标」更稳妥。 + icon64 = icon.resize((64, 64), Image.LANCZOS) + icon64.save(DST / "favicon-shiroko.png", "PNG", optimize=True) + icon64.save(DST / "favicon-shiroko.webp", "WEBP", quality=90, method=6) + png_kb = (DST / "favicon-shiroko.png").stat().st_size / 1024 + webp_kb = (DST / "favicon-shiroko.webp").stat().st_size / 1024 + print(f"favicon-shiroko: 64x64,PNG {png_kb:.1f}KB / WebP {webp_kb:.1f}KB") + # 单车:200 高,通体无服装白,全部清理 cut_out(SRC / "bike-original.png", DST / "shiroko-bike.webp", 200, min_area=20) print("完成。视觉上请确认:光环环内、车架三角、轮圈内扇形均为透明,且角色的脸/袜子/衣服完好。") diff --git a/scripts/verify-views.cjs b/scripts/verify-views.cjs index dbec830..d0bec6b 100644 --- a/scripts/verify-views.cjs +++ b/scripts/verify-views.cjs @@ -437,6 +437,37 @@ async function main() { const refreshBtnShown = await dp.evaluate(() => !document.getElementById('refresh-btn').hidden); check('同源模式下保留刷新按钮', refreshBtnShown === true, `可见=${refreshBtnShown}`); check('事件默认折叠为 8 条并可展开', evr.shown === 8 && evr.moreHidden === false && /展开全部 12 条/.test(evr.moreText), `显示 ${evr.shown} 条,按钮「${evr.moreText}」,计数「${evr.count}」`); + + // ---- 事件随分组页签联动 ---- + // 此前 setFilter 只重渲染视图不重渲染事件,且过滤依据用的是 allMonitors() + // (只受 dataFilter 约束、不受分组影响),导致切页签后事件纹丝不动。 + const evTabs = await dp.evaluate(() => [...document.querySelectorAll('#group-tabs .tab')].map((t) => t.textContent.trim())); + // 找一个「事件里没有目标」的分组:演示数据的 12 条事件全部挂在 ids[0] 上, + // 因此要排除 ids[0] 所属的那个分组 + const ids0Group = cfgJson.monitors.find((m) => m.id === ids[0])?.group || '未分组'; + const quietTab = evTabs.find((t) => !t.startsWith('全部') && !t.startsWith(ids0Group)); + check('存在可用于验证的分组页签', Boolean(quietTab), `事件目标属于「${ids0Group}」,可用安静分组:${quietTab ?? '无'}`); + if (quietTab) { + await dp.click(`#group-tabs .tab:text-is("${quietTab}")`); + await dp.waitForTimeout(500); + const evAfter = await dp.evaluate(() => { + const visIds = [...document.querySelectorAll('table.monitor-table tbody tr[data-status]')].map((tr) => tr.dataset.id); + const rows = [...document.querySelectorAll('.events-table tbody tr')]; + return { + visibleTargets: visIds, + events: rows.length, + // 事件行里的目标名必须都属于当前页签可见的目标 + names: rows.map((tr) => tr.querySelector('.ev-name')?.textContent?.trim()), + hidden: document.getElementById('events').hidden, + }; + }); + check('切分组页签后事件同步过滤(不再显示其它分组的事件)', evAfter.events === 0 && evAfter.hidden === true, + `「${quietTab}」页签下事件 ${evAfter.events} 条、区块隐藏=${evAfter.hidden}`); + } + await dp.click('#group-tabs .tab:text-matches("^全部")'); + await dp.waitForTimeout(400); + const evBack = await dp.evaluate(() => document.querySelectorAll('.events-table tbody tr').length); + check('切回「全部」恢复完整事件', evBack === 8, `${evBack} 条`); await dp.click('#events-more'); await dp.waitForTimeout(300); const evExpanded = await dp.evaluate(() => ({ shown: document.querySelectorAll('.events-table tbody tr').length, text: document.getElementById('events-more').textContent }));