@instana/shared-metrics
Version:
Internal metrics plug-in package for Node.js monitoring with Instana
35 lines (28 loc) • 686 B
JavaScript
/*
* (c) Copyright IBM Corp. 2021
* (c) Copyright Instana Inc. and contributors 2021
*/
;
const EventEmitter = require('events');
const assert = require('assert');
class CountDownLatch extends EventEmitter {
constructor(counter = 1) {
super();
assert(counter >= 0);
this.counter = counter;
this.doneEmitted = false;
}
countUp(increment = 1) {
this.counter += increment;
}
countDown(decrement = 1) {
if (this.counter >= decrement) {
this.counter -= decrement;
if (this.counter === 0 && !this.doneEmitted) {
this.emit('done');
this.doneEmitted = true;
}
}
}
}
module.exports = CountDownLatch;