prometheus-what-active-users-exporter
Version:
Prometheus exporter that scrapes currently logged in users on unix systems
73 lines (59 loc) • 1.58 kB
JavaScript
'use strict'
const interval = require('./interval-wrapper')
/**
* @typedef ExpiringElement
*/
class ExpiringElement {
constructor(value, expiresAt) {
this._value = value
this._expiresAt = expiresAt
}
get value() {
return this._value
}
get expired() {
return Date.now() > this._expiresAt
}
}
class ExpiringArray {
constructor(expireAfter) {
/**
* @type {Array.<ExpiringElement>}
*/
this._array = []
this._expireElementsAfter = expireAfter
interval.new(() => {
this._array.forEach((el, index) => {
if (el.expired) {
this._array.splice(index, 1)
}
})
}, 500)
}
get length() {
return this._array.length
}
merge(expiringArray) {
this.push(...expiringArray)
}
push(element) {
if (element instanceof ExpiringElement) {
const isAlreadyStored = this._array.some(el => el.value === element.value)
if (!isAlreadyStored) {
this._array.push(element)
}
} else {
const isAlreadyStored = this._array.some(el => el.value === element)
if (!isAlreadyStored) {
this._array.push(new ExpiringElement(element, Date.now() + this._expireElementsAfter))
}
}
}
get(index) {
const element = this._array[index]
if (element) {
return element.value
}
}
}
module.exports = ExpiringArray