UNPKG

@atomist/org-visualizer

Version:

Organization Visualizer using Atomist project scanning

219 lines 10.9 kB
"use strict"; /* * Copyright © 2019 Atomist, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const automation_client_1 = require("@atomist/automation-client"); const automation_client_ext_dashboard_1 = require("@atomist/automation-client-ext-dashboard"); const automation_client_ext_humio_1 = require("@atomist/automation-client-ext-humio"); const configuration_1 = require("@atomist/automation-client/lib/configuration"); const sdm_1 = require("@atomist/sdm"); const sdm_core_1 = require("@atomist/sdm-core"); const clojure_1 = require("@atomist/sdm-pack-clojure/lib/fingerprints/clojure"); const sdm_pack_docker_1 = require("@atomist/sdm-pack-docker"); const sdm_pack_fingerprints_1 = require("@atomist/sdm-pack-fingerprints"); const _ = require("lodash"); const stackAspect_1 = require("./lib/aspect/common/stackAspect"); const DefaultAspectRegistry_1 = require("./lib/aspect/DefaultAspectRegistry"); const TypeScriptVersion_1 = require("./lib/aspect/node/TypeScriptVersion"); const directMavenDependencies_1 = require("./lib/aspect/spring/directMavenDependencies"); const springBootStarter_1 = require("./lib/aspect/spring/springBootStarter"); const springBootVersion_1 = require("./lib/aspect/spring/springBootVersion"); const travisAspects_1 = require("./lib/aspect/travis/travisAspects"); const aspects_1 = require("./lib/customize/aspects"); const categories_1 = require("./lib/customize/categories"); const demoUndesirableUsageChecker_1 = require("./lib/customize/demoUndesirableUsageChecker"); const createFingerprintJob_1 = require("./lib/job/createFingerprintJob"); const fingerprintTask_1 = require("./lib/job/fingerprintTask"); const machine_1 = require("./lib/machine/machine"); const api_1 = require("./lib/routes/api"); const orgPage_1 = require("./lib/routes/orgPage"); // Mode can be online or mode const mode = process.env.ATOMIST_ORG_VISUALIZER_MODE || "online"; exports.configuration = sdm_core_1.configure((sdm) => __awaiter(this, void 0, void 0, function* () { const isStaging = sdm.configuration.endpoints.api.includes("staging"); const optionalAspects = isStaging ? [clojure_1.LeinDeps] : []; const jobAspects = [ sdm_pack_docker_1.DockerFrom, sdm_pack_docker_1.DockerfilePath, sdm_pack_docker_1.DockerPorts, springBootStarter_1.SpringBootStarter, TypeScriptVersion_1.TypeScriptVersion, sdm_pack_fingerprints_1.NpmDeps, travisAspects_1.TravisScriptsAspect, stackAspect_1.StackAspect, stackAspect_1.CiAspect, stackAspect_1.JavaBuild, springBootVersion_1.SpringBootVersion, directMavenDependencies_1.DirectMavenDependencies, ...optionalAspects, ]; const handlers = []; // TODO cd merge into one call categories_1.registerCategories(TypeScriptVersion_1.TypeScriptVersion, "Node.js"); categories_1.registerReportDetails(TypeScriptVersion_1.TypeScriptVersion, { name: "TypeScript versions", shortName: "version", unit: "version", url: "fingerprint/typescript-version/typescript-version?byOrg=true", description: "TypeScript versions in use across all repositories in your workspace, " + "broken out by version and repositories that use each version.", }); categories_1.registerCategories(sdm_pack_fingerprints_1.NpmDeps, "Node.js"); categories_1.registerReportDetails(sdm_pack_fingerprints_1.NpmDeps, { shortName: "dependency", unit: "version", url: "drift?type=npm-project-deps", description: "Node direct dependencies in use across all repositories in your workspace, " + "grouped by Drift Level.", }); categories_1.registerCategories(springBootStarter_1.SpringBootStarter, "Java"); categories_1.registerCategories(stackAspect_1.JavaBuild, "Java"); categories_1.registerCategories(springBootVersion_1.SpringBootVersion, "Java"); categories_1.registerCategories(directMavenDependencies_1.DirectMavenDependencies, "Java"); categories_1.registerReportDetails(directMavenDependencies_1.DirectMavenDependencies, { shortName: "dependency", unit: "version", url: "drift?type=maven-direct-dep", description: "Maven direct dependencies in use across all repositories in your workspace, " + "grouped by Drift Level.", }); if (isStaging) { categories_1.registerCategories(clojure_1.LeinDeps, "Java"); categories_1.registerReportDetails(clojure_1.LeinDeps, { url: "drift?type=clojure-project-deps" }); } categories_1.registerCategories(sdm_pack_docker_1.DockerFrom, "Docker"); categories_1.registerReportDetails(sdm_pack_docker_1.DockerFrom, { name: "Docker base images", shortName: "images", unit: "tag", url: "fingerprint/docker-base-image/*?byOrg=true&presence=false&progress=false&otherLabel=false&trim=false", description: "Docker base images in use across all repositories in your workspace, " + "broken out by image label and repositories where used.", }); categories_1.registerCategories(sdm_pack_docker_1.DockerPorts, "Docker"); categories_1.registerReportDetails(sdm_pack_docker_1.DockerPorts, { shortName: "ports", unit: "port", url: "fingerprint/docker-ports/*?byOrg=true&presence=false&progress=false&otherLabel=false&trim=false", description: "Ports exposed in Docker configuration in use across all repositories in your workspace, " + "broken out by port number and repositories where used.", }); if (mode === "online") { const pushImpact = new sdm_1.PushImpact(); sdm.addExtensionPacks(sdm_pack_fingerprints_1.fingerprintSupport({ pushImpactGoal: pushImpact, aspects: jobAspects, handlers, })); return { analyze: { goals: pushImpact, }, }; } else { sdm.addEvent(createFingerprintJob_1.CreateFingerprintJob); sdm.addCommand(createFingerprintJob_1.CreateFingerprintJobCommand); sdm.addCommand(fingerprintTask_1.calculateFingerprintTask(jobAspects, handlers)); return {}; } }), { name: "Analysis Software Delivery Machine", preProcessors: (cfg) => __awaiter(this, void 0, void 0, function* () { // Do not surface the single pushImpact goal set in every UI cfg.sdm.tagGoalSet = () => __awaiter(this, void 0, void 0, function* () { return [{ name: "@atomist/sdm/internal" }]; }); // Use lazy project loader for this SDM cfg.sdm.projectLoader = new sdm_1.GitHubLazyProjectLoader(new sdm_1.CachingProjectLoader()); // Disable goal hooks from repos cfg.sdm.goal = { hooks: false, }; // For safety we sign every goal cfg.sdm.goalSigning = Object.assign({}, cfg.sdm.goalSigning, { scope: sdm_1.GoalSigningScope.All }); if (mode === "job") { cfg.name = `${cfg.name}-job`; cfg.ws.termination = { graceful: true, gracePeriod: 1000 * 60 * 10, }; } return cfg; }), postProcessors: [ automation_client_ext_humio_1.configureHumio, automation_client_ext_dashboard_1.configureDashboardNotifications, (cfg) => __awaiter(this, void 0, void 0, function* () { const { customizers, routesToSuggestOnStartup } = orgVisualizationEndpoints(machine_1.sdmConfigClientFactory(cfg), cfg.http.client.factory); cfg.http.customizers = customizers; routesToSuggestOnStartup.forEach(rtsos => { cfg.logging.banner.contributors.push(suggestRoute(rtsos)); }); // start up embedded postgres if needed if (process.env.ATOMIST_POSTGRES === "start" && !_.get(cfg, "sdm.postgres")) { automation_client_1.logger.info("Starting embedded Postgres"); yield sdm_1.execPromise("/etc/init.d/postgresql", ["start"]); const postgresCfg = { user: "org_viz", password: "atomist", }; _.set(cfg, "sdm.postgres", postgresCfg); yield configuration_1.writeUserConfig({ sdm: { postgres: postgresCfg, }, }); } return cfg; }), ], }); function suggestRoute({ title, route }) { return cfg => ({ title, body: `http://localhost:${cfg.http.port}${route}`, }); } function orgVisualizationEndpoints(dbClientFactory, httpClientFactory) { const resultStore = machine_1.analysisResultStore(dbClientFactory); const aspectRegistry = new DefaultAspectRegistry_1.DefaultAspectRegistry({ idealStore: resultStore, problemStore: resultStore, aspects: aspects_1.Aspects, undesirableUsageChecker: demoUndesirableUsageChecker_1.demoUndesirableUsageChecker, }); const aboutTheApi = api_1.api(dbClientFactory, resultStore, aspectRegistry); if (!sdm_core_1.isInLocalMode()) { return { routesToSuggestOnStartup: aboutTheApi.routesToSuggestOnStartup, customizers: [aboutTheApi.customizer], }; } const aboutStaticPages = orgPage_1.orgPage(aspectRegistry, resultStore, httpClientFactory); return { routesToSuggestOnStartup: [...aboutStaticPages.routesToSuggestOnStartup, ...aboutTheApi.routesToSuggestOnStartup], customizers: [aboutStaticPages.customizer, aboutTheApi.customizer], }; } //# sourceMappingURL=index.js.map