@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
97 lines (96 loc) • 3.19 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const groupBy_1 = __importDefault(require("lodash/groupBy"));
const sqs_1 = __importDefault(require("aws-sdk/clients/sqs"));
const lodash_1 = require("lodash");
const utils_1 = require("../../utils");
const errorLog_1 = __importDefault(require("../../utils/errorLog"));
const serviceName = 'SQS';
const errorLog = new errorLog_1.default(serviceName);
const endpoint = utils_1.initTestEndpoint(serviceName);
const listSqsQueueUrlsForRegion = async (sqs) => {
const allQueueUrls = [];
try {
let listQueuesOutput = await sqs.listQueues().promise();
if (listQueuesOutput?.QueueUrls) {
allQueueUrls.push(...listQueuesOutput.QueueUrls);
}
let nextToken = listQueuesOutput.NextToken;
while (nextToken) {
listQueuesOutput = await sqs
.listQueues({ NextToken: nextToken })
.promise();
if (listQueuesOutput?.QueueUrls) {
allQueueUrls.push(...listQueuesOutput.QueueUrls);
}
nextToken = listQueuesOutput.NextToken;
}
return allQueueUrls;
}
catch (err) {
errorLog.generateAwsErrorLog({
functionName: 'sqs:listQueues',
err,
});
}
return [];
};
const getQueueAttributes = async (sqs, queueUrl) => {
try {
const attributes = await sqs
.getQueueAttributes({
QueueUrl: queueUrl,
AttributeNames: ['All'],
})
.promise();
return attributes?.Attributes ?? {};
}
catch (err) {
errorLog.generateAwsErrorLog({
functionName: 'sqs:getQueueAttributes',
err,
});
}
return null;
};
const getQueueTags = async (sqs, queueUrl) => {
try {
const tags = await sqs.listQueueTags({ QueueUrl: queueUrl }).promise();
return tags.Tags;
}
catch (err) {
errorLog.generateAwsErrorLog({
functionName: 'sqs:listQueueTags',
err,
});
}
return null;
};
exports.default = async ({ regions, config, }) => {
const sqsList = [];
// get all SQS queueUrls for all regions
for (const region of regions.split(',')) {
const sqs = new sqs_1.default({ ...config, region, endpoint });
const queueUrls = await listSqsQueueUrlsForRegion(sqs);
for (const queueUrl of queueUrls) {
// get all attributes for each queue using the url
const sqsAttributes = await getQueueAttributes(sqs, queueUrl);
const sqsData = {
queueUrl,
region,
sqsAttributes,
};
// get all tags for each queue
const tags = await getQueueTags(sqs, queueUrl);
if (!lodash_1.isEmpty(tags)) {
sqsData.Tags = tags;
}
sqsList.push(sqsData);
}
}
errorLog.reset();
return groupBy_1.default(sqsList, 'region');
};