/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2020-08-25 16:18:36 * @modify date 2020-08-26 00:08:31 * @desc [description] */ import { Logger } from 'winston'; import { exportFunctionToDispatcher } from '../../lib/dispatcher/nopeDispatcherDecorators'; import { SystemLogger } from "../mod-Logger/src/Unique.Logger"; export function now() { const _hr = process.hrtime(); return _hr[0] * 1000 + _hr[1] / 1000 / 1000; } /** * Function to Generate a Benchmark-Function * @param displayQpsAfter * @param textToDisplay */ export const generateBenchmarkFunction = exportFunctionToDispatcher((displayQpsAfter: number, textToDisplay: string, logger?: Logger): () => void => { let _counter = 0; let _startTime = now(); const max = displayQpsAfter; const _logger = logger !== undefined ? logger : SystemLogger.logger.getLogger('algorithmen.benchmark') return () => { if (_counter === 1) { _startTime = now(); } else if (_counter === max) { const _endTime = now(); const _timeDifference = _endTime - _startTime; const _qps = max / (_timeDifference / 1000); /** Log the Result */ _logger.info(textToDisplay + ' QPS: ' + (Math.round(_qps * 100) / 100).toString() + ' [R/Sec]'); /** Reset the Value */ _counter = 0; } _counter++; }; }, { uri: 'generateBenchmarkFunction' });