UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

58 lines (57 loc) 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = require("../../../types"); const base_1 = require("../../base"); class TopicsWithoutSubscriptionsAnalyzer extends base_1.BaseAnalyzer { analyze(params, fullReport) { const allSubscriptions = params.subscriptions; const allTopics = params.topics; if (!allTopics || !allSubscriptions) { return undefined; } const topics_without_subscriptions = { type: types_1.CheckAnalysisType.OperationalExcellence }; topics_without_subscriptions.what = "Are there any SNS topics without subscriptions?"; topics_without_subscriptions.why = `Topics without subscriptions cause confusion as mistakenly we might be publishing to them but no one will receive them`; topics_without_subscriptions.recommendation = `Every SNS topic should have proper subscriptions else you should remove it`; topics_without_subscriptions.benchmark = ['all']; const allRegionsAnalysis = {}; for (const region in allTopics) { const regionTopics = allTopics[region]; const regionSubscriptionsMap = this.mapSubscriptionByTopicArn(allSubscriptions[region]); allRegionsAnalysis[region] = []; for (const topic of regionTopics) { const topic_analysis = {}; const topicName = this.getTopicName(topic.TopicArn); topic_analysis.resource = { topicName, subscriptions: regionSubscriptionsMap[topic.TopicArn] }; topic_analysis.resourceSummary = { name: "Topic", value: topicName, }; if (regionSubscriptionsMap[topic.TopicArn] && regionSubscriptionsMap[topic.TopicArn].length) { topic_analysis.severity = types_1.SeverityStatus.Good; topic_analysis.message = "Topic has subscriptions"; } else { topic_analysis.severity = types_1.SeverityStatus.Warning; topic_analysis.message = "Topic does not have any subscriptions"; topic_analysis.action = "Either add subscription or delete the topic"; } allRegionsAnalysis[region].push(topic_analysis); } } topics_without_subscriptions.regions = allRegionsAnalysis; return { topics_without_subscriptions }; } mapSubscriptionByTopicArn(subscriptions) { return subscriptions.reduce((subscriptionsMap, subscription) => { subscriptionsMap[subscription.TopicArn] = subscriptionsMap[subscription.TopicArn] || []; subscriptionsMap[subscription.TopicArn].push(subscription); return subscriptionsMap; }, {}); } getTopicName(topicArn) { return topicArn.split(":").pop(); } } exports.TopicsWithoutSubscriptionsAnalyzer = TopicsWithoutSubscriptionsAnalyzer;