@vtex/diagnostics-nodejs
Version:
Diagnostics library for Node.js applications
62 lines • 2.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigurableProvider = void 0;
exports.newConfigurableProvider = newConfigurableProvider;
class ConfigurableProvider {
constructor(config) {
if (config.defaultRate < 0 || config.defaultRate > 1) {
throw new Error(`Invalid default sampling rate: ${config.defaultRate}. Must be between 0 and 1.`);
}
this.defaultRate = config.defaultRate;
this.accounts = new Map();
if (config.initialAccounts) {
this.setAccounts(config.initialAccounts);
}
}
setDefaultRate(rate) {
if (rate < 0 || rate > 1) {
throw new Error(`Invalid sampling rate: ${rate}. Must be between 0 and 1.`);
}
this.defaultRate = rate;
}
setAccountRate(accountId, rate) {
if (rate < 0 || rate > 1) {
throw new Error(`Invalid sampling rate: ${rate}. Must be between 0 and 1.`);
}
this.accounts.set(accountId, rate);
}
setAccounts(accounts) {
for (const [accountId, rate] of Object.entries(accounts)) {
if (typeof rate !== 'number') {
console.warn(`Invalid rate type for account ${accountId}: ${typeof rate}, skipping`);
continue;
}
this.setAccountRate(accountId, rate);
}
}
removeAccount(accountId) {
return this.accounts.delete(accountId);
}
getSamplingRate(accountId) {
const rate = this.accounts.get(accountId);
if (rate !== undefined) {
return [rate, true];
}
return [this.defaultRate, false];
}
getDefaultRate() {
return this.defaultRate;
}
getAccountRates() {
const result = {};
for (const [accountId, rate] of this.accounts.entries()) {
result[accountId] = rate;
}
return result;
}
}
exports.ConfigurableProvider = ConfigurableProvider;
function newConfigurableProvider(config) {
return new ConfigurableProvider(config);
}
//# sourceMappingURL=configurable.js.map