103 lines
3.8 KiB
JavaScript
103 lines
3.8 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const Robot_1 = __importDefault(require("./Robot"));
|
|
const http_1 = __importDefault(require("http"));
|
|
const os_1 = __importDefault(require("os"));
|
|
class BuildWait {
|
|
constructor(key, port, jobName, waitTime = 20, extendTime = 60) {
|
|
this.server = null;
|
|
this.timer = null;
|
|
this.time = 0;
|
|
this.isSendedReadyMessage = false;
|
|
this.key = key;
|
|
this.port = port;
|
|
this.jobName = jobName;
|
|
this.waitTime = waitTime;
|
|
this.extendTime = extendTime;
|
|
this.ip = this.getIP();
|
|
}
|
|
getIP() {
|
|
const networkInterfaces = os_1.default.networkInterfaces();
|
|
for (var key in networkInterfaces) {
|
|
const networkInterface = networkInterfaces[key];
|
|
if (!networkInterface)
|
|
continue;
|
|
for (const info of networkInterface) {
|
|
if (info.family === 'IPv4' && info.address !== '127.0.0.1' && !info.internal) {
|
|
return info.address;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
start() {
|
|
if (this.server)
|
|
return;
|
|
if (!this.ip) {
|
|
console.log('BuildWait IP Error');
|
|
return;
|
|
}
|
|
console.log('BuildWait Start');
|
|
this.time = this.waitTime;
|
|
this.server = http_1.default.createServer(this.requestListener.bind(this));
|
|
this.server.listen(this.port);
|
|
this.timer = setInterval(this.onTimer.bind(this), 1000);
|
|
}
|
|
requestListener(req, res) {
|
|
const url = req.url;
|
|
console.log(`BuildWait Receive: ${url}`);
|
|
switch (url) {
|
|
case '/extend': //延迟
|
|
this.time = this.extendTime;
|
|
this.isSendedReadyMessage = false;
|
|
Robot_1.default.sendMessage(this.key, 'text', `${this.jobName}构建推迟到${this.extendTime}秒后`);
|
|
res.end('<html><script>window.close();</script></html>');
|
|
break;
|
|
case '/immediately': //立即
|
|
Robot_1.default.sendMessage(this.key, 'text', `${this.jobName}立即构建`);
|
|
this.time = 0;
|
|
res.end('<html><script>window.close();</script></html>');
|
|
break;
|
|
case '/':
|
|
default:
|
|
res.end('Commond Error: ' + url);
|
|
break;
|
|
}
|
|
}
|
|
onTimer() {
|
|
console.log('BuildWait OnTime: ' + this.time);
|
|
if (this.time <= 0) {
|
|
this.stopWait();
|
|
}
|
|
else if (!this.isSendedReadyMessage && this.time <= this.waitTime) {
|
|
this.isSendedReadyMessage = true;
|
|
this.sendReadyToBuildMessage();
|
|
}
|
|
this.time--;
|
|
}
|
|
sendReadyToBuildMessage() {
|
|
let message = `${this.jobName}即将在${this.waitTime}秒后开始构建\n[立即构建](http://${this.ip}:${this.port}/immediately) | [推迟构建](http://${this.ip}:${this.port}/extend) | [中断构建](http://${this.ip}:${this.port}/extend)`;
|
|
Robot_1.default.sendMessage(key, 'markdown', message);
|
|
}
|
|
stopWait() {
|
|
var _a;
|
|
(_a = this.server) === null || _a === void 0 ? void 0 : _a.close();
|
|
this.server = null;
|
|
this.timer && clearInterval(this.timer);
|
|
this.timer = null;
|
|
this.time = 0;
|
|
process.exit(0);
|
|
}
|
|
}
|
|
const args = process.argv;
|
|
const port = parseInt(args[2]);
|
|
const jobName = args[3];
|
|
const key = args[4];
|
|
const waitTime = (args[5] ? parseInt(args[5]) : undefined);
|
|
const extendTime = (args[6] ? parseInt(args[6]) : undefined);
|
|
const buildWait = new BuildWait(key, port, jobName, waitTime, extendTime);
|
|
buildWait.start();
|