'use strict'; const counters = {}; const listeners = []; function increment(name, amount) { amount = amount || 1; counters[name] = (counters[name] || 0) + amount; for (const listener of listeners) { listener(name, counters[name]); } } function get(name) { return counters[name] || 0; } function snapshot() { return Object.assign({}, counters); } function reset() { for (const key of Object.keys(counters)) { counters[key] = 0; } } function onUpdate(fn) { listeners.push(fn); } function startPeriodicLog(intervalMs) { return setInterval(() => { console.log('[metrics]', JSON.stringify(snapshot())); }, intervalMs || 30000); } module.exports = { increment, get, snapshot, reset, onUpdate, startPeriodicLog, };