@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
102 lines (101 loc) • 4.16 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const athena_1 = __importDefault(require("aws-sdk/clients/athena"));
const lodash_1 = require("lodash");
const fetchUtils_1 = require("../../utils/fetchUtils");
const utils_1 = require("../../utils");
const errorLog_1 = __importDefault(require("../../utils/errorLog"));
const serviceName = 'athena';
const endpoint = utils_1.initTestEndpoint(serviceName);
const errorLog = new errorLog_1.default(serviceName);
/**
* AthenaDataCatalog
*/
// TODO: fetch dataCatalog arn here (gotta get accountId first) and use to fetch tags
/**
* new STS(config).getCallerIdentity((err, data) => {
if (err) {
return reject(err)
}
return resolve({ accountId: data.Account })
})
*/
exports.default = async ({ regions, config, }) => {
const result = [];
const rawDatabases = [];
const activeRegions = regions.split(',');
for (const region of activeRegions) {
let athenaDataCatalogData;
try {
athenaDataCatalogData = await fetchUtils_1.fetchAllPaginatedData({
getResourcesFn: fetchUtils_1.convertToPromise({
sdkContext: new athena_1.default({ ...config, region, endpoint }),
fnName: 'listDataCatalogs',
}),
accessor: '',
});
}
catch (err) {
errorLog.generateAwsErrorLog({
functionName: 'athena:lsitDataCatalogs',
err,
});
}
if (!lodash_1.isEmpty(athenaDataCatalogData)) {
for (const catalog of athenaDataCatalogData) {
let athenaDatabaseData;
try {
athenaDatabaseData = await fetchUtils_1.fetchAllPaginatedData({
getResourcesFn: fetchUtils_1.convertToPromise({
sdkContext: new athena_1.default({ ...config, region, endpoint }),
fnName: 'listDatabases',
}),
accessor: '',
initialParams: {
CatalogName: catalog.CatalogName,
},
});
}
catch (err) {
errorLog.generateAwsErrorLog({
functionName: 'athena:listDatabases',
err,
});
}
if (!lodash_1.isEmpty(athenaDatabaseData)) {
for (const database of athenaDatabaseData) {
let athenaTableMetadata;
try {
athenaTableMetadata = await fetchUtils_1.fetchAllPaginatedData({
getResourcesFn: fetchUtils_1.convertToPromise({
sdkContext: new athena_1.default({ ...config, region, endpoint }),
fnName: 'listTableMetadata',
}),
accessor: '',
initialParams: {
CatalogName: catalog.CatalogName,
DatabaseName: database.Name,
},
});
}
catch (err) {
errorLog.generateAwsErrorLog({
functionName: 'athena:listTableMetadata',
err,
});
}
rawDatabases.push({ ...database, metadata: athenaTableMetadata });
}
result.push({ ...catalog, databases: rawDatabases, region });
}
else {
result.push({ ...catalog, region });
}
}
}
}
return lodash_1.groupBy(result, 'region');
};