X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FMessageChannelUtils.ts;h=f9d1e14980017606a7c1f64ec0135eb47bf8e80b;hb=b8e3363a179fcf79d8bb66f47724b377d4d38a75;hp=4e353f4c6588e43beb6602cf2cb9d935c641a309;hpb=7671fa0be211e944f027ebd83f3a0ad64c2ef2d6;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/MessageChannelUtils.ts b/src/utils/MessageChannelUtils.ts index 4e353f4c..f9d1e149 100644 --- a/src/utils/MessageChannelUtils.ts +++ b/src/utils/MessageChannelUtils.ts @@ -1,83 +1,102 @@ -import type { ChargingStation } from '../charging-station'; +import { CircularBuffer } from 'mnemonist' + +import type { ChargingStation } from '../charging-station/index.js' import { type ChargingStationData, type ChargingStationWorkerMessage, ChargingStationWorkerMessageEvents, type Statistics, -} from '../types'; + type TimestampedData +} from '../types/index.js' +import { + buildChargingStationAutomaticTransactionGeneratorConfiguration, + buildConnectorsStatus, + buildEvsesStatus, + OutputFormat +} from './ChargingStationConfigurationUtils.js' + +export const buildAddedMessage = ( + chargingStation: ChargingStation +): ChargingStationWorkerMessage => { + return { + event: ChargingStationWorkerMessageEvents.added, + data: buildChargingStationDataPayload(chargingStation) + } +} -export class MessageChannelUtils { - private constructor() { - // This is intentional +export const buildDeletedMessage = ( + chargingStation: ChargingStation +): ChargingStationWorkerMessage => { + return { + event: ChargingStationWorkerMessageEvents.deleted, + data: buildChargingStationDataPayload(chargingStation) } +} - public static buildStartedMessage( - chargingStation: ChargingStation - ): ChargingStationWorkerMessage { - return { - id: ChargingStationWorkerMessageEvents.started, - data: MessageChannelUtils.buildChargingStationDataPayload(chargingStation), - }; +export const buildStartedMessage = ( + chargingStation: ChargingStation +): ChargingStationWorkerMessage => { + return { + event: ChargingStationWorkerMessageEvents.started, + data: buildChargingStationDataPayload(chargingStation) } +} - public static buildStoppedMessage( - chargingStation: ChargingStation - ): ChargingStationWorkerMessage { - return { - id: ChargingStationWorkerMessageEvents.stopped, - data: MessageChannelUtils.buildChargingStationDataPayload(chargingStation), - }; +export const buildStoppedMessage = ( + chargingStation: ChargingStation +): ChargingStationWorkerMessage => { + return { + event: ChargingStationWorkerMessageEvents.stopped, + data: buildChargingStationDataPayload(chargingStation) } +} - public static buildUpdatedMessage( - chargingStation: ChargingStation - ): ChargingStationWorkerMessage { - return { - id: ChargingStationWorkerMessageEvents.updated, - data: MessageChannelUtils.buildChargingStationDataPayload(chargingStation), - }; +export const buildUpdatedMessage = ( + chargingStation: ChargingStation +): ChargingStationWorkerMessage => { + return { + event: ChargingStationWorkerMessageEvents.updated, + data: buildChargingStationDataPayload(chargingStation) } +} - public static buildPerformanceStatisticsMessage( - statistics: Statistics - ): ChargingStationWorkerMessage { - return { - id: ChargingStationWorkerMessageEvents.performanceStatistics, - data: statistics, - }; +export const buildPerformanceStatisticsMessage = ( + statistics: Statistics +): ChargingStationWorkerMessage => { + const statisticsData = [...statistics.statisticsData].map(([key, value]) => { + if (value.measurementTimeSeries instanceof CircularBuffer) { + value.measurementTimeSeries = value.measurementTimeSeries.toArray() as TimestampedData[] + } + return [key, value] + }) + return { + event: ChargingStationWorkerMessageEvents.performanceStatistics, + data: { + id: statistics.id, + name: statistics.name, + uri: statistics.uri, + createdAt: statistics.createdAt, + updatedAt: statistics.updatedAt, + statisticsData + } } +} - private static buildChargingStationDataPayload( - chargingStation: ChargingStation - ): ChargingStationData { - return { - started: chargingStation.started, - stationInfo: chargingStation.stationInfo, - connectors: [...chargingStation.connectors.values()].map( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ({ transactionSetInterval, ...connectorStatusRest }) => connectorStatusRest - ), - evses: [...chargingStation.evses.values()].map((evseStatus) => { - return { - ...evseStatus, - connectors: [...evseStatus.connectors.values()].map( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ({ transactionSetInterval, ...connectorStatusRest }) => connectorStatusRest - ), - }; - }), - ocppConfiguration: chargingStation.ocppConfiguration, - wsState: chargingStation?.wsConnection?.readyState, - bootNotificationResponse: chargingStation.bootNotificationResponse, - ...(chargingStation.automaticTransactionGenerator && { - automaticTransactionGenerator: { - automaticTransactionGenerator: - chargingStation.getAutomaticTransactionGeneratorConfiguration(), - automaticTransactionGeneratorStatuses: [ - ...chargingStation.automaticTransactionGenerator.connectorsStatus.values(), - ], - }, - }), - }; +const buildChargingStationDataPayload = (chargingStation: ChargingStation): ChargingStationData => { + return { + started: chargingStation.started, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + stationInfo: chargingStation.stationInfo!, + connectors: buildConnectorsStatus(chargingStation), + evses: buildEvsesStatus(chargingStation, OutputFormat.worker), + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + ocppConfiguration: chargingStation.ocppConfiguration!, + supervisionUrl: chargingStation.wsConnectionUrl.href, + wsState: chargingStation.wsConnection?.readyState, + bootNotificationResponse: chargingStation.bootNotificationResponse, + ...(chargingStation.automaticTransactionGenerator != null && { + automaticTransactionGenerator: + buildChargingStationAutomaticTransactionGeneratorConfiguration(chargingStation) + }) } }