87 lines
3.6 KiB
JavaScript
87 lines
3.6 KiB
JavaScript
const fs = require("fs")
|
|
const shell = require("child_process")
|
|
const split = require("split")
|
|
const path = require("path")
|
|
const moment = require("moment")
|
|
|
|
const log = require("./logger")
|
|
|
|
function stripAnsi(text) {
|
|
return text.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '')
|
|
}
|
|
|
|
function dump(wid) {
|
|
return new Promise((resolve, reject) => {
|
|
let result = ""
|
|
|
|
fs.createReadStream(path.join(__dirname, "latest.log"), "utf8").pipe(split())
|
|
.on("data", (line) => { if (line.indexOf(wid) > -1) result += `${line},` })
|
|
.on("close", () => {
|
|
let json = JSON.parse(`[${result.slice(0, -1)}]`)
|
|
let filtered = []
|
|
let { buildEnded, buildStarted, downEnded, downStarted, mixStarted, mixEnded } = 0
|
|
|
|
for (let i = 0; i < json.length; i++) {
|
|
let message = json[i].message.split("\n")[0].replace(/(\r\n|\n|\r)/gm, " ").trim()
|
|
let buildType = message.split("=")[0].trim().split(" ").at(-1).trim()
|
|
|
|
switch (buildType) {
|
|
case "BUILD_STARTED":
|
|
buildStarted = parseInt(message.split("=")[1].trim())
|
|
break
|
|
case "BUILD_ENDED":
|
|
buildEnded = parseInt(message.split("=")[1].trim())
|
|
break
|
|
case "DOWNTIME_STARTED":
|
|
downStarted = parseInt(message.split("=")[1].trim())
|
|
break
|
|
case "DOWNTIME_ENDED":
|
|
downEnded = parseInt(message.split("=")[1].trim())
|
|
break
|
|
case "MIX_STARTED":
|
|
mixStarted = parseInt(message.split("=")[1].trim())
|
|
break
|
|
case "MIX_ENDED":
|
|
mixEnded = parseInt(message.split("=")[1].trim())
|
|
break
|
|
default:
|
|
filtered.push(`${moment(json[i].timestamp).format("MM/DD/YY - h:mm:ss A")} | ${json[i].message.replace(/(\r\n|\n|\r)/gm, "").trim()}`)
|
|
}
|
|
}
|
|
|
|
resolve({
|
|
dump: filtered.join(`\n`),
|
|
buildTime: buildEnded - buildStarted,
|
|
downTime: downEnded - downStarted,
|
|
mixTime: mixEnded - mixStarted
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function deploy(wid) {
|
|
return new Promise(async (resolve, reject) => {
|
|
log.info(`[${wid}] Event receieved`)
|
|
|
|
fs.writeFileSync(path.join(__dirname, "DEPLOYING"), "Don't touch me! Otherwise, a race condition will occur. I get deleted automatically!")
|
|
|
|
if (!fs.existsSync(path.join(__dirname, "deploy.sh"))) {
|
|
throw "No deploy script exists"
|
|
}
|
|
|
|
log.info(`[${wid}] Running script`)
|
|
let child = shell.exec(`${path.join(__dirname, "deploy.sh")} -n ${process.env.NGINX_PATH} -w ${process.env.NGINX_WWW_PATH} -t ${process.env.TADAH_PATH}`)
|
|
|
|
child.stdout.on("data", (data) => { log.info(`[${wid}] ${stripAnsi(data)}`) })
|
|
child.stderr.on("data", (data) => { log.info(`[${wid}] ${stripAnsi(data)}`) })
|
|
|
|
child.on("close", () => {
|
|
log.info(`[${wid}] Script closed.`)
|
|
fs.unlinkSync(path.join(__dirname, "DEPLOYING"))
|
|
|
|
dump(wid).then((result) => { resolve(result) })
|
|
})
|
|
})
|
|
}
|
|
|
|
module.exports = { deploy, dump } |