const { MetricTypes } = require('./Metric');
/**
* Works like a {@link Gauge}, but rather than getting its value from a callback, the value
* is set when needed. This can be useful for setting a gauges value for asynchronous operations.
* @implements {Metric}
* @example
* const settableGauge = new SettableGauge();
* // Update the settable gauge ever 10'ish seconds
* setInterval(() => {
* calculateSomethingAsync().then((value) => {
* settableGauge.setValue(value);
* });
* }, 10000);
*/
class SettableGauge {
/**
* @param {SettableGaugeProperties} [options] See {@link SettableGaugeProperties}.
*/
constructor(options) {
options = options || {};
this._value = options.initialValue || 0;
}
setValue(value) {
this._value = value;
}
/**
* @return {number} Settable Gauges directly return there current value.
*/
toJSON() {
return this._value;
}
/**
* The type of the Metric Impl. {@link MetricTypes}.
* @return {string} The type of the Metric Impl.
*/
getType() {
return MetricTypes.GAUGE;
}
}
module.exports = SettableGauge;
/**
* Properties that can be supplied to the constructor of a {@link Counter}
*
* @interface SettableGaugeProperties
* @typedef SettableGaugeProperties
* @type {Object}
* @property {number} initialValue An initial value to use for this settable gauge. Defaults to 0.
* @example
* // Creates a Gauge that with an initial value of 500.
* const settableGauge = new SettableGauge({ initialValue: 500 })
*
*/