UNPKG

deep-package-manager

Version:
157 lines (129 loc) 3.85 kB
/** * Created by AlexanderC on 11/24/15. */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.CloudWatchLogsDriver = undefined; var _AbstractDriver = require('./AbstractDriver'); var _AbstractService = require('../Service/AbstractService'); var _CloudWatchLogsService = require('../Service/CloudWatchLogsService'); class CloudWatchLogsDriver extends _AbstractDriver.AbstractDriver { /** * @param {*} args */ constructor(...args) { super(...args); } /** * @returns {String[]} */ static get AVAILABLE_REGIONS() { return _CloudWatchLogsService.CloudWatchLogsService.AVAILABLE_REGIONS; } /** * @todo: find a better way to handle API logs specific use case * * Overrides base _matchResource by adding support for custom API Gateway CloudWatch log group name * e.g. API-Gateway-Execution-Logs_56fh4n843h/dev * * @param {String} resource * @returns {Boolean} * @private */ _matchResource(resource) { if (resource.indexOf(CloudWatchLogsDriver.API_GATEWAY_LOG_GROUP_PREFIX) !== -1) { let apiCloudWatchLogGroup = null; if (this._deployCfg && this._deployCfg.apigateway.api && this._deployCfg.apigateway.api.logGroupName) { apiCloudWatchLogGroup = this._deployCfg.apigateway.api.logGroupName; } return apiCloudWatchLogGroup ? resource === apiCloudWatchLogGroup : false; } // remove log group prefix to match generalized deep resource regexp let trimmedResource = resource.replace(CloudWatchLogsDriver.LAMBDA_LOG_GROUP_PREFIX, ''); if (!this._matchResourceEnv(trimmedResource)) { return false; } if (typeof this._baseHash === 'function') { return this._baseHash.bind(this)(resource); } else if (this._baseHash instanceof RegExp) { return this._baseHash.test(trimmedResource); } return _AbstractService.AbstractService.extractBaseHashFromResourceName(resource) === this._baseHash; } /** * @param {Function} cb */ list(cb) { let responses = 0; CloudWatchLogsDriver.LOG_GROUP_PREFIXES.forEach((logGroupPrefix, index) => { this._listLogGroups(logGroupPrefix, result => { responses++; if (responses === CloudWatchLogsDriver.LOG_GROUP_PREFIXES.length) { cb(result); } }); }); } /** * @param {String} logGroupPrefix * @param {Function} cb * @param {String|null} nextToken * @private */ _listLogGroups(logGroupPrefix, cb, nextToken = null) { let payload = { limit: CloudWatchLogsDriver.LIMIT, logGroupNamePrefix: logGroupPrefix }; if (nextToken) { payload.nextToken = nextToken; } this._awsService.describeLogGroups(payload, (error, data) => { if (error) { cb(error); return; } for (let i in data.logGroups) { if (!data.logGroups.hasOwnProperty(i)) { continue; } let cwlData = data.logGroups[i]; let groupName = cwlData.logGroupName; this._checkPushStack(groupName, groupName, cwlData); } if (data.nextToken) { let nextBatchToken = data.nextToken; this._listLogGroups(logGroupPrefix, cb, nextBatchToken); } else { cb(null); } }); } /** * @returns {String} */ static get LAMBDA_LOG_GROUP_PREFIX() { return '/aws/lambda/'; } /** * @returns {String} */ static get API_GATEWAY_LOG_GROUP_PREFIX() { return 'API-Gateway-Execution-Logs_'; } /** * @returns {Array} */ static get LOG_GROUP_PREFIXES() { return [CloudWatchLogsDriver.LAMBDA_LOG_GROUP_PREFIX, CloudWatchLogsDriver.API_GATEWAY_LOG_GROUP_PREFIX]; } /** * @returns {Number} */ static get LIMIT() { return 50; } } exports.CloudWatchLogsDriver = CloudWatchLogsDriver;