X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FAutomaticTransactionGenerator.ts;h=a6143a8c0a3bb7de88d668a15bf0ac28cf5b323b;hb=16c46962f43a692c996b1c89a94dc572fea52d63;hp=adf38e67b4591c0dae62a6b76827556bbba5382f;hpb=7e3bde4fa97ee4937b806bb4dfeb16ef0f99d1a4;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/AutomaticTransactionGenerator.ts b/src/charging-station/AutomaticTransactionGenerator.ts index adf38e67..a6143a8c 100644 --- a/src/charging-station/AutomaticTransactionGenerator.ts +++ b/src/charging-station/AutomaticTransactionGenerator.ts @@ -1,11 +1,9 @@ // Partial Copyright Jerome Benoit. 2021-2024. All Rights Reserved. +import { randomInt } from 'node:crypto' + import { hoursToMilliseconds, secondsToMilliseconds } from 'date-fns' -import type { ChargingStation } from './ChargingStation.js' -import { checkChargingStation } from './Helpers.js' -import { IdTagsCache } from './IdTagsCache.js' -import { isIdTagAuthorized } from './ocpp/index.js' import { BaseError } from '../exception/index.js' import { PerformanceStatistics } from '../performance/index.js' import { @@ -18,17 +16,20 @@ import { type StopTransactionResponse } from '../types/index.js' import { - Constants, clone, + Constants, convertToDate, formatDurationMilliSeconds, - getRandomInteger, isValidDate, - logPrefix, logger, + logPrefix, secureRandom, sleep } from '../utils/index.js' +import type { ChargingStation } from './ChargingStation.js' +import { checkChargingStation } from './Helpers.js' +import { IdTagsCache } from './IdTagsCache.js' +import { isIdTagAuthorized } from './ocpp/index.js' export class AutomaticTransactionGenerator { private static readonly instances: Map = new Map< @@ -66,6 +67,11 @@ export class AutomaticTransactionGenerator { return AutomaticTransactionGenerator.instances.get(chargingStation.stationInfo!.hashId) } + public static deleteInstance (chargingStation: ChargingStation): boolean { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return AutomaticTransactionGenerator.instances.delete(chargingStation.stationInfo!.hashId) + } + public start (stopAbsoluteDuration?: boolean): void { if (!checkChargingStation(this.chargingStation, this.logPrefix())) { return @@ -194,11 +200,11 @@ export class AutomaticTransactionGenerator { break } const wait = secondsToMilliseconds( - getRandomInteger( + randomInt( this.chargingStation.getAutomaticTransactionGeneratorConfiguration() - ?.maxDelayBetweenTwoTransactions, + ?.minDelayBetweenTwoTransactions, this.chargingStation.getAutomaticTransactionGeneratorConfiguration() - ?.minDelayBetweenTwoTransactions + ?.maxDelayBetweenTwoTransactions ) ) logger.info(`${this.logPrefix(connectorId)} waiting for ${formatDurationMilliSeconds(wait)}`) @@ -216,9 +222,9 @@ export class AutomaticTransactionGenerator { if (startResponse?.idTagInfo.status === AuthorizationStatus.ACCEPTED) { // Wait until end of transaction const waitTrxEnd = secondsToMilliseconds( - getRandomInteger( - this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.maxDuration, - this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.minDuration + randomInt( + this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.minDuration, + this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.maxDuration ) ) logger.info( @@ -324,6 +330,15 @@ export class AutomaticTransactionGenerator { ) return false } + const connectorStatus = this.chargingStation.getConnectorStatus(connectorId) + if (connectorStatus?.transactionStarted === true) { + logger.info( + `${this.logPrefix( + connectorId + )} entered in transaction loop while a transaction ${connectorStatus.transactionId} is already started on connector ${connectorId}` + ) + return false + } return true } @@ -365,7 +380,7 @@ export class AutomaticTransactionGenerator { logger.info( `${this.logPrefix( connectorId - )} transaction loop waiting for running transaction ${connectorStatus.transactionId} on connector ${connectorId} to be stopped` + )} transaction loop waiting for started transaction ${connectorStatus.transactionId} on connector ${connectorId} to be stopped` ) logged = true }