UNPKG

@atomist/sdm-pack-aspect

Version:

an Atomist SDM Extension Pack for visualizing drift across an organization

107 lines 4.47 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 array_1 = require("@atomist/sdm-core/lib/util/misc/array"); const showTiming_1 = require("../../../util/showTiming"); class SpiderAnalyzer { constructor(aspects, virtualProjectFinder) { this.aspects = aspects; this.virtualProjectFinder = virtualProjectFinder; this.timings = {}; } analyze(p) { return __awaiter(this, void 0, void 0, function* () { const fingerprints = []; const regularAspects = this.aspects.filter(a => !!a.extract); const atomicAspects = this.aspects.filter(aspect => !!aspect.consolidate); if (this.virtualProjectFinder) { // Seed the virtual project finder if we have one yield this.virtualProjectFinder.findVirtualProjectInfo(p); } yield extractRegularAspects(p, regularAspects, fingerprints, this.timings); yield extractAtomicAspects(p, atomicAspects, fingerprints); return { id: p.id, fingerprints, }; }); } } exports.SpiderAnalyzer = SpiderAnalyzer; function extractRegularAspects(p, aspects, fingerprints, timings) { return __awaiter(this, void 0, void 0, function* () { yield Promise.all(aspects // TODO why is this cast needed? .map(aspect => extractify(aspect, p, timings) .then(fps => fingerprints.push(...fps)))); }); } function extractAtomicAspects(p, aspects, fingerprints) { return __awaiter(this, void 0, void 0, function* () { yield Promise.all(aspects .map(aspect => extractAtomic(aspect, fingerprints) .then(fps => fingerprints.push(...fps)))); }); } function extractify(aspect, p, timeRecorder) { return __awaiter(this, void 0, void 0, function* () { try { const timed = yield showTiming_1.time(() => __awaiter(this, void 0, void 0, function* () { return aspect.extract(p); })); addTiming(aspect.name, timed.millis, timeRecorder); const result = !!timed.result ? array_1.toArray(timed.result) : []; return result; } catch (err) { automation_client_1.logger.error("Please check your configuration of aspect %s.\n%s", aspect.name, err); return []; } }); } function addTiming(type, millis, timeRecorder) { let found = timeRecorder[type]; if (!found) { found = { extractions: 0, totalMillis: 0, }; timeRecorder[type] = found; } found.extractions++; found.totalMillis += millis; } function extractAtomic(aspect, existingFingerprints) { return __awaiter(this, void 0, void 0, function* () { try { const extracted = yield aspect.consolidate(existingFingerprints); return !!extracted ? array_1.toArray(extracted) : []; } catch (err) { automation_client_1.logger.error("Please check your configuration of aspect %s.\n%s", aspect.name, err); return []; } }); } //# sourceMappingURL=SpiderAnalyzer.js.map