From fe8b24ca0b75e1e660ff95b74e3c3e68a58def3e Mon Sep 17 00:00:00 2001 From: Nexus Agent Date: Mon, 8 Jun 2026 13:22:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(notify):=20=E8=B5=84=E6=BA=90=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=20Telegram=20=E8=81=94=E5=8A=A8=20CPU/=E5=86=85?= =?UTF-8?q?=E5=AD=98/=E7=A3=81=E7=9B=98=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关闭分项告警后不再推送对应恢复消息;仪表盘移除服务器列表并更新设置页说明。 Co-authored-by: Cursor --- ...2026-06-08-dashboard-remove-server-list.md | 25 + ...otify-recovery-respects-resource-toggle.md | 44 + frontend/src/pages/DashboardPage.vue | 132 +-- frontend/src/types/api.ts | 8 +- server/infrastructure/telegram/__init__.py | 8 +- server/utils/notify_toggles.py | 8 + tests/test_notify_toggle_sync.py | 84 +- web/app/assets/AlertsPage-BZQCosne.js | 1 + web/app/assets/AlertsPage-DEhrnRXw.js | 1 + web/app/assets/AlertsPage-lKlDYxx4.js | 1 + web/app/assets/AuditPage-BtWYkfzP.js | 1 + web/app/assets/AuditPage-C_u3ECwa.js | 1 + web/app/assets/AuditPage-DeLO9C3F.js | 1 + web/app/assets/CommandsPage-CbWGlTo9.js | 1 + web/app/assets/CommandsPage-DyneNM8l.js | 1 + web/app/assets/CommandsPage-d3Hw9Goi.js | 1 + web/app/assets/CredentialsPage-BHTPe2w5.js | 1 + web/app/assets/CredentialsPage-Lx5I4dc6.js | 1 + web/app/assets/CredentialsPage-OP0YQkTS.js | 1 + web/app/assets/DashboardPage-BYn7ZpaN.js | 1 + web/app/assets/DashboardPage-BpuLHXj7.css | 1 + web/app/assets/DashboardPage-xbS9JOWw.js | 1 + web/app/assets/FilesPage-Pd21-rhn.js | 5 + web/app/assets/FilesPage-Rn3vCaGc.js | 5 + web/app/assets/FilesPage-mPlRFeQq.js | 5 + web/app/assets/LoginPage-DGQFSxA6.js | 2 + web/app/assets/LoginPage-Sh1IkN1s.js | 2 + web/app/assets/LoginPage-TzyNiom2.js | 2 + web/app/assets/PushPage--YzViah6.js | 1 + web/app/assets/PushPage-CLvtODbV.js | 1 + web/app/assets/PushPage-pt6Oxlab.js | 1 + web/app/assets/RetriesPage-Bofa-zhG.js | 1 + web/app/assets/RetriesPage-C2p3hafx.js | 1 + web/app/assets/RetriesPage-CDKeG6eT.js | 1 + web/app/assets/SchedulesPage-B9vZdjFC.js | 1 + web/app/assets/SchedulesPage-CfGkb1B0.js | 1 + web/app/assets/SchedulesPage-CoH6CWmU.js | 1 + web/app/assets/ScriptRunsPage-6WrqZoVX.js | 4 + web/app/assets/ScriptRunsPage-BPUA85Nn.js | 4 + web/app/assets/ScriptRunsPage-JeF58byA.js | 4 + web/app/assets/ScriptsPage-CLQ9-mT1.js | 4 + web/app/assets/ScriptsPage-CSG48kqt.js | 4 + web/app/assets/ScriptsPage-Db9rTJv5.js | 4 + .../assets/ServerCategoryPicker-BEiEm8ez.js | 1 + .../assets/ServerCategoryPicker-CJOxqetm.js | 1 + .../assets/ServerCategoryPicker-CeuzuOv3.js | 1 + web/app/assets/ServersPage-BNFPP1nq.js | 6 + web/app/assets/ServersPage-C8k0CwrR.js | 6 + web/app/assets/ServersPage-DA4B33ED.js | 6 + web/app/assets/SettingsPage-BThj71dO.js | 4 + web/app/assets/SettingsPage-BxGWNdp-.js | 4 + web/app/assets/SettingsPage-CeEAblSE.js | 4 + web/app/assets/TerminalPage-CUBXjyNV.js | 40 + web/app/assets/TerminalPage-DBXObx4W.js | 40 + web/app/assets/TerminalPage-DWYj47os.js | 40 + web/app/assets/VCard-BCYbpv-w.css | 1 + web/app/assets/VCard-DG7tl1W3.js | 1 + web/app/assets/VCard-DlMwyEqJ.js | 1 + web/app/assets/VCheckbox-BNHu2Ni-.js | 1 + web/app/assets/VCheckbox-Pj7A1jSY.js | 1 + web/app/assets/VCheckbox-ulE1A8vl.js | 1 + web/app/assets/VDataTable-B6BJAfR0.js | 1 + web/app/assets/VDataTable-BKN9-AAM.js | 1 + web/app/assets/VDataTable-BsfIw2KT.js | 1 + web/app/assets/VDataTableServer-BdKEAQOW.js | 1 + web/app/assets/VDataTableServer-CR3qnZHu.js | 1 + web/app/assets/VDataTableServer-CjBqC_8R.js | 1 + web/app/assets/VDialog-B6-oM1_y.js | 1 + web/app/assets/VDialog-BkSq0Dpm.js | 1 + web/app/assets/VDialog-CY50SVhr.js | 1 + web/app/assets/VExpansionPanels-Bbqsneok.js | 1 + web/app/assets/VExpansionPanels-D9u3ogml.js | 1 + web/app/assets/VExpansionPanels-rWLcYwq9.js | 1 + web/app/assets/VRow-CzXFTsmH.js | 1 + web/app/assets/VRow-D0MdcU9n.js | 1 + web/app/assets/VRow-D8vxlJBy.js | 1 + web/app/assets/VSelect-B0g3ZUg7.js | 1 + web/app/assets/VSelect-BXcWCaZC.js | 1 + web/app/assets/VSelect-Dq2BX-8H.css | 1 + web/app/assets/VSelect-aldIHHnJ.js | 1 + web/app/assets/VSkeletonLoader-CqOmVXLK.js | 1 + web/app/assets/VSkeletonLoader-DxiRHoSX.js | 1 + web/app/assets/VSkeletonLoader-F_zSyYcH.js | 1 + web/app/assets/VSwitch-C6ndRQTG.js | 1 + web/app/assets/VSwitch-CPuooCi9.js | 1 + web/app/assets/VSwitch-CxtbaDYX.js | 1 + web/app/assets/VTextField-CDCuiswI.js | 1 + web/app/assets/VTextField-Dxz7ci9T.js | 1 + web/app/assets/VTextField-zCSFfS1g.js | 1 + web/app/assets/VTextarea-C7GrnoX1.js | 1 + web/app/assets/VTextarea-DP8HH1tw.js | 1 + web/app/assets/VTextarea-DsPeHozX.js | 1 + web/app/assets/apiError-DafyJZAf.js | 1 + web/app/assets/apiError-tihdhjX4.js | 1 + web/app/assets/apiError-tpp1zGzn.js | 1 + web/app/assets/cssMode-BW5EOAqi.js | 1 + web/app/assets/cssMode-DZYcWT-z.js | 1 + web/app/assets/cssMode-sBsqzQDn.js | 1 + web/app/assets/execDetailGrouping-D6aWeQF2.js | 2 + web/app/assets/execDetailGrouping-Dfz7md4u.js | 2 + web/app/assets/execDetailGrouping-DyZmgeFH.js | 2 + web/app/assets/freemarker2-CahcONBW.js | 3 + web/app/assets/freemarker2-Dg44JDOs.js | 3 + web/app/assets/freemarker2-DlCeLOfO.js | 3 + web/app/assets/handlebars-CEuppsNX.js | 1 + web/app/assets/handlebars-D6W5n92v.js | 1 + web/app/assets/handlebars-lY0Fvd4c.js | 1 + web/app/assets/html-BUH_eug0.js | 1 + web/app/assets/html-CLzejF-u.js | 1 + web/app/assets/html-DUwtjlOC.js | 1 + web/app/assets/htmlMode-BtKbfoud.js | 1 + web/app/assets/htmlMode-CP_wpvvm.js | 1 + web/app/assets/htmlMode-CtK2Y7Fb.js | 1 + web/app/assets/index-B-6ti5uq.js | 15 + web/app/assets/index-P23lP3ez.js | 15 + web/app/assets/index-o-DiVeam.js | 15 + web/app/assets/initMonaco-BQe_Vc01.js | 877 ++++++++++++++++++ web/app/assets/initMonaco-CQC3bznY.js | 877 ++++++++++++++++++ web/app/assets/initMonaco-CvmREdYY.js | 877 ++++++++++++++++++ web/app/assets/javascript-BS5JKtQm.js | 1 + web/app/assets/javascript-Box5NkUy.js | 1 + web/app/assets/javascript-Cksfepfc.js | 1 + web/app/assets/jsonMode-CD7rSOO-.js | 7 + web/app/assets/jsonMode-Duwtco4G.js | 7 + web/app/assets/jsonMode-suLWsNsD.js | 7 + web/app/assets/liquid-BghT1kp7.js | 1 + web/app/assets/liquid-DNLPiGXP.js | 1 + web/app/assets/liquid-DrQr4OxD.js | 1 + .../assets/lspLanguageFeatures-BMpUJMhV.js | 4 + .../assets/lspLanguageFeatures-CK2Te1BA.js | 4 + .../assets/lspLanguageFeatures-DuUuMWpl.js | 4 + web/app/assets/mdx-BInYme64.js | 1 + web/app/assets/mdx-CRte9tta.js | 1 + web/app/assets/mdx-ZEUTRkwB.js | 1 + web/app/assets/paginatedFetch-C4g8n3XU.js | 1 + web/app/assets/paginatedFetch-CQcQpDYm.js | 1 + web/app/assets/paginatedFetch-DRpmsuj1.js | 1 + web/app/assets/python-B6LyZiYz.js | 1 + web/app/assets/python-C8y82GX7.js | 1 + web/app/assets/python-Wx74HjjF.js | 1 + web/app/assets/razor-BSrey19x.js | 1 + web/app/assets/razor-CD9NZQV_.js | 1 + web/app/assets/razor-DISFzUqS.js | 1 + web/app/assets/router-BJH48GMz.js | 1 + web/app/assets/router-DahRHO28.js | 1 + web/app/assets/router-G0ZwQ09q.js | 1 + web/app/assets/tsMode-B8E5hZJB.js | 11 + web/app/assets/tsMode-luT0Ao-f.js | 11 + web/app/assets/tsMode-v2sqkanR.js | 11 + web/app/assets/typescript-C_4A5aCy.js | 1 + web/app/assets/typescript-DWFhcH5V.js | 1 + web/app/assets/typescript-mVoKBjGa.js | 1 + .../assets/usePageActivateRefresh-C5hQgakB.js | 1 + .../assets/usePageActivateRefresh-D6x0Mrqy.js | 1 + .../assets/usePageActivateRefresh-rSz1HWvD.js | 1 + web/app/assets/usePageAutoRefresh-DEUzN5Sb.js | 1 + web/app/assets/usePageAutoRefresh-DTvnm6_E.js | 1 + web/app/assets/usePageAutoRefresh-Go2rtdJ9.js | 1 + web/app/assets/usePushStaging-C74t5Ah2.js | 1 + web/app/assets/usePushStaging-Ces5F3LN.js | 1 + web/app/assets/usePushStaging-pIM77PUF.js | 1 + .../assets/useServerCategories-BUEITfqt.js | 1 + .../assets/useServerCategories-l9EnMo_0.js | 1 + .../assets/useServerCategories-zyhf7YJg.js | 1 + web/app/assets/useServerList-BJOgzGyG.js | 1 + web/app/assets/useServerList-C9-2d_jw.js | 1 + web/app/assets/useServerList-OGSwHB-x.js | 1 + web/app/assets/useSnackbar-7jYVUR9G.js | 1 + web/app/assets/useSnackbar-knhbsEw2.js | 1 + web/app/assets/useSnackbar-ku9EbwM-.css | 1 + .../useTerminalQuickCommands-B5hqIaL6.js | 2 + .../useTerminalQuickCommands-BQ9RgSbI.js | 2 + .../useTerminalQuickCommands-DZ7cyXo_.js | 2 + web/app/assets/xml-BXcUi15X.js | 1 + web/app/assets/xml-C4Ojghsz.js | 1 + web/app/assets/xml-Dr9R-XND.js | 1 + web/app/assets/yaml-BTVqqSpP.js | 1 + web/app/assets/yaml-BwzaXmQp.js | 1 + web/app/assets/yaml-CHRwztiG.js | 1 + web/app/index.html | 2 +- 180 files changed, 3250 insertions(+), 146 deletions(-) create mode 100644 docs/changelog/2026-06-08-dashboard-remove-server-list.md create mode 100644 docs/changelog/2026-06-08-notify-recovery-respects-resource-toggle.md create mode 100644 web/app/assets/AlertsPage-BZQCosne.js create mode 100644 web/app/assets/AlertsPage-DEhrnRXw.js create mode 100644 web/app/assets/AlertsPage-lKlDYxx4.js create mode 100644 web/app/assets/AuditPage-BtWYkfzP.js create mode 100644 web/app/assets/AuditPage-C_u3ECwa.js create mode 100644 web/app/assets/AuditPage-DeLO9C3F.js create mode 100644 web/app/assets/CommandsPage-CbWGlTo9.js create mode 100644 web/app/assets/CommandsPage-DyneNM8l.js create mode 100644 web/app/assets/CommandsPage-d3Hw9Goi.js create mode 100644 web/app/assets/CredentialsPage-BHTPe2w5.js create mode 100644 web/app/assets/CredentialsPage-Lx5I4dc6.js create mode 100644 web/app/assets/CredentialsPage-OP0YQkTS.js create mode 100644 web/app/assets/DashboardPage-BYn7ZpaN.js create mode 100644 web/app/assets/DashboardPage-BpuLHXj7.css create mode 100644 web/app/assets/DashboardPage-xbS9JOWw.js create mode 100644 web/app/assets/FilesPage-Pd21-rhn.js create mode 100644 web/app/assets/FilesPage-Rn3vCaGc.js create mode 100644 web/app/assets/FilesPage-mPlRFeQq.js create mode 100644 web/app/assets/LoginPage-DGQFSxA6.js create mode 100644 web/app/assets/LoginPage-Sh1IkN1s.js create mode 100644 web/app/assets/LoginPage-TzyNiom2.js create mode 100644 web/app/assets/PushPage--YzViah6.js create mode 100644 web/app/assets/PushPage-CLvtODbV.js create mode 100644 web/app/assets/PushPage-pt6Oxlab.js create mode 100644 web/app/assets/RetriesPage-Bofa-zhG.js create mode 100644 web/app/assets/RetriesPage-C2p3hafx.js create mode 100644 web/app/assets/RetriesPage-CDKeG6eT.js create mode 100644 web/app/assets/SchedulesPage-B9vZdjFC.js create mode 100644 web/app/assets/SchedulesPage-CfGkb1B0.js create mode 100644 web/app/assets/SchedulesPage-CoH6CWmU.js create mode 100644 web/app/assets/ScriptRunsPage-6WrqZoVX.js create mode 100644 web/app/assets/ScriptRunsPage-BPUA85Nn.js create mode 100644 web/app/assets/ScriptRunsPage-JeF58byA.js create mode 100644 web/app/assets/ScriptsPage-CLQ9-mT1.js create mode 100644 web/app/assets/ScriptsPage-CSG48kqt.js create mode 100644 web/app/assets/ScriptsPage-Db9rTJv5.js create mode 100644 web/app/assets/ServerCategoryPicker-BEiEm8ez.js create mode 100644 web/app/assets/ServerCategoryPicker-CJOxqetm.js create mode 100644 web/app/assets/ServerCategoryPicker-CeuzuOv3.js create mode 100644 web/app/assets/ServersPage-BNFPP1nq.js create mode 100644 web/app/assets/ServersPage-C8k0CwrR.js create mode 100644 web/app/assets/ServersPage-DA4B33ED.js create mode 100644 web/app/assets/SettingsPage-BThj71dO.js create mode 100644 web/app/assets/SettingsPage-BxGWNdp-.js create mode 100644 web/app/assets/SettingsPage-CeEAblSE.js create mode 100644 web/app/assets/TerminalPage-CUBXjyNV.js create mode 100644 web/app/assets/TerminalPage-DBXObx4W.js create mode 100644 web/app/assets/TerminalPage-DWYj47os.js create mode 100644 web/app/assets/VCard-BCYbpv-w.css create mode 100644 web/app/assets/VCard-DG7tl1W3.js create mode 100644 web/app/assets/VCard-DlMwyEqJ.js create mode 100644 web/app/assets/VCheckbox-BNHu2Ni-.js create mode 100644 web/app/assets/VCheckbox-Pj7A1jSY.js create mode 100644 web/app/assets/VCheckbox-ulE1A8vl.js create mode 100644 web/app/assets/VDataTable-B6BJAfR0.js create mode 100644 web/app/assets/VDataTable-BKN9-AAM.js create mode 100644 web/app/assets/VDataTable-BsfIw2KT.js create mode 100644 web/app/assets/VDataTableServer-BdKEAQOW.js create mode 100644 web/app/assets/VDataTableServer-CR3qnZHu.js create mode 100644 web/app/assets/VDataTableServer-CjBqC_8R.js create mode 100644 web/app/assets/VDialog-B6-oM1_y.js create mode 100644 web/app/assets/VDialog-BkSq0Dpm.js create mode 100644 web/app/assets/VDialog-CY50SVhr.js create mode 100644 web/app/assets/VExpansionPanels-Bbqsneok.js create mode 100644 web/app/assets/VExpansionPanels-D9u3ogml.js create mode 100644 web/app/assets/VExpansionPanels-rWLcYwq9.js create mode 100644 web/app/assets/VRow-CzXFTsmH.js create mode 100644 web/app/assets/VRow-D0MdcU9n.js create mode 100644 web/app/assets/VRow-D8vxlJBy.js create mode 100644 web/app/assets/VSelect-B0g3ZUg7.js create mode 100644 web/app/assets/VSelect-BXcWCaZC.js create mode 100644 web/app/assets/VSelect-Dq2BX-8H.css create mode 100644 web/app/assets/VSelect-aldIHHnJ.js create mode 100644 web/app/assets/VSkeletonLoader-CqOmVXLK.js create mode 100644 web/app/assets/VSkeletonLoader-DxiRHoSX.js create mode 100644 web/app/assets/VSkeletonLoader-F_zSyYcH.js create mode 100644 web/app/assets/VSwitch-C6ndRQTG.js create mode 100644 web/app/assets/VSwitch-CPuooCi9.js create mode 100644 web/app/assets/VSwitch-CxtbaDYX.js create mode 100644 web/app/assets/VTextField-CDCuiswI.js create mode 100644 web/app/assets/VTextField-Dxz7ci9T.js create mode 100644 web/app/assets/VTextField-zCSFfS1g.js create mode 100644 web/app/assets/VTextarea-C7GrnoX1.js create mode 100644 web/app/assets/VTextarea-DP8HH1tw.js create mode 100644 web/app/assets/VTextarea-DsPeHozX.js create mode 100644 web/app/assets/apiError-DafyJZAf.js create mode 100644 web/app/assets/apiError-tihdhjX4.js create mode 100644 web/app/assets/apiError-tpp1zGzn.js create mode 100644 web/app/assets/cssMode-BW5EOAqi.js create mode 100644 web/app/assets/cssMode-DZYcWT-z.js create mode 100644 web/app/assets/cssMode-sBsqzQDn.js create mode 100644 web/app/assets/execDetailGrouping-D6aWeQF2.js create mode 100644 web/app/assets/execDetailGrouping-Dfz7md4u.js create mode 100644 web/app/assets/execDetailGrouping-DyZmgeFH.js create mode 100644 web/app/assets/freemarker2-CahcONBW.js create mode 100644 web/app/assets/freemarker2-Dg44JDOs.js create mode 100644 web/app/assets/freemarker2-DlCeLOfO.js create mode 100644 web/app/assets/handlebars-CEuppsNX.js create mode 100644 web/app/assets/handlebars-D6W5n92v.js create mode 100644 web/app/assets/handlebars-lY0Fvd4c.js create mode 100644 web/app/assets/html-BUH_eug0.js create mode 100644 web/app/assets/html-CLzejF-u.js create mode 100644 web/app/assets/html-DUwtjlOC.js create mode 100644 web/app/assets/htmlMode-BtKbfoud.js create mode 100644 web/app/assets/htmlMode-CP_wpvvm.js create mode 100644 web/app/assets/htmlMode-CtK2Y7Fb.js create mode 100644 web/app/assets/index-B-6ti5uq.js create mode 100644 web/app/assets/index-P23lP3ez.js create mode 100644 web/app/assets/index-o-DiVeam.js create mode 100644 web/app/assets/initMonaco-BQe_Vc01.js create mode 100644 web/app/assets/initMonaco-CQC3bznY.js create mode 100644 web/app/assets/initMonaco-CvmREdYY.js create mode 100644 web/app/assets/javascript-BS5JKtQm.js create mode 100644 web/app/assets/javascript-Box5NkUy.js create mode 100644 web/app/assets/javascript-Cksfepfc.js create mode 100644 web/app/assets/jsonMode-CD7rSOO-.js create mode 100644 web/app/assets/jsonMode-Duwtco4G.js create mode 100644 web/app/assets/jsonMode-suLWsNsD.js create mode 100644 web/app/assets/liquid-BghT1kp7.js create mode 100644 web/app/assets/liquid-DNLPiGXP.js create mode 100644 web/app/assets/liquid-DrQr4OxD.js create mode 100644 web/app/assets/lspLanguageFeatures-BMpUJMhV.js create mode 100644 web/app/assets/lspLanguageFeatures-CK2Te1BA.js create mode 100644 web/app/assets/lspLanguageFeatures-DuUuMWpl.js create mode 100644 web/app/assets/mdx-BInYme64.js create mode 100644 web/app/assets/mdx-CRte9tta.js create mode 100644 web/app/assets/mdx-ZEUTRkwB.js create mode 100644 web/app/assets/paginatedFetch-C4g8n3XU.js create mode 100644 web/app/assets/paginatedFetch-CQcQpDYm.js create mode 100644 web/app/assets/paginatedFetch-DRpmsuj1.js create mode 100644 web/app/assets/python-B6LyZiYz.js create mode 100644 web/app/assets/python-C8y82GX7.js create mode 100644 web/app/assets/python-Wx74HjjF.js create mode 100644 web/app/assets/razor-BSrey19x.js create mode 100644 web/app/assets/razor-CD9NZQV_.js create mode 100644 web/app/assets/razor-DISFzUqS.js create mode 100644 web/app/assets/router-BJH48GMz.js create mode 100644 web/app/assets/router-DahRHO28.js create mode 100644 web/app/assets/router-G0ZwQ09q.js create mode 100644 web/app/assets/tsMode-B8E5hZJB.js create mode 100644 web/app/assets/tsMode-luT0Ao-f.js create mode 100644 web/app/assets/tsMode-v2sqkanR.js create mode 100644 web/app/assets/typescript-C_4A5aCy.js create mode 100644 web/app/assets/typescript-DWFhcH5V.js create mode 100644 web/app/assets/typescript-mVoKBjGa.js create mode 100644 web/app/assets/usePageActivateRefresh-C5hQgakB.js create mode 100644 web/app/assets/usePageActivateRefresh-D6x0Mrqy.js create mode 100644 web/app/assets/usePageActivateRefresh-rSz1HWvD.js create mode 100644 web/app/assets/usePageAutoRefresh-DEUzN5Sb.js create mode 100644 web/app/assets/usePageAutoRefresh-DTvnm6_E.js create mode 100644 web/app/assets/usePageAutoRefresh-Go2rtdJ9.js create mode 100644 web/app/assets/usePushStaging-C74t5Ah2.js create mode 100644 web/app/assets/usePushStaging-Ces5F3LN.js create mode 100644 web/app/assets/usePushStaging-pIM77PUF.js create mode 100644 web/app/assets/useServerCategories-BUEITfqt.js create mode 100644 web/app/assets/useServerCategories-l9EnMo_0.js create mode 100644 web/app/assets/useServerCategories-zyhf7YJg.js create mode 100644 web/app/assets/useServerList-BJOgzGyG.js create mode 100644 web/app/assets/useServerList-C9-2d_jw.js create mode 100644 web/app/assets/useServerList-OGSwHB-x.js create mode 100644 web/app/assets/useSnackbar-7jYVUR9G.js create mode 100644 web/app/assets/useSnackbar-knhbsEw2.js create mode 100644 web/app/assets/useSnackbar-ku9EbwM-.css create mode 100644 web/app/assets/useTerminalQuickCommands-B5hqIaL6.js create mode 100644 web/app/assets/useTerminalQuickCommands-BQ9RgSbI.js create mode 100644 web/app/assets/useTerminalQuickCommands-DZ7cyXo_.js create mode 100644 web/app/assets/xml-BXcUi15X.js create mode 100644 web/app/assets/xml-C4Ojghsz.js create mode 100644 web/app/assets/xml-Dr9R-XND.js create mode 100644 web/app/assets/yaml-BTVqqSpP.js create mode 100644 web/app/assets/yaml-BwzaXmQp.js create mode 100644 web/app/assets/yaml-CHRwztiG.js diff --git a/docs/changelog/2026-06-08-dashboard-remove-server-list.md b/docs/changelog/2026-06-08-dashboard-remove-server-list.md new file mode 100644 index 00000000..4403ba90 --- /dev/null +++ b/docs/changelog/2026-06-08-dashboard-remove-server-list.md @@ -0,0 +1,25 @@ +# 2026-06-08 — 仪表盘移除服务器列表表格 + +## 摘要 + +仪表盘不再展示可分页的服务器列表表格;完整列表仍在「服务器」页。 + +## 动机 + +仪表盘聚焦统计卡片与概览(告警、资源、分类、审计);列表与服务器页重复且占用首屏空间。 + +## 变更 + +- `frontend/src/pages/DashboardPage.vue` — 删除服务器列表卡片、`useServerPagination`、30s 列表轮询及相关样式 + +## 涉及文件 + +- `frontend/src/pages/DashboardPage.vue` + +## 迁移 / 重启 + +无;前端构建部署即可。 + +## 验证 + +打开 `#/`:仅见统计卡片 + 告警/资源概览/分类/最近操作,无「服务器列表」表格。 diff --git a/docs/changelog/2026-06-08-notify-recovery-respects-resource-toggle.md b/docs/changelog/2026-06-08-notify-recovery-respects-resource-toggle.md new file mode 100644 index 00000000..6dfaa121 --- /dev/null +++ b/docs/changelog/2026-06-08-notify-recovery-respects-resource-toggle.md @@ -0,0 +1,44 @@ +# 2026-06-08 — 资源恢复 Telegram 联动资源告警开关 + +## 摘要 + +关闭「CPU/内存/磁盘」单项告警开关后,对应指标的「资源恢复」Telegram 也不再推送。 + +## 动机 + +用户关闭 CPU 告警后仍收到「🟢 【资源恢复】CPU 已回落至正常范围」;恢复此前仅检查 `notify_recovery` 总开关,未检查 `notify_alert_cpu` 等分项。 + +## 变更 + +- `server/utils/notify_toggles.py` — 新增 `recovery_notify_enabled()`、`resource_recovery_notify_enabled(metric)`(总开关 + CPU/内存/磁盘分项) +- `server/infrastructure/telegram/__init__.py` — `send_telegram_recovery` 使用联动检查 +- `frontend/src/types/api.ts` — 设置页 CPU/内存/磁盘/恢复开关说明文案 +- `tests/test_notify_toggle_sync.py` — CPU/内存/磁盘告警与恢复、Redis/MySQL 恢复联动单测 + +## 逻辑 + +资源类(CPU / 内存 / 磁盘): + +| notify_recovery | notify_alert_* | 对应恢复 Telegram | +|-----------------|----------------|-------------------| +| off | * | 不发送 | +| on | off | 不发送 | +| on | on | 发送 | + +系统类(Redis / MySQL):告警与恢复共用同一 `notify_system_*` 开关(`send_telegram_system_alert` 已统一检查)。 + +## 涉及文件 + +见上。 + +## 迁移 / 重启 + +无 DB 变更;后端部署/重启生效。 + +## 验证 + +```bash +pytest tests/test_notify_toggle_sync.py -q +``` + +关闭 CPU 告警开关 → 不应再收到 CPU 恢复 Telegram。 diff --git a/frontend/src/pages/DashboardPage.vue b/frontend/src/pages/DashboardPage.vue index cfdfb4a2..ec06d0c5 100644 --- a/frontend/src/pages/DashboardPage.vue +++ b/frontend/src/pages/DashboardPage.vue @@ -3,83 +3,8 @@ - - - 服务器列表 - - - - - - - - - - - - - - - - - - - - - - - - +