@nsshunt/stsobservability 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/dist/stsobservability.mjs +6439 -0
  4. package/dist/stsobservability.mjs.map +1 -0
  5. package/dist/stsobservability.umd.js +6434 -0
  6. package/dist/stsobservability.umd.js.map +1 -0
  7. package/package.json +68 -0
  8. package/types/index.d.ts +25 -0
  9. package/types/index.d.ts.map +1 -0
  10. package/types/instrumentation/index.d.ts +13 -0
  11. package/types/instrumentation/index.d.ts.map +1 -0
  12. package/types/instrumentation/instrumentDefs.d.ts +40 -0
  13. package/types/instrumentation/instrumentDefs.d.ts.map +1 -0
  14. package/types/instrumentation/instrumentUtils.d.ts +7 -0
  15. package/types/instrumentation/instrumentUtils.d.ts.map +1 -0
  16. package/types/instrumentation/instruments/instrumentBase.d.ts +25 -0
  17. package/types/instrumentation/instruments/instrumentBase.d.ts.map +1 -0
  18. package/types/instrumentation/instruments/instrumentGauge.d.ts +47 -0
  19. package/types/instrumentation/instruments/instrumentGauge.d.ts.map +1 -0
  20. package/types/instrumentation/instruments/instrumentGauge.test.d.ts +2 -0
  21. package/types/instrumentation/instruments/instrumentGauge.test.d.ts.map +1 -0
  22. package/types/instrumentation/instruments/instrumentHistogram.d.ts +43 -0
  23. package/types/instrumentation/instruments/instrumentHistogram.d.ts.map +1 -0
  24. package/types/instrumentation/instruments/instrumentHistogram.test.d.ts +2 -0
  25. package/types/instrumentation/instruments/instrumentHistogram.test.d.ts.map +1 -0
  26. package/types/instrumentation/instruments/instrumentLog.d.ts +50 -0
  27. package/types/instrumentation/instruments/instrumentLog.d.ts.map +1 -0
  28. package/types/instrumentation/instruments/instrumentLog.test.d.ts +2 -0
  29. package/types/instrumentation/instruments/instrumentLog.test.d.ts.map +1 -0
  30. package/types/instrumentation/instruments/instrumentObject.d.ts +20 -0
  31. package/types/instrumentation/instruments/instrumentObject.d.ts.map +1 -0
  32. package/types/instrumentation/instruments/instrumentObject.test.d.ts +2 -0
  33. package/types/instrumentation/instruments/instrumentObject.test.d.ts.map +1 -0
  34. package/types/instrumentation/instruments/instrumentTimerGauge.d.ts +29 -0
  35. package/types/instrumentation/instruments/instrumentTimerGauge.d.ts.map +1 -0
  36. package/types/instrumentation/instruments/instrumentTimerGauge.test.d.ts +2 -0
  37. package/types/instrumentation/instruments/instrumentTimerGauge.test.d.ts.map +1 -0
  38. package/types/instrumentation/instruments/instrumentVelocity.d.ts +48 -0
  39. package/types/instrumentation/instruments/instrumentVelocity.d.ts.map +1 -0
  40. package/types/instrumentation/instruments/instrumentVelocity.test.d.ts +2 -0
  41. package/types/instrumentation/instruments/instrumentVelocity.test.d.ts.map +1 -0
  42. package/types/instrumentation/testme.d.ts +2 -0
  43. package/types/instrumentation/testme.d.ts.map +1 -0
  44. package/types/publish/agentinstrumentcontroller.d.ts +23 -0
  45. package/types/publish/agentinstrumentcontroller.d.ts.map +1 -0
  46. package/types/publish/commonTypes.d.ts +74 -0
  47. package/types/publish/commonTypes.d.ts.map +1 -0
  48. package/types/publish/middleware/requestLoggerMiddleware.d.ts +32 -0
  49. package/types/publish/middleware/requestLoggerMiddleware.d.ts.map +1 -0
  50. package/types/publish/publishInstrumentController.d.ts +34 -0
  51. package/types/publish/publishInstrumentController.d.ts.map +1 -0
  52. package/types/publish/publishers/publishTransportRESTServer.d.ts +10 -0
  53. package/types/publish/publishers/publishTransportRESTServer.d.ts.map +1 -0
  54. package/types/publish/stsPluginKeys.d.ts +2 -0
  55. package/types/publish/stsPluginKeys.d.ts.map +1 -0
  56. package/types/socketioutils/socketIoClientHelper.d.ts +76 -0
  57. package/types/socketioutils/socketIoClientHelper.d.ts.map +1 -0
  58. package/types/subscribe/commonTypes.d.ts +159 -0
  59. package/types/subscribe/commonTypes.d.ts.map +1 -0
  60. package/types/subscribe/kafkaHelper.d.ts +12 -0
  61. package/types/subscribe/kafkaHelper.d.ts.map +1 -0
  62. package/types/subscribe/observabilitymodelutils.d.ts +46 -0
  63. package/types/subscribe/observabilitymodelutils.d.ts.map +1 -0
  64. package/types/subscribe/observabilityrestapisubscriber.d.ts +11 -0
  65. package/types/subscribe/observabilityrestapisubscriber.d.ts.map +1 -0
  66. package/types/subscribe/observabilitysocketiosubscriber.d.ts +14 -0
  67. package/types/subscribe/observabilitysocketiosubscriber.d.ts.map +1 -0
  68. package/types/subscribe/observabilitysubscriptionmanager.d.ts +38 -0
  69. package/types/subscribe/observabilitysubscriptionmanager.d.ts.map +1 -0
  70. package/types/subscribe/socketioMessageSender.d.ts +51 -0
  71. package/types/subscribe/socketioMessageSender.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stsobservability.mjs","sources":["../src/instrumentation/instrumentDefs.ts","../src/instrumentation/instruments/instrumentBase.ts","../src/instrumentation/instruments/instrumentVelocity.ts","../src/instrumentation/instruments/instrumentHistogram.ts","../src/instrumentation/instruments/instrumentLog.ts","../src/instrumentation/instruments/instrumentTimerGauge.ts","../node_modules/timsort/build/timsort.js","../node_modules/timsort/index.js","../node_modules/percentile/lib/index.js","../src/instrumentation/instruments/instrumentGauge.ts","../src/instrumentation/instruments/instrumentObject.ts","../src/instrumentation/instrumentUtils.ts","../src/publish/commonTypes.ts","../src/publish/middleware/requestLoggerMiddleware.ts","../node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/ansi-styles/index.js","../node_modules/supports-color/browser.js","../node_modules/chalk/source/util.js","../node_modules/chalk/source/templates.js","../node_modules/chalk/source/index.js","../src/publish/publishInstrumentController.ts","../src/publish/stsPluginKeys.ts","../src/publish/agentinstrumentcontroller.ts","../node_modules/@msgpack/msgpack/dist.es5+esm/utils/utf8.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/ExtData.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/DecodeError.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/utils/int.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/timestamp.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/ExtensionCodec.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/utils/typedArrays.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/Encoder.mjs","../node_modules/@msgpack/msgpack/dist.es5+esm/encode.mjs","../src/publish/publishers/publishTransportRESTServer.ts","../src/subscribe/commonTypes.ts","../src/subscribe/observabilitymodelutils.ts","../src/subscribe/kafkaHelper.ts","../src/subscribe/observabilityrestapisubscriber.ts","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/subscribe/socketioMessageSender.ts","../src/subscribe/observabilitysocketiosubscriber.ts","../src/subscribe/observabilitysubscriptionmanager.ts"],"sourcesContent":["export enum Gauge {\n\tACTIVE_REQUEST_GAUGE = 'a',\n\tAUTHENTICATION_COUNT_GAUGE = 'b',\n\tAUTHENTICATION_ERROR_COUNT_GAUGE = 'aa',\n\tAUTHENTICATION_RETRY_COUNT_GAUGE = 'ab',\n\tCONNECTION_POOL_IDLE_GAUGE = 'c',\n\tCONNECTION_POOL_TOTAL_GAUGE = 'd',\n\tCONNECTION_POOL_WAITING_GAUGE = 'e',\n\tCPU_LOAD_GAUGE = 'f',\n\tCPU_SYSTEM_LOAD_GAUGE = 'g',\n\tDURATION_GAUGE = 'h',\n\tDURATION_HISTOGRAM_GAUGE = 'i',\n\tERROR_COUNT_GAUGE = 'j',\n\tLATENCY_GAUGE = 'k',\n\tLATENCY_HISTOGRAM_GAUGE = 'l',\n\tLOGGER = 'm',\n\tLOGGER_COPY = 'n',\n\tNETWORK_RX_GAUGE = 'o',\n\tNETWORK_TX_GAUGE = 'p',\n\tREQUEST_COUNT_GAUGE = 'q',\n\tRETRY_COUNT_GAUGE = 'r',\n\tTIMER_GAUGE = 's',\n\tVELOCITY_GAUGE = 't',\n\tCONNECTION_COUNT_GAUGE = 'u',\n\tOBJECT_GAUGE = 'v',\n\tPAYLOAD_SIZE = 'w',\n\tCORE_COUNT_GAUGE = 'x',\n\tCHILD_COUNT = 'y',\n\tUNKNOWN = 'z'\n}\n\nexport enum GaugeTypes {\n\tGAUGE_TYPE = '_',\n\tINSTRUMENT_GAUGE = 'a',\n\tINSTRUMENT_VELOCITY = 'b',\n\tINSTRUMENT_HISTOGRAM = 'c',\n\tINSTRUMENT_LOG = 'd',\n\tINSTRUMENT_TIMER = 'e',\n\tINSTRUMENT_OBJECT = 'f'\n}\n","import { JSONObject } from '@nsshunt/stsutils'\nimport { GaugeTypes } from '../instrumentDefs'\n\nexport class InstrumentBaseOptions {\n fixedSize?: number\n padLength?: number\n label?: string\n}\n\nexport class InstrumentBaseTelemetry {\n\n}\n\nexport abstract class InstrumentBase\n{\n #label = '';\n #options: InstrumentBaseOptions | null = null;\n #data: Record<string, unknown> = { };\n\n // Use for copy objects only.\n //protected _data: Record<string, any> = { };\n\n constructor(options: InstrumentBaseOptions = { })\n {\n if (typeof options === 'string' || options instanceof String) {\n throw new Error('Instrument parameter must be an options object.');\n }\n\n this.#options = options;\n\n if (options.label) {\n this.#label = options.label;\n } else {\n this.#label = 'InstrumentGauge';\n }\n\n // Create an object to store all props\n //Object.defineProperty(this, '_data', { value: { } });\n\n //@@ change all properties to use this pattern\n\n /*\n\t\t// https://github.com/Asymmetrik/node-fhir-server-core/blob/master/packages/node-fhir-server-core/src/server/resources/4_0_1/schemas/account.js\n\n\t\t// Create an object to store all props\n\t\tObject.defineProperty(this, '__data', { value: {} });\n\n\t\tObject.defineProperty(this, '_value', {\n\t\t\tenumerable: true,\n\t\t\tget: () => this.__data._value,\n\t\t\tset: (value) => {\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.__data._value = value;\n\t\t\t}\n\t\t});\n\t\t*/\n\n // Define a default non-writable resourceType property\n /*\n\t\tObject.defineProperty(this, '_reportValue', {\n\t\t\tenumerable: true,\n\t\t\tget: () => this.GetFormatted()\n\t\t});\n\n\t\tObject.defineProperty(this, '_serialValue', {\n\t\t\tenumerable: true,\n\t\t\tget: () => this.GetSerialValue(),\n\t\t\tset: (value) => { this.SetSerialValue(value); }\n\t\t});\n\t\t*/\n }\n\n public [GaugeTypes.GAUGE_TYPE]: GaugeTypes = GaugeTypes.INSTRUMENT_OBJECT // Default Gauge type\n val?: number | string[] | JSONObject\n\n WithLabel(label: string) {\n this.label = label;\n return this;\n }\n\n DefineCopyProperties(propertyNames: string[]): void {\n propertyNames.forEach(propertyName => {\n Object.defineProperty(this, propertyName, {\n enumerable: true,\n get: () => this.#data[propertyName],\n set: (value) => {\n if (value === undefined) {\n return;\n }\n this.#data[propertyName] = value;\n }\n });\n });\n }\n\t\n GetNumber(val: number): number {\n if (Number.isInteger(val)) {\n return val;\n } else {\n return Math.round((val + Number.EPSILON) * 100) / 100;\n }\n }\n\n get options(): InstrumentBaseOptions | null {\n return this.#options;\n }\n\n set options(optionsValue: InstrumentBaseOptions | null) {\n this.#options = optionsValue;\n }\n\n get label(): string {\n return this.#label;\n }\n\n set label(labelValue: string) {\n this.#label = labelValue;\n }\n\n StopTimer(): void\n {\n //\tOverride in sub class if timers are used ...\n }\n\n ProcessTelemetry(telemetry: InstrumentBaseTelemetry): void {\n throw new Error(`Must override in extended class: [ProcessTelemetry]: [${telemetry}].`);\n }\n\n /*\n\ttoJSON()\n\t{\n\t\treturn this._serialValue;\n\t}\n\t*/\n\n /*\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n\t[Symbol.iterator]() {\n\t\t// Use a new index for each iterator. This makes multiple\n\t\t// iterations over the iterable safe for non-trivial cases,\n\t\t// such as use of break or nested looping over the same iterable.\n\t\tlet index = 0;\n\t\n\t\treturn {\n\t\t\tnext: () => {\n\t\t\t\tif (index < 1) {\n\t\t\t\t\treturn {value: this.GetFormatted(), done: false}\n\t\t\t\t} else {\n\t\t\t\t\treturn {done: true}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t*/\n}\n","import _cloneDeep from 'lodash.clonedeep'\n\nimport { InstrumentBase, InstrumentBaseOptions, InstrumentBaseTelemetry } from './instrumentBase'\nimport { GaugeTypes } from '../instrumentDefs'\nimport { JSONObject } from '@nsshunt/stsutils'\nimport isNode from 'detect-node'\n\nexport interface VelocityReportValue extends JSONObject {\n\tval: number\n\tvalue: string\n\tvf: string\n\tdelta: number\n\tmaxVelocity: number\n\tvelocity: number\n\tva: number\n}\n\nexport class InstrumentVelocityOptions extends InstrumentBaseOptions {\n interval?: number\n valStackMaxLength?: number\n maxAverageValStack?: number\n maxAverageIterations?: number\n fromJSON?: InstrumentVelocity\n initValue?: number\n autoComputeVelocity?: boolean\n velocityTimeDiff?: number\n vaTimeDiff?: number\n autoComputeVelocityTimeout?: number\n}\n\nexport class InstrumentVelocityTelemetry extends InstrumentBaseTelemetry {\n val?: number\n Inc?: number\n}\n\ndeclare interface IDataPoint {\n\ttimeStamp: number\n\tcount: number\n}\n\ndeclare interface IVelocityDataPoint {\n\tval: number\n\tcountDiff: number\n\ttimeDiff: number\n\tdeltaVal: number\n\tdeltaCountDiff: number\n\tdeltaTimeDiff: number\n}\n\nexport class InstrumentVelocity extends InstrumentBase\n{\n //#val = 0;\n #interval: NodeJS.Timeout | null = null;\n #timeoutComputeVelocity: NodeJS.Timeout | null = null;\n #lastVelocity = 0;\n #delta = 0;\n #maxVelocity = 0;\n #timerInterval = 0;\n #copy = false;\n #velocity = 0;\n #velocityVal = 0;\n #valStack: IDataPoint[] = [ ];\n #averageValStack: number[][] = [];\n #maxAverageValStack = 0;\n #maxAverageIterations = 0;\n #valStackMaxLength = 0;\n #valStackAverage = 0.0;\n #timeStamp = 0;\n #maxTimeDiff = 0;\n #vaTimeDiff = 0;\n #velocityTimeDiff = 0;\n #autoComputeVelocity = false;\n #autoComputeVelocityTimeout = 0; // 50ms to auto computer after an update when not in auto compute mode.\n #countDiff = 0;\n #timeDiff = 0;\n #deltaCountDiff = 0;\n #deltaTimeDif = 0;\n #minTimeForReporting = 0;\n #averageVelocity: number[] = []\n\n // timeWindow = Number of intervals to use as the sliding time window same size. Uses average value within the time window. Larger window produces a smooth (more laggy) curve. Shorter time\n // window may be \"spikey\" depending on the volatility of the data being recorded.\n constructor(options: InstrumentVelocityOptions = { }) {\n super(options);\n\n if (typeof options.label === 'undefined') {\n this.label = 'InstrumentVelocity';\n } else {\n this.label = options.label;\n }\n\n if (typeof options.interval === 'undefined') {\n this.#timerInterval = 1000;\n } else {\n this.#timerInterval = options.interval;\n }\n\n if (typeof options.valStackMaxLength === 'undefined') {\n this.#valStackMaxLength = 100;\n } else {\n this.#valStackMaxLength = options.valStackMaxLength;\n }\n\n if (typeof options.fromJSON === 'undefined') {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n\n if (typeof options.autoComputeVelocity === 'undefined') {\n this.#autoComputeVelocity = false;\n } else {\n this.#autoComputeVelocity = options.autoComputeVelocity;\n }\n\n if (typeof options.maxAverageValStack === 'undefined') {\n this.#maxAverageValStack = 5;\n } else {\n this.#maxAverageValStack = options.maxAverageValStack;\n }\n\n if (typeof options.maxAverageIterations === 'undefined') {\n this.#maxAverageIterations = 3;\n } else {\n this.#maxAverageIterations = options.maxAverageIterations;\n }\n\n if (typeof options.velocityTimeDiff === 'undefined') {\n this.#velocityTimeDiff = 5000;\n } else {\n this.#velocityTimeDiff = options.velocityTimeDiff;\n }\n\n if (typeof options.vaTimeDiff === 'undefined') {\n this.#vaTimeDiff = 10000;\n } else {\n this.#vaTimeDiff = options.vaTimeDiff;\n }\n\n if (typeof options.autoComputeVelocityTimeout === 'undefined') {\n this.#autoComputeVelocityTimeout = 50;\n } else {\n this.#autoComputeVelocityTimeout = options.autoComputeVelocityTimeout;\n }\n\n this.#maxTimeDiff = this.#vaTimeDiff * 2;\n this.#minTimeForReporting = this.#vaTimeDiff + 2000;\n\n\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_VELOCITY\n });\n\n if (this.#copy) {\n this.DefineCopyProperties([\n 'val', 'maxVelocity', 'delta', 'velocity', 'va', 'timeStamp',\n 'deltaTimeDif', 'deltaCountDiff', 'timeDiff', 'countDiff', 'averageVelocity'\n ]);\n } else {\n Object.defineProperty(this, 'val', {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => { this.#SetVal(value); }\n });\n\n Object.defineProperty(this, 'maxVelocity', {\n enumerable: true,\n get: () => this.#GetMaxVelocity()\n });\n\n Object.defineProperty(this, 'delta', {\n enumerable: true,\n get: () => this.#GetDelta()\n });\n\n Object.defineProperty(this, 'velocity', {\n enumerable: true,\n get: () => this.#GetVelocity()\n });\n\n Object.defineProperty(this, 'va', {\n enumerable: true,\n get: () => this.#GetVelocityStackAverage()\n });\n\n Object.defineProperty(this, 'timeStamp', {\n enumerable: true,\n get: () => this.#GetTimeStamp()\n });\n\n Object.defineProperty(this, 'countDiff', {\n enumerable: true,\n get: () => this.#GetCountDiff()\n });\n\n Object.defineProperty(this, 'timeDiff', {\n enumerable: true,\n get: () => this.#GetTimeDiff()\n });\n\n Object.defineProperty(this, 'deltaCountDiff', {\n enumerable: true,\n get: () => this.#GetDeltaCountDiff()\n });\n\n Object.defineProperty(this, 'deltaTimeDif', {\n enumerable: true,\n get: () => this.#GetDeltaTimeDif()\n });\n\n Object.defineProperty(this, 'averageVelocity', {\n enumerable: true,\n get: () => this.#GetAverageVelocity()\n });\n\n if (this.#timerInterval > 0 && this.#autoComputeVelocity === false) {\n this._StartTimer();\n }\n }\n\n if (typeof options.initValue !== 'undefined') {\n this.val = options.initValue;\n }\n\n // Set copy values now that we have defined our properties\n if (typeof options.fromJSON !== 'undefined') {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n this.velocity = result.velocity;\n this.maxVelocity = result.maxVelocity;\n this.delta = result.delta;\n this.va = result.va;\n this.timeStamp = result.timeStamp;\n this.countDiff = result.countDiff;\n this.timeDiff = result.timeDiff;\n this.deltaCountDiff = result.deltaCountDiff;\n this.deltaTimeDif = result.deltaTimeDif;\n this.averageVelocity = _cloneDeep(result.averageVelocity);\n }\n }\n\n public readonly maxVelocity: number = 0;\n public readonly delta: number = 0;\n public readonly velocity: number = 0;\n public readonly va: number = 0;\n public readonly timeStamp: number = 0;\n public readonly countDiff: number = 0;\n public readonly timeDiff: number = 0;\n public readonly deltaCountDiff: number = 0;\n public readonly deltaTimeDif: number = 0;\n public readonly averageVelocity: number[] = [];\n public val = 0;\n\n WithValStackMaxLength(valStackMaxLength: number): InstrumentVelocity {\n this.#valStackMaxLength = valStackMaxLength;\n this.#valStack = [ ];\n return this;\n }\n\n private _StartTimer(): void\n {\n this.#interval = setInterval(() => {\n this.#ComputeVelocity();\n\n let pushVal = this.#velocity;\n for (let i=0; i < this.#maxAverageIterations; i++) {\n if (!this.#averageValStack[i]) {\n this.#averageValStack[i] = [ ];\n }\n this.#averageValStack[i].push(pushVal);\n if (this.#averageValStack[i].length > this.#maxAverageValStack) {\n this.#averageValStack[i].shift();\n }\n pushVal = this.#averageValStack[i].reduce((prev, current) => prev + current) / this.#averageValStack[i].length;\n this.#averageVelocity[i] = pushVal;\n }\n }, this.#timerInterval);\n\n // If running in node ...\n if (isNode) {\n this.#interval.unref();\n }\n // https://httptoolkit.tech/blog/unblocking-node-with-unref/\n }\n\n #ComputeVelocityByTimeDiff(checkTimeDiff: number, checkDeltaTimeDiff: number): IVelocityDataPoint {\n // As long as we have at least two data points ...\n let val = 0.0;\n let deltaVal = 0.0;\n let countDiff = 0;\n let timeDiff = 0;\n let deltaCountDiff = 0;\n let deltaTimeDiff = 0;\n\n if (this.#valStack.length > 1 && (this.#valStack[this.#valStack.length-1].timeStamp - this.#valStack[0].timeStamp) > this.#minTimeForReporting) {\n // Get the current data point\n const dp: IDataPoint = this.#valStack[this.#valStack.length-1];\n // Compute the stack position for the first entry where the diff is >= timeDiff\n let timeDiffPos = -1;\n let deltaDiffPos = -1;\n for (let i = this.#valStack.length-2; i > -1; i--) {\n if (timeDiffPos === -1 && (this.#timeStamp - this.#valStack[i].timeStamp) >= checkTimeDiff) {\n timeDiffPos = i;\n if (checkDeltaTimeDiff === 0) {\n break;\n }\n }\n if (deltaDiffPos === -1 && (this.#timeStamp - this.#valStack[i].timeStamp) >= checkDeltaTimeDiff) {\n deltaDiffPos = i;\n }\n if (timeDiffPos !== -1 && deltaDiffPos !== -1) {\n break;\n }\n }\n if (timeDiffPos > -1) {\n countDiff = dp.count - this.#valStack[timeDiffPos].count;\n if (countDiff > 0) {\n timeDiff = dp.timeStamp - this.#valStack[timeDiffPos].timeStamp;\n if (timeDiff > 0.0) {\n // Get velocity per second\n val = (1000.0 / timeDiff) * countDiff;\n } else {\n val = 0;\n }\n } else {\n val = 0; // We have the same count for the desired timeDiff time span.\n }\n } else {\n val = 0; // We don't yet have a value for the desired timeDiff time span.\n }\n\n if (deltaDiffPos > -1) {\n deltaCountDiff = this.#valStack[timeDiffPos].count - this.#valStack[deltaDiffPos].count;\n if (deltaCountDiff > 0) {\n deltaTimeDiff = this.#valStack[timeDiffPos].timeStamp - this.#valStack[deltaDiffPos].timeStamp\n if (deltaTimeDiff > 0.0) {\n // Get velocity per second\n deltaVal = (1000.0 / deltaTimeDiff) * deltaTimeDiff;\n } else {\n deltaVal = 0;\n }\n } else {\n deltaVal = 0; // We have the same count for the desired deltaTimeDiff time span.\n }\n } else {\n deltaVal = 0; // We don't yet have a value for the desired deltaTimeDiff time span.\n }\n }\n return {\n val,\n countDiff,\n timeDiff,\n deltaVal,\n deltaCountDiff,\n deltaTimeDiff\n }\n }\n\n #ComputeVelocity(): void {\n const dp: IDataPoint = {\n timeStamp: performance.now(),\n count: this.#velocityVal\n }\n this.#valStack.push(dp);\n\n this.#timeStamp = dp.timeStamp;\n\n while (this.#valStack.length > 0 && ((this.#timeStamp - this.#valStack[0].timeStamp) > this.#maxTimeDiff)) {\n this.#valStack.shift();\n }\n\n const valStackAverageDataPoint = this.#ComputeVelocityByTimeDiff(this.#vaTimeDiff, 0);\n this.#valStackAverage = valStackAverageDataPoint.val;\n\n const velocityDataPoint = this.#ComputeVelocityByTimeDiff(this.#velocityTimeDiff, this.#velocityTimeDiff * 2);\n this.#velocity = velocityDataPoint.val;\n this.#delta = velocityDataPoint.val - velocityDataPoint.deltaVal;\n\n this.#countDiff = velocityDataPoint.countDiff\n this.#timeDiff = velocityDataPoint.timeDiff\n this.#deltaCountDiff = velocityDataPoint.deltaCountDiff\n this.#deltaTimeDif = velocityDataPoint.deltaTimeDiff\n\n this.#lastVelocity = this.#velocity;\n if (this.#velocity > this.#maxVelocity) {\n this.#maxVelocity = this.#velocity;\n }\n }\n\n #SetupAutoComputeVelocity(): void {\n if (this.#timeoutComputeVelocity) {\n clearTimeout(this.#timeoutComputeVelocity);\n }\n this.#timeoutComputeVelocity = setTimeout(() => {\n this.#ComputeVelocity();\n }, this.#autoComputeVelocityTimeout);\n\n // Note: We do not check if running in node for an unref() because unref() is expensive and this is being\n // called for each change in val. The value of autoComputeVelocityTimeout (around 50ms) is very small and should not prevent application\n // termination issues.\n }\n\n #GetVelocityStackAverage(): number {\n return this.GetNumber(this.#valStackAverage);\n }\n\n Inc(incVal = 1): void {\n this.#velocityVal += incVal;\n if (this.#autoComputeVelocity) {\n this.#ComputeVelocity();\n } else {\n this.#SetupAutoComputeVelocity();\n }\n }\n\n #GetVal(): number {\n return this.GetNumber(this.#velocityVal);\n }\n\n #SetVal(updatedValue: number): void {\n this.#velocityVal = updatedValue;\n if (this.#autoComputeVelocity) {\n this.#ComputeVelocity();\n } else {\n this.#SetupAutoComputeVelocity();\n }\n }\n\n #GetVelocity(): number {\n return this.GetNumber(this.#velocity);\n }\n\n #GetMaxVelocity(): number {\n return this.GetNumber(this.#maxVelocity);\n }\n\n #GetDelta(): number {\n return this.GetNumber(this.#delta);\n }\n\n #GetTimeStamp(): number {\n return this.GetNumber(this.#timeStamp);\n }\n\n #GetCountDiff(): number {\n return this.GetNumber(this.#countDiff);\n }\n\n #GetTimeDiff(): number {\n return this.GetNumber(this.#timeDiff);\n }\n\n #GetDeltaCountDiff(): number {\n return this.GetNumber(this.#deltaCountDiff);\n }\n\n #GetDeltaTimeDif(): number {\n return this.GetNumber(this.#deltaTimeDif);\n }\n\n #GetAverageVelocity(): number[] {\n return this.#averageVelocity;\n }\n\n override StopTimer(): void {\n if (this.#interval !== null) {\n clearTimeout(this.#interval);\n this.#interval = null;\n }\n }\n\n override ProcessTelemetry(telemetry: InstrumentVelocityTelemetry): void {\n if (telemetry.Inc) {\n this.Inc(telemetry.Inc);\n }\n if (telemetry.val) {\n this.val = telemetry.val;\n }\n }\n}\n","import _cloneDeep from 'lodash.clonedeep'\n\nimport { InstrumentBase, InstrumentBaseOptions, InstrumentBaseTelemetry } from './instrumentBase'\nimport { GaugeTypes } from '../instrumentDefs'\n\nimport { JSONObject } from '@nsshunt/stsutils'\n\nexport interface HistogramReportValue extends JSONObject {\n\tval: number\n\thist: HistogramDataElement[]\n\tvf: string\n}\n\nexport enum HistogramDataElementPos {\n\tval = 0,\n\tlabel = 1,\n\tbreakPoint = 2\n}\n\nexport type HistogramDataElement = [\n\tval: number,\n\tlabel: string,\n\tbreakPoint: number\n]\n\nexport class InstrumentHistogramOptions extends InstrumentBaseOptions {\n histogramData?: number[]\n initValue?: number\n fromJSON?: InstrumentHistogram\n}\n\nexport class InstrumentHistogramTelemetry extends InstrumentBaseTelemetry {\n val?: number\n}\n\nexport class InstrumentHistogram extends InstrumentBase\n{\n #histogramData: HistogramDataElement[] = [ ];\n #val = 0;\n #copy = false;\n\t\n constructor(options: InstrumentHistogramOptions = { }) {\n super(options);\n\n if (typeof options.label === 'undefined') {\n this.label = 'InstrumentHistogram';\n } else {\n this.label = options.label;\n }\n\n let histogramData: number[] | null = null;\n if (typeof options.histogramData === 'undefined') {\n histogramData = null;\n } else {\n histogramData = options.histogramData;\n }\n\n if (typeof options.fromJSON === 'undefined') {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n\n if (histogramData === null) {\n this.#histogramData = [\n [ 0, \"10\", 10 ],\n [ 0, \"20\", 20 ],\n [ 0, \"50\", 50 ],\n [ 0, \"100\", 100 ],\n [ 0, \"1000\", 1000 ],\n [ 0, \"5000\", 5000 ],\n [ 0, \"EE\", 0 ]\n ]\n } else if (Array.isArray(histogramData)) {\n this.#histogramData = [ ];\n for (let i=0; i < histogramData.length; i++) {\n this.#histogramData.push([0, '' + histogramData[i], parseFloat(histogramData[i].toString())]);\n }\n this.#histogramData.push([ 0, \"EE\", 0 ]);\n } else {\n throw new Error(`Passed [${histogramData}] must be an array.`);\n }\n\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_HISTOGRAM\n });\n\n if (this.#copy) {\n this.DefineCopyProperties([\n 'val', 'hist' \n ]);\n } else {\n Object.defineProperty(this, 'val', {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => { this.#SetVal(value); }\n });\n Object.defineProperty(this, 'hist', {\n enumerable: true,\n get: () => this.#GetHistogramData(),\n set: (value) => { this.#SetHistogramData(value); }\n });\n }\n\n if (typeof options.initValue !== 'undefined') {\n this.#val = options.initValue;\n }\n\n // Set copy values now that we have defined our properties\n if (typeof options.fromJSON !== 'undefined') {\n const result = _cloneDeep(options.fromJSON);\n this.#val = result.val as number;\n this.hist = result.hist;\n }\n }\n\n public hist: HistogramDataElement[] = [ ];\n public val = 0;\n\n WithInitVal(initVal: number): InstrumentHistogram {\n this.#val = initVal;\n return this;\n }\n\n ResetHistogramData(): void {\n for (let i=0; i < this.hist.length; i++) {\n this.hist[i][0] = 0;\n }\n }\n\n AddObservation(updateValue: number): void {\n if (this.#copy) {\n throw new Error('Cannot add observations from the copy version of this class.');\n }\n let i = 0;\n for (; i < this.#histogramData.length-1; i++)\n {\n if (updateValue <= this.#histogramData[i][HistogramDataElementPos.breakPoint])\n {\n this.#histogramData[i][HistogramDataElementPos.val]++;\n return;\n }\n }\n this.#histogramData[i][HistogramDataElementPos.val]++;\n }\n\n #GetVal(): number {\n return this.GetNumber(this.#val);\n }\n\n #SetVal(value: number) {\n this.#val = value;\n this.AddObservation(value);\n }\n\n get\tformattedHistogramData(): string {\n let retVal = '';\n let sep = '';\n for (let i=0; i < this.hist.length; i++) {\n retVal += sep + '[' + (this.hist[i][HistogramDataElementPos.val] + '/' + this.hist[i][HistogramDataElementPos.label]).padStart(10, ' ') + ']';\n sep = ' ';\n }\n return retVal;\n }\n\n #GetHistogramData(): HistogramDataElement[] {\n return this.#histogramData;\n }\n\n #SetHistogramData(value: HistogramDataElement[]) {\n this.#histogramData = value;\n }\n\n static AddHistogramDataEx(histoA: InstrumentHistogram | null, histoB: InstrumentHistogram): InstrumentHistogram {\n if (histoA === null) {\n return _cloneDeep(histoB);\n }\n\n const result = _cloneDeep(histoA);\n const histogramAData = result.hist;\n const histogramBData = histoB.hist;\n\n if (histogramAData.length !== histogramBData.length) {\n throw new Error('Invalid HistogramData. HistogramData bucket lengths must be the same.')\n }\n for (let i=0; i < histogramAData.length; i++)\n {\n if (histogramAData[i][HistogramDataElementPos.breakPoint] !== histogramBData[i][HistogramDataElementPos.breakPoint]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket break-point at index [${i}] must be the same.`)\n }\n if (histogramAData[i][HistogramDataElementPos.label] !== histogramBData[i][HistogramDataElementPos.label]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket label at index [${i}] must be the same.`)\n }\n histogramAData[i][HistogramDataElementPos.val] += histogramBData[i][HistogramDataElementPos.val];\n }\n\n return result;\n }\n\n /**\n\t * Adds a value object (from GetFormatted()) to this instance.\n\t * @param {*} value \n\t */\n AddHistogramData(histogramData: InstrumentHistogram): void {\n if (histogramData === null) {\n return;\n }\n\n if (this.hist.length !== histogramData.hist.length) {\n throw new Error('Invalid HistogramData. HistogramData bucket lengths must be the same.')\n }\n for (let i=0; i < histogramData.hist.length; i++)\n {\n if (this.hist[i][HistogramDataElementPos.breakPoint] !== histogramData.hist[i][HistogramDataElementPos.breakPoint]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket break-point at index [${i}] must be the same.`)\n }\n if (this.hist[i][HistogramDataElementPos.label] !== histogramData.hist[i][HistogramDataElementPos.label]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket label at index [${i}] must be the same.`)\n }\n this.hist[i][HistogramDataElementPos.val] += histogramData.hist[i][HistogramDataElementPos.val];\n }\n }\n\t\n override ProcessTelemetry(telemetry: InstrumentHistogramTelemetry): void {\n if (telemetry.val) {\n this.val = telemetry.val;\n }\n }\n}\n","/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport _cloneDeep from 'lodash.clonedeep'\n\nimport { InstrumentBase, InstrumentBaseOptions, InstrumentBaseTelemetry } from './instrumentBase'\nimport { GaugeTypes } from '../instrumentDefs'\n\nimport { JSONObject, ISTSLogger } from '@nsshunt/stsutils'\n\nexport interface LogReportValue extends JSONObject {\n\tval: string[]\n}\n\nexport class InstrumentLogOptions extends InstrumentBaseOptions {\n maxSize?: number\n useLatestMessages?: boolean\n consoleLogging?: boolean\n instrumentLogging?: boolean\n winstonLogging?: boolean\n fromJSON?: InstrumentLog\n initValue?: string[]\n logger?: ISTSLogger\n}\n\nexport class InstrumentLogTelemetry extends InstrumentBaseTelemetry {\n Append?: string[]\n LogMessage?: string\n val?: string[]\n ResetLog?: boolean\n}\n\nexport class InstrumentLog extends InstrumentBase implements ISTSLogger\n{\n #messages: string[] = [ ];\n #readPos = 0;\n #maxSize = 200; // Max length of cached log messages\n #copy = false;\n #useLatestMessages = false;\n #consoleLogging = false;\n #instrumentLogging = true;\n #winstonLogging = false;\n #stsLogger: ISTSLogger | undefined;\n\n constructor(options: InstrumentLogOptions = { })\n {\n super(options);\n\n if (typeof options.label === 'undefined') {\n this.label = 'InstrumentLog';\n } else {\n this.label = options.label;\n }\n\n if (typeof options.maxSize === 'undefined') {\n this.#maxSize = 200;\n } else {\n this.#maxSize = options.maxSize;\n }\n\n if (typeof options.fromJSON === 'undefined') {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n\n if (typeof options.useLatestMessages === 'undefined') {\n this.#useLatestMessages = false;\n } else {\n this.#useLatestMessages = options.useLatestMessages;\n }\n\n if (typeof options.consoleLogging === 'undefined') {\n this.#consoleLogging = false;\n } else {\n this.#consoleLogging = options.consoleLogging;\n }\n\n if (typeof options.instrumentLogging === 'undefined') {\n this.#instrumentLogging = true;\n } else {\n this.#instrumentLogging = options.instrumentLogging;\n }\n\n if (typeof options.winstonLogging === 'undefined') {\n this.#winstonLogging = false;\n } else {\n this.#winstonLogging = options.winstonLogging;\n }\n\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_LOG\n });\n\n if (this.#copy) {\n this.DefineCopyProperties([\n 'val' \n ]);\n } else {\n Object.defineProperty(this, 'val', {\n enumerable: true,\n get: () => _cloneDeep(this.#GetVal()),\n set: (value) => { this.#SetVal(value); }\n });\n }\n\n if (typeof options.initValue !== 'undefined') {\n this.val = options.initValue;\n }\n\n // Set copy values now that we have defined our properties\n if (typeof options.fromJSON !== 'undefined') {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n }\n\n public val: string[] = [];\n\n WithMaxSize(maxSize: number): InstrumentLog {\n this.#maxSize = maxSize;\n return this;\n }\n\n WithUseLatestMessages(useLatestMessages: boolean): InstrumentLog {\n this.#useLatestMessages = useLatestMessages;\n return this;\n }\n\n WithConsoleLogging(consoleLogging: boolean): InstrumentLog {\n this.#consoleLogging = consoleLogging;\n return this;\n }\n\n WithInstrumentLogging(instrumentLogging: boolean): InstrumentLog {\n this.#instrumentLogging = instrumentLogging;\n return this;\n }\n\n get MaxSize(): number {\n return this.#maxSize;\n }\n\n set MaxSize(maxSize: number) {\n this.#maxSize = maxSize;\n }\n\n #DumpToConsole(): void\n {\n const logReport = this.GetMessagesSinceLastRead();\n for (let i=0; i < logReport.length; i++) {\n console.log(logReport[i]);\n }\n }\n\n get consoleLogging(): boolean {\n return this.#consoleLogging;\n }\n\n set consoleLogging(value: boolean) {\n this.#consoleLogging = value;\n if (value === true) {\n this.#DumpToConsole();\n }\n }\n\n get instrumentLogging(): boolean {\n return this.#instrumentLogging;\n }\n\n set instrumentLogging(value: boolean) {\n this.#instrumentLogging = value;\n }\n\n Append(messageArray: string[]): void {\n for (let i=0; i < messageArray.length; i++) {\n this.LogMessage(messageArray[i]);\n }\n }\n\n error(message: any): void {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.error(message);\n }\n\n warn(message: any): void {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.warn(message);\n }\n\n info(message: any): void {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.info(message);\n }\n\n http(message: any): void {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.http(message);\n }\n\n verbose(message: any): void {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.verbose(message);\n }\n\n debug(message: any): void {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.debug(message);\n }\n\n silly(message: any): void {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.silly(message);\n }\n\n LogMessage(message: string): void {\n if (this.#copy) {\n throw new Error('Cannot add log messages from the copy version of this class.');\n }\n if (this.#consoleLogging) {\n console.log(message);\n }\n\n if (this.#instrumentLogging === false) {\n return;\n }\n\n this.#messages.push(message);\n if (this.#messages.length > this.#maxSize) {\n this.#messages.shift();\n this.#readPos = (this.#readPos > 0 ? this.#readPos-1 : 0);\n }\n }\n\n #GetVal(): string[]\n {\n if (this.#useLatestMessages) {\n return this.GetMessagesSinceLastRead();\n } else {\n return this.#messages;\n }\n }\n\n #SetVal(updatedValue: string[]): void\n {\n this.#messages = updatedValue;\n this.#readPos = 0;\n }\n\n GetMessagesNoUpdate(): string[] {\n return this.#messages.slice(this.#readPos);\n }\n\n // This will return only those messages that have been added since the last read\n GetMessagesSinceLastRead(): string[]\n {\n const retVal = this.#messages.slice(this.#readPos);\n this.#readPos = this.#messages.length;\n return retVal;\n }\n\n ResetLog(): void\n {\n this.#messages = [ ];\n this.#readPos = 0;\n }\n\n override ProcessTelemetry(telemetry: InstrumentLogTelemetry): void {\n if (telemetry.val) {\n this.val = telemetry.val;\n }\n if (telemetry.Append) {\n this.Append(telemetry.Append);\n }\n if (telemetry.LogMessage) {\n this.LogMessage(telemetry.LogMessage);\n }\n if (telemetry.ResetLog) {\n this.ResetLog();\n }\n }\n}\n","import isNode from 'detect-node'\n\n//import * as ph from 'node:perf_hooks'; //@@ need to test - may not work in browser\n\nimport _cloneDeep from 'lodash.clonedeep'\n\nimport { InstrumentBase, InstrumentBaseOptions, InstrumentBaseTelemetry } from './instrumentBase'\nimport { GaugeTypes } from '../instrumentDefs'\n\nimport { JSONObject } from '@nsshunt/stsutils'\n\n// Potentially, look @ this module...\n// https://www.npmjs.com/package/performance-now\n\nexport interface TimerReportValue extends JSONObject {\n\tval: number\n\tvalue: string\n\tvf: string\n\ts: string\n}\n\nexport class InstrumentTimerOptions extends InstrumentBaseOptions {\n fromJSON?: InstrumentTimerGauge\n initValue?: number\n}\n\nexport class InstrumentTimerTelemetry extends InstrumentBaseTelemetry {\n val?: number\n Pause?: boolean\n Resume?: boolean\n Reset?: boolean\n}\n\nexport class InstrumentTimerGauge extends InstrumentBase\n{\n #start = 0;\n #copy = false;\n #pauseVal = 0;\n\n constructor(options: InstrumentTimerOptions = { }) {\n super(options)\n\n if (typeof options.label === 'undefined') {\n this.label = 'InstrumentTimerGauge';\n } else {\n this.label = options.label;\n }\n\n if (typeof options.fromJSON === 'undefined') {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_TIMER\n });\n\n if (this.#copy) {\n this.DefineCopyProperties([\n 'val' \n ]);\n } else {\n Object.defineProperty(this, 'val', {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => { this.#SetVal(value); }\n });\n }\n\n if (typeof options.initValue !== 'undefined') {\n this.val = options.initValue;\n }\n\n // Set copy values now that we have defined our properties\n if (typeof options.fromJSON !== 'undefined') {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n\n this.Reset();\n }\n\n public val = 0;\n\n // Take a snap shot of the current elapsed time. The 'clock' will still keep running.\n Pause(): void {\n this.#pauseVal = this.val;\n }\n\n Resume(): void {\n this.#pauseVal = 0;\n }\n\n Reset(): void {\n if (isNode) {\n this.#start = performance.now();\n } else {\n this.#start = performance.now();\n }\n }\n\n #GetVal(): number {\n if (this.#pauseVal !== 0) {\n return this.GetNumber(this.#pauseVal);\n }\n if (isNode) {\n return this.GetNumber(performance.now() - this.#start);\n } else {\n return this.GetNumber(performance.now() - this.#start);\n }\n }\n\t\n #SetVal(updatedValue: number): void {\n // Reset the start time based on the supplied duration\n if (isNode) {\n this.#start = performance.now() - updatedValue;\n } else {\n this.#start = performance.now() - updatedValue;\n }\n }\n\n get start(): number {\n return this.#start;\n }\n\n #convertMS(ms: number): string {\n //let d, h, m, s;\n let s = Math.floor(ms / 1000);\n let m = Math.floor(s / 60);\n s = s % 60;\n let h = Math.floor(m / 60);\n m = m % 60;\n const d = Math.floor(h / 24);\n h = h % 24;\n\t\n const pad: (n: number) => string = function(n: number) { return n < 10 ? '0' + n : n.toString(); };\n\t\n return (d + '.' + pad(h) + ':' + pad(m) + ':' + pad(s)).padStart(12);\n }\t \n\n override ProcessTelemetry(telemetry: InstrumentTimerTelemetry): void {\n if (telemetry.val) {\n this.val = telemetry.val;\n }\n if (telemetry.Pause) {\n this.Pause();\n }\n if (telemetry.Resume) {\n this.Resume();\n }\n if (telemetry.Reset) {\n this.Reset();\n }\n }\n}\n","/****\n * The MIT License\n *\n * Copyright (c) 2015 Marco Ziccardi\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n ****/\n(function (global, factory) {\n if (typeof define === 'function' && define.amd) {\n define('timsort', ['exports'], factory);\n } else if (typeof exports !== 'undefined') {\n factory(exports);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports);\n global.timsort = mod.exports;\n }\n})(this, function (exports) {\n 'use strict';\n\n exports.__esModule = true;\n exports.sort = sort;\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n\n var DEFAULT_MIN_MERGE = 32;\n\n var DEFAULT_MIN_GALLOPING = 7;\n\n var DEFAULT_TMP_STORAGE_LENGTH = 256;\n\n var POWERS_OF_TEN = [1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9];\n\n function log10(x) {\n if (x < 1e5) {\n if (x < 1e2) {\n return x < 1e1 ? 0 : 1;\n }\n\n if (x < 1e4) {\n return x < 1e3 ? 2 : 3;\n }\n\n return 4;\n }\n\n if (x < 1e7) {\n return x < 1e6 ? 5 : 6;\n }\n\n if (x < 1e9) {\n return x < 1e8 ? 7 : 8;\n }\n\n return 9;\n }\n\n function alphabeticalCompare(a, b) {\n if (a === b) {\n return 0;\n }\n\n if (~ ~a === a && ~ ~b === b) {\n if (a === 0 || b === 0) {\n return a < b ? -1 : 1;\n }\n\n if (a < 0 || b < 0) {\n if (b >= 0) {\n return -1;\n }\n\n if (a >= 0) {\n return 1;\n }\n\n a = -a;\n b = -b;\n }\n\n var al = log10(a);\n var bl = log10(b);\n\n var t = 0;\n\n if (al < bl) {\n a *= POWERS_OF_TEN[bl - al - 1];\n b /= 10;\n t = -1;\n } else if (al > bl) {\n b *= POWERS_OF_TEN[al - bl - 1];\n a /= 10;\n t = 1;\n }\n\n if (a === b) {\n return t;\n }\n\n return a < b ? -1 : 1;\n }\n\n var aStr = String(a);\n var bStr = String(b);\n\n if (aStr === bStr) {\n return 0;\n }\n\n return aStr < bStr ? -1 : 1;\n }\n\n function minRunLength(n) {\n var r = 0;\n\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n\n return n + r;\n }\n\n function makeAscendingRun(array, lo, hi, compare) {\n var runHi = lo + 1;\n\n if (runHi === hi) {\n return 1;\n }\n\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n\n reverseRun(array, lo, runHi);\n } else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n\n return runHi - lo;\n }\n\n function reverseRun(array, lo, hi) {\n hi--;\n\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n }\n\n function binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n\n for (; start < hi; start++) {\n var pivot = array[start];\n\n var left = lo;\n var right = start;\n\n while (left < right) {\n var mid = left + right >>> 1;\n\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n } else {\n left = mid + 1;\n }\n }\n\n var n = start - left;\n\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n\n case 2:\n array[left + 2] = array[left + 1];\n\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n\n array[left] = pivot;\n }\n }\n\n function gallopLeft(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n } else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n } else {\n offset = m;\n }\n }\n return offset;\n }\n\n function gallopRight(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n } else {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n }\n\n lastOffset++;\n\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n } else {\n lastOffset = m + 1;\n }\n }\n\n return offset;\n }\n\n var TimSort = (function () {\n function TimSort(array, compare) {\n _classCallCheck(this, TimSort);\n\n this.array = null;\n this.compare = null;\n this.minGallop = DEFAULT_MIN_GALLOPING;\n this.length = 0;\n this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n this.stackLength = 0;\n this.runStart = null;\n this.runLength = null;\n this.stackSize = 0;\n\n this.array = array;\n this.compare = compare;\n\n this.length = array.length;\n\n if (this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n this.tmpStorageLength = this.length >>> 1;\n }\n\n this.tmp = new Array(this.tmpStorageLength);\n\n this.stackLength = this.length < 120 ? 5 : this.length < 1542 ? 10 : this.length < 119151 ? 19 : 40;\n\n this.runStart = new Array(this.stackLength);\n this.runLength = new Array(this.stackLength);\n }\n\n TimSort.prototype.pushRun = function pushRun(runStart, runLength) {\n this.runStart[this.stackSize] = runStart;\n this.runLength[this.stackSize] = runLength;\n this.stackSize += 1;\n };\n\n TimSort.prototype.mergeRuns = function mergeRuns() {\n while (this.stackSize > 1) {\n var n = this.stackSize - 2;\n\n if (n >= 1 && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1] || n >= 2 && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]) {\n\n if (this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n } else if (this.runLength[n] > this.runLength[n + 1]) {\n break;\n }\n this.mergeAt(n);\n }\n };\n\n TimSort.prototype.forceMergeRuns = function forceMergeRuns() {\n while (this.stackSize > 1) {\n var n = this.stackSize - 2;\n\n if (n > 0 && this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n\n this.mergeAt(n);\n }\n };\n\n TimSort.prototype.mergeAt = function mergeAt(i) {\n var compare = this.compare;\n var array = this.array;\n\n var start1 = this.runStart[i];\n var length1 = this.runLength[i];\n var start2 = this.runStart[i + 1];\n var length2 = this.runLength[i + 1];\n\n this.runLength[i] = length1 + length2;\n\n if (i === this.stackSize - 3) {\n this.runStart[i + 1] = this.runStart[i + 2];\n this.runLength[i + 1] = this.runLength[i + 2];\n }\n\n this.stackSize--;\n\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n\n if (length1 === 0) {\n return;\n }\n\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n if (length2 === 0) {\n return;\n }\n\n if (length1 <= length2) {\n this.mergeLow(start1, length1, start2, length2);\n } else {\n this.mergeHigh(start1, length1, start2, length2);\n }\n };\n\n TimSort.prototype.mergeLow = function mergeLow(start1, length1, start2, length2) {\n\n var compare = this.compare;\n var array = this.array;\n var tmp = this.tmp;\n var i = 0;\n\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n\n var minGallop = this.minGallop;\n\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n\n if (--length1 === 1) {\n exit = true;\n break;\n }\n\n minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (minGallop < 0) {\n minGallop = 0;\n }\n\n minGallop += 2;\n }\n\n this.minGallop = minGallop;\n\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n } else if (length1 === 0) {\n throw new Error('mergeLow preconditions were not respected');\n } else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n };\n\n TimSort.prototype.mergeHigh = function mergeHigh(start1, length1, start2, length2) {\n var compare = this.compare;\n var array = this.array;\n var tmp = this.tmp;\n var i = 0;\n\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n\n return;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n return;\n }\n\n var minGallop = this.minGallop;\n\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = tmp[cursor2--];\n\n if (--length2 === 1) {\n exit = true;\n break;\n }\n\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (minGallop < 0) {\n minGallop = 0;\n }\n\n minGallop += 2;\n }\n\n this.minGallop = minGallop;\n\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n } else if (length2 === 0) {\n throw new Error('mergeHigh preconditions were not respected');\n } else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n };\n\n return TimSort;\n })();\n\n function sort(array, compare, lo, hi) {\n if (!Array.isArray(array)) {\n throw new TypeError('Can only sort arrays');\n }\n\n if (!compare) {\n compare = alphabeticalCompare;\n } else if (typeof compare !== 'function') {\n hi = lo;\n lo = compare;\n compare = alphabeticalCompare;\n }\n\n if (!lo) {\n lo = 0;\n }\n if (!hi) {\n hi = array.length;\n }\n\n var remaining = hi - lo;\n\n if (remaining < 2) {\n return;\n }\n\n var runLength = 0;\n\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n\n var ts = new TimSort(array, compare);\n\n var minRun = minRunLength(remaining);\n\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n var force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n\n ts.forceMergeRuns();\n }\n});\n","module.exports = require('./build/timsort.js');","/**\n @typedef {(Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array)} TypedArray\n */\n\n/**\n * Error message for a case when percentile is less than 0.\n *\n * @param {Number} p\n *\n * @return {String}\n */\nfunction lessThanZeroError(p) {\n return 'Expect percentile to be >= 0 but given \"' + p + '\" and its type is \"' + (typeof p) + '\".';\n}\n\n/**\n * Error message for a case when percentile is greater than 100.\n *\n * @param {Number} p\n *\n * @return {String}\n */\nfunction greaterThanHundredError(p) {\n return 'Expect percentile to be <= 100 but given \"' + p + '\" and its type is \"' + (typeof p) + '\".';\n}\n\n/**\n * Error message for a case when percentile is not a number (NaN).\n *\n * @param {Number} p\n *\n * @return {String}\n */\nfunction nanError(p) {\n return 'Expect percentile to be a number but given \"' + p + '\" and its type is \"' + (typeof p) + '\".';\n}\n\n/**\n * Checks that a list of percentiles are all numbers and they lie in range 0..100.\n *\n * @param {Array<Number>} ps - percentiles to calculate\n *\n * @return {Array} List of errors\n */\nfunction validateInput(ps) {\n return ps.reduce(function (errors, p) {\n if (isNaN(Number(p))) {\n errors.push(nanError(p));\n } else if (p < 0) {\n errors.push(lessThanZeroError(p));\n } else if (p > 100) {\n errors.push(greaterThanHundredError(p));\n }\n return errors;\n }, []);\n}\n\n/**\n * Get percentile value from an array.\n *\n * @param {Number} p - percentile\n * @param {Array|TypedArray} list - list of values\n *\n * @return {*}\n */\nfunction getPsValue(p, list) {\n if (p === 0) return list[0];\n var kIndex = Math.ceil(list.length * (p / 100)) - 1;\n return list[kIndex];\n}\n\n/**\n * Calculate percentile for given array of values.\n *\n * @template T\n * @param {Number|Array<Number>} pOrPs - percentile or a list of percentiles\n * @param {Array<T>|Array<Number>|TypedArray} list - array of values\n * @param {function(T): Number} [fn] - optional function to extract a value from an array item\n *\n * @return {Number|T|Array<Number>|Array<T>}\n */\nfunction percentile(pOrPs, list, fn) {\n var ps = Array.isArray(pOrPs) ? pOrPs : [pOrPs];\n var validationErrors = validateInput(ps);\n\n if (validationErrors.length) {\n throw new Error(validationErrors.join(' '));\n }\n\n list = list.slice().sort(function (a, b) {\n if (fn) {\n a = fn(a);\n b = fn(b);\n }\n\n a = Number.isNaN(a) ? Number.NEGATIVE_INFINITY : a;\n b = Number.isNaN(b) ? Number.NEGATIVE_INFINITY : b;\n\n if (a > b) return 1;\n if (a < b) return -1;\n\n return 0;\n });\n\n if (ps.length === 1) {\n return getPsValue(ps[0], list);\n }\n\n return ps.map(function (p) {\n return getPsValue(p, list);\n });\n}\n\nmodule.exports = percentile;\n","import * as timSort from 'timsort' // Required as this is a UMD library\n// https://www.typescriptlang.org/docs/handbook/declaration-files/library-structures.html\nimport percentile from 'percentile'\nimport _cloneDeep from 'lodash.clonedeep'\n\nimport { InstrumentBase, InstrumentBaseOptions, InstrumentBaseTelemetry } from './instrumentBase'\nimport { GaugeTypes } from '../instrumentDefs'\nimport { JSONObject } from '@nsshunt/stsutils'\nimport isNode from 'detect-node'\n\nexport type QuantileDataElement = [\n label: string,\n val: number,\n];\n\nexport interface gaugeReportValue extends JSONObject {\n\tval: number\n\tvalue: string\n\tvf: string\n\tmin?: string\n\tmax?: string\n\tavg?: string\n\tpercentile?: number[]\n\tpercentileFormatted?: string\n}\n\nexport class InstrumentGaugeOptions extends InstrumentBaseOptions {\n interval?: number\n sampleSize?: number\n fromJSON?: InstrumentGauge\n initValue?: number\n}\n\nexport class InstrumentGaugeTelemetry extends InstrumentBaseTelemetry {\n val?: number\n Inc?: number\n Dec?: number\n}\n\n//@@ Create a GaugeEx that also includes min, max, average\nexport class InstrumentGauge extends InstrumentBase\n{\n #val = 0;\n #maxval: number | null = null;\n #lastObservedValue = 0;\n #timeSeriesList: number[] = [ ];\n #maxSampleSize = 0;\n #timerInterval = 0;\n #observer: NodeJS.Timeout | null = null;\n\n //@@ extras\n #min: number | null = null;\n #max = 0; \n #observations = 0;\n #total = 0;\n #copy = false;\n\n constructor(options: InstrumentGaugeOptions = { }) {\n super(options);\n\n if (!options.label) {\n this.label = 'InstrumentGauge';\n } else {\n this.label = options.label;\n }\n\n if (typeof options.interval === 'undefined') {\n this.#timerInterval = 0;\n } else {\n this.#timerInterval = options.interval;\n }\n\n if (typeof options.sampleSize === 'undefined') {\n this.#maxSampleSize = 600;\n } else {\n this.#maxSampleSize = options.sampleSize;\n }\n\n if (typeof options.fromJSON === 'undefined') {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_GAUGE\n });\n\n if (this.#copy) {\n this.DefineCopyProperties([\n 'val', 'min', 'max', 'avg', 'percentile'\n ]);\n } else {\n Object.defineProperty(this, 'val', {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => { this.#SetVal(value); }\n });\n if (this.#timerInterval > 0) {\n Object.defineProperty(this, 'percentile', {\n enumerable: true,\n get: () => this.#GetPercentileData()\n });\n\t\n this._StartTimer();\n }\n }\n\n if (typeof options.initValue !== 'undefined') {\n this.val = options.initValue;\n }\n\n // Set copy values now that we have defined our properties\n if (typeof options.fromJSON !== 'undefined') {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n if (result.percentile) {\n this.percentile = result.percentile;\n }\n if (result.min) {\n this.min = result.min;\n }\n if (result.max) {\n this.max = result.max;\n }\n if (result.avg) {\n this.avg = result.avg;\n }\n }\n }\n\n public readonly percentile?: number[];\n public readonly min?: number;\n public readonly max?: number;\n public readonly avg?: number;\n public val = 0;\n\n WithInitVal(initVal: number): InstrumentGauge {\n this.val = initVal;\n return this;\n }\n\n WithMin(): InstrumentGauge {\n Object.defineProperty(this, 'min', {\n enumerable: true,\n get: () => this.#GetMin()\n });\n return this;\n }\n\n WithMax(): InstrumentGauge {\n Object.defineProperty(this, 'max', {\n enumerable: true,\n get: () => this.#GetMax()\n });\n return this;\n }\n\n WithAverage(): InstrumentGauge {\n Object.defineProperty(this, 'avg', {\n enumerable: true,\n get: () => this.#GetAverage()\n });\n return this;\n }\n\n private _StartTimer(): void {\n if (this.#timerInterval > 0) {\n this.#timeSeriesList = [ ];\n\n this.#observer = setInterval(() => {\n if (this.#timeSeriesList.length > this.#maxSampleSize) {\n this.#timeSeriesList.shift();\n }\n const maxval = this.#GetAndResetMaxVal();\n this.#timeSeriesList.push(maxval);\n }, this.#timerInterval);\n\n // If running in node ...\n if (isNode) {\n this.#observer.unref();\n }\n\n // https://httptoolkit.tech/blog/unblocking-node-with-unref/\n } else {\n throw new Error(`Unable to StartTimer for this instrument. The interval is set to <= 0.`);\n }\n }\n\n override StopTimer(): void {\n if (this.#observer) {\n clearTimeout(this.#observer);\n this.#observer = null;\n this.#timeSeriesList = [ ];\n }\n }\n\n /**\n\t * If the gauge is being monitored as part of a time series, get the most recent recorded value (max value) from within the time interval\n\t * otherwise, just return the current instant value.\n\t */\n #GetVal(): number {\n if (this.#timerInterval > 0 && this.#observer !== null) {\n if (this.#maxval === null) {\n return this.GetNumber(this.#lastObservedValue);\n } else {\n return this.GetNumber(this.#maxval);\n }\n }\n return this.GetNumber(this.#val);\n }\n\n #SetVal(updatedValue: number): void {\n this.#val = updatedValue;\n this.#observations++;\n this.#total += updatedValue;\n\n if (this.#val > this.#max) {\n this.#max = this.#val;\n }\n\n if (this.#min !== null) {\n if (this.#val < this.#min) {\n this.#min = this.#val;\n }\n } else {\n // Set the min value to the value of the first observation\n this.#min = this.#val;\n }\n\n if (this.#timerInterval > 0) {\n this.#lastObservedValue = updatedValue;\n if (this.#maxval === null) {\n this.#maxval = this.#val;\n } else if (this.#val > this.#maxval) {\n this.#maxval = this.#val;\n }\n }\n }\n\n #GetMin(): number {\n if (this.#min !== null) {\n return this.#min;\n }\n return 0;\n }\n\n #GetMax(): number {\n return this.#max;\n }\n\n #GetAverage(): number {\n if (this.#observations > 0) {\n return this.#total / this.#observations\n }\n return 0;\n }\n\n Reset(): void {\n this.StopTimer();\n\n this.#maxval = 0;\n this.#lastObservedValue = 0;\n this.#val = 0;\n\n this.#min = null;\n this.#max = 0;\n this.#observations = 0;\n this.#total = 0;\n\n if (this.#timerInterval > 0) {\n this._StartTimer();\n }\n }\n\n #GetAndResetMaxVal(): number {\n if (this.#maxval === null) {\n return this.#lastObservedValue;\n }\n const retVal = this.#maxval;\n this.#maxval = null;\n return retVal;\n }\n\n Inc(incVal = 1): void {\n this.#SetVal(this.#val + incVal);\n }\n\n Dec(decVal = 1): void {\n this.#SetVal(this.#val - decVal);\n }\n\n #NumberCompare(a: number, b: number): number {\n return a - b;\n }\n\n #GetPercentileData(): number[] {\n const sortedList = this.#timeSeriesList.slice(0);\n timSort.sort(sortedList, this.#NumberCompare);\n return percentile([50, 80, 90, 95, 99, 99.95], sortedList) as number[];\n }\n\n override ProcessTelemetry(telemetry: InstrumentGaugeTelemetry): void {\n if (telemetry.Inc) {\n this.Inc(telemetry.Inc);\n }\n if (telemetry.Dec) {\n this.Dec(telemetry.Dec);\n }\n if (telemetry.val) {\n this.val = telemetry.val;\n }\n }\n}\n","import _cloneDeep from 'lodash.clonedeep'\n\nimport { InstrumentBase, InstrumentBaseOptions, InstrumentBaseTelemetry } from './instrumentBase'\nimport { GaugeTypes } from '../instrumentDefs'\n\nimport { JSONObject } from '@nsshunt/stsutils'\n\nexport interface ObjectReportValue extends JSONObject {\n\tval: JSONObject\n}\n\nexport class InstrumentObjectOptions extends InstrumentBaseOptions {\n fromJSON?: InstrumentObject\n initValue?: JSONObject\n}\n\nexport class InstrumentObjectTelemetry extends InstrumentBaseTelemetry {\n val?: JSONObject\n}\n\nexport class InstrumentObject extends InstrumentBase\n{\n #val: JSONObject = { };\n #copy = false;\n\n constructor(options: InstrumentObjectOptions = { }) {\n super(options);\n\n if (typeof options.label === 'undefined') {\n this.label = 'InstrumentObject';\n } else {\n this.label = options.label;\n }\n\n if (typeof options.fromJSON === 'undefined') {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_OBJECT\n });\n\n if (this.#copy) {\n this.DefineCopyProperties([\n 'val'\n ]);\n } else {\n Object.defineProperty(this, 'val', {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => { this.#SetVal(value); }\n });\n }\n\n if (typeof options.initValue !== 'undefined') {\n this.val = options.initValue;\n } else {\n this.val = { };\n }\n\n // Set copy values now that we have defined our properties\n if (typeof options.fromJSON !== 'undefined') {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n }\n\t\n public val: JSONObject;\n\n WithInitVal(initVal: JSONObject) {\n this.val = initVal;\n return this;\n }\n\n #GetVal(): JSONObject {\n return this.#val;\n }\n\n #SetVal(updatedValue: JSONObject) {\n this.#val = updatedValue;\n }\n\n override ProcessTelemetry(telemetry: InstrumentObjectTelemetry): void {\n if (telemetry.val) {\n this.val = telemetry.val;\n }\n }\n}\n","import { Gauge, GaugeTypes } from './instrumentDefs'\n\nimport { InstrumentBase } from './instruments/instrumentBase'\nimport { InstrumentVelocity } from './instruments/instrumentVelocity'\nimport { InstrumentHistogram } from './instruments/instrumentHistogram'\nimport { InstrumentLog } from './instruments/instrumentLog'\nimport { InstrumentTimerGauge } from './instruments/instrumentTimerGauge'\nimport { InstrumentGauge } from './instruments/instrumentGauge'\nimport { InstrumentObject } from './instruments/instrumentObject'\nimport { Instruments } from './index'\n\nexport function CreateInstrument(sourceInstrument: InstrumentBase): InstrumentBase {\n switch (sourceInstrument[GaugeTypes.GAUGE_TYPE]) {\n case GaugeTypes.INSTRUMENT_GAUGE :\n return new InstrumentGauge({fromJSON:sourceInstrument as InstrumentGauge});\n case GaugeTypes.INSTRUMENT_VELOCITY :\n return new InstrumentVelocity({fromJSON:sourceInstrument as InstrumentVelocity});\n case GaugeTypes.INSTRUMENT_HISTOGRAM :\n return new InstrumentHistogram({fromJSON:sourceInstrument as InstrumentHistogram});\n case GaugeTypes.INSTRUMENT_LOG :\n return new InstrumentLog({fromJSON:sourceInstrument as InstrumentLog});\n case GaugeTypes.INSTRUMENT_TIMER :\n return new InstrumentTimerGauge({fromJSON:sourceInstrument as InstrumentTimerGauge});\n case GaugeTypes.INSTRUMENT_OBJECT :\n return new InstrumentObject({fromJSON:sourceInstrument as InstrumentObject});\n }\n throw new Error(`Cannot create instrument from type: [${sourceInstrument[GaugeTypes.GAUGE_TYPE]}]`)\n}\n\nexport function GetInstrumentName(gauge: Gauge): string {\n switch (gauge) {\n case Gauge.ACTIVE_REQUEST_GAUGE :\n return \"Active Requests\";\n case Gauge.AUTHENTICATION_COUNT_GAUGE :\n return \"Authentication Count\";\n case Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE :\n return \"Authentication Error Count\";\n case Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE :\n return \"Authentication Retry Count\";\n case Gauge.CONNECTION_POOL_IDLE_GAUGE :\n return \"Connection Pool Idle\";\n case Gauge.CONNECTION_POOL_TOTAL_GAUGE :\n return \"Connection Pool Total\";\n case Gauge.CONNECTION_POOL_WAITING_GAUGE :\n return \"Connection Pool Waiting\";\n case Gauge.CPU_LOAD_GAUGE :\n return \"CPU Load\";\n case Gauge.CPU_SYSTEM_LOAD_GAUGE :\n return \"CPU SYstem Load\";\n case Gauge.DURATION_GAUGE :\n return \"Duration\";\n case Gauge.DURATION_HISTOGRAM_GAUGE :\n return \"Diration Histogram\";\n case Gauge.ERROR_COUNT_GAUGE :\n return \"Errors\";\n case Gauge.LATENCY_GAUGE :\n return \"Latency\";\n case Gauge.LATENCY_HISTOGRAM_GAUGE :\n return \"Latency Histogram\";\n case Gauge.LOGGER :\n return \"Logger\";\n case Gauge.LOGGER_COPY :\n return \"_Logger\";\n case Gauge.NETWORK_RX_GAUGE :\n return \"Network Receive\";\n case Gauge.NETWORK_TX_GAUGE :\n return \"Network Transmit\";\n case Gauge.REQUEST_COUNT_GAUGE :\n return \"Requests\";\n case Gauge.RETRY_COUNT_GAUGE :\n return \"Retries\";\n case Gauge.TIMER_GAUGE :\n return \"Timer\";\n case Gauge.VELOCITY_GAUGE :\n return \"Velocity\";\n case Gauge.CONNECTION_COUNT_GAUGE :\n return \"TCP Connection\";\n case Gauge.OBJECT_GAUGE :\n return \"Object\";\n case Gauge.CORE_COUNT_GAUGE :\n return \"Core Count\";\n default:\n return \"Unknown\";\n }\n}\n\nexport function StopInstruments(instruments: InstrumentBase[] | Instruments): void {\n if (instruments) {\n if (Array.isArray(instruments)) {\n instruments.forEach((instrument) => {\n if (instrument.StopTimer) {\n instrument.StopTimer();\n }\n });\n } else {\n for (const [, value] of Object.entries(instruments)) {\n if (value.StopTimer) {\n value.StopTimer();\n }\n }\n }\n }\n}\n","import { JSONObject, ISTSLogger } from '@nsshunt/stsutils'\n\nimport { InstrumentBaseOptions, InstrumentBase, GaugeTypes, Gauge } from '@nsshunt/stsinstrumentation'\n\n/*\nexport interface IPublishMessagePayloadContentBase {\n messageId?: string\n}\n\nexport interface IPublishMessagePayload {\n command: PublishMessageCommand\n payload: IPublishMessagePayloadContentBase\n}\n\nexport enum PublishMessageCommands {\n\tInstrumentDetails ='__InstrumentDetails', // Payload type - BrokerMessageResponseInstrumentDetailsPayload\n\tInstrumentDataPayload = '__InstrumentDataPayload',\n\tInstrumentDataOptimizedPayload = '__InstrumentDataOptimizedPayload',\n\tInstrumentTelemetry ='__InstrumentTelemetry',\n\tCreateInstrument = '__CreateInstrument',\n\tMessagePort = '__MessagePort',\n\tMessagePortResponse = '__MessagePortResponse',\n\tTerminate = '__Terminate',\n\tPreTerminate = '__PreTerminate',\n\tOptions = '__Options',\n\tStart = '__Start',\n\tStop = '__Stop',\n\tPause = '__Pause',\n\tResume = '__Resume',\n\tReset = '__Reset',\n\tCreate = '__Create',\n\tRead = '__Read',\n\tUpdate = '__Update',\n\tDelete = '__Delete',\n\tAdd = '__Add',\n\tAcknowledge = '__Acknowledge',\n\tExit = '__Exit',\n\tMessageError = '__MessageError',\n\tOnLine = '__OnLine',\n\tError = '__Error',\n\tExecuteRefreshToken = '__ExecuteRefreshToken',\n\tExecuteRefreshTokenResponse = '__ExecuteRefreshTokenResponse'\n}\n\nexport type PublishMessageCommand = PublishMessageCommands\n*/\n\nexport enum TransportType {\n none = 0,\n\tIPC = 1, // Inter-process communication (local)\n\twebsocket = 2, // node ws\n\tRESTAPI = 4, // RESTful API\n\tredis = 8,\n\tkafka = 16, // https://www.npmjs.com/package/kafkajs\n\tinfluxdb = 32, // https://github.com/influxdata/influxdb-client-js/ https://www.npmjs.com/package/@influxdata/influxdb-client\n\tprometheus = 64,\n\tgRPC = 128, // https://www.npmjs.com/package/@grpc/grpc-js\n\tunixsocket = 256, // Uses https://www.npmjs.com/package/json-socket\n\tsocketio = 512, // https://socket.io\n\totelcollector = 1024, \n\tmessageport = 2048,\n jsonrpc = 4096, // https://www.npmjs.com/package/jayson\n postgresql =8192,\n grafanaloki = 16384,\n logstash = 32768,\n fluentbit = 65536,\n fluentd = 131072,\n inmemory = 262144\n}\n\nexport function GetTransportMode(transport: string): TransportType {\n let trans: TransportType = 0 as TransportType;\n try {\n transport.split('|').forEach(item => {\n switch (item) {\n case 'IPC' :\n trans |= TransportType.IPC;\n break;\n case 'websocket' :\n trans |= TransportType.websocket;\n break;\n case 'RESTAPI' :\n trans |= TransportType.RESTAPI;\n break;\n case 'redis' :\n trans |= TransportType.redis;\n break;\n case 'kafka' :\n trans |= TransportType.kafka;\n break;\n case 'influxdb' :\n trans |= TransportType.influxdb;\n break;\n case 'prometheus' :\n trans |= TransportType.prometheus;\n break;\n case 'gRPC' :\n trans |= TransportType.gRPC;\n break;\n case 'unixsocket' :\n trans |= TransportType.unixsocket;\n break;\n case 'socketio' :\n trans |= TransportType.socketio;\n break;\n case 'otelcollector' :\n trans |= TransportType.otelcollector;\n break;\n case 'messageport' :\n trans |= TransportType.messageport\n break;\n case 'jsonrpc' :\n trans |= TransportType.jsonrpc\n break;\n case 'postgresql' :\n trans |= TransportType.postgresql\n break;\n case 'grafanaloki' :\n trans |= TransportType.grafanaloki\n break;\n case 'logstash' :\n trans |= TransportType.logstash\n break;\n case 'fluentbit' :\n trans |= TransportType.fluentbit\n break;\n case 'fluentd' :\n trans |= TransportType.fluentd\n break;\n case 'inmemory' :\n trans |= TransportType.inmemory\n break;\n }\n });\n } catch (error) {\n throw new Error(`GetTransportMode(): Error: [${error}]`);\n }\n return trans;\n}\n\n/*\nexport interface IServiceProcessContext extends IContextBase {\n serviceName: string\n serviceVersion: string\n serviceInstanceId: string\n hostName: string\n processId: string\n parentProcessId: string\n}\n*/\n\nexport type Nid = string;\n\nexport interface IContextBase extends JSONObject {\n serviceType?: string\n\tnid?: Nid\n}\n\n/*\nexport interface IAsyncRunnerContext extends IContextBase {\n\tid: string\n\thostName: string\n\tagentName: string\n\tthreadId: string\n\tasyncRunnerId: number\n}\n\n\n//@@ refactor these - should have no specific service stuff here ...\n\nexport interface IServiceProcessContext extends IContextBase {\n\tserviceId?: string // Service name and the service version\n\n\tserviceInstanceId?: string // Service unique id and the host name\n\tsid?: string // Service unique id only, does not include host\n\thostName?: string // Service Instance Host Name\n\n\t// Leaf level attributes\n\tserviceInstanceProcessId?: string // Service Instance OS Process ID (parent process id)\n\tpid?: number // Service Instance OS Process ID (parent process id)\n\tppid?: number// Service Instance OS Parent Process ID if worker. Will be pid if parent process.\n\tisMaster?: boolean // True if is Master Process\n\tisWorker?: boolean // True if is Worker Process\n\tserviceName?: string // Defined in .env or environment variable\n\tserviceVersion?: string // Defined in .env or environment variable\n}\n\n/**\n * Lambda functios will be reporteed on using the following structure.\n * /lambda/technology/subTechnology/lambdaFunctionName/lambdaInstance\n */\n\n/*\nexport interface ILambdaProcessContext extends IContextBase {\n technology: string // e.g. aws, azure, node, postgresql\n subTechnology: string // (use {technology_subTechnology}) aws_s3, aws_sqs, azure_blob, node_workerthreads, postgresql_crud\n lambdaFunctionName: string\n lambdaInstance: string // uuid of this lambda function running\n hostName: string // The host where this lambda class is running\n processId: string // The process id (pid) on the host where this lambda class is running\n parentProcessId: string // The parent process id (ppid) on the host where this lambda class is running\n useCase: string // The use case that this lambda function supports\n pattern: string // The pattern that this lambda function is part of\n metaData?: Record<string, string> // (optional) Any additional meta-data associated with this lambda function that is not defined within this context\n}\n*/\n\n/*\nexport function CreateServiceProcessContext(serviceName: string, serviceVersion: string, serviceInstanceId: string,\n hostName: string, processId: number, parentProcessId: number): IServiceProcessContext {\n\n const checkParams = [\n [ 'servicename', serviceName ], \n [ 'serviceversion', serviceVersion ],\n [ 'hostname', hostName ],\n [ 'serviceInstanceId', serviceInstanceId ]\n ];\n \n // CHeck for invalid strings\n CheckValidChar(checkParams);\n \n return {\n nid: `\\\n${serviceName}${ModelDelimeter.COMPONENT_SEPERATOR}${serviceVersion}\\\n${ModelDelimeter.SEPERATOR}\\\n${serviceInstanceId}${ModelDelimeter.COMPONENT_SEPERATOR}${hostName}\\\n${ModelDelimeter.NID_SEPERATOR}\\\n${processId.toString()}${ModelDelimeter.COMPONENT_SEPERATOR}${parentProcessId.toString()}`,\n serviceName,\n serviceVersion,\n serviceInstanceId,\n hostName,\n processId: processId.toString(),\n parentProcessId: parentProcessId.toString()\n }\n}\n*/\n\nexport enum InstrumentPayloadType {\n\tagent = 'agent',\n\tservice = 'service'\n}\n\nexport interface IInstrumentPayload {\n\t//context: IServiceProcessContext | IAsyncRunnerContext | ILambdaProcessContext\n\tcontext: IContextBase\n\tinstruments: Record<string, InstrumentBase>\n}\n\n/*\nexport enum PublicReceiverType {\n\tIPC = 0,\n\tMessagePort = 1\n}\n*/\n\n/*\nexport interface IPublishTransportBase {\n _PerformPublish(payload: IPublishMessagePayload): Promise<boolean>\n get options(): JSONObject | null\n Publish(payload: IPublishMessagePayload): Promise<boolean>\n Close(): Promise<boolean>\n} \n\nexport type IPublishWorkerTransportFactory = (options: IPublishTransportBaseOptions) => IPublishTransportBase;\n*/\n\n\nexport type InstrumentDefinition = [ Gauge, GaugeTypes, InstrumentBaseOptions? ]\n\nexport type InstrumentDefinitions = InstrumentDefinition[];\n\n/*\nexport interface IWorkerFactory {\n\tcreateWorker: () => Worker | wt.Worker\n\toptions?: JSONObject\n}\n*/\n\n//export type stsWorker = Worker | wt.Worker;\n\nexport interface IPublisherTransport {\n Publish(payload: IInstrumentPayload): Promise<boolean>\n Close(): Promise<boolean>\n}\n\nexport interface IPublishInstrumentControllerOptions {\n processContext: IContextBase\n consoleLogging?: boolean\n instrumentLogging?: boolean\n httpServer?: boolean // Is this service running an http server (express via STSFramework)\n instrumentationObservationInterval?: number\n instrumentationTimeWindow?: number\n instrumentDefinitions?: InstrumentDefinitions\n publisherTransport: IPublisherTransport\n publishInterval: number\n logger: ISTSLogger\n}\n\nexport interface IPublishTransportBaseOptions {\n id?: string\n transportType: TransportType\n logger: ISTSLogger\n}\n\nexport interface IPublishTransportRESTServerOptions extends IPublishTransportBaseOptions {\n url?: string\n socketPath?: string\n agentOptions?: {\n\t\tkeepAlive: boolean,\n\t\tmaxSockets: number\n\t\tmaxTotalSockets: number,\n\t\tmaxFreeSockets: number,\n\t\ttimeout: number,\n\t\trejectUnauthorized: boolean // Allows self signed certs in non production mode(s)\n\t}\n}\n","/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { JSONObject, STSOptionsBase } from '@nsshunt/stsutils'\nimport { TinyEmitter } from 'tiny-emitter';\n//import { Express, Request, Response, NextFunction } from 'express';\n//import { v4 as uuidv4 } from 'uuid';\n\nexport interface RequestLoggerMiddlewareOptions {\n\tignoresocketio: boolean\n}\n\nexport enum RequestLoggerMiddlewareEventName {\n UpdateInstrument_AR_DEC = 'UpdateInstrument_AR_DEC', // active request gauge - decrement\n UpdateInstrument_AR_INC = 'UpdateInstrument_AR_INC', // active request gauge - increment\n UpdateInstrument_RC_INC = 'UpdateInstrument_RC_INC', // request count gauge - increment\n UpdateInstrument_V_INC = 'UpdateInstrument_V_INC', // velocity gauge - increment\n UpdateInstrument_DH_VAL = 'UpdateInstrument_DH_VAL', // duration histo - value\n UpdateInstrument_D_VAL = 'UpdateInstrument_D_VAL' // duration - value\n}\n\nexport type RequestLoggerMiddlewareEventFunc = (data?: string | number | JSONObject) => void;\n\n//@@ use TinyEmitter to emit logger events\nexport class RequestLoggerMiddleware extends STSOptionsBase\n{\n #tinyEmitter: TinyEmitter = new TinyEmitter();\n\n constructor(options: RequestLoggerMiddlewareOptions) {\n super(options);\n }\n\n override get options(): RequestLoggerMiddlewareOptions {\n return super.options as RequestLoggerMiddlewareOptions;\n }\n\n on(eventName: string, callBackFn: RequestLoggerMiddlewareEventFunc) {\n this.#tinyEmitter.on(eventName, callBackFn);\n }\n\n #RequestCompleted = (start: [number, number]) => {\n // Decrease the number of active requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_AR_DEC);\n\n // Update request duration histo data\n let timeInMs = 0;\n const end = process.hrtime(start);\n timeInMs = (end[0]* 1000000000 + end[1]) / 1000000;\n timeInMs = parseFloat(timeInMs.toFixed(4));\n\t\t\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_DH_VAL, timeInMs);\n\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_D_VAL, timeInMs);\n };\n\n // https://stackoverflow.com/questions/18031839/how-to-use-process-hrtime-to-get-execution-time-of-async-function/18031945\n\n /**\n\t * Use with .bind(class instance).\n\t * Example;\n\t * ---\n\t * `let requestLoggerMiddleware = new RequestLoggerMiddleware();\n\t * app.use(requestLoggerMiddleware.Middleware.bind(requestLoggerMiddleware));`\n\t * @param {*} req \n\t * @param {*} res \n\t * @param {*} next \n\t * @returns \n\t */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any \n Middleware = async (req: any, res: any, next: any) => { \n if (this.options.ignoresocketio && req.originalUrl.includes('socket.io')) {\n return;\n }\n\n const start = process.hrtime();\n\n // Increase the number of active requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_AR_INC);\n\n // Increase the total number of requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_RC_INC);\n\n // Increase the total number of requests to determine velocity (requests per second)\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_V_INC);\n\n req.on(\"aborted\", () => {\n // request closed unexpectedly\n //@@RequestCompleted(start);\n });\n\n req.on(\"close\", () => {\n // request closed unexpectedly or normally\n this.#RequestCompleted(start);\n });\n\n req.on(\"end\", () => {\n \n });\n\n res.on('finish', () => {\n //@@RequestCompleted(start);\n });\n\t\n next();\n }\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","import chalk from 'chalk';\n\nimport isNode from 'detect-node'\n\nimport { InstrumentLog, InstrumentBaseOptions, InstrumentBase, InstrumentLogTelemetry,\n InstrumentGauge, InstrumentHistogram, InstrumentObject, InstrumentTimerGauge, GaugeTypes, \n Gauge, InstrumentVelocity, InstrumentBaseTelemetry } from '@nsshunt/stsinstrumentation'\n \nimport { STSOptionsBase } from '@nsshunt/stsutils'\n\nimport { IPublishInstrumentControllerOptions, InstrumentDefinitions, InstrumentDefinition,\n IContextBase, IInstrumentPayload } from './commonTypes'\n\nexport enum ePublishState {\n init,\n started,\n stopping\n}\n/**\n * This class managers the creation of instruments and the publication of instrumentation telemetry to the instrument manager service.\n */\nexport class PublishInstrumentController extends STSOptionsBase {\n #instruments: Record<string, InstrumentBase> = { };\n #inPublish = false;\n #observer: NodeJS.Timeout | null = null;\n #publishState: ePublishState = ePublishState.init;\n\n constructor(options: IPublishInstrumentControllerOptions) {\n super(options);\n this.SetupInstrumentation();\n this.StartPublish();\n }\n\n override get options(): IPublishInstrumentControllerOptions {\n return super.options as IPublishInstrumentControllerOptions;\n }\n\n LogEx = (message: string) => {\n this.UpdateInstrument(Gauge.LOGGER, {\n LogMessage: message\n } as InstrumentLogTelemetry);\n }\n\n #GetInstrument(instrumentName: Gauge): InstrumentBase {\n // get the gauge from the internal gauge map - created using the factory function\n return this.#instruments[instrumentName];\n }\n\n #ProcessTelemetryCommand(instrumentName: Gauge, telemetry: InstrumentBaseTelemetry): void {\n const instrument: InstrumentBase = this.#GetInstrument(instrumentName);\n if (instrument) {\n instrument.ProcessTelemetry(telemetry);\n }\n }\n\n // Instrument factory\n #CreateInstrument(instrumentType: GaugeTypes, options: InstrumentBaseOptions): InstrumentBase {\n let instrument: InstrumentBase;\n\n switch (instrumentType) {\n case GaugeTypes.INSTRUMENT_GAUGE :\n instrument = new InstrumentGauge(options);\n break;\n case GaugeTypes.INSTRUMENT_HISTOGRAM :\n instrument = new InstrumentHistogram(options);\n break;\n case GaugeTypes.INSTRUMENT_LOG :\n instrument = new InstrumentLog(options);\n break;\n case GaugeTypes.INSTRUMENT_OBJECT :\n instrument = new InstrumentObject(options);\n break;\n case GaugeTypes.INSTRUMENT_TIMER :\n instrument = new InstrumentTimerGauge(options);\n break;\n case GaugeTypes.INSTRUMENT_VELOCITY :\n instrument = new InstrumentVelocity(options);\n break;\n default :\n throw new Error(`Gauge type: [${instrumentType} not known.]`);\n }\n return instrument;\n }\n\n #CreateInstruments(payload: InstrumentDefinitions): void {\n payload.forEach((instrumentDefinition: InstrumentDefinition) => {\n const g: Gauge = instrumentDefinition[0];\n const gt: GaugeTypes = instrumentDefinition[1];\n const instrumentBaseOptions: InstrumentBaseOptions | undefined = instrumentDefinition[2];\n const instrument: InstrumentBase = this.#CreateInstrument(gt, instrumentBaseOptions as InstrumentBaseOptions);\n // Add to instrument map\n this.#instruments[g] = instrument;\n })\n }\n\n #GetPayloadData(context: IContextBase, instruments: Record<string, InstrumentBase>): IInstrumentPayload {\n const payloadInstruments: Record<string, InstrumentBase> = { };\n for (const [key, value] of Object.entries(instruments)) {\n if (value instanceof InstrumentLog) {\n payloadInstruments[key] = { ...value.WithUseLatestMessages(true) } as InstrumentLog;\n } else {\n payloadInstruments[key] = { ...value } as InstrumentBase;\n }\n }\n\n return {\n context,\n instruments: payloadInstruments\n } as IInstrumentPayload;\n }\n\t\n async Publish(): Promise<boolean> {\n if (this.#inPublish) {\n return false;\n }\n\n try {\n this.#inPublish = true;\n if (Object.keys(this.#instruments).length > 0) {\n const instrumentPayload: IInstrumentPayload = this.#GetPayloadData(this.options.processContext, this.#instruments);\n // Send this raw to STSInstrumentManager - we don't need to wait for the response ...\n return await this.options.publisherTransport.Publish(instrumentPayload);\n } else {\n return true;\n }\n } catch (error) {\n return false;\n } finally {\n this.#inPublish = false;\n }\n }\n\n #PublishTimeoutLoop(publishInterval: number) { \n this.#observer = setTimeout(async () => {\n const start = performance.now();\n await this.Publish();\n const end = performance.now();\n const diff = end - start;\n\n if (this.#publishState === ePublishState.started) {\n this.#PublishTimeoutLoop(this.options.publishInterval - (diff));\n }\n }, publishInterval);\n if (isNode) this.#observer.unref();\n }\n\n async StartPublish(): Promise<boolean> {\n if (this.#publishState !== ePublishState.init) {\n this.options.logger.debug(chalk.yellow(`StartPublish:${this.options.processContext.nid}: StartPublish called when not currently in the init state.`));\n return false;\n }\n this.#publishState = ePublishState.started;\n this.#PublishTimeoutLoop(this.options.publishInterval);\n return true;\n }\n\n async EndPublish(): Promise<boolean> {\n if (this.#publishState !== ePublishState.started) {\n this.options.logger.debug(chalk.yellow(`EndPublish:${this.options.processContext.nid}: EndPublish called when not within the started state.`));\n return false;\n }\n this.#publishState = ePublishState.stopping;\n if (this.#observer !== null) {\n clearInterval(this.#observer);\n this.#observer = null;\n // Perform a final publish/flush of any remaining instrument data (such as logs etc.)\n await this.Publish();\n }\n await this.options.publisherTransport.Close();\n this.#publishState = ePublishState.init;\n return true;\n }\n\n SetupInstrumentation() {\n if (!this.options.instrumentDefinitions) {\n this.options.logger.debug(chalk.yellow(`SetupInstrumentation:${this.options.processContext.nid}: No instrument(s) defined within supplied options.`));\n return;\n }\n if (!this.options.processContext) {\n this.options.logger.debug(chalk.yellow(`SetupInstrumentation: No context defined within supplied options.`));\n return;\n }\n this.#CreateInstruments(this.options.instrumentDefinitions);\n }\n\n /**\n * Check if an instrument exists within the managed instrument collection\n * @param instrumentName \n * @returns \n */\n InstrumentExists(instrumentName: Gauge): boolean {\n if (this.#instruments[instrumentName]) {\n return true;\n }\n return false;\n }\n\n /**\n * Update instrument telemetry.\n * @param instrumentName \n * @param telemetry \n */\n UpdateInstrument(instrumentName: Gauge, telemetry: InstrumentBaseTelemetry): void {\n if (this.#instruments[instrumentName]) {\n this.#ProcessTelemetryCommand(instrumentName, telemetry);\n } else {\n // Error state\n this.options.logger.debug(chalk.red(`UpdateInstrument:${this.options.processContext.nid}: Attempted to UpdateInstrument before initialised.`));\n }\n }\n\n /*\n #GetHttpAgentInstruments(): InstrumentDefinitions {\n if (isNode) {\n return [ ];\n } else {\n return [\n [ Gauge.REQUEST_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of requests serviced\n [ Gauge.ERROR_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],\n [ Gauge.RETRY_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],\n [ Gauge.AUTHENTICATION_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests\n [ Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests errors\n [ Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests retries\n [ Gauge.ACTIVE_REQUEST_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, { // Total number of runners (in-flight) requests\n interval: this.options.instrumentationObservationInterval, \n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n [ Gauge.DURATION_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, { // Duration of latest http(s) request.\n interval: this.options.instrumentationObservationInterval,\n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n [ Gauge.DURATION_HISTOGRAM_GAUGE, GaugeTypes.INSTRUMENT_HISTOGRAM ],\n [ Gauge.VELOCITY_GAUGE, GaugeTypes.INSTRUMENT_VELOCITY ], // Requests per second\n [ Gauge.CORE_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Thread count (for http agents)\n [ Gauge.LATENCY_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {\n interval: this.options.instrumentationObservationInterval,\n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n [ Gauge.LATENCY_HISTOGRAM_GAUGE, GaugeTypes.INSTRUMENT_HISTOGRAM ],\n [ Gauge.CHILD_COUNT, GaugeTypes.INSTRUMENT_GAUGE ], // Number of async runners idle or running\n ]\n }\n }\n */\n\n /*\n #GetHttpNodeServerInstruments(): InstrumentDefinitions {\n if (isNode) {\n if (this.options.httpServer === true) {\n return [\n [ Gauge.REQUEST_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of requests serviced\n [ Gauge.AUTHENTICATION_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests\n [ Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests errors\n [ Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests retries\n\n [ Gauge.ACTIVE_REQUEST_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {\n interval: this.options.instrumentationObservationInterval, \n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n [ Gauge.DURATION_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {\n interval: this.options.instrumentationObservationInterval,\n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n [ Gauge.DURATION_HISTOGRAM_GAUGE, GaugeTypes.INSTRUMENT_HISTOGRAM ],\n [ Gauge.CONNECTION_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, { \n interval: this.options.instrumentationObservationInterval, \n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n\t\t\n [ Gauge.CONNECTION_POOL_TOTAL_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],\n [ Gauge.CONNECTION_POOL_IDLE_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],\n [ Gauge.CONNECTION_POOL_WAITING_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],\n [ Gauge.VELOCITY_GAUGE, GaugeTypes.INSTRUMENT_VELOCITY ], // Requests per second\n [ Gauge.ERROR_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],\n [ Gauge.RETRY_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],\n [ Gauge.LATENCY_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {\n interval: this.options.instrumentationObservationInterval,\n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n [ Gauge.LATENCY_HISTOGRAM_GAUGE, GaugeTypes.INSTRUMENT_HISTOGRAM ],\n [ Gauge.CORE_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ]\n ]\n } else {\n return [ ];\n }\n } else {\n return [ ];\n }\n }\n */\n\n /*\n #GetAdditionalInstruments(): InstrumentDefinitions {\n if (this.options.instrumentDefinitions) {\n return this.options.instrumentDefinitions;\n } else {\n return [ ];\n }\n }\n */\n\n /*\n #SetupInstruments() {\n this.options.logger.debug(chalk.yellow(`#SetupInstruments:${this.options.processContext.nid}: Started`));\n\n const standardInstruments: InstrumentDefinitions = [\n [ Gauge.TIMER_GAUGE, GaugeTypes.INSTRUMENT_TIMER ],\n [ Gauge.LOGGER, GaugeTypes.INSTRUMENT_LOG, {\n consoleLogging: this.options.consoleLogging,\n instrumentLogging: this.options.instrumentLogging } as InstrumentLogOptions],\n [ Gauge.NETWORK_RX_GAUGE , GaugeTypes.INSTRUMENT_VELOCITY ],\n [ Gauge.NETWORK_TX_GAUGE, GaugeTypes.INSTRUMENT_VELOCITY ]\n ];\n\n let nodeStandardInstruments: InstrumentDefinitions = [ ];\n if (isNode) {\n nodeStandardInstruments = [\n [ Gauge.CPU_LOAD_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {\n interval: this.options.instrumentationObservationInterval, \n sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],\n [ Gauge.OBJECT_GAUGE, GaugeTypes.INSTRUMENT_OBJECT, {\n label:'InstrumentObjectMaster' } as InstrumentObjectOptions]\n ];\n }\n\n const instruments: InstrumentDefinitions = [\n ...standardInstruments,\n ...nodeStandardInstruments,\n ...this.#GetHttpAgentInstruments(),\n ...this.#GetHttpNodeServerInstruments(),\n ...this.#GetAdditionalInstruments()\n ]\n\n this.options.logger.debug(chalk.green(`#SetupInstruments:${this.options.processContext.nid}: Completed`));\n }\n */\n}\n","// Individual STS plugin keys for provide/inject logic\nexport const STSInstrumentControllerPluginKey = Symbol()\n","import chalk from 'chalk';\n\nimport { inject } from 'vue'\n\nimport { PublishInstrumentController } from './publishInstrumentController'\n\nimport { STSInstrumentControllerPluginKey } from './stsPluginKeys';\n\nimport { IContextBase, IPublishInstrumentControllerOptions } from './commonTypes'\n\nexport class AgentInstrumentController extends PublishInstrumentController {\n /**\n\t * Create the primary instrument publisher\n\t * @param options\n\t */\n constructor(options: IPublishInstrumentControllerOptions) {\n super(options);\n }\n\n /**\n\t * Add additional instrument publishers. Usually invoked when adding workers to the app and/or async runners within a worker.\n\t * @param processContext \n\t * @returns Returns the newly created PublishInstrumentController\n\t */\n AddPublishInstrumentController(processContext: IContextBase): PublishInstrumentController {\n const options: IPublishInstrumentControllerOptions = { ...this.options };\n options.processContext = processContext;\n return new PublishInstrumentController(options);\n }\n}\n\nexport const GetSTSInstrumentControllerPluginKey = (): symbol => STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKey = (val: symbol): boolean => val === STSInstrumentControllerPluginKey\n\n// Create our use composable. This pattern is also used by vue router library with the useRoute and useRouter composables.\n// https://skirtles-code.github.io/vue-examples/patterns/global-properties.html#application-level-provide-inject\nexport const useSTSInstrumentControllerPlugin = (): AgentInstrumentController => inject(STSInstrumentControllerPluginKey) as AgentInstrumentController\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const GetSTSInstrumentController = (app: any): AgentInstrumentController => {\n return app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]\n}\n\nexport const STSInstrumentControllerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any \n install: (app: any, options: IPublishInstrumentControllerOptions) => {\n options.logger.debug(chalk.yellow(`STSInstrumentControllerPlugin:install:Start`));\n const aic = new AgentInstrumentController(options);\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: [app.config.globalProperties.$sts] does not exist.`));\n app.config.globalProperties.$sts = { };\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: created empty [app.config.globalProperties.$sts].`));\n } else {\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: [app.config.globalProperties.$sts] already exists.`));\n }\n app.config.globalProperties.$sts.aic = aic; //@@ for legacy implementation in oauthplugin - remove once PublishInstrumentControllerOptions is a seperate plugin\n app.config.globalProperties.$sts[STSInstrumentControllerPluginKey] = aic;\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: AgentInstrumentController installed into [app.config.globalProperties.$sts] using: [${String(STSInstrumentControllerPluginKey)}].`));\n\n //@@ ???\n //const zzz = GetSTSInstrumentController(app);\n //debug(zzz);\n\n // Assign App level provide for this STS plugin using symbol keys\n // https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys\n app.provide(STSInstrumentControllerPluginKey, aic);\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: AgentInstrumentController installed into 'provide' using: [${String(STSInstrumentControllerPluginKey)}].`));\n\n options.logger.debug(chalk.green(`STSInstrumentControllerPlugin:install:End`));\n }\n}\n","export function utf8Count(str) {\n var strLength = str.length;\n var byteLength = 0;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n }\n else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\nexport function utf8EncodeJs(str, output, outputOffset) {\n var strLength = str.length;\n var offset = outputOffset;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n// TextEncoder and TextDecoder are standardized in whatwg encoding:\n// https://encoding.spec.whatwg.org/\n// and available in all the modern browsers:\n// https://caniuse.com/textencoder\n// They are available in Node.js since v12 LTS as well:\n// https://nodejs.org/api/globals.html#textencoder\nvar sharedTextEncoder = new TextEncoder();\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/encode-string.ts` for details.\nvar TEXT_ENCODER_THRESHOLD = 50;\nexport function utf8EncodeTE(str, output, outputOffset) {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\nexport function utf8Encode(str, output, outputOffset) {\n if (str.length > TEXT_ENCODER_THRESHOLD) {\n utf8EncodeTE(str, output, outputOffset);\n }\n else {\n utf8EncodeJs(str, output, outputOffset);\n }\n}\nvar CHUNK_SIZE = 4096;\nexport function utf8DecodeJs(bytes, inputOffset, byteLength) {\n var offset = inputOffset;\n var end = offset + byteLength;\n var units = [];\n var result = \"\";\n while (offset < end) {\n var byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n }\n else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n var byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n }\n else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n }\n else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n var byte4 = bytes[offset++] & 0x3f;\n var unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n }\n else {\n units.push(byte1);\n }\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode.apply(String, units);\n units.length = 0;\n }\n }\n if (units.length > 0) {\n result += String.fromCharCode.apply(String, units);\n }\n return result;\n}\nvar sharedTextDecoder = new TextDecoder();\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/decode-string.ts` for details.\nvar TEXT_DECODER_THRESHOLD = 200;\nexport function utf8DecodeTD(bytes, inputOffset, byteLength) {\n var stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\nexport function utf8Decode(bytes, inputOffset, byteLength) {\n if (byteLength > TEXT_DECODER_THRESHOLD) {\n return utf8DecodeTD(bytes, inputOffset, byteLength);\n }\n else {\n return utf8DecodeJs(bytes, inputOffset, byteLength);\n }\n}\n//# sourceMappingURL=utf8.mjs.map","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nvar ExtData = /** @class */ (function () {\n function ExtData(type, data) {\n this.type = type;\n this.data = data;\n }\n return ExtData;\n}());\nexport { ExtData };\n//# sourceMappingURL=ExtData.mjs.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar DecodeError = /** @class */ (function (_super) {\n __extends(DecodeError, _super);\n function DecodeError(message) {\n var _this = _super.call(this, message) || this;\n // fix the prototype chain in a cross-platform way\n var proto = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(_this, proto);\n Object.defineProperty(_this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n return _this;\n }\n return DecodeError;\n}(Error));\nexport { DecodeError };\n//# sourceMappingURL=DecodeError.mjs.map","// Integer Utility\nexport var UINT32_MAX = 4294967295;\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\nexport function setUint64(view, offset, value) {\n var high = value / 4294967296;\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function setInt64(view, offset, value) {\n var high = Math.floor(value / 4294967296);\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function getInt64(view, offset) {\n var high = view.getInt32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\nexport function getUint64(view, offset) {\n var high = view.getUint32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\n//# sourceMappingURL=int.mjs.map","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.mjs\";\nimport { getInt64, setInt64 } from \"./utils/int.mjs\";\nexport var EXT_TIMESTAMP = -1;\nvar TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nvar TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\nexport function encodeTimeSpecToTimestamp(_a) {\n var sec = _a.sec, nsec = _a.nsec;\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n var rv = new Uint8Array(4);\n var view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n }\n else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n var secHigh = sec / 0x100000000;\n var secLow = sec & 0xffffffff;\n var rv = new Uint8Array(8);\n var view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n }\n else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var rv = new Uint8Array(12);\n var view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\nexport function encodeDateToTimeSpec(date) {\n var msec = date.getTime();\n var sec = Math.floor(msec / 1e3);\n var nsec = (msec - sec * 1e3) * 1e6;\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n var nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\nexport function encodeTimestampExtension(object) {\n if (object instanceof Date) {\n var timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n }\n else {\n return null;\n }\n}\nexport function decodeTimestampToTimeSpec(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n var sec = view.getUint32(0);\n var nsec = 0;\n return { sec: sec, nsec: nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n var nsec30AndSecHigh2 = view.getUint32(0);\n var secLow32 = view.getUint32(4);\n var sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n var nsec = nsec30AndSecHigh2 >>> 2;\n return { sec: sec, nsec: nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var sec = getInt64(view, 4);\n var nsec = view.getUint32(0);\n return { sec: sec, nsec: nsec };\n }\n default:\n throw new DecodeError(\"Unrecognized data size for timestamp (expected 4, 8, or 12): \".concat(data.length));\n }\n}\nexport function decodeTimestampExtension(data) {\n var timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\nexport var timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n//# sourceMappingURL=timestamp.mjs.map","// ExtensionCodec to handle MessagePack extensions\nimport { ExtData } from \"./ExtData.mjs\";\nimport { timestampExtension } from \"./timestamp.mjs\";\nexport var ExtensionCodec = /** @class */ (function () {\n function ExtensionCodec() {\n // built-in extensions\n this.builtInEncoders = [];\n this.builtInDecoders = [];\n // custom extensions\n this.encoders = [];\n this.decoders = [];\n this.register(timestampExtension);\n }\n ExtensionCodec.prototype.register = function (_a) {\n var type = _a.type, encode = _a.encode, decode = _a.decode;\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n }\n else {\n // built-in extensions\n var index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n };\n ExtensionCodec.prototype.tryToEncode = function (object, context) {\n // built-in extensions\n for (var i = 0; i < this.builtInEncoders.length; i++) {\n var encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n // custom extensions\n for (var i = 0; i < this.encoders.length; i++) {\n var encodeExt = this.encoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = i;\n return new ExtData(type, data);\n }\n }\n }\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n };\n ExtensionCodec.prototype.decode = function (data, type, context) {\n var decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n }\n else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n };\n ExtensionCodec.defaultCodec = new ExtensionCodec();\n return ExtensionCodec;\n}());\n//# sourceMappingURL=ExtensionCodec.mjs.map","export function ensureUint8Array(buffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n }\n else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n }\n else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\nexport function createDataView(buffer) {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n var bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n//# sourceMappingURL=typedArrays.mjs.map","import { utf8Count, utf8Encode } from \"./utils/utf8.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { setInt64, setUint64 } from \"./utils/int.mjs\";\nimport { ensureUint8Array } from \"./utils/typedArrays.mjs\";\nexport var DEFAULT_MAX_DEPTH = 100;\nexport var DEFAULT_INITIAL_BUFFER_SIZE = 2048;\nvar Encoder = /** @class */ (function () {\n function Encoder(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n this.extensionCodec = (_a = options === null || options === void 0 ? void 0 : options.extensionCodec) !== null && _a !== void 0 ? _a : ExtensionCodec.defaultCodec;\n this.context = options === null || options === void 0 ? void 0 : options.context; // needs a type assertion because EncoderOptions has no context property when ContextType is undefined\n this.useBigInt64 = (_b = options === null || options === void 0 ? void 0 : options.useBigInt64) !== null && _b !== void 0 ? _b : false;\n this.maxDepth = (_c = options === null || options === void 0 ? void 0 : options.maxDepth) !== null && _c !== void 0 ? _c : DEFAULT_MAX_DEPTH;\n this.initialBufferSize = (_d = options === null || options === void 0 ? void 0 : options.initialBufferSize) !== null && _d !== void 0 ? _d : DEFAULT_INITIAL_BUFFER_SIZE;\n this.sortKeys = (_e = options === null || options === void 0 ? void 0 : options.sortKeys) !== null && _e !== void 0 ? _e : false;\n this.forceFloat32 = (_f = options === null || options === void 0 ? void 0 : options.forceFloat32) !== null && _f !== void 0 ? _f : false;\n this.ignoreUndefined = (_g = options === null || options === void 0 ? void 0 : options.ignoreUndefined) !== null && _g !== void 0 ? _g : false;\n this.forceIntegerToFloat = (_h = options === null || options === void 0 ? void 0 : options.forceIntegerToFloat) !== null && _h !== void 0 ? _h : false;\n this.pos = 0;\n this.view = new DataView(new ArrayBuffer(this.initialBufferSize));\n this.bytes = new Uint8Array(this.view.buffer);\n }\n Encoder.prototype.reinitializeState = function () {\n this.pos = 0;\n };\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n Encoder.prototype.encodeSharedRef = function (object) {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n };\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n Encoder.prototype.encode = function (object) {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n };\n Encoder.prototype.doEncode = function (object, depth) {\n if (depth > this.maxDepth) {\n throw new Error(\"Too deep objects in depth \".concat(depth));\n }\n if (object == null) {\n this.encodeNil();\n }\n else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n }\n else if (typeof object === \"number\") {\n if (!this.forceIntegerToFloat) {\n this.encodeNumber(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n else if (typeof object === \"string\") {\n this.encodeString(object);\n }\n else if (this.useBigInt64 && typeof object === \"bigint\") {\n this.encodeBigInt64(object);\n }\n else {\n this.encodeObject(object, depth);\n }\n };\n Encoder.prototype.ensureBufferSizeToWrite = function (sizeToWrite) {\n var requiredSize = this.pos + sizeToWrite;\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n };\n Encoder.prototype.resizeBuffer = function (newSize) {\n var newBuffer = new ArrayBuffer(newSize);\n var newBytes = new Uint8Array(newBuffer);\n var newView = new DataView(newBuffer);\n newBytes.set(this.bytes);\n this.view = newView;\n this.bytes = newBytes;\n };\n Encoder.prototype.encodeNil = function () {\n this.writeU8(0xc0);\n };\n Encoder.prototype.encodeBoolean = function (object) {\n if (object === false) {\n this.writeU8(0xc2);\n }\n else {\n this.writeU8(0xc3);\n }\n };\n Encoder.prototype.encodeNumber = function (object) {\n if (!this.forceIntegerToFloat && Number.isSafeInteger(object)) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n }\n else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n }\n else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n }\n else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n }\n else if (!this.useBigInt64) {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n }\n else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n }\n else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n }\n else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n }\n else if (!this.useBigInt64) {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n };\n Encoder.prototype.encodeNumberAsFloat = function (object) {\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n }\n else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n };\n Encoder.prototype.encodeBigInt64 = function (object) {\n if (object >= BigInt(0)) {\n // uint 64\n this.writeU8(0xcf);\n this.writeBigUint64(object);\n }\n else {\n // int 64\n this.writeU8(0xd3);\n this.writeBigInt64(object);\n }\n };\n Encoder.prototype.writeStringHeader = function (byteLength) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n }\n else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n }\n else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n }\n else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n }\n else {\n throw new Error(\"Too long string: \".concat(byteLength, \" bytes in UTF-8\"));\n }\n };\n Encoder.prototype.encodeString = function (object) {\n var maxHeaderSize = 1 + 4;\n var byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8Encode(object, this.bytes, this.pos);\n this.pos += byteLength;\n };\n Encoder.prototype.encodeObject = function (object, depth) {\n // try to encode objects with custom codec first of non-primitives\n var ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n }\n else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n }\n else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n }\n else if (typeof object === \"object\") {\n this.encodeMap(object, depth);\n }\n else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(\"Unrecognized object: \".concat(Object.prototype.toString.apply(object)));\n }\n };\n Encoder.prototype.encodeBinary = function (object) {\n var size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large binary: \".concat(size));\n }\n var bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n };\n Encoder.prototype.encodeArray = function (object, depth) {\n var size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n }\n else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large array: \".concat(size));\n }\n for (var _i = 0, object_1 = object; _i < object_1.length; _i++) {\n var item = object_1[_i];\n this.doEncode(item, depth + 1);\n }\n };\n Encoder.prototype.countWithoutUndefined = function (object, keys) {\n var count = 0;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (object[key] !== undefined) {\n count++;\n }\n }\n return count;\n };\n Encoder.prototype.encodeMap = function (object, depth) {\n var keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n var size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n }\n else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large map object: \".concat(size));\n }\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var value = object[key];\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n };\n Encoder.prototype.encodeExtension = function (ext) {\n var size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n }\n else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n }\n else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n }\n else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n }\n else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n }\n else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large extension object: \".concat(size));\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n };\n Encoder.prototype.writeU8 = function (value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setUint8(this.pos, value);\n this.pos++;\n };\n Encoder.prototype.writeU8a = function (values) {\n var size = values.length;\n this.ensureBufferSizeToWrite(size);\n this.bytes.set(values, this.pos);\n this.pos += size;\n };\n Encoder.prototype.writeI8 = function (value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setInt8(this.pos, value);\n this.pos++;\n };\n Encoder.prototype.writeU16 = function (value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n };\n Encoder.prototype.writeI16 = function (value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n };\n Encoder.prototype.writeU32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeI32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeF32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeF64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeU64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeI64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeBigUint64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setBigUint64(this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeBigInt64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setBigInt64(this.pos, value);\n this.pos += 8;\n };\n return Encoder;\n}());\nexport { Encoder };\n//# sourceMappingURL=Encoder.mjs.map","import { Encoder } from \"./Encoder.mjs\";\n/**\n * @deprecated No longer supported.\n */\nexport var defaultEncodeOptions = undefined;\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode(value, options) {\n var encoder = new Encoder(options);\n return encoder.encodeSharedRef(value);\n}\n//# sourceMappingURL=encode.mjs.map","import chalk from 'chalk';\n\nimport isNode from 'detect-node';\nimport https from 'node:https'\n\nimport axios from 'axios'\n\nimport { IPublishTransportRESTServerOptions, IInstrumentPayload, IPublisherTransport } from './../commonTypes'\n\nimport { STSOptionsBase } from '@nsshunt/stsutils'\n\nimport { encode } from \"@msgpack/msgpack\";\n\nexport class PublishTransportRESTServer extends STSOptionsBase implements IPublisherTransport\n{\n #httpsAgent?: https.Agent;\n\n constructor(options: IPublishTransportRESTServerOptions)\n {\n super(options);\n\n // https://nodejs.org/api/http.html#class-httpagent\n if (isNode) {\n const agentOptions = this.options.agentOptions;\n this.#httpsAgent = new https.Agent({ \n keepAlive: agentOptions?.keepAlive,\n maxSockets: agentOptions?.maxSockets,\n maxTotalSockets: agentOptions?.maxTotalSockets,\n maxFreeSockets: agentOptions?.maxFreeSockets,\n timeout: agentOptions?.timeout,\n rejectUnauthorized: agentOptions?.rejectUnauthorized // Allows self signed certs in non production mode(s)\n });\n }\n\n //@@ Add the V3 for this service\n options.url += 'V3'\n }\n\n override get options(): IPublishTransportRESTServerOptions {\n return super.options as IPublishTransportRESTServerOptions;\n }\n\n // Returns true for success or false for failure.\n Publish = async (payload: IInstrumentPayload): Promise<boolean> => {\n try {\n const encodedData: Uint8Array = encode(payload, { ignoreUndefined: true});\n //const buffer: Buffer = Buffer.from(encodedData); // copies the data\n //const buffer2: Buffer = Buffer.from(encodedData.buffer, encodedData.byteOffset, encodedData.byteLength); // does not copy the data\n //const headers = { 'Content-Type': 'application/octet-stream', 'Content-Length': encodedData.length };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const headers: any = { 'Content-Type': 'application/octet-stream' };\n //const headers = { 'Content-Type': 'application/json' };\n let retVal = null;\n //const processStart = performance.now();\n if (this.options.socketPath) {\n retVal = await axios({\n method: 'post',\n //data: payload,\n data: Buffer.from(encodedData),\n headers: headers,\n httpsAgent: this.#httpsAgent,\n socketPath: this.options.socketPath\n });\n } else {\n if (isNode) {\n retVal = await axios({\n //url: `${goptions.imendpoint}:${goptions.import}${goptions.imapiroot}/publishmessage`,\n url: this.options.url,\n method: 'post',\n data: Buffer.from(encodedData), // payload,\n headers: headers,\n httpsAgent: this.#httpsAgent\n });\n } else {\n const blob = new Blob([encodedData], { type: 'application/octet-stream' });\n retVal = await axios({\n //url: `${goptions.imendpoint}:${goptions.import}${goptions.imapiroot}/publishmessage`,\n url: this.options.url,\n method: 'post',\n data: blob, //payload,\n headers: headers\n });\n }\n }\n\n if (retVal.status !== 200) {\n this.options.logger.debug(chalk.red(`Error (_PerformPublishRESTAPI:_PerformPublish:#publishmessage): Invalid response from server: [${retVal.status}]`));\n return false;\n } else {\n this.options.logger.debug(chalk.green(`_PerformPublishRESTAPI:_PerformPublish:#publishmessage: [${this.options.url}] - Valid response from server: [${retVal.status}]`));\n }\n\n return true;\n } catch (error) {\n this.options.logger.error(chalk.red(`Error (PublishRESTServer:_PerformPublishRESTAPI:Error: [${error}]`));\n return false;\n }\n }\n\n async Close(): Promise<boolean> {\n if (this.#httpsAgent) {\n this.#httpsAgent.destroy();\n }\n return true;\n }\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { ISTSLogger } from '@nsshunt/stsutils';\nimport { type STSDefaultServerToClientEvents, type STSDefaultClientToServerEvents } from './../socketioutils/socketIoClientHelper'\nimport { Socket } from 'socket.io-client'\n\nexport interface ClientToServerEvents extends STSDefaultClientToServerEvents {\n subscribe: (data: any) => void;\n unsubscribe: (data: any) => void;\n subscribeKeepAlive: (data: ISubscriptionKey) => void;\n}\n\nexport interface ServerToClientEvents extends STSDefaultServerToClientEvents {\n subscribeAck: (data: any) => void;\n unsubscribeAck: (data: any) => void;\n subscribeKeepAliveAck: (data: ISubscriptionKey) => void;\n}\n\nexport enum SubscriptionTopic {\n // Services topics\n AllServicesCombined = 'AllServicesCombined',\n Services = 'Services',\n ServiceInstances = 'ServiceInstances',\n ServiceInstance = 'ServiceInstance',\n\n // User Agents topics\n AllAgentsCombined = 'AllAgentsCombined',\n Agents = 'Agents',\n AgentWorkers = 'AgentWorkers',\n AgentWorker = 'AgentWorker',\n\n // Lambda topics\n AllLambdasCombined = \"AllLambdasCombined\",\n LambdaTechnologies = \"LambdaTechnologies\", // e.g. aws was lambdas\n LambdaSubTechnologies = \"LambdaSubTechnologies\", // e.g. aws_s3, aws_sqs, aws_sns was LambdaInstances\n LambdaSubTechnologiesInstance = \"LambdaSubTechnologiesInstance\", // (uuidv4()) was ServiceInstance\n\n // Logging (both service and agent)\n LogProcessing = 'LogProcessing'\n}\n\nexport interface ISubscriptionKey {\n id: string // uuid - unique ID for this subscription\n topic: SubscriptionTopic\n key?: string\n subkey?: string\n}\n\nexport interface IKafkaData {\n kafkaTopic: string\n kafkaGroupId: string\n partition: number,\n topic: string\n key: string\n value: string\n}\n\nexport interface ISubscription {\n subscriptionKey: ISubscriptionKey\n cb: (payload: ISubscriptionPayload) => void\n}\n\nexport type ISubscriptions = ISubscription[]\n\nexport type quantile = Record<string, number>;\nexport type histo = Record<string, number>;\n\nexport interface ICommonInstanceTelemetry {\n activeRequestCount: number\n authenticationCount: number\n coreCount: number\n duration: number\n errorCount: number\n latency: number\n requestCount: number\n retryCount: number\n timer: number\n velocity: number\n duration_quantile: quantile\n duration_histo: histo\n latency_quantile: quantile\n latency_histo: histo\n}\n\nexport interface IServiceInstanceTelemetry extends ICommonInstanceTelemetry {\n connectionCount: number\n connectionIdleCount: number\n connectionPoolCount: number\n connectionWaitingCount: number\n cpu: number\n cpu_quantile: quantile\n systemcpu: number\n systemcpu_quantile: quantile\n memory: string\n rx: number\n tx: number\n}\n\nexport interface ILambdaInstanceTelemetry extends ICommonInstanceTelemetry {\n connectionCount: number\n connectionIdleCount: number\n connectionPoolCount: number\n connectionWaitingCount: number\n cpu: number\n cpu_quantile: quantile\n systemcpu: number\n systemcpu_quantile: quantile\n memory: string\n rx: number\n tx: number\n}\n\nexport interface IAgentInstanceTelemetry extends ICommonInstanceTelemetry {\n childCount: number\n}\n\n// /serviceId\nexport interface IServices {\n [serviceId: string]: IServiceInstanceTelemetry\n}\n\n// /serviceId/serviceInstanceId\nexport interface IServiceInstances {\n [serviceId: string]: {\n [serviceInstanceId: string]: IServiceInstanceTelemetry\n }\n}\n\n// /serviceId/serviceInstanceId/threadId\nexport interface IServiceInstancesThreads {\n [serviceId: string]: {\n [serviceInstanceId: string]: {\n [threadId: string]: IServiceInstanceTelemetry\n }\n }\n}\n\n// /lambdaTechnoplogyId\nexport interface ILambdaTechnologies {\n [lambdaTechnoplogyId: string]: ILambdaInstanceTelemetry\n}\n\n// /lambdaTechnoplogyId/lambdaSubTechnoplogyId\nexport interface ILambdaSubTechnologies {\n [lambdaTechnoplogyId: string]: {\n [lambdaSubTechnoplogyId: string]: IServiceInstanceTelemetry\n }\n}\n\n// /lambdaTechnoplogyId/lambdaSubTechnoplogyId/lambdaSubTechnoplogyInstanceId\nexport interface ILambdaSubTechnologiesInstance {\n [lambdaTechnoplogyId: string]: {\n [lambdaSubTechnoplogyId: string]: {\n [lambdaSubTechnoplogyInstanceId: string]: IServiceInstanceTelemetry\n }\n }\n}\n\n// /agentId\nexport interface IAgents {\n [agentId: string]: IAgentInstanceTelemetry\n}\n\n// /agentId/agentWorkerId\nexport interface IAgentWorkers {\n [agentId: string]: {\n [agentWorkerId: string]: IAgentInstanceTelemetry\n }\n}\n\n// /agentId/agentWorkerId/asyncRunnerId\nexport interface IAgentWorkerRunners {\n [agentId: string]: {\n [agentWorkerId: string]: {\n [asyncRunnerId: string]: IAgentInstanceTelemetry\n }\n }\n}\n\nexport interface ISubscriptionPayload {\n subscriptionKey: ISubscriptionKey\n data: IKafkaData \n // Agent processing\n | IAgentInstanceTelemetry | IAgents | IAgentWorkers | IAgentWorkerRunners\n // Service processing\n | IServiceInstanceTelemetry | IServices | IServiceInstances | IServiceInstancesThreads \n // Lambda processing\n | IServiceInstanceTelemetry | ILambdaTechnologies | ILambdaSubTechnologies | ILambdaSubTechnologiesInstance\n | null\n}\n\n// Event key passed back from socket.io - stsinstrumentmanager\nexport const GetSocketIOSubscriptionKey = (subscriptionKey: ISubscriptionKey): string => {\n return `SubscriptionData_${subscriptionKey.id}`;\n}\n\nexport interface IObservabilitySocketIOSubscriberOptions {\n socket?: Socket<STSDefaultServerToClientEvents, ClientToServerEvents>;\n keepAlive: number; // keep alive ping interval (ms)\n agent?: any\n urlBase?: string\n logger: ISTSLogger\n}\n\nexport interface IObservabilitySocketIOSubscriber {\n SubscribeOne(subscription: ISubscription): void\n Subscribe(subscriptions: ISubscriptions): void\n UnSubscribeOne(subscription: ISubscription): void\n UnSubscribe(subscriptions: ISubscriptions): void\n}\n\nexport const KAFKA_PREFIX: string = '__STS__'; //@@ move to sock.io\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { HistogramDataElement, QuantileDataElement } from '@nsshunt/stsinstrumentation'\nimport { Gauge } from '@nsshunt/stsinstrumentation'\nimport { quantile, histo, IServiceInstanceTelemetry, IAgentInstanceTelemetry, ILambdaInstanceTelemetry } from './commonTypes'\n\n//import _cloneDeep from 'lodash.clonedeep'\nimport { ISTSLogger, JSONObject } from '@nsshunt/stsutils'\n\nexport interface IModelNode {\n val: number\n vf: string\n value: string\n}\n\nexport interface IModelNodeRawStringArray {\n val: string[]\n}\n\nexport interface IModelNodeJSONFromObject {\n val: any\n}\n\nexport interface IModelNodeQuantile {\n val: number\n vf: string\n value: string\n percentile: QuantileDataElement[]\n percentileFormatted: string\n}\n\nexport interface IModelNodeHist {\n hist: HistogramDataElement[]\n}\n\nexport interface IModelNodes {\n id: string\n instruments: Record<string, IModelNode | IModelNodeRawStringArray | IModelNodeJSONFromObject | IModelNodeQuantile | IModelNodeHist>\n canNavigate?: boolean\n options?: JSONObject\n}\n\nexport class ObservabilityModelUtils {\n static GetModelNode(data: number): IModelNode {\n const fixedSize = 2;\n const padLength = 9;\n try {\n return {\n val: data,\n vf: parseFloat(data.toString()).toFixed(fixedSize).padStart(padLength, ' '),\n value: parseFloat(data.toString()).toFixed(fixedSize)\n }\n } catch (error) {\n return {\n val: 0,\n vf: \"\",\n value: \"\"\n }\n }\n }\n\n static GetModelNodeRawStringArray(data: string[]): IModelNodeRawStringArray {\n try {\n return {\n val: data\n }\n } catch (error) {\n return {\n val: []\n }\n }\n }\n\n static GetModelNodeObject(data: any): IModelNodeJSONFromObject {\n try {\n return {\n val: JSON.parse(data)\n }\n } catch (error) {\n return {\n val: null\n }\n }\n }\n\n static GetModelNodeWithQuantile(data: number, quantileData: quantile): IModelNodeQuantile {\n let quantile: string = '';\n const quantileDataElementArray: QuantileDataElement[] = [ ];\n for (const [key, val] of Object.entries(quantileData)) {\n quantile += parseFloat((val as number).toFixed(2)).toString().padStart(8, ' ');\n quantileDataElementArray.push([\n key,\n val\n ])\n }\n\n const fixedSize = 2;\n const padLength = 9;\n try {\n return {\n val: data,\n vf: parseFloat(data.toString()).toFixed(fixedSize).padStart(padLength, ' '),\n value: parseFloat(data.toString()).toFixed(fixedSize),\n percentile: quantileDataElementArray,\n percentileFormatted: quantile\n }\n } catch (error) {\n return {\n val: 0,\n vf: '',\n value: '',\n percentile: [],\n percentileFormatted: ''\n }\n }\n }\n\n static GetModelNodeHistFromInfluxData(data: histo): IModelNodeHist {\n try {\n const histVal: HistogramDataElement[] = [ ];\n if (data) {\n for (const [key, val] of Object.entries(data)) {\n const dataElement: HistogramDataElement = [\n val as number,\n key,\n parseInt(key)\n ]\n histVal.push(dataElement)\n }\n }\n try {\n return {\n hist: histVal,\n }\n } catch (error) {\n return {\n hist: []\n }\n }\n } catch (error) {\n //console.log(chalk.red(`GetModelNodeHistFromInfluxData: Error [${error}]`));\n return {\n hist: []\n }\n }\n }\n\n static ParseModelNode = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNode((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNode(): Field not present: [${fieldName}], default to [0]`)\n model.instruments[gaugeName] = this.GetModelNode(0);\n }\n }\n\n static ParseModelNodeWithQuantile = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string, quantileFieldName: string) => {\n if (fieldName in data && quantileFieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile((data as any)[fieldName], (data as any)[quantileFieldName]);\n } else if (fieldName in data) {\n const dataVal = (data as any)[fieldName];\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeWithQuantile(): QuantileFieldName not present: [${quantileFieldName}], default to [${dataVal},{}]`)\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile(dataVal, {});\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeWithQuantile(): Field not present: [${fieldName}], QuantileFieldName not present: [${quantileFieldName}], default to [0,{}]`)\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile(0, {});\n }\n }\n\n static ParseModelNodeHisto = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeHistFromInfluxData((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeHisto(): Field not present: [${fieldName}], default to [{}]`)\n model.instruments[gaugeName] = this.GetModelNodeHistFromInfluxData({});\n }\n }\n\n static ParseModelNodeObject = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeObject((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeObject(): Field not present: [${fieldName}], default to [{}]`)\n model.instruments[gaugeName] = this.GetModelNodeObject({});\n }\n }\n\n\n static GetModelForService(id: string, data: IServiceInstanceTelemetry, subscribeToKafka: boolean, logger: ISTSLogger): IModelNodes | null {\n try {\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.REQUEST_COUNT_GAUGE, 'requestCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.ERROR_COUNT_GAUGE, 'errorCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.RETRY_COUNT_GAUGE, 'retryCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_COUNT_GAUGE, 'authenticationCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, 'authenticationErrorCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, 'authenticationRetryCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.VELOCITY_GAUGE, 'velocity');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.ACTIVE_REQUEST_GAUGE, 'activeRequestCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_COUNT_GAUGE, 'connectionCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_POOL_TOTAL_GAUGE, 'connectionPoolCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_POOL_IDLE_GAUGE, 'connectionIdleCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_POOL_WAITING_GAUGE, 'connectionWaitingCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CORE_COUNT_GAUGE, 'coreCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.TIMER_GAUGE, 'timer');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.NETWORK_RX_GAUGE, 'rx');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.NETWORK_TX_GAUGE, 'tx');\n\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.CPU_LOAD_GAUGE, 'cpu', 'cpu_quantile');\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.CPU_SYSTEM_LOAD_GAUGE, 'systemcpu', 'systemcpu_quantile');\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.DURATION_GAUGE, 'duration', 'duration_quantile');\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.LATENCY_GAUGE, 'latency', 'latency_quantile');\n\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, Gauge.DURATION_HISTOGRAM_GAUGE, 'duration_histo');\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, Gauge.LATENCY_HISTOGRAM_GAUGE, 'latency_histo');\n\n ObservabilityModelUtils.ParseModelNodeObject(model, data, parseLog, Gauge.OBJECT_GAUGE, 'memory');\n\n if (!subscribeToKafka) {\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n }\n\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n\n return model;\n } catch (error) {\n return null;\n }\n }\n\n static GetModelForLambda(id: string, data: ILambdaInstanceTelemetry, subscribeToKafka: boolean, logger: ISTSLogger): IModelNodes | null {\n try {\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.REQUEST_COUNT_GAUGE, 'requestCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.ERROR_COUNT_GAUGE, 'errorCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.RETRY_COUNT_GAUGE, 'retryCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_COUNT_GAUGE, 'authenticationCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, 'authenticationErrorCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, 'authenticationRetryCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.VELOCITY_GAUGE, 'velocity');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.ACTIVE_REQUEST_GAUGE, 'activeRequestCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_COUNT_GAUGE, 'connectionCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_POOL_TOTAL_GAUGE, 'connectionPoolCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_POOL_IDLE_GAUGE, 'connectionIdleCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CONNECTION_POOL_WAITING_GAUGE, 'connectionWaitingCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CORE_COUNT_GAUGE, 'coreCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.TIMER_GAUGE, 'timer');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.NETWORK_RX_GAUGE, 'rx');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.NETWORK_TX_GAUGE, 'tx');\n\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.CPU_LOAD_GAUGE, 'cpu', 'cpu_quantile');\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.CPU_SYSTEM_LOAD_GAUGE, 'systemcpu', 'systemcpu_quantile');\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.DURATION_GAUGE, 'duration', 'duration_quantile');\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.LATENCY_GAUGE, 'latency', 'latency_quantile');\n\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, Gauge.DURATION_HISTOGRAM_GAUGE, 'duration_histo');\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, Gauge.LATENCY_HISTOGRAM_GAUGE, 'latency_histo');\n\n ObservabilityModelUtils.ParseModelNodeObject(model, data, parseLog, Gauge.OBJECT_GAUGE, 'memory');\n\n if (!subscribeToKafka) {\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n }\n\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n\n return model;\n } catch (error) {\n return null;\n }\n }\n\n static GetModelForAgent(id: string, data: IAgentInstanceTelemetry, subscribeToKafka: boolean, logger: ISTSLogger): IModelNodes | null {\n try {\n if (Object.keys(data).length === 0) {\n return null;\n }\n\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.REQUEST_COUNT_GAUGE, 'requestCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.ERROR_COUNT_GAUGE, 'errorCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.RETRY_COUNT_GAUGE, 'retryCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_COUNT_GAUGE, 'authenticationCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, 'authenticationErrorCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, 'authenticationRetryCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.VELOCITY_GAUGE, 'velocity');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.CORE_COUNT_GAUGE, 'coreCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.TIMER_GAUGE, 'timer');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.ACTIVE_REQUEST_GAUGE, 'activeRequestCount');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.NETWORK_RX_GAUGE, 'rx');\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, Gauge.NETWORK_TX_GAUGE, 'tx');\n\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.DURATION_GAUGE, 'duration', 'duration_quantile');\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, Gauge.LATENCY_GAUGE, 'latency', 'latency_quantile');\n\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, Gauge.DURATION_HISTOGRAM_GAUGE, 'duration_histo');\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, Gauge.LATENCY_HISTOGRAM_GAUGE, 'latency_histo');\n\n if (!subscribeToKafka) {\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n }\n\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n\n return model;\n } catch (error) {\n return null;\n }\n }\n}\n","import { ISubscriptionPayload, IKafkaData } from './commonTypes'\nimport { Gauge } from '@nsshunt/stsinstrumentation'\nimport { ObservabilityModelUtils, IModelNodes } from './observabilitymodelutils'\n\ndeclare interface IKafkaLogEntry {\n kafkaTopic: string\n kafkaLog: string[]\n}\n\ndeclare type KafkaLog = Record<string, IKafkaLogEntry>\n\nexport interface IKafkaHelperOptions {\n maxLogLength: number\n}\n\nexport class KafkaHelper {\n #kafkaLog: KafkaLog = { };\n #maxLogLength: number;\n\n constructor(options: IKafkaHelperOptions) {\n this.#maxLogLength = options.maxLogLength;\n }\n\n GetKafkaLogData = (kafkaTopic: string, modelNode: IModelNodes): void => {\n if (this.#kafkaLog[kafkaTopic]) {\n modelNode.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray(this.#kafkaLog[kafkaTopic].kafkaLog);\n }\n }\n\n ProcessKafkaData = (payload: ISubscriptionPayload): void => {\n const { data } = payload;\n\n if (data) {\n const kafkaData: IKafkaData = data as IKafkaData;\n const { kafkaTopic, value } = kafkaData;\n\n if (!this.#kafkaLog[kafkaTopic]) {\n this.#kafkaLog[kafkaTopic] = {\n kafkaTopic: `${kafkaTopic}`, //@@ why is this needed\n kafkaLog: []\n }\n }\n\n this.#kafkaLog[kafkaTopic].kafkaLog.push(value);\n while (this.#kafkaLog[kafkaTopic].kafkaLog.length > this.#maxLogLength) {\n this.#kafkaLog[kafkaTopic].kafkaLog.shift();\n }\n }\n }\n}","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { IObservabilitySocketIOSubscriber, IObservabilitySocketIOSubscriberOptions, \n ISubscription, ISubscriptions, ISubscriptionPayload, SubscriptionTopic } from './commonTypes'\n\nimport chalk from 'chalk';\n\nimport axios from 'axios';\n\nimport isNode from 'detect-node'\n\nimport debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}`);\n\ndeclare interface ISocketSubscribeKeepAlive {\n id: string\n timeout?: number\n}\n\nexport class ObservabilityRESTAPISubscriber implements IObservabilitySocketIOSubscriber {\n #socketSubscribeKeepAlive: Record<string, ISocketSubscribeKeepAlive> = { };\n #options: IObservabilitySocketIOSubscriberOptions\n // This is required becuase each call to .bind create a new replica bound function - so we need the same instance for on/off event bindings.\n KeepAliveAckBoundFunction: any;\n\n #LogMessage(message: any): void {\n debug(message);\n }\n\n constructor(options: IObservabilitySocketIOSubscriberOptions) {\n this.#options = options;\n }\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n #LogErrorMessage(message: any): void {\n this.#options.logger.error(message);\n }\n\n SubscribeOne(subscription: ISubscription) {\n this.Subscribe([subscription]);\n }\n\n async Subscribe(subscriptions: ISubscriptions): Promise<void> {\n subscriptions.map(async (subId) => {\n // Subscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n this.#LogDebugMessage(chalk.yellow(`ObservabilityRESTAPISubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n try {\n this.#AddKeepAlive(subId);\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`ObservabilityRESTAPISubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subId);\n }\n });\n }\n\n UnSubscribeOne(subscription: ISubscription) {\n this.UnSubscribe([subscription]);\n }\n\n UnSubscribe(subscriptions: ISubscriptions) {\n subscriptions.map(async (subId) => {\n // Unsubscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n this.#LogDebugMessage(chalk.yellow(`ObservabilityRESTAPISubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n });\n }\n\n async #InvokeRESTAPI(subscription: ISubscription): Promise<any> {\n // Service subscriptions\n const { subscriptionKey } = subscription;\n let url: string = '';\n switch (subscriptionKey.topic) {\n // Services -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllServicesCombined : // /metrics = getMetrics\n url = `/metrics`;\n break;\n case SubscriptionTopic.Services : // /metrics/:apptype = getApps apptype = services\n url = `/metrics/services`;\n break;\n case SubscriptionTopic.ServiceInstances :\n if (subscriptionKey.key) { // key = service_id /metrics/:apptype/:appid = getApp\n url = `/metrics/services/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Services): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.ServiceInstance :\n url = `/metrics/services/${subscriptionKey.key}`;\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = service instance id /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n url = `/metrics/services/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Services): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n\n // Lambdas -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllLambdasCombined : // /metrics = getMetrics\n url = `/metrics`;\n break;\n case SubscriptionTopic.LambdaTechnologies : // /metrics/:apptype = getApps apptype = services\n url = `/metrics/lambdas`;\n break;\n case SubscriptionTopic.LambdaSubTechnologies :\n if (subscriptionKey.key) { // key = service_id /metrics/:apptype/:appid = getApp\n url = `/metrics/lambdas/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Lambdas): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.LambdaSubTechnologiesInstance :\n url = `/metrics/lambdas/${subscriptionKey.key}`;\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = service instance id /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n url = `/metrics/lambdas/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Lambdas): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n\n // User Agents -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllAgentsCombined : // /metrics = getMetrics (@@ called twice ??)\n url = `/metrics`;\n break;\n case SubscriptionTopic.Agents : // /metrics/:apptype = getApps apptype = agents\n url = `/metrics/agents`;\n break;\n case SubscriptionTopic.AgentWorkers :\n if (subscriptionKey.key) { // key = agent instance id /metrics/:apptype/:appid = getApp\n url = `/metrics/agents/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Agents): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.AgentWorker : // /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = agent instance id, subkey = agent instance worker id\n url = `/metrics/agents/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Agents): key and/or subkey not provided for subscription: [${JSON.stringify(subscriptionKey.topic)}]`);\n }\n }\n if (url.localeCompare('') !== 0) {\n const endPointUrl = `${this.#options.urlBase}${url}`;\n\n const headers = {\n 'Content-Type': 'application/json'\n };\n let retVal: any;\n\n const start = performance.now();\n try {\n if (isNode && this.#options.agent) {\n retVal = await axios({\n url: endPointUrl\n ,method: 'get'\n ,headers,\n httpsAgent: this.#options.agent\n });\n } else {\n retVal = await axios({\n url: endPointUrl\n ,method: 'get'\n ,headers\n });\n }\n const end = performance.now();\n const diff = end - start;\n //console.log(`total time: [${diff}]`);\n\n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined) === 0) {\n return retVal.data['services'].data;\n }\n \n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined) === 0) {\n return retVal.data['agents'].data;\n }\n\n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllLambdasCombined) === 0) {\n return retVal.data['lambdas'].data;\n }\n return retVal.data;\n } catch (error) {\n //console.error(chalk.red(`ObservabilityRESTAPISubscriber:#InvokeRESTAPI(): Error: [${error}]`));\n return null;\n }\n } else {\n return null;\n }\n }\n\n #GetData = async (subscription: ISubscription) => {\n try {\n const retVal = await this.#InvokeRESTAPI(subscription);\n if (retVal) {\n const payload: ISubscriptionPayload = {\n subscriptionKey: subscription.subscriptionKey,\n data: retVal\n };\n subscription.cb(payload);\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`ObservabilityRESTAPISubscriber:#AddKeepAlive(): Error response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subscription);\n }\n }\n\n #SetupTimeout(socketSubscribeKeepAlive: ISocketSubscribeKeepAlive, subscription: ISubscription, timeout: number): number {\n return setTimeout(async () => {\n try {\n const start = performance.now();\n await this.#GetData(subscription);\n if (socketSubscribeKeepAlive.timeout) {\n const end = performance.now();\n const diff = end - start;\n let timeoutDuration = this.#options.keepAlive - diff;\n if (timeoutDuration < 500) {\n timeoutDuration = 500;\n }\n this.#LogDebugMessage(chalk.yellow(`Total duration for subscription: [${diff}], waiting: [${timeoutDuration}]`));\n socketSubscribeKeepAlive.timeout = this.#SetupTimeout(socketSubscribeKeepAlive, subscription, timeoutDuration)\n } else {\n this.#LogDebugMessage(chalk.yellow(`Subscription removed: [${socketSubscribeKeepAlive.id}]. Processing terminate.`));\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`ObservabilityRESTAPISubscriber:#AddKeepAlive(): Error response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subscription);\n }\n }, timeout) as any\n }\n\n\n #AddKeepAlive(subscription: ISubscription): void {\n this.#RemoveKeepAlive(subscription);\n const socketSubscribeKeepAlive:ISocketSubscribeKeepAlive = {\n id: subscription.subscriptionKey.id,\n }\n socketSubscribeKeepAlive.timeout = this.#SetupTimeout(socketSubscribeKeepAlive, subscription, this.#options.keepAlive);\n this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id] = socketSubscribeKeepAlive;\n\n this.#GetData(subscription);\n }\n\n #RemoveKeepAlive(subscription: ISubscription): void {\n if (this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id]) {\n this.#LogDebugMessage(chalk.gray(`ObservabilityRESTAPISubscriber:#RemoveKeepAlive(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n clearTimeout(this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id].timeout);\n delete this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id].timeout;\n delete this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id];\n }\n }\n}","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { Socket } from 'socket.io-client'\nimport { ClientToServerEvents, ServerToClientEvents, ISubscriptionKey } from './commonTypes'\nimport { v4 as uuidv4 } from 'uuid'\nimport { ISTSLogger, JSONObject } from '@nsshunt/stsutils'\n\nimport chalk from 'chalk';\n\nexport enum messageStatus {\n INPROGRESS = 'INPROGRESS',\n SUCCESS = 'SUCCESS',\n FAIL = 'FAIL',\n INRETRY = 'INRETRY',\n KILLED = 'KILLED',\n}\n\nexport enum messageStatusResponse {\n SUBSCRIPTION_SUCCESSFULLY_ADDED = 'SUBSCRIPTION_SUCCESSFULLY_ADDED',\n SUBSCRIPTION_SUCCESSFULLY_REMOVED = 'SUBSCRIPTION_SUCCESSFULLY_REMOVED',\n SUBSCRIPTION_TIMEOUT_RENEWED = 'SUBSCRIPTION_TIMEOUT_RENEWED',\n NO_MATCHED_SUBSCRIPTION = 'NO_MATCHED_SUBSCRIPTION'\n}\nexport interface ISubscriptionKeyResponse extends ISubscriptionKey {\n\tstatus: messageStatusResponse\n\tdetails?: JSONObject // Details provided when in ERROR state\n}\n\nexport interface IMessageWithAckPayload {\n id: string // unique id\n startTime: number // performance.now() when starting\n endTime?: number // performance.now() when completed or timeout\n duration?: number\n retryCount: number // current number of retries\n timeoutId?: number\n status: messageStatus\n subscriptionKey: ISubscriptionKey // payload\n subscriptionKeyResponse?: ISubscriptionKeyResponse // response payload\n BoundAckListenerCallback?: any\n eventName: string\n reject?: any // promise reject callback\n resolve?: any // promise resolve callback\n}\n\nexport interface ISocketIoMessageSenderOptions {\n socket: Socket<ServerToClientEvents, ClientToServerEvents>\n logger: ISTSLogger\n}\n\nexport class SocketIoMessageSender {\n #messageWithAckPayloadRecords: Record<string, IMessageWithAckPayload> = { };\n #socket: Socket<ServerToClientEvents, ClientToServerEvents>\n #maxReties = 3; //@@\n #timeoutValue = 5000; //@@\n #options: ISocketIoMessageSenderOptions\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n constructor(options: ISocketIoMessageSenderOptions) {\n this.#options = options;\n this.#socket = options.socket;\n }\n\n get socket(): Socket<ServerToClientEvents, ClientToServerEvents> {\n return this.#socket;\n }\n set socket(socket: Socket<ServerToClientEvents, ClientToServerEvents>) {\n this.#LogDebugMessage(chalk.cyan(`SocketIoMessageSender:set socket(): new socket assigned`));\n this.#socket = socket;\n }\n\n AckListener(message: IMessageWithAckPayload, payload: ISubscriptionKeyResponse) {\n // Only process message for me ...\n if (message.subscriptionKey.id.localeCompare(payload.id) === 0) {\n clearTimeout(message.timeoutId);\n delete message.timeoutId;\n this.#socket.off(this.#GetSubscribeKeepAliveAckEventName(message.eventName, message.subscriptionKey) as any, message.BoundAckListenerCallback);\n message.endTime = performance.now();\n message.duration = message.endTime - message.startTime;\n message.status = messageStatus.SUCCESS;\n message.subscriptionKeyResponse = payload;\n delete this.#messageWithAckPayloadRecords[message.id];\n this.#LogDebugMessage(chalk.grey(`SocketIoMessageSender:AckListener(): ack received, event: [${message.eventName}], subscriptionKey: [${message.subscriptionKey.id}]`));\n message.resolve(message);\n }\n }\n\n ResponseTimout(message: IMessageWithAckPayload) {\n this.#LogDebugMessage(chalk.magenta(`SocketIoMessageSender:ResponseTimout(): timeout reached: [${this.#timeoutValue}], event: [${message.eventName}], subscriptionKey: [${message.subscriptionKey.id}]`));\n delete message.timeoutId;\n this.#socket.off(this.#GetSubscribeKeepAliveAckEventName(message.eventName, message.subscriptionKey) as any, message.BoundAckListenerCallback);\n message.endTime = performance.now();\n if (message.retryCount >= this.#maxReties) {\n message.status = messageStatus.FAIL;\n this.#LogDebugMessage(chalk.red(`SocketIoMessageSender:ResponseTimout(): timeout reached after ${this.#maxReties} retries, event: [${message.eventName}], subscriptionKey: [${message.subscriptionKey.id}]`));\n delete this.#messageWithAckPayloadRecords[message.id];\n message.reject(message);\n return;\n }\n message.status = messageStatus.INRETRY\n message.retryCount++\n this.#LogDebugMessage(chalk.magenta(`SocketIoMessageSender:ResponseTimout(): timeout reached, retrying. Retries: [${message.retryCount}], event: [${message.eventName}], subscriptionKey: [${message.subscriptionKey.id}]`));\n this.SendMessage(message);\n }\n\n #GetSubscribeKeepAliveAckEventName(eventName: string, subscriptionKey: ISubscriptionKey): string {\n return `${eventName}Ack_${subscriptionKey.id}`;\n }\n\n SendMessage(message: IMessageWithAckPayload) {\n message.startTime = performance.now()\n message.timeoutId = setTimeout(() => {\n this.ResponseTimout(message)\n }, this.#timeoutValue) as any;\n const AckListenerCallback = (payload: ISubscriptionKeyResponse) => {\n this.AckListener(message, payload);\n };\n message.BoundAckListenerCallback = AckListenerCallback.bind(this);\n this.#socket.on(this.#GetSubscribeKeepAliveAckEventName(message.eventName, message.subscriptionKey) as any, message.BoundAckListenerCallback);\n this.#LogDebugMessage(chalk.gray(`SocketIoMessageSender:SendMessage(): event: [${message.eventName}], subscriptionKey: [${message.subscriptionKey.id}]`));\n this.#socket.emit(message.eventName as any, message.subscriptionKey);\n }\n\n SendMessageWithAck(eventName: string, subscriptionKey: ISubscriptionKey): Promise<IMessageWithAckPayload> {\n const promise = new Promise<IMessageWithAckPayload>((resolve, reject) => {\n const message: IMessageWithAckPayload = {\n id: uuidv4(),\n subscriptionKey,\n retryCount: 0,\n startTime: performance.now(),\n status: messageStatus.INPROGRESS,\n eventName,\n resolve,\n reject\n }\n this.#messageWithAckPayloadRecords[message.id] = message;\n this.SendMessage(message);\n });\n return promise;\n }\n\n KillMessageInFlight(subscriptionKey: ISubscriptionKey) {\n const killIds: string[] = [];\n for (const [, message] of Object.entries(this.#messageWithAckPayloadRecords)) {\n if (message.subscriptionKey.id.localeCompare(subscriptionKey.id) === 0) {\n this.#LogDebugMessage(chalk.blue(`SocketIoMessageSender:KillMessageInFlight(): event: [${message.eventName}], subscriptionKey: [${message.subscriptionKey.id}]`));\n clearTimeout(message.timeoutId);\n delete message.timeoutId;\n this.#socket.off(this.#GetSubscribeKeepAliveAckEventName(message.eventName, message.subscriptionKey) as any, message.BoundAckListenerCallback);\n killIds.push(message.id);\n message.status = messageStatus.KILLED;\n message.reject(message);\n }\n }\n killIds.forEach((id: string) => {\n delete this.#messageWithAckPayloadRecords[id];\n });\n }\n}","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { Socket } from 'socket.io-client'\nimport { IObservabilitySocketIOSubscriber, ClientToServerEvents, ServerToClientEvents, IObservabilitySocketIOSubscriberOptions, \n ISubscription, ISubscriptions, GetSocketIOSubscriptionKey } from './commonTypes'\nimport { SocketIoMessageSender } from './socketioMessageSender'\nimport { type STSDefaultServerToClientEvents } from './../socketioutils/socketIoClientHelper'\n\nimport chalk from 'chalk';\n\ndeclare interface ISocketSubscribeKeepAlive {\n id: string\n timeout?: number\n}\n\nexport class ObservabilitySocketIOSubscriber implements IObservabilitySocketIOSubscriber {\n #socketSubscribeKeepAlive: Record<string, ISocketSubscribeKeepAlive> = { };\n #socket: Socket<ServerToClientEvents, ClientToServerEvents>;\n #options: IObservabilitySocketIOSubscriberOptions\n #socketIoMessageSender: SocketIoMessageSender;\n // This is required becuase each call to .bind create a new replica bound function - so we need the same instance for on/off event bindings.\n KeepAliveAckBoundFunction: any;\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n #LogErrorMessage(message: any): void {\n this.#options.logger.error(message);\n }\n\n constructor(options: IObservabilitySocketIOSubscriberOptions) {\n this.#options = options;\n this.#socket = options.socket as Socket<STSDefaultServerToClientEvents, ClientToServerEvents>;\n this.#socketIoMessageSender = new SocketIoMessageSender({\n socket: this.#socket, \n logger: this.#options.logger\n });\n }\n\n get socket(): Socket<ServerToClientEvents, ClientToServerEvents> {\n return this.#socket;\n }\n set socket(socket: Socket<ServerToClientEvents, ClientToServerEvents>) {\n this.#LogDebugMessage(chalk.cyan(`ObservabilitySocketIOSubscriber:set socket(): new socket assigned`));\n this.#socket = socket;\n this.#socketIoMessageSender.socket = socket;\n }\n\n SubscribeOne(subscription: ISubscription) {\n this.Subscribe([subscription]);\n }\n\n async Subscribe(subscriptions: ISubscriptions): Promise<void> {\n const socket = this.#socket;\n subscriptions.map(async (subId) => {\n // Subscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n this.#LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n try {\n const retVal = await this.#socketIoMessageSender.SendMessageWithAck('subscribe', subId.subscriptionKey);\n this.#LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:Subscribe(): SendMessageWithAck response: [${JSON.stringify(retVal)}]`));\n\n this.#AddKeepAlive(socket, subId);\n \n // Attach the socket.io event handler\n socket.on(GetSocketIOSubscriptionKey(subId.subscriptionKey) as any, subId.cb); // SubscriptionData\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));\n socket.off(GetSocketIOSubscriptionKey(subId.subscriptionKey) as any, subId.cb); // SubscriptionData\n this.#RemoveKeepAlive(subId);\n }\n });\n }\n\n UnSubscribeOne(subscription: ISubscription) {\n this.UnSubscribe([subscription]);\n }\n\n UnSubscribe(subscriptions: ISubscriptions) {\n const socket = this.#socket;\n subscriptions.map(async (subId) => {\n // Remove the socket.io event handler\n socket.off(GetSocketIOSubscriptionKey(subId.subscriptionKey) as any, subId.cb); // SubscriptionData\n\n // Unsubscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n\n this.#socketIoMessageSender.KillMessageInFlight(subId.subscriptionKey);\n\n this.#LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n try {\n const retVal = await this.#socketIoMessageSender.SendMessageWithAck('unsubscribe', subId.subscriptionKey);\n this.#LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:UnSubscribe(): SendMessageWithAck response: [${JSON.stringify(retVal)}]`));\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error response: [${JSON.stringify(error)}]`));\n }\n });\n }\n\n #AddKeepAlive(socket: Socket<ServerToClientEvents, ClientToServerEvents>, subscription: ISubscription): void {\n this.#RemoveKeepAlive(subscription);\n this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id] = {\n id: subscription.subscriptionKey.id,\n timeout: setTimeout(async () => {\n this.#LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:#AddKeepAlive:timeoutCheck(): Sending keepAlive: subscriptionKey: [${subscription.subscriptionKey.id}]`));\n try {\n const retVal = await this.#socketIoMessageSender.SendMessageWithAck('subscribeKeepAlive', subscription.subscriptionKey);\n this.#LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:#AddKeepAlive(): SendMessageWithAck response: [${JSON.stringify(retVal)}]`));\n this.#AddKeepAlive(socket, subscription)\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:#AddKeepAlive(): Error response: [${JSON.stringify(error)}]`));\n socket.off(GetSocketIOSubscriptionKey(subscription.subscriptionKey) as any, subscription.cb); // SubscriptionData\n this.#RemoveKeepAlive(subscription);\n }\n }, this.#options.keepAlive) as any\n }\n }\n\n #RemoveKeepAlive(subscription: ISubscription): void {\n if (this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id]) {\n this.#LogDebugMessage(chalk.gray(`ObservabilitySocketIOSubscriber:#RemoveKeepAlive(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n clearTimeout(this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id].timeout);\n delete this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id];\n }\n }\n\n /*\n override SocketIOConnect(socket: Socket<ServerToClientEvents, ClientToServerEvents>): void {\n if (this.#observabilitySocketIOSubscriber instanceof ObservabilitySocketIOSubscriber) {\n if (socket.id.localeCompare((this.#observabilitySocketIOSubscriber as ObservabilitySocketIOSubscriber).socket.id) === 0) {\n //this.#LogMessage(chalk.gray(`Socket ids are the same - ignoring`));\n } else {\n //this.#LogMessage(chalk.yellow(`Socket ids are different - update with new socket`));\n (this.#observabilitySocketIOSubscriber as ObservabilitySocketIOSubscriber).socket = socket;\n this.#observabilitySubscriptionManager.Start();\n }\n }\n }\n */\n\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport chalk from 'chalk';\n\nimport { JSONObject } from '@nsshunt/stsutils'\nimport { Gauge } from '@nsshunt/stsinstrumentation'\nimport { ISubscriptionPayload, IServiceInstanceTelemetry, \n IAgentInstanceTelemetry, ISubscriptions, ISubscription, IObservabilitySocketIOSubscriber, \n SubscriptionTopic, IServiceInstances, KAFKA_PREFIX, IServiceInstancesThreads, \n IServices, IAgentWorkers, IAgentWorkerRunners, IAgents, \n ILambdaInstanceTelemetry, ILambdaTechnologies, ILambdaSubTechnologies,ILambdaSubTechnologiesInstance } from './commonTypes'\nimport { ObservabilityModelUtils, IModelNodes, IModelNode } from './observabilitymodelutils'\nimport { KafkaHelper } from './kafkaHelper'\nimport { v4 as uuidv4 } from 'uuid'\n//import _cloneDeep from 'lodash.clonedeep'\n\nimport { ISTSLogger } from '@nsshunt/stsutils'\n\n/*\nexport enum IObservabilitySubscriptionManagerAPIMode {\n RESTAPU = \"RESTAPI\",\n SocketIo = \"SocketIo\"\n}\n\nexport interface IObservabilitySubscriptionManagerOptions {\n apiMode: IObservabilitySubscriptionManagerAPIMode\n}\n*/\n\nexport interface IObservabilitySubscriptionManager {\n logger: ISTSLogger\n maxLogLength: number\n}\n\nexport class ObservabilitySubscriptionManager {\n #observabilitySocketIOSubscriber: IObservabilitySocketIOSubscriber | null = null;\n #subscriptions: ISubscriptions = [ ];\n #kafkaHelper: KafkaHelper;\n #serviceModel: Record<string, IModelNodes | null> = { };\n #agentModel: Record<string, IModelNodes | null> = { };\n #lambdaModel: Record<string, IModelNodes | null> = { };\n #options: IObservabilitySubscriptionManager\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n #LogErrorMessage(message: any): void {\n this.#options.logger.error(message);\n }\n\n constructor(options: IObservabilitySubscriptionManager) {\n this.#options = options;\n this.#kafkaHelper = new KafkaHelper({\n maxLogLength: this.#options.maxLogLength\n });\n }\n\n get observabilitySocketIOSubscriber(): IObservabilitySocketIOSubscriber | null {\n return this.#observabilitySocketIOSubscriber;\n }\n set observabilitySocketIOSubscriber(observabilitySocketIOSubscriber: IObservabilitySocketIOSubscriber | null) {\n this.#observabilitySocketIOSubscriber = observabilitySocketIOSubscriber;\n }\n\n get subscriptions(): ISubscriptions {\n return this.#subscriptions;\n }\n set subscriptions(subscriptions: ISubscriptions) {\n this.#subscriptions = subscriptions;\n }\n\n get serviceModel(): JSONObject {\n return this.#serviceModel;\n }\n\n get agentModel(): JSONObject {\n return this.#agentModel;\n }\n\n get lambdaModel(): JSONObject {\n return this.#lambdaModel;\n }\n\n AddSubscriptions(subscriptions: ISubscriptions) {\n const subscriptionsToAdd: ISubscriptions = [ ];\n subscriptions.map((subscription) => {\n const retVal = this.subscriptions.find(v => v.subscriptionKey.id.localeCompare(subscription.subscriptionKey.id) === 0)\n if (retVal) {\n this.#LogDebugMessage(chalk.magenta(`AddSubscription(): Subscription: [${retVal.subscriptionKey.id}] already exists - ignoring.`));\n } else {\n subscriptionsToAdd.push(subscription);\n }\n });\n if (subscriptionsToAdd.length > 0) {\n subscriptionsToAdd.map((s) => this.subscriptions.push(s));\n this.#observabilitySocketIOSubscriber?.Subscribe(subscriptionsToAdd);\n } else {\n this.#LogDebugMessage(chalk.magenta(`AddSubscription(): No valid subscriptions to subscribe.`));\n }\n }\n\n RemoveSubscriptionsByKey(keyToFind: string) {\n const newSubscriptions: ISubscriptions = [ ];\n for (let i=0; i < this.subscriptions.length; i++) {\n if (this.subscriptions[i].subscriptionKey.key?.localeCompare(keyToFind) === 0) {\n if (this.#observabilitySocketIOSubscriber) {\n this.#observabilitySocketIOSubscriber.UnSubscribeOne(this.subscriptions[i]);\n }\n } else {\n newSubscriptions.push(this.subscriptions[i]);\n }\n }\n this.#subscriptions = newSubscriptions;\n }\n\n FindSubscriptionByKey(keyToFind: string): ISubscription | undefined {\n for (let i=0; i < this.subscriptions.length; i++) {\n if (this.subscriptions[i].subscriptionKey.key?.localeCompare(keyToFind) === 0) {\n return this.subscriptions[i];\n }\n }\n return undefined;\n }\n\n FindSubscriptionByKeyAndSubKey(keyToFind: string, subKeyToFind: string): ISubscription | undefined {\n for (let i=0; i < this.subscriptions.length; i++) {\n if (this.subscriptions[i].subscriptionKey.key?.localeCompare(keyToFind) === 0) {\n if (this.subscriptions[i].subscriptionKey.subkey?.localeCompare(subKeyToFind) === 0) {\n return this.subscriptions[i];\n }\n }\n }\n return undefined;\n }\n\n Start(): void {\n if (this.#observabilitySocketIOSubscriber) {\n this.#observabilitySocketIOSubscriber.Subscribe(this.subscriptions);\n }\n }\n \n Stop(): void {\n if (this.#observabilitySocketIOSubscriber) {\n this.#observabilitySocketIOSubscriber.UnSubscribe(this.subscriptions);\n }\n }\n\n TransformSubscriptionPayloadCallback(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n switch (subscriptionPayload.subscriptionKey.topic) {\n // Services -----------------------------------------------------------------------------\n case SubscriptionTopic.AllServicesCombined : // /\n this.CreateModelAllServicesCombined(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.Services : // /serviceId\n this.CreateModelServices(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.ServiceInstances : // /serviceId/serviceInstanceId\n this.CreateModelServiceInstances(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.ServiceInstance : // /serviceId/serviceInstanceId/serviceInstanceProcessId\n this.CreateModelServiceInstance(subscriptionPayload, subscribeToKafka);\n break;\n\n // Lambda -----------------------------------------------------------------------------\n case SubscriptionTopic.AllLambdasCombined : // /\n this.CreateModelAllLambdasCombined(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.LambdaTechnologies : // /technology\n this.CreateModelLambdaTechnologies(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.LambdaSubTechnologies : // /technology/subTechnology\n this.CreateModelLambdaSubTechnologies(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.LambdaSubTechnologiesInstance : // /technology/subTechnology/subTechnologyInstance\n this.CreateModelLambdaSubTechnologiesInstance(subscriptionPayload, subscribeToKafka);\n break;\n\n // Agents -----------------------------------------------------------------------------\n case SubscriptionTopic.AllAgentsCombined : // /\n this.CreateModelAllAgentsCombined(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.Agents : // /agentId\n this.CreateModelAgents(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.AgentWorkers :// /agentId/agentWorkerId\n this.CreateModelAgentWorkers(subscriptionPayload, subscribeToKafka);\n break;\n case SubscriptionTopic.AgentWorker :// /agentId/agentWorkerId/asyncRunnerId\n this.CreateModelAgentWorker(subscriptionPayload, subscribeToKafka);\n break;\n }\n }\n\n // --- [ Services ] ------------------------------------------------------------------------------------------------------------------------------------------------\n\n // /\n CreateModelAllServicesCombined(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#serviceModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined.toString()) === 0) {\n this.#serviceModel['STS-Service'] = ObservabilityModelUtils.GetModelForService('STS-Service', subscriptionPayload.data as IServiceInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#serviceModel['STS-Service'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllServicesCombined():Error: GetModelForService() returned null`));\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /serviceId\n CreateModelServices(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, serviceTelemetry] of Object.entries(subscriptionPayload.data as IServices)) {\n this.#serviceModel[serviceId] = ObservabilityModelUtils.GetModelForService(serviceId, serviceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#serviceModel[serviceId] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelServices():Error: GetModelForService() returned null`));\n }\n }\n } catch (error) {\n return\n }\n }\n \n // /serviceId/serviceInstanceId\n CreateModelServiceInstances(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, service] of Object.entries(subscriptionPayload.data as IServiceInstances)) {\n for (const [serviceInstanceId, serviceInstanceTelemetry] of Object.entries(service)) {\n // Create the kafka subscription topic key\n const kafkaTopic = `${KAFKA_PREFIX}_${serviceInstanceId}`.replace(/@/g, '_').replace(/\\|/g, '_');\n\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (serviceInstanceTelemetry.cpu && serviceInstanceTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#serviceModel[serviceInstanceId] = ObservabilityModelUtils.GetModelForService(serviceInstanceId, serviceInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#serviceModel[serviceInstanceId] !== null) {\n\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#serviceModel[serviceInstanceId] as IModelNodes).options = { serviceId };\n\n if (subscribeToKafka) {\n // Kafka processing\n // Add any processed kafka log data to our render model. Kafka log data will be added by the subscription callback below.\n this.#kafkaHelper.GetKafkaLogData(kafkaTopic, this.#serviceModel[serviceInstanceId] as IModelNodes);\n\n // Add a new subscription if it does not already exist\n if (!this.FindSubscriptionByKey(kafkaTopic)) {\n this.AddSubscriptions([{\n subscriptionKey: {\n id: uuidv4(),\n topic: SubscriptionTopic.LogProcessing,\n key: kafkaTopic\n },\n cb: (payload: ISubscriptionPayload) => {\n // Add this kafka log data to our internal data log. The GetKafkaLogData above will add to our render model.\n this.#kafkaHelper.ProcessKafkaData(payload);\n }\n }]);\n }\n }\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelServiceInstances():Error: GetModelForService() returned null`));\n }\n } else {\n if (subscribeToKafka) {\n // Kafka processing\n // Remove any existing kafka subscriptions\n if (this.FindSubscriptionByKey(kafkaTopic)) {\n this.RemoveSubscriptionsByKey(kafkaTopic)\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // serviceId/serviceInstanceId/serviceInstanceProcessId\n CreateModelServiceInstance(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, service] of Object.entries(subscriptionPayload.data as IServiceInstancesThreads)) {\n for (const [serviceInstanceId, serviceInstance] of Object.entries(service)) {\n for (const [serviceInstanceProcessId, serviceInstanceProcessTelemetry] of Object.entries(serviceInstance)) {\n // Create the kafka subscription topic key\n const kafkaTopic = `${KAFKA_PREFIX}_${serviceInstanceId}_${serviceInstanceProcessId}`.replace(/@/g, '_').replace(/\\|/g, '_');\n\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (serviceInstanceProcessTelemetry.cpu && serviceInstanceProcessTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#serviceModel[serviceInstanceProcessId] = ObservabilityModelUtils.GetModelForService(serviceInstanceProcessId, serviceInstanceProcessTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#serviceModel[serviceInstanceProcessId] !== null) {\n\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#serviceModel[serviceInstanceProcessId] as IModelNodes).options = { serviceId, serviceInstanceId };\n\n if (subscribeToKafka) {\n // Kafka processing\n // Add any processed kafka log data to our render model. Kafka log data will be added by the subscription callback below.\n this.#kafkaHelper.GetKafkaLogData(kafkaTopic, this.#serviceModel[serviceInstanceProcessId] as IModelNodes);\n\n if (!this.FindSubscriptionByKey(kafkaTopic)) {\n this.AddSubscriptions([{\n subscriptionKey: {\n id: uuidv4(),\n topic: SubscriptionTopic.LogProcessing,\n key: kafkaTopic\n },\n cb: (payload: ISubscriptionPayload) => {\n this.#kafkaHelper.ProcessKafkaData(payload);\n }\n }]);\n }\n }\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelServiceInstance():Error: GetModelForService() returned null`));\n }\n } else {\n if (subscribeToKafka) {\n // Kafka processing\n // Remove any existing kafka subscriptions\n if (this.FindSubscriptionByKey(kafkaTopic)) {\n this.RemoveSubscriptionsByKey(kafkaTopic)\n }\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // --- [ Agents ] ------------------------------------------------------------------------------------------------------------------------------------------------\n \n // /\n CreateModelAllAgentsCombined(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#agentModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined.toString()) === 0) {\n if (Object.keys(subscriptionPayload.data as IAgentInstanceTelemetry).length !== 0) {\n this.#agentModel['STS-Agent'] = ObservabilityModelUtils.GetModelForAgent('STS-Agent', subscriptionPayload.data as IAgentInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#agentModel['STS-Agent'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllAgentsCombined():Error: GetModelForAgent() returned null`));\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /agentId\n CreateModelAgents(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentInstanceTelemetry] of Object.entries(subscriptionPayload.data as IAgents)) {\n // Create the kafka subscription topic key\n const kafkaTopic = `${KAFKA_PREFIX}_${agentId}`.replace(/@/g, '_').replace(/\\|/g, '_');\n\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n this.#agentModel[agentId] = ObservabilityModelUtils.GetModelForAgent(agentId, agentInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#agentModel[agentId] !== null) {\n if (subscribeToKafka) {\n // Kafka processing\n // Add any processed kafka log data to our render model. Kafka log data will be added by the subscription callback below.\n this.#kafkaHelper.GetKafkaLogData(kafkaTopic, this.#agentModel[agentId] as IModelNodes);\n\n // Add a new subscription if it does not already exist\n if (!this.FindSubscriptionByKey(kafkaTopic)) {\n this.AddSubscriptions([{\n subscriptionKey: {\n id: uuidv4(),\n topic: SubscriptionTopic.LogProcessing,\n key: kafkaTopic\n },\n cb: (payload: ISubscriptionPayload) => {\n this.#kafkaHelper.ProcessKafkaData(payload);\n }\n }]);\n }\n }\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelAgents():Error: GetModelForAgent() returned null`));\n }\n } else {\n if (subscribeToKafka) {\n // Kafka processing\n // Remove any existing kafka subscriptions\n if (this.FindSubscriptionByKey(kafkaTopic)) {\n this.RemoveSubscriptionsByKey(kafkaTopic)\n }\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgent:CreateModel(): Error: [${error}]`));\n }\n }\n\n // /agentId/agentWorkerId\n CreateModelAgentWorkers(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentWorker] of Object.entries(subscriptionPayload.data as IAgentWorkers)) {\n for (const [agentWorkerId, agentInstanceTelemetry] of Object.entries(agentWorker)) {\n // Create the kafka subscription topic key\n const kafkaTopic = `${KAFKA_PREFIX}_${agentId}_${agentWorkerId}`.replace(/@/g, '_').replace(/\\|/g, '_');\n\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n //const threadKey = `${agentName}_${threadId}`;\n const threadKey = `${agentWorkerId}`;\n this.#agentModel[threadKey] = ObservabilityModelUtils.GetModelForAgent(threadKey, agentInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#agentModel[threadKey] !== null) {\n\n const coreCount = (((this.#agentModel[threadKey] as IModelNodes).instruments[Gauge.CORE_COUNT_GAUGE]) as IModelNode).val;\n (this.#agentModel[threadKey] as IModelNodes).canNavigate = coreCount > 0;\n\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#agentModel[threadKey] as IModelNodes).options = { agentId };\n\n if (subscribeToKafka) {\n // Kafka processing\n // Add any processed kafka log data to our render model. Kafka log data will be added by the subscription callback below.\n this.#kafkaHelper.GetKafkaLogData(kafkaTopic, this.#agentModel[threadKey] as IModelNodes);\n\n if (!this.FindSubscriptionByKey(kafkaTopic)) {\n this.AddSubscriptions([{\n subscriptionKey: {\n id: uuidv4(),\n topic: SubscriptionTopic.LogProcessing,\n key: kafkaTopic\n },\n cb: (payload: ISubscriptionPayload) => {\n this.#kafkaHelper.ProcessKafkaData(payload);\n }\n }]);\n }\n }\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelAgentWorkers():Error: GetModelForAgent() returned null`));\n }\n } else {\n if (subscribeToKafka) {\n // Kafka processing\n // Remove any existing kafka subscriptions\n if (this.FindSubscriptionByKey(kafkaTopic)) {\n this.RemoveSubscriptionsByKey(kafkaTopic)\n }\n }\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgentThreads:CreateModel(): Error: [${error}]`));\n }\n }\n\n // /agentId/agentWorkerId/asyncRunnerId\n CreateModelAgentWorker(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentWorker] of Object.entries(subscriptionPayload.data as IAgentWorkerRunners)) {\n for (const [agentWorkerId, asyncRunnerData] of Object.entries(agentWorker)) {\n for (const [asyncRunnerId, agentInstanceTelemetry] of Object.entries(asyncRunnerData)) {\n // Create the kafka subscription topic key\n const kafkaTopic = `${KAFKA_PREFIX}_${agentId}_${agentWorkerId}_${asyncRunnerId}`.replace(/@/g, '_').replace(/\\|/g, '_');\n\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n this.#agentModel[asyncRunnerId] = ObservabilityModelUtils.GetModelForAgent(asyncRunnerId, agentInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#agentModel[asyncRunnerId] !== null) {\n\n if (subscribeToKafka) {\n // Kafka processing\n // Add any processed kafka log data to our render model. Kafka log data will be added by the subscription callback below.\n this.#kafkaHelper.GetKafkaLogData(kafkaTopic, this.#agentModel[asyncRunnerId] as IModelNodes);\n\n if (!this.FindSubscriptionByKey(kafkaTopic)) {\n this.AddSubscriptions([{\n subscriptionKey: {\n id: uuidv4(),\n topic: SubscriptionTopic.LogProcessing,\n key: kafkaTopic\n },\n cb: (payload: ISubscriptionPayload) => {\n this.#kafkaHelper.ProcessKafkaData(payload);\n }\n }]);\n }\n }\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelAgentWorker():Error: GetModelForAgent() returned null`));\n }\n } else {\n if (subscribeToKafka) {\n // Kafka processing\n // Remove any existing kafka subscriptions\n if (this.FindSubscriptionByKey(kafkaTopic)) {\n this.RemoveSubscriptionsByKey(kafkaTopic)\n }\n }\n }\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgentThread:CreateModel(): Error: [${error}]`));\n }\n }\n // --- [ Lambdas ] ------------------------------------------------------------------------------------------------------------------------------------------------\n\n // /\n CreateModelAllLambdasCombined(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#lambdaModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllLambdasCombined.toString()) === 0) {\n this.#lambdaModel['STS-Lambda'] = ObservabilityModelUtils.GetModelForLambda('STS-Lambda', subscriptionPayload.data as ILambdaInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#lambdaModel['STS-Lambda'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllLambdasCombined():Error: GetModelForLambda() returned null`));\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /technologyId\n CreateModelLambdaTechnologies(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#lambdaModel = { };\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaTechnologies)) {\n this.#lambdaModel[technologyId] = ObservabilityModelUtils.GetModelForLambda(technologyId, technologyTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#lambdaModel[technologyId] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaTechnologies():Error: GetModelForLambda() returned null`));\n }\n }\n } catch (error) {\n return\n }\n }\n\n // /technologyId/subTechnologyId\n CreateModelLambdaSubTechnologies(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#lambdaModel = { };\n //console.log(chalk.red(`CreateModelLambdaSubTechnologies()-zz: [${JSON.stringify(subscriptionPayload.data)}]`));\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaSubTechnologies)) {\n for (const [subTechnologyId, subTechnologyTelemetry] of Object.entries(technologyTelemetry)) {\n // Create the kafka subscription topic key\n const kafkaTopic = `${KAFKA_PREFIX}_${subTechnologyId}`.replace(/@/g, '_').replace(/\\|/g, '_');\n\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (subTechnologyTelemetry.cpu && subTechnologyTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#lambdaModel[subTechnologyId] = ObservabilityModelUtils.GetModelForLambda(subTechnologyId, subTechnologyTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#lambdaModel[subTechnologyId] !== null) {\n\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#lambdaModel[subTechnologyId] as IModelNodes).options = { technologyId };\n\n if (subscribeToKafka) {\n // Kafka processing\n // Add any processed kafka log data to our render model. Kafka log data will be added by the subscription callback below.\n this.#kafkaHelper.GetKafkaLogData(kafkaTopic, this.#lambdaModel[subTechnologyId] as IModelNodes);\n\n // Add a new subscription if it does not already exist\n if (!this.FindSubscriptionByKey(kafkaTopic)) {\n this.AddSubscriptions([{\n subscriptionKey: {\n id: uuidv4(),\n topic: SubscriptionTopic.LogProcessing,\n key: kafkaTopic\n },\n cb: (payload: ISubscriptionPayload) => {\n // Add this kafka log data to our internal data log. The GetKafkaLogData above will add to our render model.\n this.#kafkaHelper.ProcessKafkaData(payload);\n }\n }]);\n }\n }\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaSubTechnologies():Error: GetModelForLambda() returned null`));\n }\n } else {\n if (subscribeToKafka) {\n // Kafka processing\n // Remove any existing kafka subscriptions\n if (this.FindSubscriptionByKey(kafkaTopic)) {\n this.RemoveSubscriptionsByKey(kafkaTopic)\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // /technologyId/subTechnologyId/subTechnologyInstanceId\n CreateModelLambdaSubTechnologiesInstance(subscriptionPayload: ISubscriptionPayload, subscribeToKafka: boolean): void {\n try {\n this.#lambdaModel = { };\n //console.log(chalk.red(`CreateModelLambdaSubTechnologies()-zz: [${JSON.stringify(subscriptionPayload.data)}]`));\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaSubTechnologiesInstance)) {\n for (const [subTechnologyId, subTechnologyTelemetry] of Object.entries(technologyTelemetry)) {\n for (const [subTechnologyInstanceId, subTechnologyInstanceTelemetry] of Object.entries(subTechnologyTelemetry)) {\n // Create the kafka subscription topic key\n const kafkaTopic = `${KAFKA_PREFIX}_${subTechnologyId}_${subTechnologyInstanceId}`.replace(/@/g, '_').replace(/\\|/g, '_');\n\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (subTechnologyInstanceTelemetry.cpu && subTechnologyInstanceTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#lambdaModel[subTechnologyInstanceId] = ObservabilityModelUtils.GetModelForLambda(subTechnologyInstanceId, subTechnologyInstanceTelemetry, subscribeToKafka, this.#options.logger);\n if (this.#lambdaModel[subTechnologyInstanceId] !== null) {\n\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#lambdaModel[subTechnologyInstanceId] as IModelNodes).options = { technologyId, subTechnologyId };\n\n if (subscribeToKafka) {\n // Kafka processing\n // Add any processed kafka log data to our render model. Kafka log data will be added by the subscription callback below.\n this.#kafkaHelper.GetKafkaLogData(kafkaTopic, this.#lambdaModel[subTechnologyInstanceId] as IModelNodes);\n\n if (!this.FindSubscriptionByKey(kafkaTopic)) {\n this.AddSubscriptions([{\n subscriptionKey: {\n id: uuidv4(),\n topic: SubscriptionTopic.LogProcessing,\n key: kafkaTopic\n },\n cb: (payload: ISubscriptionPayload) => {\n this.#kafkaHelper.ProcessKafkaData(payload);\n }\n }]);\n }\n }\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaSubTechnologiesInstance():Error: GetModelForLambda() returned null`));\n }\n } else {\n if (subscribeToKafka) {\n // Kafka processing\n // Remove any existing kafka subscriptions\n if (this.FindSubscriptionByKey(kafkaTopic)) {\n this.RemoveSubscriptionsByKey(kafkaTopic)\n }\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n}\n"],"names":["Gauge","GaugeTypes","HistogramDataElementPos","_GetVal","_SetVal","_copy","GetVal_fn","SetVal_fn","global","this","exports","TimSort","require$$0","_val","_timerInterval","timSort.sort","percentile","TransportType","InstrumentPayloadType","RequestLoggerMiddlewareEventName","conversions","route","require$$1","colorConvert","styles","stringReplaceAll","stringEncaseCRLFWithFirstIndex","chalk","require$$2","self","require$$3","ePublishState","_observer","InstrumentGauge","InstrumentHistogram","InstrumentLog","InstrumentObject","InstrumentTimerGauge","InstrumentVelocity","ExtData","d","b","DecodeError","proto","_a","ExtensionCodec","encode","Encoder","SubscriptionTopic","quantile","_options","_LogDebugMessage","LogDebugMessage_fn","uuidv4","_LogErrorMessage","_AddKeepAlive","_RemoveKeepAlive","_socketSubscribeKeepAlive","_socket","RemoveKeepAlive_fn","AddKeepAlive_fn","LogErrorMessage_fn"],"mappings":"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","x_google_ignoreList":[6,7,8,14,15,16,17,18,19,20,21,22,26,27,28,29,30,31,32,33,34,40,41,42,43]}