UNPKG

vulcain-corejs

Version:
115 lines 4.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const configurationManager_1 = require("./configurationManager"); const configurationSourceBuilder_1 = require("./configurationSourceBuilder"); const system_1 = require("../globals/system"); /** * * Provides dynamic properties updated when config change. * Accessing a dynamic property is very fast. The last value is cached and updated on the fly * from a <b>ConfigurationSource</b> at fixed interval. * Updates are made using polling requests on a list of sources. * <p> * Dynamic properties are read only. You can set a value but it will be valid only as a default value. * </p> * <code> * DynamicConfiguration.init().addRest("http....").startPolling(); * let i:number = DynamicConfiguration.getProperty("prop1"); * let i2:number = DynamicConfiguration.getOrDefaultProperty("prop1", 1); * </code> */ class DynamicConfiguration { /** * subscribe for a global property changed */ static get propertyChanged() { return DynamicConfiguration.manager.propertyChanged; } /** * Get a property */ static getProperty(name, value) { let p = DynamicConfiguration.manager.getProperty(name); if (!p) { p = DynamicConfiguration.manager.createDynamicProperty(name, value); } return p; } static getChainedProperty(name, defaultValue, ...fallbackPropertyNames) { let p = DynamicConfiguration.manager.getProperty(name); if (!p) { p = DynamicConfiguration.manager.createChainedDynamicProperty(name, fallbackPropertyNames, defaultValue); } return p; } /** * get a chained property for the current service. * Properties chain is: service.version.name->service.name->domain.name->name * @param name property name * @param defaultValue * @returns {IDynamicProperty<T>} */ static getChainedConfigurationProperty(name, defaultValue, commandName) { let fullName = commandName ? commandName + "." + name : name; let p = DynamicConfiguration.manager.getProperty(fullName); if (p) return p; let chain = [ system_1.Service.serviceName + "." + system_1.Service.serviceVersion + "." + fullName, system_1.Service.serviceName + "." + fullName, ]; if (commandName) { chain.push(fullName); } if (system_1.Service.domainName) chain.push(system_1.Service.domainName + "." + fullName); chain.push(name); return DynamicConfiguration.getChainedProperty(fullName, defaultValue, ...chain); } /** * Get a property value by name * * @static * @template T * @param {string} name * @returns * * @memberOf DynamicConfiguration */ static getPropertyValue(name) { let p = this.getProperty(name); return p.value; } /// <summary> /// Initialize dynamic properties configuration. Can be call only once and before any call to DynamicProperties.instance. /// </summary> /// <param name="pollingIntervalInSeconds">Polling interval in seconds (default 60)</param> /// <param name="sourceTimeoutInMs">Max time allowed to a source to retrieve new values (Cancel the request but doesn't raise an error)</param> /// <returns>ConfigurationSourceBuilder</returns> static init(pollingIntervalInSeconds, sourceTimeoutInMs) { if (pollingIntervalInSeconds) DynamicConfiguration.manager.pollingIntervalInSeconds = pollingIntervalInSeconds; if (sourceTimeoutInMs) DynamicConfiguration.manager.sourceTimeoutInMs = sourceTimeoutInMs; if (!DynamicConfiguration._builder) { DynamicConfiguration._builder = new configurationSourceBuilder_1.ConfigurationSourceBuilder(DynamicConfiguration.manager); } return DynamicConfiguration._builder; } /** * * @param pollingIntervalInSeconds For test only */ static reset(pollingIntervalInSeconds) { DynamicConfiguration.manager = new configurationManager_1.ConfigurationManager(); if (pollingIntervalInSeconds) DynamicConfiguration.manager.pollingIntervalInSeconds = pollingIntervalInSeconds; return DynamicConfiguration.manager; } } /** * For test only - Do not use directly */ DynamicConfiguration.manager = new configurationManager_1.ConfigurationManager(); exports.DynamicConfiguration = DynamicConfiguration; //# sourceMappingURL=dynamicConfiguration.js.map