- private initWorkerImplementation(): void {
- this.workerImplementation = WorkerFactory.getWorkerImplementation<ChargingStationWorkerData>(
- this.workerScript,
- Configuration.getWorkerProcess(),
- {
- workerStartDelay: Configuration.getWorkerStartDelay(),
- elementStartDelay: Configuration.getElementStartDelay(),
- poolMaxSize: Configuration.getWorkerPoolMaxSize(),
- poolMinSize: Configuration.getWorkerPoolMinSize(),
- elementsPerWorker: Configuration.getChargingStationsPerWorker(),
- poolOptions: {
- workerChoiceStrategy: Configuration.getWorkerPoolStrategy(),
- },
- messageHandler: async (msg: ChargingStationWorkerMessage) => {
- if (msg.id === ChargingStationWorkerMessageEvents.STARTED) {
- this.uiServer.chargingStations.add(msg.data.id as string);
- } else if (msg.id === ChargingStationWorkerMessageEvents.STOPPED) {
- this.uiServer.chargingStations.delete(msg.data.id as string);
- } else if (msg.id === ChargingStationWorkerMessageEvents.PERFORMANCE_STATISTICS) {
- await this.storage.storePerformanceStatistics(msg.data as unknown as Statistics);
- }
+ private initializeWorkerImplementation(): void {
+ let elementsPerWorker: number | undefined;
+ if (
+ Configuration.getConfigurationSection<WorkerConfiguration>(ConfigurationSection.worker)
+ ?.elementsPerWorker === 'auto'
+ ) {
+ elementsPerWorker =
+ this.numberOfChargingStations > availableParallelism()
+ ? Math.round(this.numberOfChargingStations / availableParallelism())
+ : 1;
+ }
+ this.workerImplementation === null &&
+ (this.workerImplementation = WorkerFactory.getWorkerImplementation<ChargingStationWorkerData>(
+ this.workerScript,
+ Configuration.getConfigurationSection<WorkerConfiguration>(ConfigurationSection.worker)
+ .processType!,
+ {
+ workerStartDelay: Configuration.getConfigurationSection<WorkerConfiguration>(
+ ConfigurationSection.worker,
+ ).startDelay,
+ elementStartDelay: Configuration.getConfigurationSection<WorkerConfiguration>(
+ ConfigurationSection.worker,
+ ).elementStartDelay,
+ poolMaxSize: Configuration.getConfigurationSection<WorkerConfiguration>(
+ ConfigurationSection.worker,
+ ).poolMaxSize!,
+ poolMinSize: Configuration.getConfigurationSection<WorkerConfiguration>(
+ ConfigurationSection.worker,
+ ).poolMinSize!,
+ elementsPerWorker:
+ elementsPerWorker ??
+ (Configuration.getConfigurationSection<WorkerConfiguration>(ConfigurationSection.worker)
+ .elementsPerWorker as number),
+ poolOptions: {
+ messageHandler: this.messageHandler.bind(this) as (message: unknown) => void,
+ },