X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fstart.ts;h=fb58c2d28ca2187dbcf0bb48b8e5b4905f23c512;hb=3d2ff9e4875d166265bb925e00a4301e82f5c248;hp=61a6b5f9f56c03fe4602ac9723cede9aeacf635e;hpb=e118beaab2fe63c663d5a969085c682ca05b6554;p=e-mobility-charging-stations-simulator.git diff --git a/src/start.ts b/src/start.ts index 61a6b5f9..fb58c2d2 100644 --- a/src/start.ts +++ b/src/start.ts @@ -2,38 +2,55 @@ import Configuration from './utils/Configuration'; import { StationTemplateURL } from './types/ConfigurationData'; import Utils from './utils/Utils'; import Wrk from './charging-station/Worker'; -import logger from './utils/Logger'; +import WorkerData from './types/WorkerData'; +import fs from 'fs'; class Bootstrap { - static start() { + static async start() { try { - logger.debug('%s Configuration: %j', Utils.logPrefix(), Configuration.getConfig()); let numStationsTotal = 0; + let numConcurrentWorkers = 0; + let worker: Wrk; + let chargingStationsPerWorker = Configuration.getChargingStationsPerWorker(); + let counter = 0; // Start each ChargingStation object in a worker thread if (Configuration.getStationTemplateURLs()) { - Configuration.getStationTemplateURLs().forEach((stationURL: StationTemplateURL) => { + for await (const stationURL of Configuration.getStationTemplateURLs()) { try { const nbStations = stationURL.numberOfStations ? stationURL.numberOfStations : 0; numStationsTotal += nbStations; for (let index = 1; index <= nbStations; index++) { - const worker = new Wrk('./dist/charging-station/StationWorker.js', { + const workerData = { index, - templateFile: stationURL.file, - }, numStationsTotal); - worker.start().catch(() => {}); + templateFile: stationURL.file + } as WorkerData; + if(counter === 0 || counter === chargingStationsPerWorker) { + // Start new worker with one charging station + worker = await new Wrk('./dist/charging-station/StationWorker.js', workerData, numStationsTotal); + worker.start().catch(() => {}); + counter = 0; + // Start workers sequentially to optimize memory at start time + await Utils.sleep(500); + } else { + // Add new charging station to existing Worker + worker.startNewChargingStation(workerData, numStationsTotal) + } + counter++; + // Start charging station sequentially to optimize memory at start time + numConcurrentWorkers = worker.concurrentWorkers; } } catch (error) { // eslint-disable-next-line no-console console.log('Charging station start with template file ' + stationURL.file + ' error ' + JSON.stringify(error, null, ' ')); } - }); + } } else { console.log('No stationTemplateURLs defined in configuration, exiting'); } if (numStationsTotal === 0) { console.log('No charging station template enabled in configuration, exiting'); } else { - console.log('Charging station simulator started with ' + numStationsTotal.toString() + ' charging station(s)'); + console.log('Charging station simulator started with ' + numStationsTotal.toString() + ' charging station(s) of ' + numConcurrentWorkers.toString() + ' concurrently running'); } } catch (error) { // eslint-disable-next-line no-console