cloud-report
Version:
Collects and analyzes cloud resources
54 lines (53 loc) • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../../../types");
const base_1 = require("../../base");
class VisibilityTimeoutAnalyzer extends base_1.BaseAnalyzer {
analyze(params, fullReport) {
const allQueuess = params.queue_attributes;
if (!allQueuess) {
return undefined;
}
const low_visibility_timeout = { type: types_1.CheckAnalysisType.PerformanceEfficiency };
low_visibility_timeout.what = "Is SQS Queue VisibilityTimeout too low?";
low_visibility_timeout.why = `We need to set proper VisibilityTimeout for the queues
otherwise messages will be processed multiple times and they will become available to other consumers
while they are being processed; this will have performance impact.`;
low_visibility_timeout.recommendation = `Recommended to set VisibilityTimeout
higher than the maximum processing time of the messages`;
low_visibility_timeout.benchmark = ['all'];
const allRegionsAnalysis = {};
for (const region in allQueuess) {
const regionQueuess = allQueuess[region];
allRegionsAnalysis[region] = [];
for (const queueUrl in regionQueuess) {
const queueAnalysis = {};
const queueName = this.getQueueName(queueUrl);
queueAnalysis.resource = { queueName, attributes: regionQueuess[queueUrl] };
queueAnalysis.resourceSummary = {
name: "Queue",
value: queueName,
};
if (regionQueuess[queueUrl].VisibilityTimeout > 5) {
queueAnalysis.severity = types_1.SeverityStatus.Good;
queueAnalysis.message = `Visibility Timeout is ${regionQueuess[queueUrl].VisibilityTimeout}`;
queueAnalysis.action = `Make sure that Visibility Timeout is
higher than the maximum processing time of the messages`;
}
else {
queueAnalysis.severity = types_1.SeverityStatus.Warning;
queueAnalysis.message = `Visibility Timeout is ${regionQueuess[queueUrl].VisibilityTimeout}`;
queueAnalysis.action = `Set Visibility Timeout higher than
the maximum processing time of the messages`;
}
allRegionsAnalysis[region].push(queueAnalysis);
}
}
low_visibility_timeout.regions = allRegionsAnalysis;
return { low_visibility_timeout };
}
getQueueName(queueUrl) {
return queueUrl.split("/").pop();
}
}
exports.VisibilityTimeoutAnalyzer = VisibilityTimeoutAnalyzer;