X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FUtils.ts;h=02164b1d3be956ec4edb9e1a537d624ba7b725bf;hb=8434025b7338b3439180ed7c2bed888fc42e04d3;hp=52a2b0ee7dc420682bfccb4b29f786dec6ee707a;hpb=9ac86a7ea04eb1155c2a720b36f6bf33ba336767;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 52a2b0ee..02164b1d 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -1,3 +1,6 @@ +import Configuration from './Configuration'; +import { WebSocketCloseEventStatusString } from '../types/WebSocket'; +import { WorkerProcessType } from '../types/Worker'; import { v4 as uuid } from 'uuid'; export default class Utils { @@ -10,14 +13,14 @@ export default class Utils { } static secondsToHHMMSS(seconds: number): string { - return new Date(seconds * 1000).toISOString().substr(11, 8); + return Utils.milliSecondsToHHMMSS(seconds * 1000); } static milliSecondsToHHMMSS(milliSeconds: number): string { return new Date(milliSeconds).toISOString().substr(11, 8); } - static removeExtraEmptyLines(tab): void { + static removeExtraEmptyLines(tab: string[]): void { // Start from the end for (let i = tab.length - 1; i > 0; i--) { // Two consecutive empty lines? @@ -102,7 +105,13 @@ export default class Utils { } static roundTo(number: number, scale: number): number { - return Utils.convertToFloat(number.toFixed(scale)); + const roundPower = Math.pow(10, scale); + return Math.round(number * roundPower) / roundPower; + } + + static truncTo(number: number, scale: number): number { + const truncPower = Math.pow(10, scale); + return Math.trunc(number * truncPower) / truncPower; } static getRandomFloatRounded(max: number, min = 0, scale = 2): number { @@ -117,12 +126,8 @@ export default class Utils { return date.toLocaleString() + prefixString; } - static objectHasOwnProperty(object, property): boolean { - return Object.prototype.hasOwnProperty.call(object, property); - } - - static cloneObject(object) { - return JSON.parse(JSON.stringify(object)); + static cloneObject(object: T): T { + return JSON.parse(JSON.stringify(object)) as T; } static isIterable(obj): boolean { @@ -149,12 +154,12 @@ export default class Utils { return typeof value === 'string'; } - static isUndefined(value) { + static isUndefined(value): boolean { return typeof value === 'undefined'; } static isNullOrUndefined(value): boolean { - // eslint-disable-next-line no-eq-null + // eslint-disable-next-line no-eq-null, eqeqeq if (value == null) { return true; } @@ -162,6 +167,9 @@ export default class Utils { } static isEmptyArray(object): boolean { + if (!object) { + return true; + } if (Array.isArray(object) && object.length > 0) { return false; } @@ -171,4 +179,44 @@ export default class Utils { static isEmptyObject(obj): boolean { return !Object.keys(obj).length; } + + static insertAt = (str: string, subStr: string, pos: number): string => `${str.slice(0, pos)}${subStr}${str.slice(pos)}`; + + /** + * @param {number} [retryNumber=0] + * @return {number} - delay in milliseconds + */ + static exponentialDelay(retryNumber = 0): number { + const delay = Math.pow(2, retryNumber) * 100; + const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay + return delay + randomSum; + } + + static getWebSocketCloseEventStatusString(code: number): string { + if (code >= 0 && code <= 999) { + return '(Unused)'; + } else if (code >= 1016) { + if (code <= 1999) { + return '(For WebSocket standard)'; + } else if (code <= 2999) { + return '(For WebSocket extensions)'; + } else if (code <= 3999) { + return '(For libraries and frameworks)'; + } else if (code <= 4999) { + return '(For applications)'; + } + } + if (!Utils.isUndefined(WebSocketCloseEventStatusString[code])) { + return WebSocketCloseEventStatusString[code] as string; + } + return '(Unknown)'; + } + + static workerPoolInUse(): boolean { + return Configuration.getWorkerProcess() === WorkerProcessType.DYNAMIC_POOL || Configuration.getWorkerProcess() === WorkerProcessType.STATIC_POOL; + } + + static workerDynamicPoolInUse(): boolean { + return Configuration.getWorkerProcess() === WorkerProcessType.DYNAMIC_POOL; + } }