import { PerformanceEntry, PerformanceObserver, performance } from 'perf_hooks';
import Statistics, { StatisticsData } from '../types/Statistics';
+import { ChargingStationWorkerMessageEvents } from '../types/ChargingStationWorker';
import Configuration from '../utils/Configuration';
import { MessageType } from '../types/ocpp/MessageType';
import { URL } from 'url';
import Utils from '../utils/Utils';
-import { WorkerMessageEvents } from '../types/Worker';
import logger from '../utils/Logger';
import { parentPort } from 'worker_threads';
}
public static beginMeasure(id: string): string {
- const beginId = 'begin' + id.charAt(0).toUpperCase() + id.slice(1);
- performance.mark(beginId);
- return beginId;
+ const markId = `${id.charAt(0).toUpperCase() + id.slice(1)}~${Utils.generateUUID()}`;
+ performance.mark(markId);
+ return markId;
}
- public static endMeasure(name: string, beginId: string): void {
- performance.measure(name, beginId);
- performance.clearMarks(beginId);
+ public static endMeasure(name: string, markId: string): void {
+ performance.measure(name, markId);
+ performance.clearMarks(markId);
}
public addRequestStatistic(command: RequestCommand | IncomingRequestCommand, messageType: MessageType): void {
private initializePerformanceObserver(): void {
this.performanceObserver = new PerformanceObserver((list) => {
- this.addPerformanceEntryToStatistics(list.getEntries()[0]);
- logger.debug(`${this.logPrefix()} '${list.getEntries()[0].name}' performance entry: %j`, list.getEntries()[0]);
+ const lastPerformanceEntry = list.getEntries()[0];
+ this.addPerformanceEntryToStatistics(lastPerformanceEntry);
+ logger.debug(`${this.logPrefix()} '${lastPerformanceEntry.name}' performance entry: %j`, lastPerformanceEntry);
});
this.performanceObserver.observe({ entryTypes: ['measure'] });
}
this.displayInterval = setInterval(() => {
this.logStatistics();
}, Configuration.getLogStatisticsInterval() * 1000);
- logger.info(this.logPrefix() + ' logged every ' + Utils.secondsToHHMMSS(Configuration.getLogStatisticsInterval()));
+ logger.info(this.logPrefix() + ' logged every ' + Utils.formatDurationSeconds(Configuration.getLogStatisticsInterval()));
} else {
logger.info(this.logPrefix() + ' log interval is set to ' + Configuration.getLogStatisticsInterval().toString() + '. Not logging statistics');
}
this.statistics.statisticsData[entryName].ninetyFiveThPercentileTimeMeasurement = this.percentile(this.statistics.statisticsData[entryName].timeMeasurementSeries, 95);
this.statistics.statisticsData[entryName].stdDevTimeMeasurement = this.stdDeviation(this.statistics.statisticsData[entryName].timeMeasurementSeries);
if (Configuration.getPerformanceStorage().enabled) {
- parentPort.postMessage({ id: WorkerMessageEvents.PERFORMANCE_STATISTICS, data: this.statistics });
+ parentPort.postMessage({ id: ChargingStationWorkerMessageEvents.PERFORMANCE_STATISTICS, data: this.statistics });
}
}