12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- var AWS = require('../core');
- /**
- * Resolve client-side monitoring configuration from either environmental variables
- * or shared config file. Configurations from environmental variables have higher priority
- * than those from shared config file. The resolver will try to read the shared config file
- * no matter whether the AWS_SDK_LOAD_CONFIG variable is set.
- * @api private
- */
- function resolveMonitoringConfig() {
- var config = {
- port: undefined,
- clientId: undefined,
- enabled: undefined,
- host: undefined
- };
- if (fromEnvironment(config) || fromConfigFile(config)) return toJSType(config);
- return toJSType(config);
- }
- /**
- * Resolve configurations from environmental variables.
- * @param {object} client side monitoring config object needs to be resolved
- * @returns {boolean} whether resolving configurations is done
- * @api private
- */
- function fromEnvironment(config) {
- config.port = config.port || process.env.AWS_CSM_PORT;
- config.enabled = config.enabled || process.env.AWS_CSM_ENABLED;
- config.clientId = config.clientId || process.env.AWS_CSM_CLIENT_ID;
- config.host = config.host || process.env.AWS_CSM_HOST;
- return config.port && config.enabled && config.clientId && config.host ||
- ['false', '0'].indexOf(config.enabled) >= 0; //no need to read shared config file if explicitely disabled
- }
- /**
- * Resolve cofigurations from shared config file with specified role name
- * @param {object} client side monitoring config object needs to be resolved
- * @returns {boolean} whether resolving configurations is done
- * @api private
- */
- function fromConfigFile(config) {
- var sharedFileConfig;
- try {
- var configFile = AWS.util.iniLoader.loadFrom({
- isConfig: true,
- filename: process.env[AWS.util.sharedConfigFileEnv]
- });
- var sharedFileConfig = configFile[
- process.env.AWS_PROFILE || AWS.util.defaultProfile
- ];
- } catch (err) {
- return false;
- }
- if (!sharedFileConfig) return config;
- config.port = config.port || sharedFileConfig.csm_port;
- config.enabled = config.enabled || sharedFileConfig.csm_enabled;
- config.clientId = config.clientId || sharedFileConfig.csm_client_id;
- config.host = config.host || sharedFileConfig.csm_host;
- return config.port && config.enabled && config.clientId && config.host;
- }
- /**
- * Transfer the resolved configuration value to proper types: port as number, enabled
- * as boolean and clientId as string. The 'enabled' flag is valued to false when set
- * to 'false' or '0'.
- * @param {object} resolved client side monitoring config
- * @api private
- */
- function toJSType(config) {
- //config.XXX is either undefined or string
- var falsyNotations = ['false', '0', undefined];
- if (!config.enabled || falsyNotations.indexOf(config.enabled.toLowerCase()) >= 0) {
- config.enabled = false;
- } else {
- config.enabled = true;
- }
- config.port = config.port ? parseInt(config.port, 10) : undefined;
- return config;
- }
- module.exports = resolveMonitoringConfig;
|