基于 ScriptCat 后台脚本能力开发的浏览器插件,自动监控所有已安装脚本的运行状态,计算健康度评分,并通过可视化看板直观展示。
🔗 项目主页:https://github.com/ying34447/Script-Health-Dashboard
脚本健康度看板 是一个运行在 ScriptCat 脚本管理器上的后台插件脚本。 它解决了脚本猫用户在安装多个脚本后的统一监控难题:哪个脚本在悄悄报错?哪个脚本长期未执行?哪个脚本性能堪忧?哪个脚本有新版本可更新?
本看板采用 "反向注册" 策略 —— 其他脚本主动向本看板写入自己的运行统计数据,本看板通过 GM_listValues 遍历读取并汇总展示,无需侵入式地访问脚本猫内部 API。
GM_listValues 遍历存储,自动识别所有已上报统计数据的脚本@crontab 后台任务)GM_xmlhttpRequest 请求脚本的 updateURL@version 字段,语义化版本对比| 👤 用户类型 | 💡 使用场景 |
|---|---|
| 脚本猫深度用户 | 安装了多个脚本,希望统一监控运行状态,快速发现异常脚本 |
| 脚本开发者 | 希望监控自己脚本的稳定性、成功率、执行耗时,优化脚本质量 |
| 企业/团队用户 | 部署了一批关键业务脚本,需要实时告警机制保障可用性 |
script-health-dashboard.user.js 的完整内容粘贴进编辑器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);
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
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 |
首次运行标记 |
GM_info / GM_setValue / GM_getValue / GM_listValues / GM_deleteValue / GM_log / GM_notification / GM_registerMenuCommand / GM_openInTab / GM_xmlhttpRequestPromise.all 并发加载和版本检测GM_openInTab + Blob URL 加载,样式与脚本完整内嵌<script type="application/json"> 标签,解决 Blob 页面无法访问 GM_getValue 的问题⚠️ 版本要求:需要 ScriptCat v1.4 或更高版本
⚠️ 首次运行:安装后需等待第一次定时任务执行(最多 1 小时),或手动点击"🔄 立即执行健康检查"立即触发
⚠️ 数据来源:本看板只能监控已接入上报接口的脚本,未接入的脚本不会出现在看板中
⚠️ Blob 页面限制:看板页面通过 Blob URL 打开,无法实时获取最新存储数据。如需刷新,请通过脚本猫菜单重新打开看板
⚠️ 定时间隔:@crontab 元数据在脚本安装时固定为每小时,配置面板中的间隔调整为脚本内部逻辑控制
⚠️ 版本检测:仅对提供了 updateURL 字段的脚本生效,未提供则跳过检测
A:本看板采用"反向注册"策略,只能展示已接入上报接口的脚本。请确保:
reportScriptStats 或直接写存储A:在你的脚本中添加以下代码即可:
if (typeof reportScriptStats === 'function') {
reportScriptStats('unique_script_id', {
name: '我的脚本',
totalExecutions: 1,
successCount: 1,
totalDuration: 100,
lastExecTime: Date.now(),
version: '1.0.0'
});
}
建议在脚本每次执行成功后调用一次,累计上报执行数据。
A:常见原因:
lastExecTime=0),触发"超过 30 天未执行"扣 25 分请检查看板表格中的"健康度分数"列,悬停可查看扣分明细。
A:本看板已内置 1 小时去重机制。如仍觉频繁,可:
A:可能原因:
A:趋势图展示的是历史检查记录,每次健康检查追加一条。刚安装时记录较少属正常现象,随着定时任务执行会逐渐积累,最多保留 30 个点用于绘图。
A:不可以。本看板依赖 ScriptCat 的 GM_* API,只能在脚本猫环境中运行。其他脚本管理器(如 Tampermonkey)的脚本无法接入。
A:在脚本猫管理面板中禁用或删除本脚本即可。已写入的统计数据会保留在 GM 存储中,如需彻底清理,可手动删除以下键:
SHD:stats:*(所有脚本统计)SHD:report:latestSHD:report:historySHD:configSHD:initializedA:ScriptCat 的 @crontab 元数据在脚本安装时固定为每小时执行一次。配置面板中的"健康检查间隔"由脚本内部逻辑控制(非对应周期时跳过执行),修改后需等待下一个整点才会按新间隔执行。
A:不支持。GM 存储是浏览器本地的,不同浏览器或不同浏览器配置间数据不互通。
欢迎通过以下方式参与贡献:
| 渠道 | 链接 |
|---|---|
| 🐙 GitHub Issues | 提交 Issue |
| 💬 ScriptCat 论坛 | ScriptCat 社区 |
| 📧 邮件反馈 | [email protected] |
如果本项目对你有帮助,欢迎:
本项目基于 MIT License 开源,可自由使用、修改、分发。
Made with ❤️ for ScriptCat Community
脚本健康度看板 v2.5.3 · 2026