脚本健康度看板 (Script Health Dashboard)

Created 12 days ago
Updated 12 days ago
后台监控所有已安装脚本的运行状态,提供健康度评分、历史趋势、智能告警、可视化看板、版本检测、钉钉群机器人通知 ⚙️ 支持后台配置面板
#定时脚本
#后台脚本
#脚本管理
#健康监控
#脚本猫
Statistics
Total Installs
57
Last 24h
+0
User Rating
-
基于 ScriptCat 后台能力的脚本健康度监控看板,支持定时健康检查、评分可视化、版本检测与钉钉通知。

📊 脚本健康度看板 (ScriptCat Health Dashboard)

基于 ScriptCat 后台脚本能力开发的浏览器插件,自动监控所有已安装脚本的运行状态,计算健康度评分,并通过可视化看板直观展示。

version platform license status repo

🔗 项目主页https://github.com/ying34447/Script-Health-Dashboard


📋 目录


项目简介

脚本健康度看板 是一个运行在 ScriptCat 脚本管理器上的后台插件脚本。 它解决了脚本猫用户在安装多个脚本后的统一监控难题:哪个脚本在悄悄报错?哪个脚本长期未执行?哪个脚本性能堪忧?哪个脚本有新版本可更新?

本看板采用 "反向注册" 策略 —— 其他脚本主动向本看板写入自己的运行统计数据,本看板通过 GM_listValues 遍历读取并汇总展示,无需侵入式地访问脚本猫内部 API。


核心功能

🚀 1. 数据采集

  • 通过 GM_listValues 遍历存储,自动识别所有已上报统计数据的脚本
  • 单脚本数据损坏时自动隔离异常,不影响其他脚本采集
  • 支持数据字段完整性校验与向前兼容迁移

🧮 2. 健康度评分引擎

  • 基于成功率、最近执行时间、平均耗时、版本状态 4 个维度综合评分(0-100 分)
  • 评分自动映射到健康等级:🟢 健康(≥80)/ 🟡 警告(50-80)/ 🔴 严重(<50)
  • 详尽的扣分明细,看板中可追溯每一分的扣减原因

⏰ 3. 定时巡检与告警

  • 每小时自动执行健康检查(基于 @crontab 后台任务)
  • 发现严重脚本时触发浏览器桌面通知
  • 同一脚本 1 小时内不重复告警(防止刷屏)
  • 告警阈值可配置:仅严重 / 警告及以上

📊 4. 可视化看板

  • 暗色主题仪表盘,卡片式布局,响应式设计
  • 统计卡片区:总脚本数、健康数、警告数、严重数、异常数
  • CSS 圆环图:直观展示健康/警告/严重比例
  • 脚本详情表格:含健康度分数进度条与状态标签
  • Canvas 趋势折线图:最近 30 次检查的健康度变化

🔄 5. 版本更新检测

  • 通过 GM_xmlhttpRequest 请求脚本的 updateURL
  • 解析远程元数据 @version 字段,语义化版本对比
  • 检测结果缓存 24 小时,避免频繁请求
  • 看板表格中标记"可更新"徽章

📈 6. 历史趋势记录

  • 每次健康检查后追加一条历史记录
  • 最多保留 100 条,超出自动删除最旧记录
  • 趋势图展示最近 30 条记录的健康/警告/严重数量变化

适用人群

👤 用户类型 💡 使用场景
脚本猫深度用户 安装了多个脚本,希望统一监控运行状态,快速发现异常脚本
脚本开发者 希望监控自己脚本的稳定性、成功率、执行耗时,优化脚本质量
企业/团队用户 部署了一批关键业务脚本,需要实时告警机制保障可用性

安装与使用

📦 安装步骤

  1. 前置准备:确保已安装 ScriptCat v1.4 或更高版本
  2. 新建脚本:打开脚本猫管理面板 → 点击"新建脚本" → 选择"后台脚本"
  3. 粘贴代码:将 script-health-dashboard.user.js 的完整内容粘贴进编辑器
  4. 保存启用:按 Ctrl+S 保存,确保脚本状态为"已启用"

🎯 使用流程

安装完成
   │
   ├─▶ 后台自动运行(每小时一次健康检查)
   │
   ├─▶ 首次运行自动创建 3 个示例脚本,演示看板效果
   │
   └─▶ 用户操作:
         ├─ 脚本猫菜单 → 📊 查看健康度看板 → 浏览器新标签页打开仪表盘
         ├─ 脚本猫菜单 → 🔄 立即执行健康检查 → 手动触发一次检查
         └─ 脚本猫后台 → 脚本右侧齿轮按钮 → 调整通知/告警/钉钉等配置

🖱️ 菜单命令说明

菜单命令 功能说明
📊 查看健康度看板 在新标签页中打开可视化仪表盘
🔄 立即执行健康检查 立即触发一次健康检查并发送结果通知
🧪 测试钉钉通知 发送一条测试消息到钉钉群,验证配置是否正确

接入指南

本看板采用 "反向注册" 策略:其他脚本主动向本看板写入自己的统计数据,本看板遍历读取汇总。

✅ 接入方式一:调用全局接口(推荐)

在你的脚本中直接调用 reportScriptStats 函数:

// 在你的脚本执行成功后调用
if (typeof reportScriptStats === 'function') {
    reportScriptStats('your_script_id', {
        name: '我的脚本',
        totalExecutions: 10,        // 总执行次数
        successCount: 9,             // 成功次数
        totalDuration: 5000,         // 累计耗时(毫秒)
        lastExecTime: Date.now(),    // 最后执行时间戳
        version: '1.0.0'             // 脚本版本号
    });
}

🛠️ 接入方式二:直接写存储

如果你的脚本不依赖本看板运行,也可以按照键名规范直接写存储:

const KEY = 'SHD:stats:your_script_id';
let data = GM_getValue(KEY, null);
if (!data) {
    data = {
        scriptId: 'your_script_id',
        name: '我的脚本',
        version: '1.0.0',
        totalExecutions: 0,
        successCount: 0,
        failureCount: 0,
        totalDuration: 0,
        lastExecTime: 0,
        firstSeenTime: Date.now(),
        lastUpdated: Date.now(),
        latestVersion: '1.0.0',
        hasUpdate: false
    };
}
data.totalExecutions++;
if (success) data.successCount++;
data.failureCount = data.totalExecutions - data.successCount;
data.totalDuration += durationMs;
data.lastExecTime = Date.now();
data.lastUpdated = Date.now();
GM_setValue(KEY, data);

📋 stats 对象字段说明

字段 类型 必填 说明
name string 脚本显示名称(默认使用 scriptId)
totalExecutions number 总执行次数
successCount number 成功执行次数
totalDuration number 累计耗时(毫秒)
lastExecTime number 最后执行时间戳(毫秒)
version string 当前脚本版本号
latestVersion string 已知最新版本号(用于版本对比)
hasUpdate boolean 是否有新版本可更新
updateURL string 脚本更新地址(用于自动检测版本)

健康度评分规则

健康度评分采用 扣分制,从 100 分开始扣减,最终分数限制在 [0, 100] 区间。

📊 扣分细则

维度 条件 扣分
成功率 总执行次数 > 0 且成功率 < 80% -20
总执行次数 > 0 且成功率 < 50% 额外 -15(共 -35)
最近执行时间 超过 7 天未执行 -10
超过 30 天未执行 额外 -15(共 -25)
平均耗时 平均耗时 > 5 秒 -5
平均耗时 > 10 秒 额外 -5(共 -10)
版本状态 有新版本可更新(hasUpdate=true -10

🏷️ 健康等级划分

等级 分数区间 标签 颜色
健康 ≥ 80 🟢 健康 绿色 #22C55E
警告 50 - 80 🟡 警告 黄色 #EAB308
严重 < 50 🔴 严重 红色 #EF4444

⚠️ 边界处理

  • 从未执行的脚本totalExecutions=0):成功率不扣分(视为 100%),但 lastExecTime=0 视为无限大天数,按最严重档扣 25 分
  • 首次上报的新脚本:因无历史数据,初始评分通常较高,随执行次数增加趋于真实
  • 数据损坏的脚本:计入"数据异常"卡片,不参与评分

配置说明

本脚本使用脚本猫标准的 UserConfig 配置面板,用户可在脚本猫后台管理界面通过脚本右侧的 齿轮按钮 进行配置。

通用设置

配置项 选项 默认值 说明
📢 启用桌面通知 开启 / 关闭 开启 关闭后不再发送任何桌面告警通知
🔔 告警阈值 30 / 40 / 50 / 60 / 70 50 当脚本健康度分数低于此值时触发告警
⏱️ 健康检查间隔 30分钟 / 60分钟 / 120分钟 60分钟 后台健康检查的执行频率

钉钉通知

配置项 选项 默认值 说明
📲 启用钉钉通知 开启 / 关闭 关闭 开启后严重脚本会自动推送钉钉群消息
🔗 Webhook 地址 文本 钉钉机器人 Webhook URL
🔑 加签密钥 密码 机器人安全设置选择"加签"时填写(以 SEC 开头)
📢 @所有人 开启 / 关闭 关闭 钉钉消息是否 @ 群内所有人

💡 提示:修改"健康检查间隔"后,@crontab 元数据在脚本安装时固定为每小时,脚本内部会在非对应周期时跳过执行,需等待下一个整点生效。

⚠️ 安全提醒:Webhook 地址和加签密钥属于敏感信息,请勿分享给他人。


存储键命名规范

本看板在 GM 存储中使用以下键名规范,其他脚本接入时请遵守:

存储键 用途
SHD:stats:{scriptId} 单个脚本的运行统计数据
SHD:report:latest 最新一次健康报告
SHD:report:history 健康报告历史记录(数组,最多 100 条)
SHD:alert:{scriptId} 单个脚本的最后告警时间戳
SHD:updatecheck:{scriptId} 版本检测缓存
通用设置.* / 钉钉通知.* UserConfig 配置项(脚本猫标准配置存储)
SHD:initialized 首次运行标记

技术实现

🛠️ 技术栈

  • 运行环境:ScriptCat v1.4+ 后台脚本能力
  • GM APIGM_info / GM_setValue / GM_getValue / GM_listValues / GM_deleteValue / GM_log / GM_notification / GM_registerMenuCommand / GM_openInTab / GM_xmlhttpRequest
  • 前端技术:纯原生 HTML / CSS / Canvas(不依赖任何第三方库

🏗️ 架构亮点

  • 反向注册策略:无需访问脚本猫内部 API,通过存储键约定实现松耦合
  • 异常隔离:单个脚本数据损坏不影响整体采集流程
  • 并发优化:使用 Promise.all 并发加载和版本检测
  • 数据迁移:字段完整性校验 + 向前兼容,平滑升级
  • Blob URL 渲染:看板页面通过 GM_openInTab + Blob URL 加载,样式与脚本完整内嵌
  • 数据嵌入:报告数据以 JSON 形式注入 <script type="application/json"> 标签,解决 Blob 页面无法访问 GM_getValue 的问题

注意事项

⚠️ 版本要求:需要 ScriptCat v1.4 或更高版本

⚠️ 首次运行:安装后需等待第一次定时任务执行(最多 1 小时),或手动点击"🔄 立即执行健康检查"立即触发

⚠️ 数据来源:本看板只能监控已接入上报接口的脚本,未接入的脚本不会出现在看板中

⚠️ Blob 页面限制:看板页面通过 Blob URL 打开,无法实时获取最新存储数据。如需刷新,请通过脚本猫菜单重新打开看板

⚠️ 定时间隔@crontab 元数据在脚本安装时固定为每小时,配置面板中的间隔调整为脚本内部逻辑控制

⚠️ 版本检测:仅对提供了 updateURL 字段的脚本生效,未提供则跳过检测


常见问题 (FAQ)

❓ Q1:为什么看板中没有任何脚本数据?

A:本看板采用"反向注册"策略,只能展示已接入上报接口的脚本。请确保:

  1. 已通过菜单"🔄 立即执行健康检查"触发至少一次采集
  2. 其他脚本已按接入指南调用 reportScriptStats 或直接写存储
  3. 首次安装时会自动创建 3 个示例脚本,可据此验证看板功能

❓ Q2:如何让我的脚本被本看板监控?

A:在你的脚本中添加以下代码即可:

if (typeof reportScriptStats === 'function') {
    reportScriptStats('unique_script_id', {
        name: '我的脚本',
        totalExecutions: 1,
        successCount: 1,
        totalDuration: 100,
        lastExecTime: Date.now(),
        version: '1.0.0'
    });
}

建议在脚本每次执行成功后调用一次,累计上报执行数据。


❓ Q3:健康度评分为什么是 0 分?

A:常见原因:

  • 脚本从未执行过(lastExecTime=0),触发"超过 30 天未执行"扣 25 分
  • 成功率过低(<50%),扣 35 分
  • 平均耗时过长(>10秒),扣 10 分
  • 有新版本可更新,扣 10 分

请检查看板表格中的"健康度分数"列,悬停可查看扣分明细。


❓ Q4:告警通知太频繁怎么办?

A:本看板已内置 1 小时去重机制。如仍觉频繁,可:

  1. 通过脚本猫后台齿轮按钮配置告警阈值(如设为 50 分)
  2. 或直接关闭桌面通知开关

❓ Q5:看板页面打开是空白的?

A:可能原因:

  1. 浏览器拦截了 Blob URL,请允许该站点的新标签页弹出
  2. 尚未执行过健康检查,报告中无数据(会显示空状态提示)
  3. ScriptCat 版本过低,请升级至 v1.4+

❓ Q6:历史趋势图为什么只有几个点?

A:趋势图展示的是历史检查记录,每次健康检查追加一条。刚安装时记录较少属正常现象,随着定时任务执行会逐渐积累,最多保留 30 个点用于绘图。


❓ Q7:可以监控非脚本猫的脚本吗?

A:不可以。本看板依赖 ScriptCat 的 GM_* API,只能在脚本猫环境中运行。其他脚本管理器(如 Tampermonkey)的脚本无法接入。


❓ Q8:如何卸载本看板?

A:在脚本猫管理面板中禁用或删除本脚本即可。已写入的统计数据会保留在 GM 存储中,如需彻底清理,可手动删除以下键:

  • SHD:stats:*(所有脚本统计)
  • SHD:report:latest
  • SHD:report:history
  • SHD:config
  • SHD:initialized

❓ Q9:配置面板中修改了定时间隔为什么不立即生效?

A:ScriptCat 的 @crontab 元数据在脚本安装时固定为每小时执行一次。配置面板中的"健康检查间隔"由脚本内部逻辑控制(非对应周期时跳过执行),修改后需等待下一个整点才会按新间隔执行。


❓ Q10:支持多浏览器同步吗?

A:不支持。GM 存储是浏览器本地的,不同浏览器或不同浏览器配置间数据不互通。


贡献与反馈

🤝 贡献代码

欢迎通过以下方式参与贡献:

  • 🐛 提交 Issue 报告 Bug 或提出新功能建议
  • 🔧 提交 Pull Request 修复问题或增强功能
  • 📖 完善文档或分享使用经验

💬 反馈渠道

渠道 链接
🐙 GitHub Issues 提交 Issue
💬 ScriptCat 论坛 ScriptCat 社区
📧 邮件反馈 [email protected]

🌟 支持项目

如果本项目对你有帮助,欢迎:


许可证

本项目基于 MIT License 开源,可自由使用、修改、分发。


Made with ❤️ for ScriptCat Community
脚本健康度看板 v2.5.3 · 2026

Script Details
Background Script
It runs in the browser background
Scheduled Script
Execute every hour
LicenseMIT
Permissions & access
Cross-origin access
*
Capabilities
StorageMenu commandNotificationsOpen tabNetwork requests