89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
#!/usr/bin/env node
|
||
/**
|
||
* skyeye/hibernation/overtime-monitor.js
|
||
* ═══════════════════════════════════════════════
|
||
* 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
|
||
* 📜 Copyright: 国作登字-2026-A-00037559
|
||
* ═══════════════════════════════════════════════
|
||
*
|
||
* ⏰ 延时监控
|
||
* 如果实际休眠超出预估 15% 以上,自动追加延时通知。
|
||
*
|
||
* 用法:
|
||
* node overtime-monitor.js --planned=12 --elapsed=15 --mode=daily
|
||
*/
|
||
|
||
'use strict';
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
const OVERTIME_THRESHOLD = 0.15; // 15%
|
||
|
||
function parseArgs() {
|
||
const args = process.argv.slice(2);
|
||
const result = {};
|
||
for (const arg of args) {
|
||
if (arg.startsWith('--')) {
|
||
const [key, value] = arg.slice(2).split('=');
|
||
result[key] = value || 'true';
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function checkOvertime(plannedDuration, elapsed) {
|
||
const threshold = plannedDuration * (1 + OVERTIME_THRESHOLD);
|
||
|
||
if (elapsed > threshold) {
|
||
return {
|
||
overtime: true,
|
||
planned: plannedDuration,
|
||
elapsed: elapsed,
|
||
threshold: Math.round(threshold),
|
||
overage_percent: Math.round(((elapsed - plannedDuration) / plannedDuration) * 100),
|
||
message: `原预计 ${plannedDuration}min,实际已 ${elapsed}min`
|
||
};
|
||
}
|
||
|
||
return {
|
||
overtime: false,
|
||
planned: plannedDuration,
|
||
elapsed: elapsed,
|
||
threshold: Math.round(threshold),
|
||
remaining: Math.max(0, plannedDuration - elapsed)
|
||
};
|
||
}
|
||
|
||
function run() {
|
||
const args = parseArgs();
|
||
const planned = parseInt(args.planned || '12', 10);
|
||
const elapsed = parseInt(args.elapsed || '0', 10);
|
||
const mode = args.mode || 'daily';
|
||
|
||
console.log(`[Overtime Monitor] Mode: ${mode}`);
|
||
console.log(`[Overtime Monitor] Planned: ${planned}min, Elapsed: ${elapsed}min`);
|
||
|
||
const result = checkOvertime(planned, elapsed);
|
||
|
||
if (result.overtime) {
|
||
console.log(`⚠️ 休眠延时!${result.message}`);
|
||
console.log(` 超出阈值 ${OVERTIME_THRESHOLD * 100}%(预计 ${result.threshold}min)`);
|
||
|
||
// 输出供 readme-status-updater 使用
|
||
console.log(`::set-output name=overtime::true`);
|
||
console.log(`::set-output name=message::${result.message}`);
|
||
} else {
|
||
console.log(`✅ 休眠时间正常,剩余 ${result.remaining}min`);
|
||
console.log(`::set-output name=overtime::false`);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
module.exports = { checkOvertime, OVERTIME_THRESHOLD, run };
|
||
|
||
if (require.main === module) {
|
||
run();
|
||
}
|