|
|
|
"use strict";
|
|
|
|
|
|
|
|
const url = require("url");
|
|
|
|
const _ = require("underscore");
|
|
|
|
const statusProcessor = require("../lib/status-processor");
|
|
|
|
|
|
|
|
const parseOptionsFromReferer = (path, callback) => {
|
|
|
|
const pathParts = path.split("/").filter((value) => value);
|
|
|
|
const [, secondPart, thirdPart] = pathParts;
|
|
|
|
|
|
|
|
if (!secondPart) {
|
|
|
|
return callback("BadRequest", {});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (thirdPart === "tree") {
|
|
|
|
const [owner, reponame, , branchName, rev] = pathParts;
|
|
|
|
|
|
|
|
return callback(null, {
|
|
|
|
branchName,
|
|
|
|
owner,
|
|
|
|
reponame,
|
|
|
|
rev
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const [owner, reponame, branchName, rev] = pathParts;
|
|
|
|
|
|
|
|
return callback(null, {
|
|
|
|
branchName,
|
|
|
|
owner,
|
|
|
|
reponame,
|
|
|
|
rev
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
const createShowReport = (res) => (err, inputOptions) => {
|
|
|
|
const options = _.extendOwn(inputOptions || {}, { err });
|
|
|
|
|
|
|
|
res.render("status", options);
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.image = (req, res) => {
|
|
|
|
const getAdditionalOptions = (err, options) => {
|
|
|
|
if (err === "ReportFileNotFound") {
|
|
|
|
return { "status": "Building" };
|
|
|
|
}
|
|
|
|
|
|
|
|
if (err) {
|
|
|
|
return {
|
|
|
|
"message": err,
|
|
|
|
"status": "StatusError"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
if (options.report.result === "MBSNotFound") {
|
|
|
|
return { "status": "MBSNotUsed" };
|
|
|
|
}
|
|
|
|
|
|
|
|
if (options.report.err) {
|
|
|
|
return {
|
|
|
|
"message": options.report.err,
|
|
|
|
"status": "Error"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((options.report.result.warns.$allMessages || []).length) {
|
|
|
|
const [firstWarn] = options.report.result.warns.$allMessages;
|
|
|
|
|
|
|
|
return {
|
|
|
|
"message": firstWarn.message,
|
|
|
|
"status": "Warning"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
const allInfos = options.report.result.infos.$allMessages || [];
|
|
|
|
|
|
|
|
if (allInfos.length) {
|
|
|
|
return {
|
|
|
|
"message": allInfos[allInfos.length - 1].message,
|
|
|
|
"status": "OK"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
return { "status": "OK" };
|
|
|
|
};
|
|
|
|
|
|
|
|
const handle = (err, options) => {
|
|
|
|
res.setHeader("Content-Type", "image/svg+xml");
|
|
|
|
res.render("status-image", _.extend(options, getAdditionalOptions(err, options)));
|
|
|
|
};
|
|
|
|
|
|
|
|
parseOptionsFromReferer(url.parse(req.headers.referer || "").pathname || "", (err, options) => {
|
|
|
|
if (err) {
|
|
|
|
return handle(err, options);
|
|
|
|
}
|
|
|
|
|
|
|
|
return statusProcessor.getReport(req.app, options, handle);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.page = (req, res) => {
|
|
|
|
const options = {
|
|
|
|
"branch": `/refs/heads/${req.params.branch}`,
|
|
|
|
"branchName": req.params.branch,
|
|
|
|
"owner": req.params.owner,
|
|
|
|
"reponame": req.params.reponame,
|
|
|
|
"rev": req.params.rev
|
|
|
|
};
|
|
|
|
|
|
|
|
statusProcessor.getReport(req.app, options, createShowReport(res));
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.pageFromGithub = (req, res) => parseOptionsFromReferer(req.params[0], (err, options) => {
|
|
|
|
if (err) {
|
|
|
|
return createShowReport(err, options);
|
|
|
|
}
|
|
|
|
|
|
|
|
return statusProcessor.getReport(req.app, options, createShowReport(res));
|
|
|
|
});
|