cloud-report
Version:
Collects and analyzes cloud resources
58 lines (57 loc) • 3.04 kB
JavaScript
;
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;