diff --git a/events/scalerEmmiter.js b/events/scalerEmmiter.js new file mode 100644 index 0000000..0a3a4af --- /dev/null +++ b/events/scalerEmmiter.js @@ -0,0 +1,24 @@ +'use strict' + +const EventEmitter = require('events') + +class ScaleEmitter extends EventEmitter { + constructor() { + super() + this._eventRelease = 'releaseService' + this.on(this._eventRelease, this.scaleDownServices) + } + + scaleDownServices(serviceName, servicePool) { + if(servicePool.servicesList[serviceName].length > 1) { + console.log('Releasing service') + delete servicePool.servicesList[serviceName].pop() + } + } + + emit(serviceName, servicePool) { + super.emit(this._eventType, serviceName, servicePool) + } +} + +module.exports = ScaleEmitter diff --git a/lib/service.js b/lib/service.js index 85d5a81..e50d8e3 100644 --- a/lib/service.js +++ b/lib/service.js @@ -2,6 +2,7 @@ const axios = require('axios'); const EventEmitter = require('events') +const ScaleEmitter = require('../events/scalerEmmiter.js') class Service { constructor(name, baseUrl) { @@ -16,10 +17,8 @@ class Service { class ServicePool { constructor(servicesInfos){ - this.emitter = new EventEmitter() + this.emitter = new ScaleEmitter() this.servicesInfos = servicesInfos - this._eventRelease = 'releaseService' - this.emitter.on(this._eventRelease, this.scaleDownServices) this.availableServices = Object.keys(servicesInfos) this.servicesList = {} @@ -34,6 +33,7 @@ class ServicePool { acquire(serviceName) { if(this.servicesList[serviceName].length === 0){ if(this.servicesInfos[serviceName] !== undefined) { + console.log('Creating new service') let s = new Service(serviceName, servicesInfos[service]) this.servicesList[service].push(s) } @@ -43,14 +43,9 @@ class ServicePool { release(service) { this.servicesList[service.name].push(service) - this.emitter.emit(this._eventRelease, service.name, this) + this.emitter.emit(service.name, this) } - scaleDownServices(serviceName, servicePool) { - if(servicePool.servicesList[serviceName].length > 1) { - delete servicePool.servicesList[serviceName].pop() - } - } } module.exports = {