X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FAutomaticTransactionGenerator.js;h=ed7cf3ce5e841a7309568c5385eda6e15324abf6;hb=d182a67ab98336e0b047620f52097e948b3cf70e;hp=05a11044f54064a6454dd1adeaa89f7708d7de15;hpb=def3d48ec64cde4fb7890494dc1d8028098d8e8d;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/AutomaticTransactionGenerator.js b/src/charging-station/AutomaticTransactionGenerator.js index 05a11044..ed7cf3ce 100644 --- a/src/charging-station/AutomaticTransactionGenerator.js +++ b/src/charging-station/AutomaticTransactionGenerator.js @@ -1,11 +1,12 @@ const logger = require('../utils/Logger'); +const Constants = require('../utils/Constants'); const Utils = require('../utils/Utils'); const {performance, PerformanceObserver} = require('perf_hooks'); class AutomaticTransactionGenerator { constructor(chargingStation) { this._chargingStation = chargingStation; - this._timeToStop = false; + this._timeToStop = true; this._performanceObserver = new PerformanceObserver((list) => { const entry = list.getEntries()[0]; this._chargingStation._statistics.logPerformance(entry, 'AutomaticTransactionGenerator'); @@ -13,44 +14,49 @@ class AutomaticTransactionGenerator { }); } - _basicFormatLog(connectorId = null) { - if (connectorId) { - return Utils.basicFormatLog(' ' + this._chargingStation._stationInfo.name + ' ATG on connector #' + connectorId); - } - return Utils.basicFormatLog(' ' + this._chargingStation._stationInfo.name + ' ATG:'); + get timeToStop() { + return this._timeToStop; } - async stop() { - logger.info(this._basicFormatLog() + ' ATG OVER => STOPPING ALL TRANSACTIONS'); - for (const connector in this._chargingStation._connectors) { - if (this._chargingStation._connectors[connector].transactionStarted) { - logger.info(this._basicFormatLog(connector) + ' ATG OVER. Stop transaction ' + this._chargingStation._connectors[connector].transactionId); - await this._chargingStation.sendStopTransaction(this._chargingStation._connectors[connector].transactionId, connector); - } + _logPrefix(connectorId = null) { + if (connectorId) { + return Utils.logPrefix(' ' + this._chargingStation._stationInfo.name + ' ATG on connector #' + connectorId + ':'); } - this._timeToStop = true; + return Utils.logPrefix(' ' + this._chargingStation._stationInfo.name + ' ATG:'); } async start() { this._timeToStop = false; - if (this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAutomaticTransactionGeneratorAfterHours && - this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAutomaticTransactionGeneratorAfterHours > 0) { - logger.info(this._basicFormatLog() + ' ATG will stop in ' + Utils.secondstoHHMMSS(this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAutomaticTransactionGeneratorAfterHours * 3600)); + if (this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours && + this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours > 0) { setTimeout(() => { this.stop(); - }, this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAutomaticTransactionGeneratorAfterHours * 3600 * 1000); + }, this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours * 3600 * 1000); } for (const connector in this._chargingStation._connectors) { if (connector > 0) { this.startConnector(connector); } } + logger.info(this._logPrefix() + ' ATG started and will stop in ' + Utils.secondstoHHMMSS(this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours * 3600)); + } + + async stop(reason = '') { + logger.info(this._logPrefix() + ' ATG OVER => STOPPING ALL TRANSACTIONS'); + for (const connector in this._chargingStation._connectors) { + if (this._chargingStation._getConnector(connector).transactionStarted) { + logger.info(this._logPrefix(connector) + ' ATG OVER. Stop transaction ' + this._chargingStation._getConnector(connector).transactionId); + await this._chargingStation.sendStopTransaction(this._chargingStation._getConnector(connector).transactionId, reason); + } + } + this._timeToStop = true; } async startConnector(connectorId) { do { - const wait = Utils.getRandomInt(this._chargingStation._stationInfo.AutomaticTransactionGenerator.maxDelayBetweenTwoTransaction, this._chargingStation._stationInfo.AutomaticTransactionGenerator.minDelayBetweenTwoTransaction) * 1000; - logger.info(this._basicFormatLog(connectorId) + ' wait for ' + Utils.secondstoHHMMSS(wait / 1000)); + const wait = Utils.getRandomInt(this._chargingStation._stationInfo.AutomaticTransactionGenerator.maxDelayBetweenTwoTransactions, + this._chargingStation._stationInfo.AutomaticTransactionGenerator.minDelayBetweenTwoTransactions) * 1000; + logger.info(this._logPrefix(connectorId) + ' wait for ' + Utils.secondstoHHMMSS(wait / 1000)); await Utils.sleep(wait); if (this._timeToStop) break; const start = Math.random(); @@ -58,21 +64,21 @@ class AutomaticTransactionGenerator { if (start < this._chargingStation._stationInfo.AutomaticTransactionGenerator.probabilityOfStart) { skip = 0; // Start transaction - logger.info(this._basicFormatLog(connectorId) + ' start transaction'); const startTransaction = performance.timerify(this.startTransaction); this._performanceObserver.observe({entryTypes: ['function']}); const startResponse = await startTransaction(connectorId, this); if (startResponse.idTagInfo.status !== 'Accepted') { - logger.info(this._basicFormatLog(connectorId) + ' transaction rejected'); - await Utils.sleep(2000); + logger.info(this._logPrefix(connectorId) + ' transaction rejected'); + await Utils.sleep(Constants.CHARGING_STATION_ATG_WAIT_TIME); } else { // Wait until end of transaction - const wait = Utils.getRandomInt(this._chargingStation._stationInfo.AutomaticTransactionGenerator.maxDuration, this._chargingStation._stationInfo.AutomaticTransactionGenerator.minDuration) * 1000; - logger.info(this._basicFormatLog(connectorId) + ' transaction ' + this._chargingStation._connectors[connectorId].transactionId + ' will stop in ' + Utils.secondstoHHMMSS(wait / 1000)); + const wait = Utils.getRandomInt(this._chargingStation._stationInfo.AutomaticTransactionGenerator.maxDuration, + this._chargingStation._stationInfo.AutomaticTransactionGenerator.minDuration) * 1000; + logger.info(this._logPrefix(connectorId) + ' transaction ' + this._chargingStation._getConnector(connectorId).transactionId + ' will stop in ' + Utils.secondstoHHMMSS(wait / 1000)); await Utils.sleep(wait); // Stop transaction - if (this._chargingStation._connectors[connectorId].transactionStarted) { - logger.info(this._basicFormatLog(connectorId) + ' stop transaction ' + this._chargingStation._connectors[connectorId].transactionId); + if (this._chargingStation._getConnector(connectorId).transactionStarted) { + logger.info(this._logPrefix(connectorId) + ' stop transaction ' + this._chargingStation._getConnector(connectorId).transactionId); const stopTransaction = performance.timerify(this.stopTransaction); this._performanceObserver.observe({entryTypes: ['function']}); await stopTransaction(connectorId, this); @@ -80,17 +86,17 @@ class AutomaticTransactionGenerator { } } else { skip++; - logger.info(this._basicFormatLog(connectorId) + ' transaction skipped ' + skip); + logger.info(this._logPrefix(connectorId) + ' transaction skipped ' + skip); } } while (!this._timeToStop); - logger.info(this._basicFormatLog() + ' ATG is STOPPED'); + logger.info(this._logPrefix(connectorId) + ' ATG STOPPED on the connector'); } // eslint-disable-next-line class-methods-use-this async startTransaction(connectorId, self) { - if (self._chargingStation.hasAuthorizationKeys()) { + if (self._chargingStation.hasAuthorizedTags()) { const tagId = self._chargingStation.getRandomTagId(); - logger.info(self._basicFormatLog(connectorId) + ' start transaction for tagID ' + tagId); + logger.info(self._logPrefix(connectorId) + ' start transaction for tagID ' + tagId); return self._chargingStation.sendStartTransaction(connectorId, tagId); } return self._chargingStation.sendStartTransaction(connectorId); @@ -98,7 +104,7 @@ class AutomaticTransactionGenerator { // eslint-disable-next-line class-methods-use-this async stopTransaction(connectorId, self) { - await self._chargingStation.sendStopTransaction(self._chargingStation._connectors[connectorId].transactionId, connectorId); + await self._chargingStation.sendStopTransaction(self._chargingStation._getConnector(connectorId).transactionId); } }