UNPKG

@atomist/sdm-pack-aspect

Version:

an Atomist SDM Extension Pack for visualizing drift across an organization

116 lines 5.28 kB
"use strict"; 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