@atomist/sdm-pack-aspect
Version:
an Atomist SDM Extension Pack for visualizing drift across an organization
116 lines • 5.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const React = require("react");
function displayRepository(repo) {
let className = "analysisTrackingRepo " + repo.progress;
if (repo.keptExisting) {
className += " keptExistingAnalysis";
}
if (repo.errorMessage) {
className += " failed";
}
const timeTaken = repo.millisTaken ? `Took ${repo.millisTaken / 1000}s` : undefined;
const gitLink = repo.url ? React.createElement("a", { href: repo.url },
React.createElement("img", { src: "/git.png", className: "linkToSourceImage" })) : undefined;
const insightsLink = repo.snapshotId ? React.createElement("a", { href: "/repository?id=" + repo.snapshotId },
React.createElement("img", { src: "/hexagonal-fruit-of-power.png", className: "linkToInsightsImage" })) : undefined;
const aspectSummary = repo.progress === "Planned" || repo.keptExisting ? undefined : summarizeAspects(repo.aspects);
return React.createElement("div", { className: className },
React.createElement("p", { className: "analysisRepoDescription" },
repo.description,
" ",
gitLink,
" ",
insightsLink,
" "),
React.createElement("span", { className: "timeTakenToAnalyzeRepo" }, timeTaken),
displayFailure(repo),
aspectSummary);
}
function summarizeAspects(aspects) {
const fingerprintTotal = aspects.map(a => a.fingerprintsFound).filter(f => !!f).reduce((a, b) => a + b, 0);
const errors = aspects.filter(a => !!a.error);
const errorDisplays = errors.length > 0 ? React.createElement("div", null, errors.map(displayAspectError)) : undefined;
const reportVisibleAspects = `(in ${aspects.filter(a => a.fingerprintsFound > 0 && a.visible).length} visible aspects)`;
return React.createElement("div", null,
aspects.length,
" aspects => ",
fingerprintTotal,
" fingerprints ",
reportVisibleAspects,
errorDisplays);
}
function displayAspectError(ae) {
return React.createElement("div", { className: "failedAspect" },
React.createElement("p", null,
ae.aspectName,
" failed with: ",
ae.error.message),
React.createElement("pre", null, ae.error.stack));
}
function displayFailure(repo) {
if (!repo.errorMessage) {
return undefined;
}
return React.createElement("div", { className: "analyzeRepoError" },
React.createElement("p", null, repo.errorMessage),
React.createElement("pre", null, repo.stackTrace));
}
function listRepositories(title, repos) {
return React.createElement("div", { className: "repoList" },
title,
repos.map((r, i) => displayRepository(Object.assign(Object.assign({}, r), { repoAnalysisId: "" + i }))));
}
function displayAnalysis(analysis) {
const analysisStatusClass = analysis.progress === "Going" ? "ongoingAnalysis" : "nongoingAnalysis";
const dates = analysis.completedAt ? React.createElement("p", { className: "analysisDates" },
"Completed at: ",
analysis.completedAt.toString()) : undefined;
return React.createElement("div", { className: analysisStatusClass },
analysis.description,
dates,
displayAnalysisFailure(analysis),
React.createElement("h4", null, "Repositories:"),
React.createElement("div", { className: "repositoryColumns" },
listRepositories("Planned", analysis.repos.filter(r => r.progress === "Planned")),
listRepositories("Going", analysis.repos.filter(r => r.progress === "Going")),
listRepositories("Finished", analysis.repos.filter(r => r.progress === "Stopped"))));
}
function displayAnalysisFailure(analysis) {
if (!analysis.error) {
return undefined;
}
return React.createElement("div", { className: "analyzeRepoErrors" },
React.createElement("p", null, analysis.error.message),
React.createElement("pre", null, analysis.error.stack));
}
function listAnalyses(analyses) {
return React.createElement("div", { className: "analysisList" }, analyses.sort(runningFirst).map(displayAnalysis));
}
function runningFirst(a1, a2) {
if (a1.progress === "Going" && a2.progress === "Stopped") {
return -1;
}
if (a2.progress === "Going" && a1.progress === "Stopped") {
return 1;
}
if (a1.completedAt && a2.completedAt) {
// more recent on top
return a2.completedAt.getTime() - a1.completedAt.getTime();
}
return 0;
}
function AnalysisTrackingPage(props) {
if (props.analyses.length === 0) {
return React.createElement("div", null,
"No analyses in progress. Start one at the command line:",
" ",
React.createElement("span", { className: "typeThisAtCommandLine" }, "atomist analyze local repositories"));
}
return React.createElement("div", null,
React.createElement("h2", null, "Refresh this page to see progress."),
React.createElement("a", { href: "aspects/" }, "Track aspect performance"),
listAnalyses(props.analyses));
}
exports.AnalysisTrackingPage = AnalysisTrackingPage;
//# sourceMappingURL=analysisTrackingPage.js.map