UNPKG

@atomist/sdm-pack-aspect

Version:

an Atomist SDM Extension Pack for visualizing drift across an organization

85 lines 4.39 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) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(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 WebSocketMessageClient_1 = require("@atomist/automation-client/lib/internal/transport/websocket/WebSocketMessageClient"); const cluster = require("cluster"); const AspectReportDetailsRegistry_1 = require("../aspect/AspectReportDetailsRegistry"); const types_1 = require("../typings/types"); function getAspectRegistrations(ctx, name) { return __awaiter(this, void 0, void 0, function* () { const aspects = (yield ctx.graphClient.query({ name: "AspectRegistrations", variables: { name: !!name ? [name] : undefined, }, })); return !!aspects ? aspects.AspectRegistration : []; }); } /** * Register aspect report details on start up */ function registerAspects(sdm, allAspects) { return () => __awaiter(this, void 0, void 0, function* () { // Only run this on the cluster master if cluster mode is enabled if (sdm.configuration.cluster.enabled && !cluster.isMaster) { return; } const workspaceIds = sdm.configuration.workspaceIds; const aspects = allAspects.filter(AspectReportDetailsRegistry_1.hasReportDetails); for (const workspaceId of workspaceIds) { // Set up graphql and message clients const messageClient = new TriggeredMessageClient(sdm.configuration.ws.lifecycle, workspaceId, sdm.configuration); const graphClient = sdm.configuration.graphql.client.factory.create(workspaceId, sdm.configuration); const registeredAspects = yield getAspectRegistrations({ graphClient }); for (const aspect of aspects) { const details = aspect.details; const registeredAspect = registeredAspects.find(a => a.name === aspect.name && a.owner === sdm.configuration.name); const aspectRegistration = { name: aspect.name, owner: sdm.configuration.name, displayName: aspect.displayName, unit: details.unit, shortName: details.shortName, description: details.description, category: details.category, url: details.url, manageable: details.manage !== undefined ? details.manage : !!aspect.apply, state: !!registeredAspect && !!registeredAspect.state ? registeredAspect.state : types_1.AspectRegistrationState.Enabled, }; yield messageClient.send(aspectRegistration, automation_client_1.addressEvent("AspectRegistration")); } } }); } exports.registerAspects = registerAspects; class TriggeredMessageClient extends WebSocketMessageClient_1.AbstractWebSocketMessageClient { constructor(ws, workspaceId, configuration) { super(ws, {}, automation_client_1.guid(), { id: workspaceId }, {}, configuration); } } //# sourceMappingURL=registerAspect.js.map